You can not select more than 25 topics Topics must start with a chinese character,a letter or number, can include dashes ('-') and can be up to 35 characters long.

main.py 2.7 kB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950
  1. from py2neo import Graph, Node, Relationship
  2. import csv
  3. # 连接neo4j数据库,输入地址、用户名、密码
  4. graph = Graph("bolt://localhost:7687", auth=("neo4j", "463060687"))
  5. graph.delete_all()
  6. # 分别打开四个CSV文件并读取数据
  7. with open('E:/KG/neo4j-community-3.5.28/import/病例地点行程信息文件.CSV', 'r') as f1:
  8. reader1 = csv.reader(f1)
  9. data1 = list(reader1)
  10. with open('E:/KG/neo4j-community-3.5.28/import/病例基本信息文件.CSV', 'r') as f2:
  11. reader2 = csv.reader(f2)
  12. data2 = list(reader2)
  13. with open('E:/KG/neo4j-community-3.5.28/import/时间信息文件.CSV', 'r') as f3:
  14. reader3 = csv.reader(f3)
  15. data3 = list(reader3)
  16. with open('E:/KG/neo4j-community-3.5.28/import/公共交通工具信息文件.CSV', 'r') as f4:
  17. reader4 = csv.reader(f4)
  18. data4 = list(reader4)
  19. # 利用两个FOR_IN循环来获取各个文件中的节点信息
  20. for i in range(1,len(data2)):
  21. person = Node('person', name=data2[i][0], severity=data2[i][1], age=data2[i][2], gender=data2[i][3],
  22. confirmed_time=data2[i][4])
  23. graph.create(person) # 构建人物信息节点
  24. for j in range(0,30):
  25. place=Node('place',name=data1[i][j])
  26. date=Node('date',name=data3[i][j])
  27. transportation=Node('transportation',name=data4[i][j])
  28. graph.create(place) #构建地点信息、日期信息和交通工具信息节点
  29. graph.create(date)
  30. graph.create(transportation)
  31. # 构建四个类型数据之间的关系
  32. graph.create(Relationship(person,'到达过',place))
  33. graph.create(Relationship(person,'于',date))
  34. graph.create(Relationship(person,'乘坐',transportation))
  35. graph.create(Relationship(place,'L',date))
  36. graph.create(Relationship(place,'L',transportation))
  37. graph.create(Relationship(transportation,'L',date))
  38. # 下面三句代码分布实现合并三个类型数据的相同节点操作
  39. graph.run(
  40. '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')
  41. graph.run(
  42. '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')
  43. graph.run(
  44. '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')
  45. #注意在python运行完这段代码后,如果构建的图谱含有空节点,需要到neo4j中进行空节点删除操作

通过对新冠疫情相关信息收集,进行分类、归纳,取得事件之间的联系,可以构成一个丰富的新冠信息知识图谱。新冠信息知识图谱的构建能够充分挖掘信息价值,为人们提供直观的参考依据。本项目基于NEO4J图数据库,来进行COVID-19病例活动行径信息的知识图谱构建与应用,达到追溯传播途径、疫情防控的目的·。