本文介绍如何使用 NetworkX 访问 Nebula Graph 数据库并通过 Gephi 可视化分析《黑神话悟空》中的人物关系图谱,因为当前黑神话分为多个周目 且本人只打到了一周目的大圣残骸 ,所以此文章只分析一周目的部分信息 ,这里提供一个逐步操作指南,包括具体的代码示例和操作步骤。供大家参考:
1. 环境准备
1.1 安装必要的软件和库
- Python: 请确保已经安装 Python 3.x。
- Nebula Graph: 下载并安装 Nebula Graph。使用 Docker Compose 进行部署是推荐的方式。
- Gephi: 下载并安装 Gephi,这是一款用于网络图数据可视化的工具。
安装 Python 库:
pip install networkx nebula2
1.2 启动 Nebula Graph
使用 Docker Compose 启动 Nebula Graph:
docker-compose up -d
确保 Nebula Graph 服务已成功启动,可以通过 docker-compose ps
查看服务状态。
2. 数据准备
假设你已经将《黑神话悟空》中的人物关系数据导入了 Nebula Graph。以下是一个简单的导入示例,假设我们有以下人物及其关系:
- 天命人
- 广智
- 虎先锋
- 猪八戒
- 亢金龙
- 黑熊精
- 红孩儿
这个算了 太乱了 不符合常规原著
举例基本的:
- 孙悟空
- 唐僧
- 猪八戒
- 沙僧
人物关系:
- 孙悟空 是 徒弟 唐僧
- 唐僧 是 师父 孙悟空
- 猪八戒 是 师兄 孙悟空
- 沙僧 是 师兄 猪八戒
2.1 导入数据
CREATE SPACE monkey_king_story (partition_num=10, replica_factor=1, vid_type=FIXED_STRING(30));
USE monkey_king_story;
CREATE TAG person(name string);
CREATE EDGE relation(type string);
INSERT VERTEX person(name) VALUES "wukong":("孙悟空");
INSERT VERTEX person(name) VALUES "tangseng":("唐僧");
INSERT VERTEX person(name) VALUES "bajie":("猪八戒");
INSERT VERTEX person(name) VALUES "shaseng":("沙僧");
INSERT EDGE relation(type) VALUES "wukong"->"tangseng":("师兄");
INSERT EDGE relation(type) VALUES "tangseng"->"wukong":("师父");
INSERT EDGE relation(type) VALUES "bajie"->"wukong":("师兄");
INSERT EDGE relation(type) VALUES "shaseng"->"bajie":("师兄");
3. 通过 Python 访问 Nebula Graph
3.1 连接到 Nebula Graph
from nebula2.gclient.net import ConnectionPool
from nebula2.Config import Config
from nebula2.gclient.graph import GraphClient
# 配置 Nebula Graph 连接
config = Config()
config.max_connection_pool_size = 10
# 创建连接池
connection_pool = ConnectionPool()
connection_pool.init([("127.0.0.1", 9669)], config)
# 创建图客户端
client = GraphClient(connection_pool)
# 选择图空间
session = client.session("root", "nebula")
session.execute("USE monkey_king_story")
3.2 查询数据
query = """
MATCH (p:person)-[r:relation]->(p2:person)
RETURN p.name AS source, p2.name AS target, r.type AS relationship
"""
result = session.execute(query)
edges = []
for row in result:
edges.append((row['source'], row['target'], row['relationship']))
4. 使用 NetworkX 处理数据
4.1 构建 NetworkX 图
import networkx as nx
G = nx.DiGraph()
# 添加边
for source, target, relationship in edges:
G.add_edge(source, target, relationship=relationship)
4.2 导出为 Gephi 格式
nx.write_graphml(G, "monkey_king_story.graphml")
5. 使用 Gephi 进行可视化
5.1 导入图数据
- 打开 Gephi 软件。
- 选择“文件” → “打开”,导入你生成的
monkey_king_story.graphml
文件。 - 在“数据实验室”中查看导入的节点和边数据。
5.2 布局设置
- 在左侧工具栏中,选择“布局”。
- 可以选择不同的布局算法,如 ForceAtlas2,以便更清晰地展示人物关系图谱。
5.3 可视化调整
- 使用“排名”工具对节点或边进行颜色编码,基于某些属性(如节点度数)。
- 通过“过滤器”工具筛选出特定关系或人物。
5.4 保存与导出
- 在完成分析后,你可以选择“预览”选项来进一步美化你的图谱。
- 最后,导出图谱为 PDF 或 SVG 格式,用于报告或演示。