数据:
购买方名称 | 销售方名称 | 金额 |
---|---|---|
山东高速集团有限公司电子收费中心 | 哈尔滨告诉公司 | 2000W级别交易 |
湖南道岳高速公路实业有限公司 | 湖北阿深南高速公路发展有限公司 | 2000W级别交易 |
湖南道岳高速公路实业有限公司 | 湖北阿深南高速公路发展有限公司 | 100W级别交易 |
湖南道岳高速公路实业有限公司 | 湖北阿深南高速公路发展有限公司 | 2000W级别交易 |
山东高速集团有限公司电子收费中心 | 湖北阿深南高速公路发展有限公司 | 2000W级别交易 |
山东高速集团有限公司电子收费中心 | 湖北阿深南高速公路发展有限公司 | 2000W级别交易 |
山东高速集团有限公司电子收费中心 | 湖北阿深南高速公路发展有限公司 | 500W级别交易 |
山东高速集团有限公司电子收费中心 | 湖北阿深南高速公路发展有限公司 | 500W级别交易 |
山东高速集团有限公司电子收费中心 | 湖北阿深南高速公路发展有限公司 | 500W级别交易 |
山东高速集团有限公司电子收费中心 | 湖北中交嘉通高速公路发展有限公司 | 2000W级别交易 |
湖北阿深南高速公路发展有限公司 | 湖南道岳高速公路实业有限公司 | 100W级别交易 |
湖北阿深南高速公路发展有限公司 | 湖南道岳高速公路实业有限公司 | 500W级别交易 |
湖北阿深南高速公路发展有限公司 | 湖南道岳高速公路实业有限公司 | 100W级别交易 |
湖北阿深南高速公路发展有限公司 | 湖南道岳高速公路实业有限公司 | 500W级别交易 |
湖北中交嘉通高速公路发展有限公司 | 湖南道岳高速公路实业有限公司 | 2000W级别交易 |
山东高速集团有限公司电子收费中心 | 湖南道岳高速公路实业有限公司 | 500W级别交易 |
山东高速集团有限公司电子收费中心 | 湖南道岳高速公路实业有限公司 | 500W级别交易 |
山东高速集团有限公司电子收费中心 | 湖南道岳高速公路实业有限公司 | 500W级别交易 |
山东高速集团有限公司电子收费中心 | 湖南道岳高速公路实业有限公司 | 2000W级别交易 |
湖南道岳高速公路实业有限公司 | 山东高速集团有限公司电子收费中心 | 8000W级别交易 |
湖南道岳高速公路实业有限公司 | 山东高速集团有限公司电子收费中心 | 8000W级别交易 |
湖南道岳高速公路实业有限公司 | 山东高速集团有限公司电子收费中心 | 2000W级别交易 |
湖南道岳高速公路实业有限公司 | 山东高速集团有限公司电子收费中心 | 2000W级别交易 |
现代投资股份有限公司 | 山东高速集团有限公司电子收费中心 | 8000W级别交易 |
现代投资股份有限公司 | 山东高速集团有限公司电子收费中心 | 8000W级别交易 |
现代投资股份有限公司 | 山东高速集团有限公司电子收费中心 | 2000W级别交易 |
现代投资股份有限公司 | 山东高速集团有限公司电子收费中心 | 2000W级别交易 |
现代投资股份有限公司 | 山东高速集团有限公司电子收费中心 | 2000W级别交易 |
现代投资股份有限公司 | 山东高速集团有限公司电子收费中心 | 2000W级别交易 |
湖南道岳高速公路实业有限公司 | 现代投资股份有限公司 | 8000W级别交易 |
湖南道岳高速公路实业有限公司 | 现代投资股份有限公司 | 8000W级别交易 |
山东高速集团有限公司电子收费中心 | 现代投资股份有限公司 | 500W级别交易 |
山东高速集团有限公司电子收费中心 | 现代投资股份有限公司 | 500W级别交易 |
山东高速集团有限公司电子收费中心 | 现代投资股份有限公司 | 2000W级别交易 |
山东高速集团有限公司电子收费中心 | 现代投资股份有限公司 | 100W级别交易 |
from py2neo import Node, Graph, Relationship, NodeMatcher
import pandas as pd
class DataToNeo4j:
def __init__(self):
# 连接数据库
link = Graph("http:localhost:7474", username="neo4j", password="rhino1qaz@wsx")
self.graph = link
# 建立节点
self.buy = "buy"
self.sell = "sell"
self.graph.delete_all() # 先清空数据库
self.matcher = NodeMatcher(link) # 然后定义一个matcher
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):
"""建立联系"""
for m in range(0, len(df_data)):
# print(df_data['buy'][m], df_data['money'][m], 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)
class Processor:
def __init__(self, path):
self.invoice_data = pd.read_excel(path, header=0)
def node_extraction(self):
# 取出购买方名称到list
node_buy_key = self.invoice_data['购买方名称'].tolist()
node_sell_key = self.invoice_data['销售方名称'].tolist()
# 去除重复的发票名称
node_buy_key = list(set(node_buy_key))
node_sell_key = list(set(node_sell_key))
return node_buy_key, node_sell_key
def relation_extraction(self):
"""联系数据抽取"""
links_dict = {}
sell_list = []
money_list = []
buy_list = []
for i in range(0, len(self.invoice_data)):
money_list.append(self.invoice_data[self.invoice_data.columns[19]][i]) # 金额
sell_list.append(self.invoice_data[self.invoice_data.columns[10]][i]) # 销售方方名称
buy_list.append(self.invoice_data[self.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)
return df_data
if __name__ == '__main__':
# dataToNeo4j = DataToNeo4j()
path = './Invoice_data_Demo.xls'
processor = Processor(path)
node_buy_key, node_sell_key = processor.node_extraction()
print(node_buy_key)
print(node_sell_key)
df_data = processor.relation_extraction()
dataToNeo4j = DataToNeo4j()
dataToNeo4j.create_node(node_buy_key, node_sell_key)
dataToNeo4j.create_relation(df_data)
结果: