知识图谱-汽车品牌知识图谱实战复现记录

写在前面:本人也是知识图谱“小白”,正在努力变“怪兽”,写文只为记录成长点滴,若有理解不合理亦或不到位的地方,敬请谅解。

1、环境配置

这里环境配置还是有一些点需要注意的:

(1)若python版本是3.8以及以上的话是不支持time.clock()这个函数的,需要把这个函数换成time.perf_counter().若不想麻烦,可以考虑将电脑装两个版本的python。

(2)py2neo的版本不能低于4.0.0,因为4.0.0版本是个分界线,3.x和4.x接口的区别有点大,所以版本必须对应,不然后续会出现一系列问题。

(3)Neo4j-driver接口为了和前面版本对应应该安装1.6.1版本。

2、业务需求分析

基于搜索引擎的商业数据分析:

(1)行业分析:整体市场趋势、细分市场趋势

用户会不断搜索关于汽车某方面的信息,可能是通过品牌搜索,可能是通过车型等等,通过用户的这些行为找出整体的市场趋势,以及细分市场的分析。

(2)品牌分析:品牌市场份额、品牌粘性、品牌游离度

用户都在搜什么品牌,搜A品牌的用户又去搜了B品牌(为什么?),用户在搜索这个品牌的时候有没有什么持续性。。

(3)车系分析:车系市场份额、车系粘性、车系游离度

(4)车型分析:车型市场份额、车型粘性、车型游离度

(5)话题分析:热点排行、话题排行

(6)用户画像:自然属性分析、兴趣属性分布

我们来看几个例子咯:



3、项目总体框架设计

项目分为应用层,业务层,数据层,ETL,数据源。

数据源 :一般获取渠道可以是汽车资讯网站、汽车电商平台、百科问答汽车频道、汽车投书平台。可以使用爬虫技术进行爬取,但要注意的是只能爬取网页公开的数据,遵守法律法规,做良好市民。(否者:爬虫写的好,牢饭吃的早)。

ETL:这部分先通过爬虫框架scrapyEx爬取数据,然后经过页面目录管理、页面元素解析、动态页面渲染、页面内容解析、数据清洗转换、批量任务调度,使结点数据结构化和关系数据结构化。

数据层:这一层我们首先要将数据导入到neo4j数据库,有两种方式,一种是Neo4j-import,另一种是Neo4j-Web控制台指令导入。这里我比较推荐第二种,因为指令可以让你非常清晰数据源的属性与生成结点或者关系之间的映射关系。

业务层:通过py2neo开发框架将数据库与后台联系。然后pythonWeb实现实体识别,节点查询,关系查询,路径计算,上层用Django框架与前端连接,为用户提供交互窗口。

应用层:这里主要是该框架的一些应用,比如只能搜索,智能问答,智能推荐等。

4、知识图谱设计方法论

专家法要求参与的人员经验很多,对业务非常熟悉。从上到下,总体规划。

参照法是以行业标准为参照来进行设计,在设计过程中不断修补裁剪。

归纳法是由技术过硬的专家来进行的,一般是自下向上,从一个点切入来设计的。

混合发是从上自下,从下自上同时进行,在中电处进行调整。

5、数据导入:

数据源必须为utf-8编码,不然结果会乱码。

修改为utf-8编码办法:笔记本打开csv文件,保存为UTF-8格式

  

打开%NEO4J_HOME%\conf\neo4j.conf

将#dbms.connectors.default_listen_address=0.0.0.0的#去掉

进入 cmd控制台输入指令:

neo4j.bat console

出现下图:

打开浏览器访问http://localhost:7474/

然后输入数据库用户名和密码(初始密码都是neo4j),登录后也可以自己修改密码,出现如下界面:

  

打开cmd窗扣进入neo4j文件的bin目录下执行以下指令:

neo4j-admin import --mode=csv --database=graph.db --nodes ..\import\bank01.csv 

我们就完成了数据的导入,下面我们就可以开始创建结点了。

6、结点与关系创建

创建汽车品牌结点:

LOAD CSV WITH HEADERS FROM "file:///bank01.csv" AS line
CREATE(:Car{name:line.bank,count:line.count})

  

创建汽车车系结点:

LOAD CSV WITH HEADERS FROM "file:///serise.csv" AS line
CREATE(p:Serise{name:line.serise,count:line.count})

  

创建关系:

LOAD CSV WITH HEADERS FROM "file:///serise.csv" AS line
MATCH (entity1:Car{name:line.bank}),(entity2:Serise{name:line.serise})
CREATE(entity1)-[:Subtype{type:line.relation}]->(entity2)

  

指定唯一键:

CREATE  CONSTRAINT ON (b:Car)
ASSERT b.name IS UNIQUE

  

至此,我们完成了206个品牌结点,1921个车系结点,1937个关系的导入

来看看界面吧:


汽车品牌结点


汽车车系结点

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-D63gGNEH-1606010031613)
2127个车系,206个汽车品牌,1921个关系都展现出来了,是不是很壮观呢,哈哈哈哈

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-NK9jl9ju-1606010031614)
来个清晰的

7、前端界面展示

先关闭酷狗,因为酷狗会占用“http://127.0.0.1:8000/”这个端口

  

修改neo4j_models.py中的密码,name和端口:

def connectDB(self):
		self.graph = Graph("bolt: // localhost:7687", username="neo4j", password="admin")
		self.matcher = NodeMatcher(self.graph)

  

打开cmd窗口执行如下指令保证数据库服务是开着的:

neo4j.bat console

  

打开cmd窗口进入kgcar项目目录下运行如下指令:

python manage.py runserver

  

功能界面如下:

  

对不起,这个例子我举的有点飘了,哈哈哈哈

特别感谢:张子良老师的知识图谱教程

整理于2020年10月27日

  • 1
    点赞
  • 21
    收藏
    觉得还不错? 一键收藏
  • 17
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 17
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值