neo4j用python导入Excel数据的方法

目录

neo4j的下载

neo4j的介绍

neo4j简介

neo4j样本项目介绍

neo4j修改密码

连接GraphXR

用Python往neo4j导入Excel数据

代码部分

 关于创建结点:

关于创建关系:

结束


neo4j的下载

neo4j下载网址:Neo4j Download Center - Graph Database & Analytics

点击红框内的Download Neo4j Desktop

填写信息后点击Download Desktop,即可下载安装包

安装步骤较为简单,此处省略

neo4j的介绍

neo4j简介

neo4j是一个高性能的,NOSQL图形数据库,它将结构化数据存储在网络上而不是表中。它是一个嵌入式的、基于磁盘的、具备完全的事务特性的Java持久化引擎,但是它将结构化数据存储在网络(从数学角度叫做图)上而不是表中。Neo4j也可以被看作是一个高性能的图引擎,该引擎具有成熟数据库的所有特性。程序员工作在一个面向对象的、灵活的网络结构下而不是严格、静态的表中——但是他们可以享受到具备完全的事务特性、企业级的数据库的所有好处。

Neo4j因其嵌入式、高性能、轻量级等优势,越来越受到关注。

neo4j样本项目介绍

红框内的代表Projects,里面包含了所有的项目文件,刚下载好neo4j后,neo4j会给一个样本项目(Example Project),这个项目里的图数据库存储的是美国电影和影视演员之间的知识图谱关系:

 

neo4j修改密码

这个是图数据库的操作页面,其中比较重要的是下图红框内的内容,我们在以后的连接python和GraphXR时需要用到bolt连接、用户名neo4j和密码,密码的话修改过程如下:

先点击第一个红框的空白处,就会弹出图数据库的详细信息,然后里面有重新设置密码的地方,输入密码点击Apply就行,这里我设置的是123456789

我们点击start启动图数据库

点击Open打开 

弹出这个页面:

 红框里的就是用于连接的bolt连接和用户名neo4j,密码我们之前已经修改为了123456789

连接GraphXR

neo4j数据库查看数据:

红框标注的三个都可以点击,点击Movie就是查看Movie类的结点,Person就是Person类的结点,*169是不论类别的结点, 我们点击查看时图中限制了大小(LIMIT 25),指的是查看25个结点的关系图谱,我们可以更改LIMIT后面的值,也可以直接删除LIMIT:

如果查看的数据量很大会造成neo4j卡顿,我推荐用GraphXR来进行查看

网址:上海图客科技有限公司

点击GraphXR试用,因为我已经注册过账号,所以可以直接进入,新人第一次点击试用后可以注册账号,然后免费试用,试用时间没说多少天......

 我们点击新建:

项目名称可以自己填,然后勾选配置neo4j实例,主机填localhost,端口就是7687,用户名就是neo4j,密码我们设置的是123456789,点击确认就行。(注意连接neo4j时neo4j的数据库要保持开着的状态,不能关了) 

 按照上图操作,点击提取所有:

其中类别和关系是主要的两个提取操作,我们可以都提取出来查看(如上图):

用Python往neo4j导入Excel数据

我们可以把Excel文件和python文件放在一个文件夹里(便于提取和操作):

 其中我把Excel文件转换成了csv文件,一个是python对csv文件提取和操作都更快,另一个是我在操作Excel文件时会有一些编码错误,所以我用csv文件来导入数据

代码部分

下面是test1.py的代码:

from py2neo import Graph, Node, Relationship
import csv

g = Graph("bolt://localhost:7687", user="neo4j", password="123456789", name="neo4j") # 连接数据库

reader = csv.reader(open('kg-table-data.csv', 'r', encoding='utf-8'))   # 读取csv文件
reader1 = csv.reader(open('kg-table-data-1.csv', 'r', encoding='utf-8'))  # 读取csv文件

