import pandas as pd
from py2neo import Graph, Node, Relationship
from py2neo import Graph, NodeMatcher, Node, Relationship, RelationshipMatcher
# 字段映射字典
mapping_dict = {"标题": "title",
"专利号": "id",
"申请时间": "time",
"申请人": "shenqing",
"地址": "dizhi",
"第一发明人": "famingA",
"第二发明人": "famingB",
"第三发明人": "famingC",
"主题": "zhuti",
"第一主要人员": "peopleA",
"第二主要人员": "peopleB",
"第三主要人员": "peopleC"}
# 读取文件
storage_df = pd.read_csv('zhuanli.csv',encoding='utf-8')
# 获取列标签
columns_list = storage_df.columns.tolist()
# 获取数据条数
nums = len(storage_df['title'])
# 删除title列标签
columns_list.remove('title')
columns_list.remove('shenqing')
# 逆转映射字典
new_dic = dict(zip(mapping_dict.values(), mapping_dict.keys()))
# 连接数据库,输入个人配置
graph = Graph("http://localhost:7474/", username='neo4j', password='CHENRJ122223',run="testpy6")
# 清空全部数据
graph.delete_all()
# 开启一个新的事务
graph.begin()
for i in range(nums):
data_dict = {}
title = storage_df['title'][i]
for columns in columns_list:
if str(storage_df[columns][i]) != 'nan':
data_dict[columns] = storage_df[columns][i]
shenqing = storage_df['shenqing'][i]
for columns in columns_list:
if str(storage_df[columns][i]) != 'nan':
data_dict[columns] = storage_df[columns][i]
# 创建事件节点(主节点),节点属性
node1 = Node("patent", name=title, **data_dict)
graph.merge(node1, 'patent', 'name')
node3 = Node("company", name=shenqing)
graph.merge(node3, 'company', 'name')
rel = Relationship(node1,'申请人', node3)
graph.merge(rel)
# 删除id列
data_dict.pop('id')
# 创建关系与副节点
for key, value in data_dict.items():
# 创建副节点
if key=='peopleA' or key=='peopleB' or key=='peopleC' or key=='dizhi':
# 创建关系
node2 = Node(key, name=value)
graph.merge(node2, key, 'name')
rel = Relationship(node3, new_dic[key], node2, type=key)
graph.merge(rel)
else:
node2 = Node(key, name=value)
graph.merge(node2, key, 'name')
rel = Relationship(node1, new_dic[key], node2, type=key)
graph.merge(rel)
数据:
第二版 图:根据华为公司为中心
1、把发明人拆分开(只取前三位作者),每个人是一个节点,第一版中未处理此部分导致很多节点中有多个人物
2、把申请时间(途中蓝色节点)和申请人地址(图中浅棕色节点)单独列为一个节点,不再只作为属性在专利节点内展示,地址与申请人相连
3、添加申请人——(公司主要负责人、高校教授)此关系,图中表示为浅粉色节点,仅收录排名前三位的人员
4、把第一版中人工处理import部分改为机器处理
绿色:主题 黄色:专利 蓝色:申请时间 棕色:发明人 深粉色:申请人 浅粉色:公司人员、教授 浅棕色:申请人地址
第一版:
紫色:主题 绿色:专利 橘色:申请人 棕色:发明人
主题——专利 专利——申请人 专利——发明人
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)