Example01 / 09
读入边表、按置信度过滤并取最大连通分支
从一段文本边表读入带 score 的网络,只保留 score >= 0.7 的边、去掉自环,再取最大连通分支。 输出:每一步之后的节点数与边数,以及取最大连通分支时丢弃的节点数。 解读:阈值和连通分支的取舍会直接改变后续所有指标,报告中应写明丢弃了多少节点。
Output输出图

Output文字输出
原始网络:10 个节点,12 条边 过滤后(score >= 0.7,去自环):10 个节点,9 条边 最大连通分支:5 个节点,5 条边(丢弃 5 个节点:['GENE_F', 'GENE_G', 'GENE_H', 'GENE_I', 'GENE_J'])
Code代码
# 从一段文本边表读入带 score 的网络,只保留 score >= 0.7 的边、去掉自环,再取最大连通分支。
# 输出:每一步之后的节点数与边数,以及取最大连通分支时丢弃的节点数。
# 解读:阈值和连通分支的取舍会直接改变后续所有指标,报告中应写明丢弃了多少节点。
import io
import networkx as nx
edge_text = """GENE_A GENE_B 0.95
GENE_A GENE_C 0.91
GENE_B GENE_C 0.88
GENE_C GENE_D 0.75
GENE_D GENE_E 0.72
GENE_E GENE_F 0.40
GENE_F GENE_G 0.93
GENE_G GENE_H 0.81
GENE_H GENE_F 0.77
GENE_D GENE_D 0.99
GENE_B GENE_E 0.55
GENE_I GENE_J 0.90"""
G_raw = nx.read_edgelist(io.StringIO(edge_text), data=(("score", float),))
print("原始网络:%d 个节点,%d 条边" % (G_raw.number_of_nodes(), G_raw.number_of_edges()))
G_filt = nx.Graph()
G_filt.add_edges_from((u, v, d) for u, v, d in G_raw.edges(data=True)
if d["score"] >= 0.7 and u != v)
print("过滤后(score >= 0.7,去自环):%d 个节点,%d 条边" % (G_filt.number_of_nodes(), G_filt.number_of_edges()))
G_lcc = G_filt.subgraph(max(nx.connected_components(G_filt), key=len)).copy()
print("最大连通分支:%d 个节点,%d 条边(丢弃 %d 个节点:%s)" % (
G_lcc.number_of_nodes(), G_lcc.number_of_edges(),
G_filt.number_of_nodes() - G_lcc.number_of_nodes(),
sorted(set(G_filt) - set(G_lcc))))
# 作图:原始网络中被保留的边(实线,宽度 ∝ score)与被过滤的边(虚线);最大连通分支节点着色
import matplotlib.pyplot as plt
fig, ax = plt.subplots(figsize=(6.4, 4.2))
G_draw = G_raw.copy(); G_draw.remove_edges_from(nx.selfloop_edges(G_draw))
pos = nx.spring_layout(G_draw, seed=4)
kept = [e for e in G_draw.edges() if G_filt.has_edge(*e)]
dropped = [e for e in G_draw.edges() if not G_filt.has_edge(*e)]
nx.draw_networkx_edges(G_draw, pos, edgelist=kept, ax=ax, width=[3 * G_raw.edges[e]["score"] for e in kept], edge_color="0.4")
nx.draw_networkx_edges(G_draw, pos, edgelist=dropped, ax=ax, style="dashed", edge_color="C3", alpha=0.6)
nx.draw_networkx_nodes(G_draw, pos, ax=ax, node_size=120,
node_color=["C0" if v in G_lcc else "0.8" for v in G_draw])
nx.draw_networkx_labels(G_draw, pos, ax=ax, labels={v: v.replace("GENE_", "") for v in G_draw}, font_size=8)
ax.set_title("Dashed red: score < 0.7 removed; blue nodes: largest component", fontsize=10); ax.axis("off")
plt.tight_layout(); plt.show()Run在浏览器中运行
首次加载 Python 环境约需 20–40 秒;可以修改参数后重新运行。