前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >python操作neo4j创建知识图谱模板

python操作neo4j创建知识图谱模板

作者头像
西西嘛呦
修改2021-11-24 10:15:14
6330
修改2021-11-24 10:15:14
举报
文章被收录于专栏:数据分析与挖掘

数据:

购买方名称

销售方名称

金额

山东高速集团有限公司电子收费中心

哈尔滨告诉公司

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级别交易

代码语言:javascript
复制
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)

结果:

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2021-11-21 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档