for item in reader: # 读取每一行
    if reader.line_num == 1:    # 去除第一行
        continue   
    print("当前行数:", reader.line_num, "当前行内容:", item) # 打印当前行数和当前行内容

    # 创建起始节点,并添加属性
    start_node = Node('Company', name=item[0])  # 创建节点
    start_node['role'] = '竞买方'   # 添加属性
    g.merge(start_node, 'Company', 'name')   # 以name属性为主键,如果存在则更新,不存在则创建

    # 创建结束节点,并添加属性
    end_node = Node('Company', name=item[4])    # 创建节点
    end_node['role'] = '出让方'    # 添加属性
    g.merge(end_node, 'Company', 'name')    # 以name属性为主键,如果存在则更新,不存在则创建

    # 为两个节点之间添加关系以及关系的属性
    relationship_type = '竞买' # 关系类型
    relationship_properties = { # 关系属性
        '交易标的': item[1],
        '首次披露日': item[2],
        '交易总价值(本币/万元)': item[3]
    }
    relationship = Relationship(start_node, relationship_type, end_node, **relationship_properties) # 创建关系
    g.merge(relationship)  # 以关系为主键,如果存在则更新,不存在则创建

先在python终端或者cmd里面安装py2neo库:

pip install py2neo

代码详解在注释里已经写得比较详细了,其中如果给结点添加属性的话,可以这样写:

start_node['role'] = '竞买方'   # 添加属性

中括号里是结点的属性,后面的赋值是属性的一个具体表现,role和竞买方这两个单词是可以换成其他东西的。

关系属性的添加的话可以这样写:

relationship_properties = { # 关系属性
        '交易标的': item[1],
        '首次披露日': item[2],
        '交易总价值(本币/万元)': item[3]
        # 添加一个关系属性:
        '交易地点':item[5]
    }

着重讲一下item,这个是在for循环当中读取每一行的数组变量,它读取的是文件的每一行:

for item in reader: # 读取每一行
    if reader.line_num == 1:    # 去除第一行
        continue
    print("当前行数:", reader1.line_num, "当前行内容:", item) # 打印当前行数和当前行内容

根据我那个表格的话,item[0]是竞买方,item[4]是出让方,item[1],item[2],item[3]分别是交易标的、首次披露日、交易总价值(本币/万元)。

 关于创建结点:

start_node = Node('Company', name=item[0])  # 创建节点
start_node['role'] = '竞买方'   # 添加属性
g.merge(start_node, 'Company', 'name')   # 以name属性为主键,如果存在则更新,不存在则创建

其中Company是这个结点的一个大属性(大类),name=item[0]就是根据item[0]来为它创建名称,role就是它的一个小属性:竞买方,g.merge()这个函数表示如果没有这个结点,就创建这个结点并添加,如果有这个结点就不重复添加了。

关于创建关系:

# 为两个节点之间添加关系以及关系的属性
    relationship_type = '竞买' # 关系类型
    relationship_properties = { # 关系属性
        '交易标的': item[1],
        '首次披露日': item[2],
        '交易总价值(本币/万元)': item[3]
    }
    relationship = Relationship(start_node, relationship_type, end_node, **relationship_properties) # 创建关系
    g.merge(relationship)  # 以关系为主键,如果存在则更新,不存在则创建

关系的大类别为:竞买,关系的属性在relationship_properties里存储,item是读取每一行之后的数据,根据数组下标填进去就行,如果要添加属性就在relationship_properties里面继续添加,格式为:

# 你要添加的属性
'要添加的属性': item[5]     # item[]中括号里面的数字看csv表格里的进行添加

结束

