Gephi 可视化 NetworkX 网络分析——《釜山行》人物关系三标签:Gephi|NetworkX|Python3|matplotlib|网络可视化|人物关系实验环境: 华为云 FlexusX / Ubuntu 24.04 / Python 3.12.3分析节点: node-03公网 124.70.105.142可视化节点: node-04公网 120.46.44.1941. 本文目标在node-03用 NetworkX 构建无向图计算常见网络指标导出.gexf/.graphml格式供 Gephi 导入在node-04用 matplotlib 生成静态可视化图演示 Gephi 安装和导入流程对结果进行解读。2. NetworkX 网络分析node-032.1 代码busan_network.py#!/usr/bin/env python3importnetworkxasnximportjson# 读取节点和边nodes[]withopen(/root/nodes.csv,r,encodingutf-8)asf:forlineinf.readlines()[1:]:partsline.strip().split(,)nodes.append({id:parts[0],label:parts[1],weight:int(parts[2])})edges[]withopen(/root/edges.csv,r,encodingutf-8)asf:forlineinf.readlines()[1:]:partsline.strip().split(,)edges.append({source:parts[0],target:parts[1],weight:int(parts[2])})# 构建无向图Gnx.Graph()fornodeinnodes:G.add_node(node[id],labelnode[label],weightnode[weight])foredgeinedges:G.add_edge(edge[source],edge[target],weightedge[weight])# 计算指标degree_centralitynx.degree_centrality(G)betweenness_centralitynx.betweenness_centrality(G)closeness_centralitynx.closeness_centrality(G)eigenvector_centralitynx.eigenvector_centrality(G,max_iter1000)clusteringnx.clustering(G)densitynx.density(G)avg_pathnx.average_shortest_path_length(G)# 指标写入节点属性fornodeinG.nodes():G.nodes[node][degree_centrality]round(degree_centrality[node],4)G.nodes[node][betweenness_centrality]round(betweenness_centrality[node],4)G.nodes[node][closeness_centrality]round(closeness_centrality[node],4)G.nodes[node][eigenvector_centrality]round(eigenvector_centrality[node],4)G.nodes[node][clustering]round(clustering[node],4)# 导出 Gephi 格式nx.write_gexf(G,/root/busan_network.gexf)nx.write_graphml(G,/root/busan_network.graphml)stats{nodes:len(nodes),edges:len(edges),density:round(density,4),avg_path_length:round(avg_path,4),degree_centrality:{k:round(v,4)fork,vindegree_centrality.items()},betweenness_centrality:{k:round(v,4)fork,vinbetweenness_centrality.items()},closeness_centrality:{k:round(v,4)fork,vincloseness_centrality.items()},eigenvector_centrality:{k:round(v,4)fork,vineigenvector_centrality.items()},}withopen(/root/network_stats.json,w,encodingutf-8)asf:json.dump(stats,f,ensure_asciiFalse,indent2)2.2 真实服务器输出rootecs-11e6-0003:~# cd /root python3 busan_network.py 步骤1: 读取节点和边数据 节点数: 11 边数: 55 步骤2: 构建NetworkX无向图 图节点数: 11 图边数: 55 步骤3: 计算网络拓扑指标 --- 度中心性 (Degree Centrality) --- 石宇: 1.0000 秀安: 1.0000 尚华: 1.0000 盛京: 1.0000 珍熙: 1.0000 英国: 1.0000 容国: 1.0000 老姐姐: 1.0000 老妹妹: 1.0000 乞丐: 1.0000 列车长: 1.0000 --- 介数中心性 (Betweenness Centrality) --- 石宇: 0.0000 ... 列车长: 0.0000 --- 接近中心性 (Closeness Centrality) --- 石宇: 1.0000 ... 列车长: 1.0000 --- 特征向量中心性 (Eigenvector Centrality) --- 石宇: 0.3015 ... 列车长: 0.3015 --- 聚类系数 (Clustering Coefficient) --- 石宇: 1.0000 ... 列车长: 1.0000 网络密度 (Density): 1.0000 平均最短路径长度: 1.00002.3 指标解释指标含义本实验结果说明度中心性节点直接连接数占总节点数的比例1.0完全图每人都与其他 10 人相连介数中心性最短路径中经过该节点的比例0.0任意两点都直接相连无“桥梁”接近中心性到达其他节点的平均距离倒数1.0距离全为 1最紧密特征向量中心性连接的邻居重要程度的综合0.3015完全图所有节点相同聚类系数邻居之间两两相连的比例1.0邻居子图也是完全图网络密度实际边数 / 最大可能边数1.0完全图密度平均最短路径任意两节点最短距离平均1.0一步可达可见当文本较短、所有人物都相互共现时NetworkX 的拓扑指标会全部拉满。因此真正有用的信息是边权重共现次数而非二值网络的拓扑结构。下面的可视化将突出边权重。3. matplotlib 静态可视化node-043.1 全图可视化busan_visualize.py读取busan_network.gexf使用 Spring 布局渲染得到节点大小 出现频次节点颜色 出现频次边宽度 共现次数白色标签为边权重。3.2 人物频次图3.3 中心性指标对比图从图中可见度中心性、接近中心性、聚类系数均为 1介数中心性均为 0再一次验证“完全图”结论。3.4 过滤核心网络权重 7为了突出核心关系新增busan_visualize_filtered.py只保留共现次数 ≥ 7 的边THRESHOLD7Gnx.Graph()fornode,attrinG_full.nodes(dataTrue):G.add_node(node,**attr)foru,v,attrinG_full.edges(dataTrue):ifattr.get(weight,0)THRESHOLD:G.add_edge(u,v,weightattr[weight])输出结果过滤阈值: 7 节点数: 11, 边数: 24过滤后核心人物被聚成紧密社群而老姐姐、老妹妹、列车长因共现次数低于阈值而孤立直观说明她们在叙事中相对边缘。3.5 核心关系表Top 核心关系集中在石宇 ↔ 秀安父女12石宇 ↔ 盛京共同保护秀安11秀安 ↔ 盛京被共同保护11石宇 ↔ 尚华并肩作战9尚华 ↔ 盛京夫妻9珍熙 ↔ 容国恋人9这与电影剧情高度吻合。4. Gephi 安装与导入流程4.1 安装 OpenJDK 17Gephi 是 Java 桌面程序需要 JDK 17apt-getupdate-qqapt-getinstall-yopenjdk-17-jdk4.2 下载 Gephiwgethttps://github.com/gephi/gephi/releases/download/v0.10.1/gephi-0.10.1-linux-x64.tar.gzsudotarxzf gephi-0.10.1-linux-x64.tar.gz-C/opt如果 GitHub 下载慢可以先把安装包本地下载再 SCP 到服务器。4.3 导入 GEXF打开 Gephi →数据实验室→导入电子表格选择nodes.csv导入为节点表选择edges.csv导入为边表或直接文件 → 打开选择busan_network.gexf。4.4 推荐布局与样式设置设置项推荐值效果布局算法Force Atlas 2 / Fruchterman-Reingold自动展开节点节点大小Weight出现频次突出主角节点颜色Modularity社团检测区分人物社群边粗细Weight共现次数关系越强越粗标签显示 Label人物名称5. 踩坑总结问题原因解决pip3 install失败Ubuntu 24.04 PEP 668加--break-system-packages多 pip 进程死锁批量安装并发单节点nohup后台安装安装完验证导入中文乱码无中文字体apt-get install fonts-noto-cjk介数中心性除零完全图所有值为 0改以节点频次作为颜色映射SSH banner 读取失败连接过于频繁加banner_timeout60并间隔重试6. 三篇完整输出文件文件说明busan_text.txt电影文本busan_dict.txt自定义人名词典busan_segment.py分词与共现提取busan_network.pyNetworkX 分析busan_visualize.pymatplotlib 全图可视化busan_visualize_filtered.py核心网络可视化nodes.csvGephi 节点表edges.csvGephi 边表busan_network.gexfGephi 导入文件network_stats.json网络指标统计7. 总结本项目通过 4 台服务器完整演示了共现网络的理论和构建方法jieba分词与自定义词典NetworkX网络指标计算GEXF导出与Gephi导入流程matplotlib静态可视化与权重过滤技巧。从《釜山行》人物关系中提取到的核心社群与电影剧情一致验证了共现网络方法在文本人物关系挖掘上的有效性。8. 参考jiebahttps://github.com/fxsjy/jiebaNetworkXhttps://networkx.org/documentation/stable/Gephihttps://gephi.org/matplotlibhttps://matplotlib.org/