知识 Wiki 总览 / 复杂网络
复杂网络:Python 与 NetworkX 入门
更新于 2026-11-07条目链接
下面使用无向、无权简单图演示基础分析。先在独立 Python 环境安装 NetworkX,并记录实际版本;示例不读取外部数据。
python -m pip install networkx
构图与指标
import networkx as nx
print("NetworkX:", nx.__version__)
G = nx.Graph()
G.add_edges_from([("A", "B"), ("B", "C"),
("C", "A"), ("C", "D")])
n, m = G.number_of_nodes(), G.number_of_edges()
print("N, M:", n, m)
print("度:", dict(G.degree()))
print("平均度:", 2 * m / n if n else None)
print("密度:", nx.density(G))
print("局部聚类:", nx.clustering(G))
print("介数:", nx.betweenness_centrality(G))
if n:
nodes = max(nx.connected_components(G), key=len)
H = G.subgraph(nodes)
print("最大连通分量占比:", len(H) / n)
print("分量内平均最短路:",
nx.average_shortest_path_length(H))
else:
print("空图:跳过路径统计")
应得到 N=4、M=4;A、B、C、D 的度分别为 2、2、3、1;平均度为 2,密度约为 0.667,最大连通分量包含全部节点,平均最短路径长度为 4/3。
加入社区发现
if G.number_of_edges():
groups = nx.community.louvain_communities(G, seed=42)
print([sorted(group) for group in groups])
四节点图只用于理解接口,没有足够规模支持有意义的社区解释。固定随机种子有助于同一环境复现;正式分析应进行多次运行和参数敏感性检查。
替换为自己的数据
可用 nx.read_edgelist() 读取边列表;有向数据应显式使用 DiGraph。仅导入边列表会遗漏孤立节点,应另行读取完整节点表。重复边在 Graph 中不会自动累加次数,计数权重需要在清洗阶段明确聚合。
加权最短路通常把权重解释为距离或成本;如果原始权重代表联系强度,应先定义合理的转换。大型网络的精确介数计算可能昂贵,可考虑采样近似并报告参数。
