【学习笔记】pandas提取excel数据形成三元组,采用neo4j数据库构建小型知识图谱

这篇具有很好参考价值的文章主要介绍了【学习笔记】pandas提取excel数据形成三元组,采用neo4j数据库构建小型知识图谱。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

前言

    代码来自github项目 neo4j-python-pandas-py2neo-v3,项目作者为Skyelbin。我记录一下运行该项目的一些过程文字以及遇到的问题和解决办法。

一、提取excel中的数据转换为DataFrame三元组格式

from dataToNeo4jClass.DataToNeo4jClass import DataToNeo4j
import os
import pandas as pd


# 提取excel表格中数据,将其转换成dateframe类型,dateframe相当于表格
# os.chdir('xxxx') 这块我注释掉了,没有什么用还报错

invoice_data = pd.read_excel('./Invoice_data_Demo.xls', header=0)  # 用excel中的第一行作为表头
print(invoice_data)

def data_extraction():
    """节点数据抽取"""

    # 取出发票名称到list
    node_list_key = []
    for i in range(0, len(invoice_data)):  # len(invoice_data)是表格包含的数据总行数,表头一行不算入
        node_list_key.append(invoice_data['发票名称'][i])

    # 去除重复的发票名称
    node_list_key = list(set(node_list_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 返回所有列标签组成的列表
            # 取出表头名称invoice_data.columns[n]
            node_list_value.append(invoice_data[invoice_data.columns[n]][i])  # node_list_value存储除了发票名称外的所有行
    # 去重
    node_list_value = list(set(node_list_value))
    # 将list中浮点及整数类型全部转成string类型
    node_list_value = [str(i) for i in node_list_value]

    return node_list_key, node_list_value


def relation_extraction():
    """关系数据抽取"""

    links_dict = {}
    name_list = []
    relation_list = []
    name2_list = []

    for i in range(0, len(invoice_data)):
        m = 0
        name_node = invoice_data[invoice_data.columns[m]][i]  #依次取第一列的发片名称值
        # 将发票相关的26个属性值存储起来
        while m < len(invoice_data.columns)-1:
            relation_list.append(invoice_data.columns[m+1])
            name2_list.append(invoice_data[invoice_data.columns[m+1]][i])
            name_list.append(name_node)
            m += 1

    # 将数据中int类型全部转成string
    name_list = [str(i) for i in name_list]
    name2_list = [str(i) for i in name2_list]

    # 整合数据,将三个list整合成一个dict,类似三元组形式
    links_dict['name'] = name_list
    links_dict['relation'] = relation_list
    links_dict['name2'] = name2_list
    # 将数据转成DataFrame
    df_data = pd.DataFrame(links_dict)
    return df_data


# 实例化对象
data_extraction()
relation_extraction()
create_data = DataToNeo4j()

create_data.create_node(data_extraction()[0], data_extraction()[1])  # 获取 node_list_key 和 node_list_value
create_data.create_relation(relation_extraction())

invoice_data 如下:
pandas知识图谱,知识图谱,Python,neo4j,pandas,excel
node_list_key 如下:
pandas知识图谱,知识图谱,Python,neo4j,pandas,excel
node_list_value 如下:
pandas知识图谱,知识图谱,Python,neo4j,pandas,excel
df_data 如下:
pandas知识图谱,知识图谱,Python,neo4j,pandas,excel

二、利用三元组在neo4j中构建节点和关系,形成可视化知识图谱

from py2neo import Node, Graph, Relationship

class DataToNeo4j(object):
    """将excel中数据存入neo4j"""

    def __init__(self):
        """Graph实例化,建立数据库连接"""
        link = Graph("http://localhost:7474", username="neo4j", password="neo4j")  # 填写neo4j数据库账户和密码,默认都是neo4j
        self.graph = link
        # 定义label
        self.invoice_name = '发票名称'
        self.invoice_value = '发票值'
        self.graph.delete_all()    # 删除所有图

    def create_node(self, node_list_key, node_list_value):
        """建立节点"""
        for name in node_list_key:
            name_node = Node(self.invoice_name, name=name)    # 定义节点
            self.graph.create(name_node)
        for name in node_list_value:
            value_node = Node(self.invoice_value, name=name)
            self.graph.create(value_node)

    def create_relation(self, df_data):
        """建立联系"""

        m = 0
        for m in range(0, len(df_data)):
            try:
                rel = Relationship(self.graph.find_one(label=self.invoice_name, property_key='name', property_value=df_data['name'][m]),
                                   df_data['relation'][m], self.graph.find_one(label=self.invoice_value, property_key='name',
                                   property_value=df_data['name2'][m]))
                self.graph.create(rel)  # 创建35个关系
            except AttributeError as e:
                print(e, m)

构建的知识图谱如下所示:
pandas知识图谱,知识图谱,Python,neo4j,pandas,excel
压缩包里其他文件说明(个人理解):

  • jieba_code 文件夹:是实现 jieba 分词的,要用到 mysql 数据库;
  • neo4j_matrix.py:将知识图谱转化为矩阵,为其他算法做数据基础;
  • neo4j_to_dataframe.py:在知识图谱中查询节点,利用基本的Cypher语句实现。

因为我只需要学习构建知识图谱,所以其他的内容并未运行,想要简单了解的小伙伴可以跑起来试试~

总结

基于存储在excel中的半结构化数据构建知识图谱的大致流程:将excel中的数据转换为dataframe格式的数据,此处需要注意excel中每行数据都要转化为多个三元组,此时已经获取三元组数据了,然后在neo4j中构建节点和关系就建立起基本的知识图谱啦~


版权说明
博文作者:早知晓
博文链接:Click here
转载请注明出处,谢谢合作~

祝大家都走在前进的路上,一路鲜花掌声。文章来源地址https://www.toymoban.com/news/detail-792376.html


到了这里,关于【学习笔记】pandas提取excel数据形成三元组,采用neo4j数据库构建小型知识图谱的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 区块链学习笔记(2)难度整定,区块形成,区块体,Merkle树,Merkle Proof默克尔证明

           是在每个完整节点中独立自动发生的。每2016个区块,所有节点都会按统的公式自动调整难度,这个公式是由最新2016个区块的花要时长与期望时长(期望时长为20160分钟,即两周,是按每10分钟一个区块的产生速率计算出的总时长 )比较得出的,根据实际时长与期望时

    2023年04月08日
    浏览(78)
  • 【Python】进阶学习:pandas--read_excel()函数的基本使用

    【Python】进阶学习:pandas–read_excel()函数的基本使用 🌈 个人主页:高斯小哥 🔥 高质量专栏:Matplotlib之旅:零基础精通数据可视化、Python基础【高质量合集】、PyTorch零基础入门教程👈 希望得到您的订阅和支持~ 💡 创作高质量博文(平均质量分92+),分享更多关于深度学习、

    2024年03月09日
    浏览(56)
  • Python:使用pandas对excel数据筛选选择

    #直接筛选 #DataFrame索引使用[], #直接索引语法:df[] 1.1 直接筛选,选择单列数据:df[\\\"列\\\"] 1.2直接筛选,选择多列数据:df[[\\\"列1\\\",\\\"列2\\\"]](注意:多嵌套列) 1.3直接筛选,选择多行数据:df[2:4]按照位置选取连续的行(切片),前闭后开 #(\\\'----------筛选方式2:条件筛选-------------\\\') #条件筛选

    2024年02月16日
    浏览(57)
  • 借助ChatGPT使用Pandas实现Excel数据汇总

    现在有如下一个Excel表: 上述Excel表中8万多条数据,记录的都是三年以来花菜类的销量,现在要求按月汇总实现统计每个月花菜类的销量总和,如果使用Python的话要给出代码。 1.首先可以用透视表的方法解决这个问题,可能相对简单一些。采用透视表的话,我们根据ChatGPT的回

    2024年02月09日
    浏览(46)
  • 爬虫学习笔记-scrapy链接提取器爬取读书网链接写入MySQL数据库

    1.终端运行scrapy startproject scrapy_read,创建项目 2.登录读书网,选择国学(随便点一个) 3.复制链接(后面修改为包括其他页)  4.创建爬虫文件,并打开  5.滑倒下方翻页处,右键2,点击检查,查看到a标签网址,复制 6.修改爬虫文件规则allow(正则表达式),\\\'d\\\'表示数字,\\\'+\\\'表示多个,\\\'.\\\'使\\\'.\\\'生效

    2024年02月19日
    浏览(48)
  • 【Python】使用pandas将数据写入excel文件中

    本文主要简单介绍一下使用python的pandas库来将数据写入到excel文件中。 示例:pandas 是基于NumPy 的一种工具,该工具是为了解决数据分析任务而创建的。在命令行输入pip install pandas进行安装即可,如果安装不成功,有安装Pycharm的小伙伴也可以进入python interpreter界面,搜索pand

    2024年02月15日
    浏览(58)
  • Python+pandas数据直接写入和接续写入Excel

    数据类型(3行7列的数据)和: (7行1列的数据) 直接写入两个不同的sheet 效果: 效果 效果 直接写入:(12条消息) 【python学习】-将数据输出存储到CSV或xls,xlsx文件(并实现将不同数据存储在同一份文件的不同sheet)_electrochemjy的博客-CSDN博客_python输出数据到csv 接续写入:Python

    2024年02月03日
    浏览(48)
  • pandas读取Excel核心源码剖析,面向过程仿openpyxl源码实现Excel数据加载

    📢作者: 小小明-代码实体 📢博客主页:https://blog.csdn.net/as604049322 📢欢迎点赞 👍 收藏 ⭐留言 📝 欢迎讨论! 今天我们将研究pandas如何使用openpyxl引擎读取xlsx格式的Excel的数据,并考虑以面向过程的形式简单的自己实现一下。 截止目前本人所使用的pandas和openpyxl版本为:

    2023年04月19日
    浏览(59)
  • 【EXCEL】快速填充数据,批量提取与组合数据

    目录 0.环境 1.简要介绍功能 2.具体实际应用 1)提取括号中的内容 2)拆分重组--重组“姓”和“职位” 3)数据拆分 windows + office2021 注意: 此功能可能需 excel 2013版本及以上 使用 在excel中,有没有遇到过以下情况,有一列是邮箱(名字+@qq.com组成),我希望提取所有的用户名

    2024年02月11日
    浏览(64)
  • Qt提取excel表单中数据

     这是一个excel表单,目标是 把其中的数据提取出来。 文章学习自: QT中将excel中的数据快速的读取出来显示在tablewidget中/将tablewidget中的数据快速的写入excel中_qt将excel表格中指定范围内容显示在界面中_Jessica_1409573408的博客-CSDN博客 结果(这已经是我优化过的了):  QVaria

    2024年02月15日
    浏览(52)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包