數據:
購買方名稱 | 銷售方名稱 | 金額 |
---|---|---|
山東高速集團有限公司電子收費中心 | 哈爾濱告訴公司 | 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)
結果:
參考
知識圖譜相關視頻