知识图谱数据库 Neo4j in Docker笔记

发布于:2025-02-13 ⋅ 阅读:(218) ⋅ 点赞:(0)

下载

docker pull neo4j:community

在这里插入图片描述

官方说明

https://neo4j.com/docs/operations-manual/2025.01/docker/introduction/

启动

docker run \
    --restart always \
    --publish=7474:7474 --publish=7687:7687 \
    --env NEO4J_AUTH=neo4j/your_password \
    --volume=D:\files\knowledgegraph\data:/data \
    neo4j:community

打开

打开浏览器在地址栏输入:http://localhost:7474/

首次登录,输入用户名 neo4j 和密码 your_password

Python来读取Excel并通过py2neo创建

要使用 Python 来读取 Excel 数据,并通过 py2neo 创建图谱(将 Excel 中的数据转化为 Neo4j 图数据库中的节点和关系),可以按照以下步骤进行:

步骤概览:

  1. 使用 pandas 读取 Excel 文件。
  2. 解析 Excel 数据,确定哪些列表示节点和关系。
  3. 使用 py2neo 创建图节点和关系。
  4. 可选:将图数据存储到 Neo4j 数据库。

代码实现

假设你有一个 Excel 文件,其中包含以下列:

  • Employee: 员工姓名
  • Position: 员工职位
  • Company: 所属公司

例如,Excel 数据如下:

Employee Position Company
Alice Developer TechCorp
Bob Manager TechCorp
Carol Developer WebCorp

目标是根据这张表格创建 PersonCompany 类型的节点,并在它们之间创建 WORKS_AT 类型的关系。

1. 安装依赖库

如果你还没有安装 pandaspy2neo,可以使用以下命令进行安装:

pip install pandas py2neo

2. 代码示例

import pandas as pd
from py2neo import Graph, Node, Relationship

# 连接到 Neo4j 数据库(请根据实际情况修改用户名、密码和数据库地址)
graph = Graph("bolt://localhost:7687", auth=("neo4j", "your_password"))

# 读取 Excel 数据
df = pd.read_excel('employees.xlsx')  # 假设你的 Excel 文件名是 'employees.xlsx'

# 创建节点和关系
for index, row in df.iterrows():
    # 创建公司节点,如果公司不存在
    company = Node("Company", name=row['Company'])
    graph.merge(company, "Company", "name")  # 使用 merge 以避免重复公司节点

    # 创建员工节点
    employee = Node("Person", name=row['Employee'], position=row['Position'])
    graph.merge(employee, "Person", "name")  # 使用 merge 以避免重复员工节点

    # 创建员工与公司之间的关系
    works_at = Relationship(employee, "WORKS_AT", company)
    graph.create(works_at)

print("数据已成功导入 Neo4j 数据库!")

3. 代码解释

  1. 连接 Neo4j 数据库

    • 使用 Graph("bolt://localhost:7687", auth=("neo4j", "neo4j")) 连接到本地 Neo4j 数据库。
    • 根据需要修改 auth 参数中的用户名和密码。
  2. 读取 Excel 文件

    • 使用 pandas.read_excel 读取 Excel 文件内容到 DataFrame。你可以根据实际情况修改文件名和路径。
  3. 创建节点和关系

    • 公司节点:对于每一行,如果公司节点不存在,则创建一个新的节点。通过 graph.merge() 方法确保不会重复创建同名公司。
    • 员工节点:同样,对于每一行,如果员工节点不存在,则创建一个新的员工节点。使用 graph.merge() 来避免重复创建同名员工。
    • 员工与公司之间的关系:为每一对员工和公司创建 WORKS_AT 关系,并使用 graph.create() 将其保存到图数据库。

4. 可选步骤:检查结果

  • Neo4j 浏览器:打开 Neo4j 浏览器,执行查询 MATCH (n) RETURN n LIMIT 25 来查看是否成功导入了节点和关系。

  • Cypher 查询:你可以使用 Cypher 查询语言来查询某个员工在哪个公司工作,或者查询公司之间的关系等。

MATCH (e:Person)-[:WORKS_AT]->(c:Company)
RETURN e.name, c.name

5. 扩展功能

  • 批量插入数据:对于大型 Excel 文件,你可能需要考虑批量插入,以提高性能。py2neo 提供了 Batch API,可以一次性处理多个操作。
  • 复杂关系:你可以根据需要创建更复杂的关系和节点属性,拓展图谱模型。
from py2neo import Batch

batch = Batch(graph)

for index, row in df.iterrows():
    # 创建公司节点
    company = Node("Company", name=row['Company'])
    batch.merge(company, "Company", "name")

    # 创建员工节点
    employee = Node("Person", name=row['Employee'], position=row['Position'])
    batch.merge(employee, "Person", "name")

    # 创建员工与公司之间的关系
    works_at = Relationship(employee, "WORKS_AT", company)
    batch.create(works_at)

# 批量提交
batch.submit()

总结

在这里插入图片描述

通过上述步骤,你可以轻松地将 Excel 数据转换为 Neo4j 图数据库中的节点和关系。利用 pandas 读取 Excel 文件和 py2neo 创建节点/关系,可以有效地将结构化数据转化为图数据进行进一步分析和查询。

中文手册

https://we-yun.com/doc/neo4j-chs-doc/


网站公告

今日签到

点亮在社区的每一天
去签到