NEO4J学习(一)

NEO4J学习(一)

1.导入excel文件

invoice_data = pd.read_excel('./Invoice_data_Demo.xls', header=0, encoding='utf8')

2.联系数据抽取

先将excel转化为dict类型以便为后面创建关系做准备

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

在这里插入图片描述

然后再转化为DataFrame类型

df_data = pd.DataFrame(links_dict)

3.调用DataToNeo4j类

3.1类初始化

    def __init__(self):
        """建立连接"""
        link = Graph("http://localhost:7474", username="neo4j", password="tangyudiadid0")
        self.graph = link
        #self.graph = NodeMatcher(link)
        # 定义label
        self.buy = 'buy'
        self.sell = 'sell'
        self.graph.delete_all()
        self.matcher = NodeMatcher(link)

主要进行连接图数据库,并且定义了知识图谱需要的标签

3.2调用create_node函数

节点数据抽取,抽取相对应的excel列,并做去重处理

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.columns[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


创建buy,sell标签的节点

    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)

3.3创建关系

    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)
            
            

这段主要用到了

1.之前创建的DataFrame类型可以通过遍历创建节点所有的关系

1.通过matcher.match(),找到知识图谱中对应的节点

2.通过Relationship(),为这两节点创建联系


这段主要用到了

1.之前创建的DataFrame类型可以通过遍历创建节点所有的关系

1.通过matcher.match(),找到知识图谱中对应的节点

2.通过Relationship(),为这两节点创建联系
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值