网络分析流程与 NetworkX 实践02 / 16
工具选择
网络分析的软件大致分两类:编程库(NetworkX、igraph、graph-tool、NetworKit、BCT)适合可复算的计算与统计;交互式桌面软件(Cytoscape、Gephi)适合探索、注释与作图。实际研究通常两类并用:在脚本中完成构建、计算与统计,再把带属性的网络导出到桌面软件作图。
| 工具 | 形式与核心实现 | 规模与速度(定性) | 算法与功能侧重 | 许可 |
|---|---|---|---|---|
| NetworkX | Python 库,纯 Python,图存为“字典的字典” | 适合 – 节点的交互分析与方法原型;全局算法在更大网络上很慢 | 覆盖面最广:经典图算法、生成模型、读写格式、与 NumPy/SciPy/pandas 互转;可通过“后端”调用 GPU 或并行实现 | BSD-3-Clause |
| igraph | C 核心库,提供 R、Python(python-igraph)、Mathematica 接口 | 常见算法比纯 Python 实现快得多,百万级边可用 | 社团检测(Leiden、Infomap、walktrap 等)、布局、图同构;R 生态中最常用 | GPL-2.0 或更高 |
| graph-tool | Python 接口,C++ 模板实现,基于 Boost Graph Library,部分算法 OpenMP 并行 | 官方称速度与内存接近纯 C/C++ 库 | 随机块模型(SBM)的贝叶斯推断、网络重建、高质量绘图 | LGPL-3.0 |
| NetworKit | C++ 核心、Python 接口,多线程 | 面向大规模网络的并行算法 | 近似中心性、社团检测、大图生成 | MIT |
| BCT / bctpy | MATLAB 工具箱,bctpy 为 Python 移植;以邻接矩阵为输入 | 面向脑网络规模(数十到数千个节点) | 加权、有向、带符号网络的脑网络指标:参与系数、模块内度 分数、富人俱乐部、零模型 | bctpy 为 GPL-3.0;MATLAB 原版以下载包内说明为准 |
| Cytoscape | Java 桌面软件,App 扩展(stringApp、clusterMaker2 等);可用 py4cytoscape / RCy3 脚本控制 | 交互操作适合数千到数万节点 | 生物分子网络标准平台:数据库导入、属性映射样式、功能富集、聚类 | LGPL-2.1 |
| Gephi | Java 桌面软件,OpenGL 渲染 | 官方说明可视化可达百万元素级 | ForceAtlas2 等布局、模块度与中心性统计、动态网络、导出出版级图 | CDDL-1.0 与 GPL-3.0 双许可 |
选择时可按以下顺序考虑:
- 规模:几千个节点以内,NetworkX 足够;数十万节点以上需要全局路径类计算时,改用 igraph、graph-tool 或 NetworKit,或者先过滤。
- 所需算法是否已实现、实现是否可信:例如 Leiden 算法在 igraph 中有成熟实现;基于随机块模型的社团推断以 graph-tool 最完整;脑网络中参与系数、带符号网络的模块度等指标以 BCT 的定义最常被引用。同一个指标在不同软件中的定义细节(归一化、对非连通图的处理、加权推广)可能不同,换软件时要核对文档。
- 数据形态:脑网络常以 连接矩阵存储,用 BCT 或 NumPy 直接处理矩阵更自然;PPI、调控网络常以边表存储,NetworkX、igraph、Cytoscape 更方便。
- 许可:GPL 类许可对“在自己的软件中再分发”有要求,一般科研使用不受影响,但开发并发布软件包时需要留意。
- 可复现性:脚本化工具(库)优先于手工点击;桌面软件中的操作要记录步骤、参数与版本,必要时用 py4cytoscape 等自动化接口重放。
不同软件的“同名指标”未必相同。例如对非连通图,接近中心性有的软件只在节点所在分支内计算,有的做了修正(NetworkX 默认使用 Wasserman–Faust 修正);加权聚集系数至少有几种不同推广;介数是否归一化、是否计入端点也各不相同。报告中应写出软件名、版本与函数名;对比文献数值时先确认定义一致。