【保姆级教程】从零入手:Python + Neo4j 构建你的第一个知识图谱

【保姆级教程】从零入手:Python + Neo4j 构建你的第一个知识图谱

摘要: 大数据时代,数据之间的关系往往比数据本身更有价值。传统的 SQL 数据库在处理复杂关系(如社交网络、推荐系统、风控分析)时显得力不从心,而 知识图谱图数据库 Neo4j 正是为此而生。本文将带你从 0 基础出发,理解知识图谱核心概念,安装 Neo4j 环境,并手把手教你用 Python 代码构建一个生动的人物关系图谱。拒绝枯燥理论,全是实战干货!


一、 什么是知识图谱与 Neo4j?

在动手写代码之前,我们先用大白话把两个核心概念捋清楚。

1. 什么是知识图谱 (Knowledge Graph)?

不要被高大上的名字吓到。知识图谱本质上就是把世界上的事物(节点)和它们之间的联系(关系)画成一张巨大的网

  • Excel 思维: 罗列数据。例如:张三,25岁;李四,30岁。
  • 图谱思维: 链接数据。例如:(张三)--[朋友]-->(李四)

它由三要素组成:

  • 实体 (Entity/Node): 比如“周杰伦”、“昆凌”。
  • 关系 (Relationship): 比如“夫妻”、“代言”。
  • 属性 (Property): 比如周杰伦的“年龄:40+”。

2. 什么是 Neo4j?

如果说 SQL 是关系型数据库的霸主,那么 Neo4j 就是图数据库(Graph Database)的王者。

  • 特点: 原生支持图存储,查询关联数据速度极快(秒杀 MySQL)。
  • 查询语言: 使用 Cypher 语言(类似 SQL,但更直观)。
一句话总结: 我们用 Python 处理数据,把数据喂给 Neo4j,最终形成可视化的知识图谱。

二、 环境搭建:Neo4j Desktop 安装

对于初学者,我强烈推荐使用 Neo4j Desktop(桌面版),不仅免费,而且图形化界面非常友好,免去了复杂的命令行配置。

步骤 1:下载与安装

  1. 进入 Neo4j 官网下载中心
  2. 填写基本信息后下载 Neo4j Desktop
  3. 像安装普通软件一样安装并运行。

步骤 2:创建项目与数据库

  1. 打开 Neo4j Desktop,点击 "New Project"
  2. 在右侧点击 "Add" -> "Local DBMS"
  3. 关键设置: 设置一个密码(比如 123456),一定要记住!
  4. 点击 Create,然后点击 Start 启动数据库。

步骤 3:进入浏览器控制台

当状态灯变绿后,点击 Open 或者在浏览器输入 http://localhost:7474

  • 用户名:neo4j
  • 密码:你刚才设置的(如 123456

三、 快速上手:Cypher 语言初体验

在用 Python 之前,我们先在 Neo4j 浏览器的输入框里敲一行代码,感受一下图的魅力。

输入以下命令并按回车(或点击播放按钮):

Cypher

CREATE (p1:Person {name: '孙悟空', title: '齐天大圣'}) CREATE (p2:Person {name: '唐僧', title: '师傅'}) CREATE (p1)-[:PROTECT {role: '保镖'}]->(p2) RETURN p1, p2 

你会看到屏幕上出现了两个圆圈(节点)和一条连线。这就是最简单的图谱!


四、 实战:使用 Python 构建知识图谱

在实际工作中,我们不可能手动一条条敲 Cypher 命令,而是通过 Python 读取文件(CSV/Excel)并批量写入。

1. 安装 Python 驱动

打开终端或 CMD,运行:

Bash

pip install neo4j 

2. 编写核心代码

下面我编写了一个通用的连接类,你可以直接复制使用。我们将构建一个简单的 “西游记人物关系图谱”

新建一个 build_graph.py 文件:

Python

from neo4j import GraphDatabase class KnowledgeGraph: def __init__(self, uri, user, password): """ 连接 Neo4j 数据库 """ self.driver = GraphDatabase.driver(uri, auth=(user, password)) def close(self): """ 关闭连接 """ self.driver.close() def create_node_and_relationship(self, person1, relation, person2): """ 创建节点和关系 使用 MERGE 关键字,保证节点不被重复创建 """ with self.driver.session() as session: # Cypher 语句说明: # 1. 查找或创建名为 person1 的节点 # 2. 查找或创建名为 person2 的节点 # 3. 建立两者之间的关系" MERGE (p1:Character {name: $name1}) MERGE (p2:Character {name: $name2}) MERGE (p1)-[r:RELATION {type: $rel}]->(p2) RETURN p1, p2, r """ session.run(query, name1=person1, name2=person2, rel=relation) print(f"成功构建:{person1} --[{relation}]--> {person2}") def clear_data(self): """ (可选) 清空数据库,方便测试 """ with self.driver.session() as session: session.run("MATCH (n) DETACH DELETE n") print("数据库已清空!") # --- 主程序执行 --- if __name__ == "__main__": # 1. 配置数据库连接 (请修改你的密码) URI = "bolt://localhost:7687" USER = "neo4j" PASSWORD = "123456" # 替换为你自己的密码 # 2. 准备数据 (模拟从 Excel 读取的数据) data = [ ("唐僧", "师徒", "孙悟空"), ("唐僧", "师徒", "猪八戒"), ("唐僧", "师徒", "沙僧"), ("孙悟空", "师兄弟", "猪八戒"), ("孙悟空", "师兄弟", "沙僧"), ("孙悟空", "结拜兄弟", "牛魔王"), ("牛魔王", "夫妻", "铁扇公主"), ("铁扇公主", "母子", "红孩儿") ] # 3. 开始构建 kg = KnowledgeGraph(URI, USER, PASSWORD) try: # 先清空旧数据,防止重复 kg.clear_data() print("开始构建知识图谱...") for p1, rel, p2 in data: kg.create_node_and_relationship(p1, rel, p2) print("\n图谱构建完成!请去 Neo4j Browser 查看效果。") except Exception as e: print(f"发生错误: {e}") finally: kg.close() 

3. 运行效果

运行上述脚本,控制台会输出:

Plaintext

数据库已清空! 开始构建知识图谱... 成功构建:唐僧 --[师徒]--> 孙悟空 成功构建:唐僧 --[师徒]--> 猪八戒 ... 图谱构建完成! 

五、 见证奇迹的时刻:可视化展示

现在回到你的 Neo4j Browser (http://localhost:7474)。

在顶部输入框输入以下命令查询所有数据:

Cypher

MATCH (n) RETURN n 

点击播放按钮。 你将看到一张错综复杂、可以拖拽的人物关系网! 

你可以尝试:

  1. 点击“孙悟空”节点,改变它的颜色。
  2. 拖动节点,感受力导向图的物理效果。
  3. 鼠标悬停在连线上,查看关系类型。

六、 总结与展望

恭喜你!你已经完成了从 0 到 1 的知识图谱构建。 我们通过 Python 的 neo4j 库,成功将结构化的数据转化为了图谱。

本文学到了什么?

  1. 理解了图数据库与传统数据库的区别。
  2. 学会了安装 Neo4j Desktop。
  3. 掌握了 Python 连接 Neo4j 并批量写入数据的核心代码。

下一步可以做什么? 构建图谱只是第一步。有了这个图谱,我们不仅可以“看”,还可以让 AI 去“理解”。 在下一篇文章中,我将分享 《进阶篇:如何结合 BERT 模型与 Neo4j 实现智能问答系统 (KBQA)》,让 AI 能回答“孙悟空的结拜兄弟的老婆是谁?”这种复杂问题。

如果你觉得这篇文章对你有帮助,欢迎点赞、收藏、关注三连!有任何报错问题,请在评论区留言,我会第一时间解答!

Read more

一文吃透SBUS协议:从原理到实战(无人机/航模/机器人适用)

在无人机、航模、机器人等精密控制领域,“稳定、快速、可靠”是控制信号传输的核心诉求。传统的PWM信号虽然简单直观,但存在通道数有限、抗干扰能力弱、布线复杂等痛点。而SBUS(Serial Bus)协议——由FUTABA公司专为遥控设备设计的串行数字通信协议,凭借单线传输多通道数据、抗干扰强、延迟低的核心优势,逐渐成为行业主流。 本文将从“是什么-怎么工作-协议细节-厂家产品-接口设计-代码实现-实战技巧-常见问题”八个维度,用最通俗的语言+大量对比表格,全面拆解SBUS协议。无论你是刚入门的电子爱好者,还是需要落地项目的工程师,都能从本文中找到所需的实用信息。 一、SBUS协议基础认知:核心定位与优势对比 在深入技术细节前,我们先通过对比和基础定义,快速建立对SBUS的认知。很多人会把SBUS和常见的UART、PWM等混淆,这里先明确其核心定位:SBUS是基于反向电平UART的“应用层控制协议”,专门用于遥控器与接收机、接收机与飞控/执行器之间的控制信号传输。 1.1 为什么需要SBUS?传统方案的痛点 在SBUS出现之前,航模和早期无人机主要使用PWM或PPM协议传输控

By Ne0inhk

基于FPGA的时间数字转换器(TDC)抖动(jitter)测试系统

项目概述 本项目实现了一个完整的FPGA系统,用于通过SPI接口控制和读取AS6501 TDC芯片。系统包括SPI主控模块、控制模块、测试序列器、Block RAM结果存储、UART批量传输模块和Python数据分析工具,支持完整的测试与分析流程: 上电命令→配置寄存器写入/回读验证→Init命令启动测量→中断驱动的连续测量(默认10000次)→结果存入Block RAM→按键触发UART批量传输到上位机→Python解析数据并计算Jitter 核心特性 * 批量测量模式: 连续采集MAX_MEASUREMENTS次(默认10000)后自动停止 * Block RAM存储: 48位×10000条测量数据,使用Vivado Block RAM推断 * UART批量传输: BTN[1]按键触发,115200 baud,8字节数据包格式 * 电平触发中断: 支持AS6501中断始终为低电平的模式(直接再次读取) * Python Jitter分析: 解析UART数据→计算时钟周期/TIE→生成6子图分析报告

By Ne0inhk
【高企年报观察】拒绝Excel打架:我们如何用低代码搭建高企年报自动化系统,将填报时间从3天压缩到1小时

【高企年报观察】拒绝Excel打架:我们如何用低代码搭建高企年报自动化系统,将填报时间从3天压缩到1小时

拒绝Excel打架:我们如何用低代码搭建高企年报自动化系统,将填报时间从3天压缩到1小时 每年2-4月,高新技术企业财务部都会上演一场“年度大戏”。 财务专员拿着税务局加计扣除申报表,问研发助理:“你们这21个项目,工时分摊到底怎么算的?” 研发助理翻出去年12月的Excel记录:“当时王工说大概30%,李工说20%,我按印象填的……” 知识产权专员抱着一摞专利证书:“这5项专利年费忘了缴,还能补吗?年报里要不要填?” 市场部发来邮件:“去年那款B产品销售额1200万,算不算高新收入?对应哪个专利来着?” ——然后所有人开始翻微信记录、找历史邮件、打Excel补丁。 三天后,财务总监终于在申报截止前按下“提交”键。 “明年一定提前准备。” ——然后明年,剧本重演。 这不是能力问题,这是工具问题。 2026年,我们在一家年研发投入3000万元的装备制造企业,用3周时间,基于简道云搭建了一套“高企年报自动化管理系统”。 从此,他们每年填报年报的时间从3人·天压缩到1人·小时。 稽查人员突击进场时,2小时内提供全套备查资料,零补正、零调减。 今天,我把这套系统的架

By Ne0inhk
小鹏VLA 2.0的“神秘涌现”:从痛苦到突破,自动驾驶与机器人如何突然“开窍”?

小鹏VLA 2.0的“神秘涌现”:从痛苦到突破,自动驾驶与机器人如何突然“开窍”?

大家好,我是数据与算法架构提升之路,专注于AI、自动驾驶和机器人领域的最新动态。今天,我们来聊聊小鹏汽车在2025科技日上爆出的重磅消息:VLA 2.0和人形机器人IRON的“涌现”过程。这不仅仅是技术迭代,更是像科幻小说一样的突然“觉醒”。如果你对自动驾驶的未来感兴趣,这篇文章绝对值得一读!我们将基于小鹏自动驾驶负责人刘先明和机器人副总裁米良川的独家对话,揭秘背后的故事。 * 刘先明 | 小鹏汽车自动驾驶负责人 他于2016年博士毕业于伊利诺伊大学厄巴纳-香槟分校(UIUC),曾在Facebook(现Meta)、Cruise任职,从事机器学习与计算机视觉领域的前沿研究工作。现全面负责小鹏汽车自动驾驶中心业务和组织管理工作。 * 米良川 | 小鹏汽车机器人副总裁及AI技术委员会负责人 他是机器人与AI领域的资深专家。曾在NVIDIA任职十余年,有深厚的GPU并行计算、移动计算、深度学习及自动驾驶技术功底;并曾于CMU机器人研究所深造,且拥有创办机器人公司的实践经验。 涌现的奇迹:从失败边缘到全新大陆 想象一下:一个项目经历了数月的失败,团队内部甚至多次讨论是否要停掉它

By Ne0inhk