生物医学网络科学Biomedical Network Science
Example02 / 13

删除枢纽与随机删除对巨连通分支的影响

所属专题
生物分子网络与拓扑特征
下载
Notebook · .py

分别按度从高到低、以及随机顺序删除 0–20% 的节点,记录最大连通分支占原网络节点数的比例。 输出解读:随机删除时巨分支缓慢缩小;优先删除枢纽时巨分支迅速崩塌。 这种“网络碎裂”是中心性–致死性规则最初的解释之一,但它并不能单独证明枢纽必需性的机制 (竞争解释还有必需相互作用、必需复合物与研究偏倚)。

Output输出图

删除枢纽与随机删除对巨连通分支的影响:输出图 1

Output文字输出

hubs first [1.0, 0.95, 0.89, 0.82, 0.72, 0.61, 0.36, 0.13, 0.07, 0.03, 0.02]
random [1.0, 0.98, 0.96, 0.94, 0.92, 0.9, 0.88, 0.85, 0.83, 0.81, 0.79]

Code代码

# 分别按度从高到低、以及随机顺序删除 0–20% 的节点,记录最大连通分支占原网络节点数的比例。
# 输出解读:随机删除时巨分支缓慢缩小;优先删除枢纽时巨分支迅速崩塌。
# 这种“网络碎裂”是中心性–致死性规则最初的解释之一,但它并不能单独证明枢纽必需性的机制
# (竞争解释还有必需相互作用、必需复合物与研究偏倚)。
import numpy as np
import networkx as nx
import matplotlib.pyplot as plt

G = nx.barabasi_albert_graph(1500, 2, seed=1)   # 模拟数据,仅用于演示方法
N = G.number_of_nodes()
fracs = np.linspace(0, 0.2, 11)

def giant_fraction_after_removal(G, order, f):
    """删除 order 中前 int(f*N) 个节点,返回最大连通分支节点数 / 原网络节点数。"""
    N = G.number_of_nodes()
    H = G.copy()
    H.remove_nodes_from(order[:int(f * N)])
    if H.number_of_nodes() == 0:
        return 0.0
    return len(max(nx.connected_components(H), key=len)) / N

rng = np.random.default_rng(0)
order_hub = [n for n, _ in sorted(G.degree(), key=lambda x: -x[1])]
order_rand = list(rng.permutation(list(G.nodes())))
res = {"hubs first": [giant_fraction_after_removal(G, order_hub, f) for f in fracs],
       "random": [giant_fraction_after_removal(G, order_rand, f) for f in fracs]}
for k, v in res.items():
    print(k, [round(x, 2) for x in v])
plt.plot(fracs, res["random"], "o-", label="random")
plt.plot(fracs, res["hubs first"], "s-", label="hubs first")
plt.xlabel("fraction removed"); plt.ylabel("giant component fraction"); plt.legend()
plt.show()

Run在浏览器中运行

首次加载 Python 环境约需 20–40 秒;可以修改参数后重新运行。

删除枢纽与随机删除对巨连通分支的影响