一、Neo4j 图数据库
Neo4j 是一个高性能的、原生的图数据库。它不采用传统的行和列的表格结构,而是使用节点和关系的图结构来存储和管理数据。
1、Neo4j 安装 - Mac Brew 版
安装了 Homebrew 直接在终端输入以下命令即可安装。
安装后,Neo4j 浏览器可通过 http://localhost:7474 访问。
登录 Neo4j
- 在登录页面填写信息:Connect URL:输入
neo4j://localhost:7687。 - Authentication type:保持为 "Username / Password"。
- Username:输入
neo4j。 - Password:首次连接时输入默认密码
neo4j。 - 点击蓝色的 Connect 按钮。
首次连接成功后,系统会强制要求修改默认密码。设置一个新的安全密码。
测试连接
连接成功后,在顶部的命令行中输入 Cypher 查询语句,例如:
RETURN "Hello World";
2、Neo4j 快速入门
- 点击左边栏的星星图标,在 Example Graphs 中选择 Movie Graph,点击运行,查看电影图谱教程。
- 创建图谱:点击灰色代码框,创建图谱的代码会自动复制到代码框,点击运行即可看到创建的电影图谱。
- 查找:支持按演员名、电影标题、时间范围等条件查询。
3、Neo4j 基本操作
以【麦当劳】为背景,用 Neo4j 的 Cypher 查询语言演示基本增删改查操作。
建立简单的图谱,包含两种节点和一种关系:
- 节点类型 1:
餐厅- 属性:
名称,地址,开业年份
- 属性:
- 节点类型 2:
产品- 属性:
名称,价格,类别
- 属性:
- 关系类型:
供应- 属性:
自何时起供应
- 属性:
(1)增操作
创建节点
CREATE (r:餐厅 {名称:'麦当劳', 地址:'某街道', 开业年份:1955}) RETURN r;
创建关系
MATCH (r:餐厅 {名称:'麦当劳'}), (p:产品 {名称:'汉堡'})
CREATE (r)-[:供应 {自何时起供应:'1955'}]->(p);
(2)查操作
查找所有餐厅
MATCH (r:餐厅) RETURN r;
查找特定餐厅供应的所有产品
MATCH (r:餐厅 {名称:'麦当劳'})-[s:供应]->(p:产品) RETURN p;
多跳查询
MATCH (r1:餐厅)-[:供应]->(p:产品)<-[:供应]-(r2:餐厅)
WHERE r1 <> r2 RETURN r1, r2;
(3)改操作
更新节点属性
MATCH (r:餐厅 {名称:'麦当劳'}) SET r.地址 = '新地址' RETURN r;
新增节点属性
MATCH (r:餐厅 {名称:'麦当劳'}) SET r.评分 = 5.0 RETURN r;
更新关系属性
MATCH ()-[s:供应]->() SET s.自何时起供应 = '2023' RETURN s;
(4)删操作
删除关系
MATCH ()-[s:供应]->() DELETE s;
删除节点(必须先删除其所有关系)
MATCH (n:餐厅) DETACH DELETE n;
删除所有节点
MATCH (n) DETACH DELETE n;
Neo4j 的核心优势在于通过 MATCH 子句描述关联模式,这使得查询复杂的关系网络变得简单和高效。
4、安装 py2neo
py2neo 是 Python 连接和操作 Neo4j 图数据库的主要工具库。
pip install py2neo
二、数据预处理
数据预处理包括数据清洗、实体识别等步骤,目的是将原始数据转换为适合构建知识图谱的格式。
1、数据清洗
- 补全缺失值:对于明显缺失的信息,可以标记为【缺失】或根据上下文推断。
- 格式标准化:将日期统一为【YYYY-MM-DD】格式。
- 去除重复值:删除重复的条目。
2、知识建模
从业务角度理解数据,设计出合理的图谱结构。
(1)识别实体
实体是知识图谱中的【节点】。主要实体类型包括:
- 订单记录:核心实体,每一笔订单就是一个销售事件。
- 产品:订单中的商品。
- 配方标准:制作产品的依据和标准。
- 客户反馈:客户对订单或产品的评价与建议。
- 促销活动:与订单关联的营销方案。
- 门店:订单发生的背景。
(2)识别实体属性
属性是描述实体的键值对。例如订单记录的属性包括下单时间、订单金额、支付方式等;产品的属性包括产品名称、规格、单价等。
(3)识别关系
关系是连接实体的边。例如:
- 门店 -- 提供 --> 产品
- 订单记录 -- 产生于 --> 门店
- 订单记录 -- 包含 --> 产品
- 产品 -- 依据 --> 配方标准
三、搭建知识图谱
使用 py2neo 连接数据库并执行写入操作。
from py2neo import Graph
# 连接 Neo4j
graph = Graph("bolt://localhost:7687", auth=("neo4j", "your_password"))
# 执行 Cypher 语句
result = graph.run("MATCH (n) RETURN n LIMIT 10")
print(result.data())
请根据实际数据集修改上述代码逻辑。


