《黑神话悟空》一周目可视化人物图谱关系

本文介绍如何使用 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 导入图数据

  1. 打开 Gephi 软件。
  2. 选择“文件” → “打开”,导入你生成的 monkey_king_story.graphml 文件。
  3. 在“数据实验室”中查看导入的节点和边数据。

5.2 布局设置

  1. 在左侧工具栏中,选择“布局”。
  2. 可以选择不同的布局算法,如 ForceAtlas2,以便更清晰地展示人物关系图谱。

5.3 可视化调整

  1. 使用“排名”工具对节点或边进行颜色编码,基于某些属性(如节点度数)。
  2. 通过“过滤器”工具筛选出特定关系或人物。

5.4 保存与导出

  1. 在完成分析后,你可以选择“预览”选项来进一步美化你的图谱。
  2. 最后,导出图谱为 PDF 或 SVG 格式,用于报告或演示。

1 个赞

有可视化效果图看看嘛~

征文要求有一条是图文并茂哦bro~ :persevere:

wukong 是 tangseng 的徒弟吧 :rofl:

1 个赞

@yuchen 小伙伴可以再来调整下嘛~

此话题已在最后回复的 7 天后被自动关闭。不再允许新回复。