用途
NetworkX 是一个用于创建、操作和分析复杂网络与图的 Python 包。本技能适用于处理网络或图数据结构的任务,包括社交网络、生物网络、交通系统、引文网络、知识图谱,或任何涉及实体间关系的系统。
本技能面向 NetworkX 3.x(当前稳定版为 3.6,要求 Python >= 3.11)。若干 3.0 之前的 API(nx.info、nx.write_gpickle、nx.read_shp)以及 3.4 时代的 nx.random_tree 已不存在,本技能中均使用当前的替代方案。
主要能力
1. 图的创建与操作
NetworkX 支持四种主要图类型:Graph(无向单边图)、DiGraph(有向图)、MultiGraph(允许节点间多条边的无向图)、MultiDiGraph(允许多条边的有向图)。可通过 nx.Graph() 创建空图,使用 add_node、add_nodes_from、add_edge、add_edges_from 添加节点和边,节点可为任意可哈希类型并支持属性。
2. 图算法
提供广泛的网络分析算法,包括:最短路径(nx.shortest_path、nx.shortest_path_length)、中心性度量(度中心性、介数中心性、PageRank)、社区检测(community.greedy_modularity_communities)、连通性(nx.is_connected、nx.connected_components)等。
3. 图生成器
可创建合成网络用于测试、模拟或建模,包括经典图(完全图、环图、Karate 俱乐部图、Petersen 图)、随机网络(Erdős-Rényi、Barabási-Albert 无标度网络、Watts-Strogatz 小世界网络)、结构化网络(网格图、随机树,注意 random_tree 在 NetworkX 3.4 中已移除,现使用 nx.random_labeled_tree)。
4. 图的读写
支持多种文件格式和数据源:边列表、GraphML(保留属性)、GML、JSON(node-link 格式,自 NetworkX 3.6 起边列表存储在 "edges" 键下,旧文件可能使用 "links")、Pandas DataFrame、NumPy 数组、SciPy 稀疏矩阵等。
5. 可视化
可使用 matplotlib 创建清晰的信息化网络可视化,支持基本绘制、按度着色、按中心性调整节点大小、边权重调整宽度,以及多种布局算法(spring、circular、kamada_kawai、spectral)。还可创建出版级图形,保存为 PNG 或 PDF 矢量格式。
使用方式
安装:可通过 uv pip install networkx 或 uv pip install networkx[default](含可选依赖)安装。
常见工作流模式:创建或加载图 → 检查结构(节点数、边数、密度、连通性)→ 分析(计算度量、查找路径、检测社区)→ 可视化 → 导出结果。
适用场景
- 从数据构建网络结构,添加带属性的节点和边
- 计算中心性度量、查找最短路径、检测社区、测量聚类
- 运行标准算法如 Dijkstra、PageRank、最小生成树、最大流
- 创建合成网络用于测试或模拟
- 从各种格式读写图数据
- 使用 matplotlib 或交互式库绘制和定制网络可视化
- 检查同构性、计算图度量、分析结构属性
限制与注意事项
- 浮点精度:图中包含浮点数时,所有结果因精度限制本质上是近似的,可能影响算法结果,尤其是在最小/最大计算中。
- 内存与性能:每次运行脚本时图数据必须加载到内存。对于大型网络,应使用适当的数据结构(大型稀疏图用稀疏矩阵)、考虑仅加载必要子图、使用高效文件格式(pickle、压缩格式)、对超大网络使用近似算法。NetworkX 3.x 支持通过
backend=关键字或nx.config.backend_priority使用加速后端(如 nx-cugraph GPU、nx-parallel 多核、graphblas-algorithms 稀疏线性代数),安装后端包后向支持的函数传递backend="cugraph"即可,无需修改算法代码。 - 节点和边类型:节点可为任意可哈希 Python 对象;移除节点时所有关联边自动移除。
- 随机种子:在随机图生成和力导向布局中应始终设置随机种子以保证可复现性。
智能体操作流程
- 检查环境:确认 Python 环境和库版本,检查数据形状、类型和缺失值。
- 确定输入:从数据或用户确认格式、标识符和参数,对任何会改变结果的值应询问而非猜测。
- 先运行小版本:在样本或单折上运行,检查运行时间和内存。
- 执行完整任务。
- 验证结果:使用留出数据、固定随机种子和适当指标,检查泄漏,报告不确定性。
- 报告:说明运行了什么(版本、命令、参数)、检查了什么、还有什么不确定。
完整性规则
- 绝不捏造结果、参数、标识符、引用或统计量。
- 绝不报告本次会话中未计算的指标。
- 将版本特定细节视为可能过时,对照已安装版本的官方文档确认。
- 在涉及花钱、消耗共享 GPU 或云配额、接触个人或患者数据、或不可撤销的操作前先询问。
参考资源
本技能包含参考文档:references/graph-basics.md(图基础)、references/algorithms.md(算法)、references/generators.md(生成器)、references/io.md(I/O)、references/visualization.md(可视化)。
官方文档:https://networkx.org/documentation/latest/ 教程:https://networkx.org/documentation/latest/tutorial.html 示例库:https://networkx.org/documentation/latest/auto_examples/index.html GitHub:https://github.com/networkx/networkx