生物医学网络科学Biomedical Network Science
网络分析流程与 NetworkX 实践02 / 16

工具选择

阅读
约 3 分钟

网络分析的软件大致分两类:编程库(NetworkX、igraph、graph-tool、NetworKit、BCT)适合可复算的计算与统计;交互式桌面软件(Cytoscape、Gephi)适合探索、注释与作图。实际研究通常两类并用:在脚本中完成构建、计算与统计,再把带属性的网络导出到桌面软件作图。

工具 形式与核心实现 规模与速度(定性) 算法与功能侧重 许可
NetworkX Python 库,纯 Python,图存为“字典的字典” 适合 10410^4–10510^5 节点的交互分析与方法原型;全局算法在更大网络上很慢 覆盖面最广:经典图算法、生成模型、读写格式、与 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 移植;以邻接矩阵为输入 面向脑网络规模(数十到数千个节点) 加权、有向、带符号网络的脑网络指标:参与系数、模块内度 zz 分数、富人俱乐部、零模型 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 双许可

选择时可按以下顺序考虑:

  1. 规模:几千个节点以内,NetworkX 足够;数十万节点以上需要全局路径类计算时,改用 igraph、graph-tool 或 NetworKit,或者先过滤。
  2. 所需算法是否已实现、实现是否可信:例如 Leiden 算法在 igraph 中有成熟实现;基于随机块模型的社团推断以 graph-tool 最完整;脑网络中参与系数、带符号网络的模块度等指标以 BCT 的定义最常被引用。同一个指标在不同软件中的定义细节(归一化、对非连通图的处理、加权推广)可能不同,换软件时要核对文档。
  3. 数据形态:脑网络常以 N×NN\times N 连接矩阵存储,用 BCT 或 NumPy 直接处理矩阵更自然;PPI、调控网络常以边表存储,NetworkX、igraph、Cytoscape 更方便。
  4. 许可:GPL 类许可对“在自己的软件中再分发”有要求,一般科研使用不受影响,但开发并发布软件包时需要留意。
  5. 可复现性:脚本化工具(库)优先于手工点击;桌面软件中的操作要记录步骤、参数与版本,必要时用 py4cytoscape 等自动化接口重放。

不同软件的“同名指标”未必相同。例如对非连通图,接近中心性有的软件只在节点所在分支内计算,有的做了修正(NetworkX 默认使用 Wasserman–Faust 修正);加权聚集系数至少有几种不同推广;介数是否归一化、是否计入端点也各不相同。报告中应写出软件名、版本与函数名;对比文献数值时先确认定义一致。