以上就是neo4j用python导入Excel或csv数据的方法,谢谢大家!

  • 2
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
### 回答1: 可以使用Python的pandas库来读取Excel文件,并使用py2neo库将数据导入Neo4j数据库。 以下是大致的步骤: 1. 安装pandas和py2neo库 可以使用pip命令来安装: ``` pip install pandas py2neo ``` 2. 读取Excel文件 使用pandas库的read_excel函数来读取Excel文件,例如: ``` import pandas as pd df = pd.read_excel('data.xlsx') ``` 其中,'data.xlsx'是Excel文件的路径。 3. 连接Neo4j数据库 使用py2neo库来连接Neo4j数据库,例如: ``` from py2neo import Graph, Node, Relationship graph = Graph("bolt://localhost:7687", auth=("neo4j", "password")) ``` 其中,"bolt://localhost:7687"是Neo4j数据库的地址和端口,"neo4j"和"password"是数据库的用户名和密码。 4. 将数据导入Neo4j数据库 使用py2neo库来创建节点和关系,并将它们添加到Neo4j数据库中,例如: ``` for index, row in df.iterrows(): node1 = Node("Label1", name=row['Column1']) node2 = Node("Label2", name=row['Column2']) rel = Relationship(node1, "REL_TYPE", node2) graph.create(node1) graph.create(node2) graph.create(rel) ``` 其中,"Label1"和"Label2"是节点的标签,"Column1"和"Column2"是Excel文件中的列名,"REL_TYPE"是关系的类型。 完成以上步骤后,就可以将Excel文件中的数据导入Neo4j数据库中了。 ### 回答2: Python是一种广泛用于数据分析和处理的编程语言,而Neo4j是一种用于图形数据库的开源产品。将Excel数据导入Neo4j可以让用户使用Neo4j的高级图形查询功能,来挖掘数据之间的关系以及进行高效的数据分析。本文将演示如何使用PythonExcel文件中导入数据Neo4j数据库。 首先,需要安装一些必需的库。我们可以使用pip package installer在命令行中输入以下代码来安装所需的库,如下: pip install pandas #数据分析库 pip install neo4j #Neo4j数据库连接库 pip install xlrd #Excel读取库 在完成库的安装后,我们需要建立一个Neo4j数据库的连接。我们将创建一个函数,用于指定数据库的URL、用户名和密码并建立连接。 ```python from neo4j import GraphDatabase def create_connection(): url = "bolt://localhost:7687" #Neo4j数据库的URL username = "neo4j" #Neo4j数据库的用户名 password = "yourpassword" #Neo4j数据库的密码 driver = GraphDatabase.driver(url, auth=(username, password)) return driver.session() ``` 接下来,我们需要读取Excel文件中的数据。我们可以使用pandas库中的read_excel()函数来读取Excel文件,如下: ```python import pandas as pd def read_excel(file_path): df = pd.read_excel(file_path) return df ``` 读取Excel文件后,我们可以对数据进行处理以适应Neo4j数据库的结构。在Neo4j中,节点是由标签和属性组成的,而关系是由名称和属性组成的。我们需要将数据转换为节点和关系,并将其插入到Neo4j数据库中。过程如下: ```python def insert_to_db(tx, name, attributes): # 格式化属性为Cypher查询语句格式 props = ','.join(f"{key}: '{value}'" for key, value in attributes.items()) query = f"CREATE (: {name} {{{props}}})" tx.run(query) def insert_relationship(tx, source_node_id, target_node_id, name, attributes): #格式化属性为Cypher查询语句格式 props = ','.join(f"{key}:'{value}'" for key, value in attributes.items()) query = f"MATCH (a), (b) WHERE a.id = '{source_node_id}' AND b.id = '{target_node_id}' CREATE(a) - [:{name} {{{props}}}]->(b)" tx.run(query) def save_to_neo4j(df): with create_connection() as session: nodes = set() relationships = set() for row in df.itertuples(): source_id = getattr(row, "source_id") target_id = getattr(row, "target_id") relation_type = getattr(row, "relation_type") source_node_type = getattr(row, "source_node_type") target_node_type = getattr(row, "target_node_type") source_attributes = dict(row._asdict()) del source_attributes["source_id"] del source_attributes["target_id"] del source_attributes["relation_type"] del source_attributes["source_node_type"] del source_attributes["target_node_type"] target_attributes = source_attributes.copy() del target_attributes["name"] source_node = (source_node_type, source_id, source_attributes) target_node = (target_node_type, target_id, target_attributes) relationship = (relation_type, source_id, target_id, source_attributes) nodes.add(source_node) nodes.add(target_node) relationships.add(relationship) for node in nodes: insert_to_db(session.write_transaction, node[0], node[2]) for relationship in relationships: insert_relationship(session.write_transaction, relationship[1], relationship[2], relationship[0], relationship[3]) ``` 通过运行以上代码,我们已经成功将Excel中的数据导入Neo4j数据库中了。现在,用户可以使用Neo4j的高级图形查询语言(Cypher)来分析从Excel导入数据之间的关系。该方法可以帮助用户快速有效地进行数据分析和数据挖掘。 综上所述,通过PythonExcel数据导入Neo4j数据库是一种方便、高效的数据处理方法。以上是将Excel数据导入Neo4j的基本步骤,用户可以根据自身需求自定义参数、关系、标签等细节。 ### 回答3: Neo4j是一种基于图形数据库的工具,可用于存储、分析和查询高度联通的数据。在实际应用中,可以用Python编写代码将Excel文件导入Neo4j数据库中。本文将讨论如何使用PythonExcel文件导入Neo4j数据库。此外,Neo4jPython驱动程序可以让我们轻松地连接到本地或远程Neo4j服务器。 在Neo4j中,数据结构是一个节点与节点之间的关系的网络。因此,在导入Excel时,我们需要先定义如何将Excel中的数据映射到Neo4j中的节点和关系。下面是Python代码实现的过程,步骤如下: 1. 安装Py2neo库:Py2neo是PythonNeo4j驱动程序。我们可以使用pip从命令行安装它,安装命令如下: pip install py2neo 2. 创建节点:在我们导入Excel之前,我们需要定义如何将数据映射到节点。例如,一个人可以被表示为一个节点,其中节点的属性包括姓名、年龄、性别等。以下是如何创建一个人节点的Python代码: from py2neo import Graph, Node graph = Graph("bolt://localhost:7687", auth=("username", "password")) person = Node("Person", name="John", age=30, gender="Male") tx = graph.begin() tx.create(person) tx.commit() 3. 创建关系:在Neo4j中,两个节点之间的关系也是一个节点,因此我们需要定义如何将Excel数据映射到关系节点。例如,关系可以是两个人之间的朋友关系,我们可以将其表示为一个关系节点,并将其属性设置为开始节点、结束节点和关系类型。以下是如何创建一个朋友节点的Python代码: from py2neo import Graph, Node graph = Graph("bolt://localhost:7687", auth=("username", "password")) person1 = Node("Person", name="John", age=30, gender="Male") person2 = Node("Person", name="Jane", age=25, gender="Female") friendship = Node("Friendship", type="Friend", start_node=person1, end_node=person2) tx = graph.begin() tx.create(person1) tx.create(person2) tx.create(friendship) tx.commit() 4. 从Excel读取数据:我们可以使用Python的openpyxl库来读取Excel文件。例如,以下Python代码将打开一个名为“data.xlsx”的Excel文件并读取第一个工作表中的所有行和列的数据: import openpyxl workbook = openpyxl.load_workbook("data.xlsx") sheet = workbook.active for row in sheet.iter_rows(): for cell in row: print(cell.value) 5. 将数据插入到Neo4j中:当我们从Excel读取数据并将其映射到节点和关系时,我们可以使用Py2neo库将其插入到Neo4j中。例如,以下Python代码将从Excel文件“data.xlsx”中的第一列和第二列读取数据,并将其映射到两个节点和一个关系节点: from py2neo import Graph, Node graph = Graph("bolt://localhost:7687", auth=("username", "password")) workbook = openpyxl.load_workbook("data.xlsx") sheet = workbook.active for row in sheet.iter_rows(): person1 = Node("Person", name=row[0].value) person2 = Node("Person", name=row[1].value) friendship = Node("Friendship", type="Friend", start_node=person1, end_node=person2) tx = graph.begin() tx.create(person1) tx.create(person2) tx.create(friendship) tx.commit() 在实现导入Excel并将数据插入到Neo4j中的过程中,需要注意以下细节: 1. Excel中的数据必须经过适当的清洗和格式化,以便正确地映射到节点和关系。 2. 如果从外部源导入数据,则必须确保有添加节点和关系的必要权限。 3. Neo4j服务器必须处于运行状态,才能正确地将Excel数据插入到数据库中。 综上,Python可以用来将Excel文件导入Neo4j数据库中,我们需要定义如何将Excel中的数据映射到Neo4j中的节点和关系,使用openpyxl库来读取Excel数据,使用Py2neo库将它们插入到Neo4j中。这种数据导入方法可以帮助我们更好地理解和分析高度联通的数据

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

xingzhiyao123456

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值