python操作neo4j創建知識圖譜模板


數據:

購買方名稱 銷售方名稱 金額
山東高速集團有限公司電子收費中心 哈爾濱告訴公司 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)

結果:

參考

知識圖譜相關視頻


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM