You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

无向图中心性分析异常:辛普森数据集NetworkX问题排查

问题根源与解决方法

核心问题

你现在的度数异常完全是因为错误的表合并和NaN处理方式导致的:

  • 用outer join合并节点表和边表后,所有没有对应边的节点都会生成一行Source=节点ID, Target=NaN, Weight=NaN的记录
  • 你用fillna(0)把这些NaN改成0,相当于给每个孤立节点都创建了一条连向不存在的0节点的边
  • 手动把节点1的Source设为1后,又多了一条1-0的边,加上其他节点连向0的边,节点1的度数里包含了大量和0的无效连接,完全偏离了真实的社交网络结构

修正后的代码

根本不需要合并节点表和边表来创建图,NetworkX只需要边表就能构建网络,节点表用来补充节点属性即可:

import pandas as pd
import networkx as nx

# 1. 读取边表,直接构建无向图
dfE = pd.read_csv('gdrive/My Drive/SNA/simpsonsEdges.csv')
graph = nx.from_pandas_edgelist(dfE, 'Source', 'Target', edge_attr='Weight', create_using=nx.Graph())

# 2. 读取节点表,添加节点名称属性
dfN = pd.read_csv('gdrive/My Drive/SNA/simpsonsNodes.csv')
node_attrs = dfN.set_index('Id')['Name'].to_dict()
nx.set_node_attributes(graph, node_attrs, 'Name')

# 验证无向图属性
print(graph.is_directed())

额外说明

  • 如果你想保留所有节点(包括没有任何边的孤立角色),可以用节点表手动添加:
    # 添加所有节点到图中
    graph.add_nodes_from(dfN['Id'].tolist())
    # 再设置节点属性
    nx.set_node_attributes(graph, node_attrs, 'Name')
    
  • 现在重新计算度数中心性和接近中心性,结果就会符合《辛普森一家》的角色核心度预期——比如Homer、Marge这些核心角色的中心性会远高于其他角色。

内容的提问来源于stack exchange,提问作者Fio

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.19 22:35:15