用python把数据导入neo4j中,建立一个简单的知识图谱
2021/11/6 17:11:47
本文主要是介绍用python把数据导入neo4j中,建立一个简单的知识图谱,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
使用py2neo包把数据导入neo4j中,建立一个简单的知识图谱
- 一、对数据进行处理
- 二、把数据导入neo4j数据库中
- 1.导入两类属性的节点
- 2.导入关系
一、对数据进行处理
用的是网上的数据,其中数据的样式为:
先用pandas对文件进行读取
path = r'D:/Invoice_data_Demo.xls' invoice_data = pd.read_excel(path, header = 0) invoice_data.shape # 发现文件是35行27列
先去抽取第一类属性的节点
# 把发票名称抽取出来 invoice_name_list = [] for i in range(0, len(invoice_data)): invoice_name_list.append(invoice_data['发票名称'][i]) invoice_name_list = list(set(invoice_name_list)) #去重
再去抽取第二类属性的节点
# 把除了发票代码这一列去掉,所有的都抽取了,一共抽取了35 * 26 = 910个数据 invoice_value_list = [] for i in range(0, len(invoice_data)): for j in range(1, len(invoice_data.columns)): invoice_value_list.append(invoice_data[invoice_data.columns[j]][i]) invoice_value_list = list(set(invoice_value_list)) # 转变为str类型 invoice_value_list = [str(i) for i in invoice_value_list]
这个数据一共就两类属性的节点,然后我们再去抽取关系
name1_list = [] name2_list = [] rel_list = [] for i in range(0, len(invoice_data)): # 35 for j in range(1, len(invoice_data.columns)): # 1--26 name1_list.append(invoice_data[invoice_data.columns[0]][i]) # 第一类label属性的节点 rel_list.append(invoice_data.columns[j]) # 关系 name2_list.append(invoice_data[invoice_data.columns[j]][i]) name2_list = [str(i) for i in name2_list] # 里面有整数和浮点数,要变成str '''***最关键的一步,把数据变成元组,按照(第一类属性的节点,关系,第二类属性的节点)进行排序''' tuple_total = list(zip(name1_list,rel_list,name2_list))
二、把数据导入neo4j数据库中
1.导入两类属性的节点
graph = Graph('你的neo4j的地址', auth = ('账号','密码')) graph.delete_all() # 清除neo4j里面的所有数据 label_1 = '发票名称' label_2 = '发票值' #把节点导入neo4j中 def create_node(invoice_name_list, invoice_value_list): for name in invoice_name_list: node_1 = Node(label_1, name = name) graph.create(node_1) for name in invoice_value_list: node_2 = Node(label_2, name = name) graph.create(node_2) create_node(invoice_name_list, invoice_value_list)
导入以后的示意图如下所示:
第一类属性的节点
第二类属性的节点(只截取一部分):
2.导入关系
matcher = NodeMatcher(graph) # 导入关系 for i in range(0, len(tuple_total)): rel = Relationship(matcher.match(label_1, name = tuple_total[i][0]).first(), tuple_total[i][1], matcher.match(label_2, name = tuple_total[i][2]).first() ) graph.create(rel) # 也可以写成下面这种形式 ''' name_1 = matcher.match(label_1, name = tuple_total[i][0]).first() rel = tuple_total[i][1] name_2 = matcher.match(label_2, name = tuple_total[i][2]).first() relationship = Relationship(name_1,rel,name_2) graph.create(relationship) '''
到此,已经把数据全部导入neo4j的数据库中了,效果图为:
代码和数据的链接为:https://github.com/kg5kb8lbj6/simple_kg/tree/main
这篇关于用python把数据导入neo4j中,建立一个简单的知识图谱的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2024-11-21Python编程基础教程
- 2024-11-20Python编程基础与实践
- 2024-11-20Python编程基础与高级应用
- 2024-11-19Python 基础编程教程
- 2024-11-19Python基础入门教程
- 2024-11-17在FastAPI项目中添加一个生产级别的数据库——本地环境搭建指南
- 2024-11-16`PyMuPDF4LLM`:提取PDF数据的神器
- 2024-11-16四种数据科学Web界面框架快速对比:Rio、Reflex、Streamlit和Plotly Dash
- 2024-11-14获取参数学习:Python编程入门教程
- 2024-11-14Python编程基础入门