py2neo简单教程
这里默认你已经知道了什么是neo4j(不清楚可以科学上网,了解一下),并且已经安装好neo4j,配置好环境成功启动neo4j。本人使用的是neo4j-4.1.12。
neo4j是图数据库,其中最重要的就是实体和关系,实体之间和关系构成三元组,<head,relation,tail>。同时每个实体拥有自己的一些属性。
首先,我们安装第三方库:pip install py2neo
from py2neo import *
# 连接neo4j
graph = Graph("http://localhost:7474",auth=("neo4j", "neo4j")) # neo4j默认账户密码为neo4j,改成自己的
graph.delete_all() # 需要清空数据库
# 创建结点
# 语义类型person,结点名字张三,也是它的属性
node1 = Node('person', name = '张三')
node2 = Node('address', name = '北京市海淀区')
node3 = Node('person', name = '李四')
# 给node1添加属性
node1['age'] = 22
# 给node3添加一个属性 sex
node3['sex'] = '男'
# 结点实例化
graph.create(node1)
graph.create(node2)
graph.create(node3)
# 创建关系
address = Relationship(node1, '地址', node2)
classmates = Relationship(node1, '同学', node3)
address1 = Relationship(node3, '地址', node2)
# 关系实例化
graph.create(address)
graph.create(address1)
graph.create(classmates)
print("创建成功")
出现了一个错误,是连接neo4j版本语法的问题,改成auth=(“username”,“password”)即可。
创建成功后到 http://localhost:7474/browser/ 查看图谱。
读写csv文件,创建图谱
这里自己随便写了一个csv文件作为数据集,主要是为了演示方便。代码如下
import csv
row_list =[['id', 'name', 'age', 'sex', 'address'],
[0, 'John', '23', 'man', 'Beijing'],
[1, 'Bob', '23', 'man', 'Shanghai'],
[2, 'Ben', '23', 'man', 'Shanghai'],
[3, 'Mike', '23', 'man', 'Beijing'],
[4, 'John', '23', 'man', 'Beijing'],
[5, 'Robert J', '23', 'man', 'Beijing'],
[6, 'Zhangsan', '23', 'man', 'ShanDong'],
[7, 'Lisisi', '23', 'man', 'ShanDong'],
[8, 'Liuyiyi', '23', 'man', 'Beijing'],
[9, 'Heyi', '23', 'man', 'JiangSu'],]
with open('data.csv', 'w', newline='') as f:
writer = csv.writer(f)
writer.writerows(row_list)
print("输入完成")
可以看到我们写入的数据如下:
然后需要 import csv,读取csv文件中的内容,进行测试,看是否导入成功
with open('data.csv', 'r') as f:
reader = csv.reader(f)
data = list(reader)
print(data[1]) # 测试
导入成功之后,接下来就是创建图谱部分,直接上代码:
for i in range(1,len(data)):
node = Node('person', id = data[i][0], name = data[i][1], age =data[i][2])
relation = Node('address', name = data[i][4])
relation1 = Node('sex', name = data[i][3])
graph.create(node)
graph.create(relation)
graph.create(relation1)
address = Relationship(node, '居住地', relation)
sex = Relationship(node, '性别', relation1)
graph.create(address)
graph.create(sex)
print("创建成功")
创建成功之后,打开 http://localhost:7474/browser/,图谱长这样:
这就是利用py2neo简单构造图谱的过程,其中有许多不合理的地方,包括结点创建了多次,结点合并的一些问题。这些在后续文章中会进行解决。