赞
踩
首先我们来看看数据是什么样子的
这个数据实际上能做很多事情,但是本文主要重点主要是弄懂如何用python来建立neo4j数据库中的结点和关系,以后换了场景只需要在本文代码上结合neo4j官方文档进行修改即可。
python3.8
neo4j.4.1.3
所需库:
pip install py2no #注意版本不要太低
pip install pandas
本文将必要的注释都写在了代码段中,所以这里直接给出代码
# _*_ coding: utf-8 _*_ from py2neo import Node, Graph, Relationship, NodeMatcher class DataToNeo4j(object): """将excel中数据存入neo4j""" def __init__(self): """建立连接""" link = Graph("http://localhost:7474", username="neo4j", password="admin")#改成你自己的用户名和密码 self.graph = link # self.graph = NodeMatcher(link) # 定义label self.buy = 'buy' self.sell = 'sell' self.graph.delete_all() self.matcher = NodeMatcher(link) """ node3 = Node('animal' , name = 'cat') node4 = Node('animal' , name = 'dog') node2 = Node('Person' , name = 'Alice') node1 = Node('Person' , name = 'Bob') r1 = Relationship(node2 , 'know' , node1) r2 = Relationship(node1 , 'know' , node3) r3 = Relationship(node2 , 'has' , node3) r4 = Relationship(node4 , 'has' , node2) self.graph.create(node1) self.graph.create(node2) self.graph.create(node3) self.graph.create(node4) self.graph.create(r1) self.graph.create(r2) self.graph.create(r3) self.graph.create(r4) """ def create_node(self, node_buy_key, node_sell_key): """建立节点""" for name in node_buy_key: buy_node = Node(self.buy, name=name) self.graph.create(buy_node) for name in node_sell_key: sell_node = Node(self.sell, name=name) self.graph.create(sell_node) def create_relation(self, df_data): """建立联系""" m = 0 for m in range(0, len(df_data)): try: print(list(self.matcher.match(self.buy).where("_.name=" + "'" + df_data['buy'][m] + "'"))) print(list(self.matcher.match(self.sell).where("_.name=" + "'" + df_data['sell'][m] + "'"))) rel = Relationship(self.matcher.match(self.buy).where("_.name=" + "'" + df_data['buy'][m] + "'").first(), df_data['money'][m], self.matcher.match(self.sell).where("_.name=" + "'" + df_data['sell'][m] + "'").first()) self.graph.create(rel) except AttributeError as e: print(e, m)
# _*_ coding: utf-8 _*_ from dataToneo4jClass.DataToNeo4jClass import DataToNeo4j import os import pandas as pd #pip install py2no ==5.0b1 注意版本不低于此版本 invoice_data=pd.read_excel('./Invoice_data_Demo.xls', header=0) #print(invoice_data) #官方文档:https://py2neo.org/v4/index.html def data_extraction(): #取出购买方和销售方名称带list node_buy_key=[]#建立一个空列表存放购名称 for i in range(0,len(invoice_data)): node_buy_key.append(invoice_data['购买方名称'][i]) node_sell_key=[]#建立一个空列表存放销售方名称 for i in range(0,len(invoice_data)): node_sell_key.append(invoice_data['销售方名称'][i]) #去除重复的发票名称 node_buy_key=list(set(node_buy_key)) node_sell_key=list(set(node_sell_key)) #将Value抽出做node node_list_value=[] for i in range(0,len(invoice_data)): for n in range(1,len(invoice_data.columns)): #将表头名称invoice_data.colums[i]取出 node_list_value.append(invoice_data[invoice_data.columns[n]][i]) #去重 node_list_value=list(set(node_list_value)) #将list中的浮点数以及整数类型全部转换为string类型 node_list_value=[str(i) for i in node_list_value] return node_buy_key,node_sell_key,node_list_value def relation_extraction(): #联系数据抽取 links_dict={} sell_list=[] money_list=[] buy_list=[] for i in range(0,len(invoice_data)): money_list.append(invoice_data[invoice_data.columns[19]][i]) # 金额 sell_list.append(invoice_data[invoice_data.columns[10]][i]) # 销售方方名称 buy_list.append(invoice_data[invoice_data.columns[6]][i]) # 购买方名称 #将数据中的int类型的数据全部变成string类型的 sell_list = [str(i) for i in sell_list] buy_list = [str(i) for i in buy_list] money_list = [str(i) for i in money_list] # 整合数据,将三个list整合成一个dict links_dict['buy'] = buy_list links_dict['money'] = money_list links_dict['sell'] = sell_list # 将数据转成DataFrame df_data = pd.DataFrame(links_dict) print(df_data) return df_data #relation_extraction() create_data=DataToNeo4j() create_data.create_node(data_extraction()[0], data_extraction()[1]) create_data.create_relation(relation_extraction())
强调一下:上面两个代码段,需要将两个文件放在一起,一点一点看懂,虽然有些花时间吗,但是收获不会少,遇到不懂的百度,并创建一个test文件,将不懂的点的demo复制到test文件中运行一下,多打印一些东西,分析下结果就全明白了。
首先打开cmd执行以下代码将neo4j的服务开起来
neo4j.bat console
然后运行invoice_neo4j类
然后浏览器访问http://localhost:7474 得到如下结果
感谢教程:
知识图谱实战系列(python版),本文在教程代码上进行修改并添加了更多的注释。
本人将项目代码放在了百度网盘:
链接:https://pan.baidu.com/s/1PibmNxtn9JXT4SVOF4sJ_Q
提取码:ghsy
欢迎一起交流学习:
本人QQ:1518887260
整理于2020年10月31日
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。