一、准备 CSV 数据
先把《我是刑警》的人物关系数据集准备好。原文件如果不是 UTF-8,后面读入时很容易直接报错,所以这里先用记事本打开,再另存为 UTF-8。




二、先把 Neo4j 跑起来
创建一个新的 Neo4j 数据库,数据库名和密码按自己的习惯填就行。启动之后先看一下库里是不是空的,确认环境没有被别的数据污染。
match(n) return n;





用 Python 读取 CSV 中的人物关系数据,并通过 py2neo 将节点和关系写入 Neo4j。流程里先把原始 CSV 另存为 UTF-8,避免 pandas 读取时报 UnicodeDecodeError;然后创建并启动 Neo4j,确认数据库为空;接着在 Python 项目里安装 neo4j-python-driver、pandas、py2neo,读取数据后整理成三元组列表,先导入人物节点,再按人物、关系、关系人物的顺序创建关系。最后在 Neo4j 图数据库里检查图谱是否生成,整个过程的关键点其实就两个:编码要对,节点要先于关系写入。

先把《我是刑警》的人物关系数据集准备好。原文件如果不是 UTF-8,后面读入时很容易直接报错,所以这里先用记事本打开,再另存为 UTF-8。




创建一个新的 Neo4j 数据库,数据库名和密码按自己的习惯填就行。启动之后先看一下库里是不是空的,确认环境没有被别的数据污染。
match(n) return n;






项目本身没什么特别的,重点是把依赖先补齐。这里用到的是 neo4j-python-driver、pandas 和 py2neo。如果你已经装过,可以跳过。
打开 PyCharm 后,先检查解释器里有没有这些包;没有就直接在 Terminal 里装:
pip install neo4j-python-driver pandas py2neo






先做连接测试,密码换成你自己创建数据库时设置的那个。这里我更倾向于先确认连接成功,再去折腾读取和导入,不然排错会绕远路。

接着把 CSV 读入 DataFrame。路径需要改成你本地文件的地址,其它地方基本不用动。

读完以后先处理一下数据结构,把人物、关系、关系人物整理成一个三元组列表,后面建关系会省事很多。

# 初始化一个空列表来存储所有的元组
tuple_total = []
# 迭代 DataFrame 的每一行
for index, row in invoice_data.iterrows():
ties_total = [row['人物'], row['关系'], row['关系人物']]
# 将所有元组添加到结果列表中
tuple_total.extend([ties_total])
print(tuple_total)
先建节点,再建关系。节点部分比较直白,遍历人物列表,逐个创建 人物 标签的节点。
# 把节点导入 neo4j 中
def create_node(people):
for name in people:
node_1 = Node('人物', name=name)
graph.create(node_1)
create_node(people)





关系导入时,先根据人物名字把两个节点都查出来,再创建关系。这里用的是 NodeMatcher,思路不复杂,但前提是节点已经成功写进库里。
matcher = NodeMatcher(graph)
# 导入关系
for i in range(0, len(tuple_total)):
name_1 = matcher.match('人物', name=tuple_total[i][0]).first()
name_2 = matcher.match('人物', name=tuple_total[i][2]).first()
rel = tuple_total[i][1]
relationship = Relationship(name_1, rel, name_2)
graph.create(relationship)

导入完成后回到 Neo4j 看图谱,节点和关系都能正常显示就算通了。


导入时最常见的问题还是编码。比如这个错误:
UnicodeDecodeError: 'utf-8' codec can't decode byte 0xc8 in position 0: invalid continuation byte

原因很直接:CSV 不是 UTF-8 编码。回头把文件按 UTF-8 重新保存,再按前面的步骤读入就行。这个坑不大,但挺烦,尤其是你已经把 Neo4j 和 Python 都跑通了,最后卡在文件编码上。


微信公众号「极客日志V2」,在微信中扫描左侧二维码关注。展示文案:极客日志V2 zeeklog
查找任何按下的键的javascript键代码、代码、位置和修饰符。 在线工具,Keycode 信息在线工具,online
JavaScript 字符串转义/反转义;Java 风格 \uXXXX(Native2Ascii)编码与解码。 在线工具,Escape 与 Native 编解码在线工具,online
使用 Prettier 在浏览器内格式化 JavaScript 或 HTML 片段。 在线工具,JavaScript / HTML 格式化在线工具,online
Terser 压缩、变量名混淆,或 javascript-obfuscator 高强度混淆(体积会增大)。 在线工具,JavaScript 压缩与混淆在线工具,online
解析常见 curl 参数并生成 fetch、axios、PHP curl 或 Python requests 示例代码。 在线工具,curl 转代码在线工具,online
将字符串编码和解码为其 Base64 格式表示形式即可。 在线工具,Base64 字符串编码/解码在线工具,online