快速开始:建立图工程心智模型
本章目标
读完并动手完成后,你应能:
- 用 NetworkX 或 Neo4j 创建带标签与属性的小图。
- 写出两跳模式匹配查询,并解释与 SQL JOIN 的差异。
- 运行 BFS/最短路径与简单中心性,读懂结果含义。
- 判断一个业务问题是否「值 得上图」。
本篇聚焦知识与动手直觉,不涉及把 graph-engineering.chenxiaoshivivid.top 部署到生产环境。
0. 你需要什么环境
推荐两条并行路径(可任选其一先走通):
| 路径 | 适合 | 安装要点 |
|---|---|---|
| Python + NetworkX | 算法直觉、教学原型 | pip install networkx matplotlib |
| Neo4j + Cypher | 持久化图、工业查询语法 | Neo4j Desktop 或 Docker 社区版 |
可选增强:py2neo / 官方 Python Driver、rdflib(RDF 入门)、torch-geometric(稍后再装)。
# 最小 Python 环境示例(使用虚拟环境)
python3 -m venv .venv
source .venv/bin/activate
pip install networkx matplotlib pandas
1. 十分钟:用 NetworkX 看见第一张图
import networkx as nx
import matplotlib.pyplot as plt
G = nx.DiGraph()
G.add_node("Alice", label="Person", city="Shanghai")
G.add_node("Bob", label="Person", city="Beijing")
G.add_node("Acme", label="Company", industry="AI")
G.add_edge("Alice", "Acme", type="WORKS_AT", since=2022)
G.add_edge("Bob", "Acme", type="WORKS_AT", since=2021)
G.add_edge("Alice", "Bob", type="KNOWS", weight=0.8)
print("节点数", G.number_of_nodes(), "边数", G.number_of_edges())
print("Alice 出边", list(G.out_edges("Alice", data=True)))
print("到 Acme 的最短路径", nx.shortest_path(G, "Alice", "Acme"))
观察三点:
- 节点携带业务类型(Person/Company)与属性。
- 边有类型与属性(since、weight),关系是一等对象。
- 有向图决定「Alice→Bob」与「Bob→Alice」是否同一关系。
练习:把「关注」建成双向两条边,再建成一条无向边,分别打印邻居集合,体会建模差异。