mcpField
N
networkx

networkx

github.com/crazymsn数据与数据库2335 次安装22 周前更新
代码仓库

关于 networkx

NetworkX 是面向关系数据开发者与分析人员的 Python 图分析技能,涵盖图构建、算法、文件读写和可视化,并提供常见网络分析流程指引。

主要功能

  1. 01创建和修改有向图与无向图
  2. 02计算路径、中心性和社区
  3. 03生成合成网络结构
  4. 04读写常见图数据格式
  5. 05使用布局和样式绘制图形

适用场景

  1. 01分析社交网络或生物网络
  2. 02查找路径和重要节点
  3. 03为模拟构建测试图
  4. 04绘制并导出图分析结果

安装

复制下面的命令,在终端中运行。

$npx skills add https://github.com/crazymsn/academic-skills --skill networkx

安装后在 Claude Code 中输入/networkx确认已加载。

包含的文件

除 SKILL.md 外,安装时一起下载的参考资料和脚本。

references/
algorithms.md
generators.md
graph-basics.md
io.md
visualization.md

详细介绍

NetworkX

概述

NetworkX 是一个用于创建、操作和分析复杂网络与图的 Python 包。当你处理网络或图数据结构时,包括社交网络、生物网络、交通系统、引文网络、知识图谱,或任何涉及实体之间关系的系统,都可以使用这项技能。

何时使用这项技能

当任务涉及以下内容时,调用这项技能:

  • 创建图:从数据构建网络结构,添加带属性的节点和边
  • 图分析:计算中心性度量、查找最短路径、检测社区、测量聚类
  • 图算法:运行标准算法,如 Dijkstra、PageRank、最小生成树、最大流
  • 网络生成:创建合成网络(随机、无标度、小世界模型)用于测试或仿真
  • 图 I/O:读取或写入各种格式(边列表、GraphML、JSON、CSV、邻接矩阵)
  • 可视化:使用 matplotlib 或交互式库绘制并自定义网络可视化
  • 网络比较:检查同构性、计算图指标、分析结构属性

核心能力

1. 图的创建与操作

NetworkX 支持四种主要的图类型:

  • Graph:具有单条边的无向图
  • DiGraph:具有单向连接的有向图
  • MultiGraph:允许节点之间存在多条边的无向图
  • MultiDiGraph:具有多条边的有向图

通过以下方式创建图:

import networkx as nx

# Create empty graph
G = nx.Graph()

# Add nodes (can be any hashable type)
G.add_node(1)
G.add_nodes_from([2, 3, 4])
G.add_node("protein_A", type='enzyme', weight=1.5)

# Add edges
G.add_edge(1, 2)
G.add_edges_from([(1, 3), (2, 4)])
G.add_edge(1, 4, weight=0.8, relation='interacts')

参考:关于创建、修改、检查和 manage 图结构的全面指导,包括处理属性和子图,请参阅 references/graph-basics.md。

2. 图算法

NetworkX 为网络分析提供了大量算法:

最短路径:

# Find shortest path
path = nx.shortest_path(G, source=1, target=5)
length = nx.shortest_path_length(G, source=1, target=5, weight='weight')

中心性度量:

# Degree centrality
degree_cent = nx.degree_centrality(G)

# Betweenness centrality
betweenness = nx.betweenness_centrality(G)

# PageRank
pagerank = nx.pagerank(G)

社区检测:

from networkx.algorithms import community

# Detect communities
communities = community.greedy_modularity_communities(G)

连通性:

# Check connectivity
is_connected = nx.is_connected(G)

# Find connected components
components = list(nx.connected_components(G))

参考:关于所有可用算法的详细文档,包括最短路径、中心性度量、聚类、社区检测、流、匹配、树算法和图遍历,请参阅 references/algorithms.md。

3. 图生成器

创建用于测试、仿真或建模的合成网络:

经典图:

# Complete graph
G = nx.complete_graph(n=10)

# Cycle graph
G = nx.cycle_graph(n=20)

# Known graphs
G = nx.karate_club_graph()
G = nx.petersen_graph()

随机网络:

# Erdős-Rényi random graph
G = nx.erdos_renyi_graph(n=100, p=0.1, seed=42)

# Barabási-Albert scale-free network
G = nx.barabasi_albert_graph(n=100, m=3, seed=42)

# Watts-Strogatz small-world network
G = nx.watts_strogatz_graph(n=100, k=6, p=0.1, seed=42)

结构化网络:

# Grid graph
G = nx.grid_2d_graph(m=5, n=7)

# Random tree
G = nx.random_tree(n=100, seed=42)

参考:关于所有图生成器的全面介绍,包括经典、随机、晶格、二分以及专用网络模型及其详细参数和用例,请参阅 references/generators.md。

4. 图的读取与写入

NetworkX 支持众多文件格式和数据源:

文件格式:

# Edge list
G = nx.read_edgelist('graph.edgelist')
nx.write_edgelist(G, 'graph.edgelist')

# GraphML (preserves attributes)
G = nx.read_graphml('graph.graphml')
nx.write_graphml(G, 'graph.graphml')

# GML
G = nx.read_gml('graph.gml')
nx.write_gml(G, 'graph.gml')

# JSON
data = nx.node_link_data(G)
G = nx.node_link_graph(data)

Pandas 集成:

import pandas as pd

# From DataFrame
df = pd.DataFrame({'source': [1, 2, 3], 'target': [2, 3, 4], 'weight': [0.5, 1.0, 0.75]})
G = nx.from_pandas_edgelist(df, 'source', 'target', edge_attr='weight')

# To DataFrame
df = nx.to_pandas_edgelist(G)

矩阵格式:

import numpy as np

# Adjacency matrix
A = nx.to_numpy_array(G)
G = nx.from_numpy_array(A)

# Sparse matrix
A = nx.to_scipy_sparse_array(G)
G = nx.from_scipy_sparse_array(A)

参考:关于所有 I/O 格式的完整文档,包括 CSV、SQL 数据库、Cytoscape、DOT,以及针对不同用例选择格式的指导,请参阅 references/io.md。

5. 可视化

创建清晰且信息丰富的网络可视化:

基本可视化:

import matplotlib.pyplot as plt

# Simple draw
nx.draw(G, with_labels=True)
plt.show()

# With layout
pos = nx.spring_layout(G, seed=42)
nx.draw(G, pos=pos, with_labels=True, node_color='lightblue', node_size=500)
plt.show()

自定义:

# Color by degree
node_colors = [G.degree(n) for n in G.nodes()]
nx.draw(G, node_color=node_colors, cmap=plt.cm.viridis)

# Size by centrality
centrality = nx.betweenness_centrality(G)
node_sizes = [3000 * centrality[n] for n in G.nodes()]
nx.draw(G, node_size=node_sizes)

# Edge weights
edge_widths = [3 * G[u][v].get('weight', 1) for u, v in G.edges()]
nx.draw(G, width=edge_widths)

布局算法:

# Spring layout (force-directed)
pos = nx.spring_layout(G, seed=42)

# Circular layout
pos = nx.circular_layout(G)

# Kamada-Kawai layout
pos = nx.kamada_kawai_layout(G)

# Spectral layout
pos = nx.spectral_layout(G)

出版级质量:

plt.figure(figsize=(12, 8))
pos = nx.spring_layout(G, seed=42)
nx.draw(G, pos=pos, node_color='lightblue', node_size=500,
        edge_color='gray', with_labels=True, font_size=10)
plt.title('Network Visualization', fontsize=16)
plt.axis('off')
plt.tight_layout()
plt.savefig('network.png', dpi=300, bbox_inches='tight')
plt.savefig('network.pdf', bbox_inches='tight')  # Vector format

参考:关于可视化技术的详尽文档,包括布局算法、自定义选项、使用 Plotly 和 PyVis 的交互式可视化、3D 网络以及出版级图形创建,请参阅 references/visualization.md。

使用 NetworkX

安装

确保已安装 NetworkX:

# Check if installed
import networkx as nx
print(nx.__version__)

# Install if needed (via bash)
# uv pip install networkx
# uv pip install networkx[default]  # With optional dependencies
常见工作流模式

大多数 NetworkX 任务遵循此模式:

  1. 创建或加载图:

    # From scratch
    G = nx.Graph()
    G.add_edges_from([(1, 2), (2, 3), (3, 4)])
    
    # Or load from file/data
    G = nx.read_edgelist('data.txt')
    
  2. 检查结构:

    print(f"Nodes: {G.number_of_nodes()}")
    print(f"Edges: {G.number_of_edges()}")
    print(f"Density: {nx.density(G)}")
    print(f"Connected: {nx.is_connected(G)}")
    
  3. 分析:

    # Compute metrics
    degree_cent = nx.degree_centrality(G)
    avg_clustering = nx.average_clustering(G)
    
    # Find paths
    path = nx.shortest_path(G, source=1, target=4)
    
    # Detect communities
    communities = community.greedy_modularity_communities(G)
    
  4. 可视化:

    pos = nx.spring_layout(G, seed=42)
    nx.draw(G, pos=pos, with_labels=True)
    plt.show()
    
  5. 导出结果:

    # Save graph
    nx.write_graphml(G, 'analyzed_network.graphml')
    
    # Save metrics
    df = pd.DataFrame({
        'node': list(degree_cent.keys()),
        'centrality': list(degree_cent.values())
    })
    df.to_csv('centrality_results.csv', index=False)
    
重要注意事项

浮点精度:当图中包含浮点数时,由于精度限制,所有结果本质上都是近似的。这可能影响算法结果,尤其是在最小值/最大值计算中。

内存与性能:每次运行脚本时,图数据都必须加载到内存中。对于大型网络:

  • 使用合适的数据结构(大型稀疏图使用稀疏矩阵)
  • 考虑只加载必要的子图
  • 使用高效的文件格式(Python 对象使用 pickle,压缩格式)
  • 对于非常大的网络,利用近似算法(例如,中心性计算中的 k 参数)

节点和边类型:

  • 节点可以是任何可哈希的 Python 对象(数字、字符串、元组、自定义对象)
  • 使用有意义的标识符以提高清晰度
  • 移除节点时,所有关联边都会自动移除

随机种子:在随机图生成和力导向布局中,始终设置随机种子以确保可复现性:

G = nx.erdos_renyi_graph(n=100, p=0.1, seed=42)
pos = nx.spring_layout(G, seed=42)

快速参考

基本操作
# Create
G = nx.Graph()
G.add_edge(1, 2)

# Query
G.number_of_nodes()
G.number_of_edges()
G.degree(1)
list(G.neighbors(1))

# Check
G.has_node(1)
G.has_edge(1, 2)
nx.is_connected(G)

# Modify
G.remove_node(1)
G.remove_edge(1, 2)
G.clear()
必备算法
# Paths
nx.shortest_path(G, source, target)
nx.all_pairs_shortest_path(G)

# Centrality
nx.degree_centrality(G)
nx.betweenness_centrality(G)
nx.closeness_centrality(G)
nx.pagerank(G)

# Clustering
nx.clustering(G)
nx.average_clustering(G)

# Components
nx.connected_components(G)
nx.strongly_connected_components(G)  # Directed

# Community
community.greedy_modularity_communities(G)
文件 I/O 快速参考
# Read
nx.read_edgelist('file.txt')
nx.read_graphml('file.graphml')
nx.read_gml('file.gml')

# Write
nx.write_edgelist(G, 'file.txt')
nx.write_graphml(G, 'file.graphml')
nx.write_gml(G, 'file.gml')

# Pandas
nx.from_pandas_edgelist(df, 'source', 'target')
nx.to_pandas_edgelist(G)

资源

本技能包含全面的参考文档:

references/graph-basics.md

关于图类型、创建和修改图、添加节点和边、管理属性、检查结构以及处理子图的详细指南。

references/algorithms.md

全面涵盖 NetworkX 算法,包括最短路径、中心性度量、连通性、聚类、社区检测、流算法、树算法、匹配、着色、同构和图遍历。

references/generators.md

关于图生成器的全面文档,包括经典图、随机模型(Erdős-Rényi、Barabási-Albert、Watts-Strogatz)、格、树、社交网络模型以及专用生成器。

references/io.md

以各种格式读写图的完整指南:边列表、邻接列表、GraphML、GML、JSON、CSV、Pandas DataFrame、NumPy 数组、SciPy 稀疏矩阵、数据库集成以及格式选择指南。

references/visualization.md

关于可视化技术的详尽文档,包括布局算法、自定义节点和边外观、标签、使用 Plotly 和 PyVis 的交互式可视化、3D 网络、二分图布局以及创建出版级质量的图表。

其他资源

评论

支持 Markdown