forked from baladiwei/COVID-19KG
51 lines
2.7 KiB
Python
51 lines
2.7 KiB
Python
from py2neo import Graph, Node, Relationship
|
||
import csv
|
||
# 连接neo4j数据库,输入地址、用户名、密码
|
||
graph = Graph("bolt://localhost:7687", auth=("neo4j", "463060687"))
|
||
graph.delete_all()
|
||
# 分别打开四个CSV文件并读取数据
|
||
with open('E:/KG/neo4j-community-3.5.28/import/病例地点行程信息文件.CSV', 'r') as f1:
|
||
reader1 = csv.reader(f1)
|
||
data1 = list(reader1)
|
||
with open('E:/KG/neo4j-community-3.5.28/import/病例基本信息文件.CSV', 'r') as f2:
|
||
reader2 = csv.reader(f2)
|
||
data2 = list(reader2)
|
||
with open('E:/KG/neo4j-community-3.5.28/import/时间信息文件.CSV', 'r') as f3:
|
||
reader3 = csv.reader(f3)
|
||
data3 = list(reader3)
|
||
with open('E:/KG/neo4j-community-3.5.28/import/公共交通工具信息文件.CSV', 'r') as f4:
|
||
reader4 = csv.reader(f4)
|
||
data4 = list(reader4)
|
||
# 利用两个FOR_IN循环来获取各个文件中的节点信息
|
||
for i in range(1,len(data2)):
|
||
person = Node('person', name=data2[i][0], severity=data2[i][1], age=data2[i][2], gender=data2[i][3],
|
||
confirmed_time=data2[i][4])
|
||
graph.create(person) # 构建人物信息节点
|
||
for j in range(0,30):
|
||
place=Node('place',name=data1[i][j])
|
||
date=Node('date',name=data3[i][j])
|
||
transportation=Node('transportation',name=data4[i][j])
|
||
graph.create(place) #构建地点信息、日期信息和交通工具信息节点
|
||
graph.create(date)
|
||
graph.create(transportation)
|
||
# 构建四个类型数据之间的关系
|
||
graph.create(Relationship(person,'到达过',place))
|
||
graph.create(Relationship(person,'于',date))
|
||
graph.create(Relationship(person,'乘坐',transportation))
|
||
graph.create(Relationship(place,'L',date))
|
||
graph.create(Relationship(place,'L',transportation))
|
||
graph.create(Relationship(transportation,'L',date))
|
||
# 下面三句代码分布实现合并三个类型数据的相同节点操作
|
||
graph.run(
|
||
'MATCH (n:place) WITH n.name AS name, COLLECT(n) AS nodelist, COUNT(*) AS count WHERE count > 1 CALL apoc.refactor.mergeNodes(nodelist) YIELD node RETURN node')
|
||
graph.run(
|
||
'MATCH (n:date) WITH n.name AS name, COLLECT(n) AS nodelist, COUNT(*) AS count WHERE count > 1 CALL apoc.refactor.mergeNodes(nodelist) YIELD node RETURN node')
|
||
graph.run(
|
||
'MATCH (n:transportation) WITH n.name AS name, COLLECT(n) AS nodelist, COUNT(*) AS count WHERE count > 1 CALL apoc.refactor.mergeNodes(nodelist) YIELD node RETURN node')
|
||
|
||
#注意在python运行完这段代码后,如果构建的图谱含有空节点,需要到neo4j中进行空节点删除操作
|
||
|
||
|
||
|
||
|