导读:
demo内容来源网课贪心科技AI学社的网课《人工智能Python编程特训营》
本篇博客的主要内容是neo4j的import导入方式及一些简单的Cypher语句。
由于以前接触过neo4j所以这篇文章也就写的不深,对neo4j有比较大的兴趣可以参考一下我整理的另一篇文章。https://www.jianshu.com/p/6610129bbfd1
这次课程内容没有什么好介绍的,只是讲了 neo4j最最最基本的用法。
作业
利用Neo4j构建图片所示内容,熟悉Cypher查询语言
准备工作及说明
我没有用create来创建结点和联系,而是直接写好数据的csv格式文件,然后再利用neo4j的csv直接导入neo4j数据库中。
这是我已经写好的csv文件的格式,里面包括了3种结点和5种联系。
链接:https://pan.baidu.com/s/1xoxj7ccopOklnDsTw_YGww
提取码:dhap
复制这段内容后打开百度网盘手机App,操作更方便哦
假设已经下好了CSV格式的数据,之后我们就要进行导入,但是导入之前有几点需要说明:(很重要)
- CSV文件的第一行是属性名,CSV文件是通过逗号隔开的。
- 结点CSV文件中必须有:
ID这个属性字段,且这个ID是全局唯一。:LABEL字段不是必选项,可以在导入的时候说明。 - 联系CSV文件中必须有
:START_ID和:END_ID字段,对应前面的结点CSV的ID字段。 - 由于是中文,因此csv文件需要保存为utf-8的格式,否则会出现乱码。
- 导入的时候要保证neo4j路径下data/dataset下没有graph.db这个文件,因为这种导入方法只能第一次导入,不能增量导入
- 导入的时候必须关闭neo4j,在命令行里面输入
neo4j stop关掉数据库,然后把graph.db删掉,然后导入文件,再neo4j start打开数据库就可以了。
备注:其实这种导入方法在这个demo中不是很好,因为一共就只有42个结点,53个联系,我们可以一句一句的创建出来。但是在联系中,我们需要根据图去手动寻找之前所对应名字的ID,因此比较麻烦。但是如果实现已经准备好了csv文件,我们只要一条语句就可以运行了。
这个麻烦有两种解决方法:
- 一种是直接将name字段改为ID,这样直接看图输入就可以了。
- 另一种就是利用程序循环,但是在这里面数据量太小不值得专门写一个程序。在实际的工作中,大规模的数据创建,这种方式也会比一个一个create/merge方便得多,因为ID可以通过编程来创建ID。
导入工作
接着进行导入,我们首先需要将这些8个CSV文件放入neo4j的bin目录下(不需要把demo2文件夹也放进去,只需要直接8个CSV文件拖进去就可以了,如果把文件夹拖进去,那么在导入的时候一定要记得指定路径)。
我们在neo4j的bin目录下运行命令行(一定要在bin目录下,而不是在neo4j文件夹下,除非bin目录也配置了环境变量)
neo4j-admin import --mode=csv --nodes node_direction.csv --nodes node_post.csv --nodes node_knowledge.csv --relationships relationship_dir_know.csv --relationships relationship_know_know.csv --relationships relationship_post_dir.csv --relationships relationship_post_know.csv --relationships relationship_know_dir.csv
稍微解释一下代码:
--mode=csv 表示导入的格式是CSV,其实默认也是CSV格式
--node:label xxx.csv这里xxx.csv表示导入的结点的文件,这里必须放入bin目录下,如果要在其他目录下记得指定路径名。这里的:label在我们的代码里面没有体现,这里是指标签名,如果我们CSV文件里面没有:LABEL那一列,那么我们必须在这里指定导入的这些节点数据是属于什么标签的。但是我们已经在CSV文件里面写了,这里就没必要重复写了。
--relationships:type xxx.csv 同理,xxx.csv是导入的文件名,:type是关系的类型,和label类似,同样,我们在CSV文件里面已经写了,这里就不再重复写了。
至此,导入完成后,打开neo4j服务器neo4j start,然后打开localhost:7474/browser就可以看到了。
可视化及查询
由于结点不多,我们直接输入
MATCH (n) RETURN n
全部显示。
一开始结点全都是灰色的,我们可以点击标签

来设置大小和颜色。

这是我最后的结果图

当然我们也可以手动拖动,成为刚才上面所看到的图的样子。

我们可以进行搜索人工智能的边得到人工智能的学习路线
MATCH p=()-[r:`人工智能`]->() RETURN p

也可以得到爬虫的学习路线
MATCH p=()-[r:`爬虫`]->() RETURN p

学Python基础之前需要做什么
MATCH p=(n:知识)<-[]-() where n.name="Python基础" return p

学Python基础之后又需要学什么
MATCH p=(n:知识)-[]->() where n.name="Python基础" return p

总结:
这次作业其实也是取巧了,没有直接用Cypher语句实现,而是先构造csv文件后用neo4j import导入。Cypher语句的代码几乎没有。但是掌握neo4j import导入方法还是比较重要的。
关于neo4j import有什问题可以在下面评论,之前搞过一段时间,可能有点经验,或者网上博客挺多的,基本上都能查到相关的解决方法。
这个是自己课后记录一下关于neo4j的一些知识点:
https://www.jianshu.com/p/6610129bbfd1
