mcpField
N
networkx

networkx

github.com/ovachiever数据与数据库5648 次安装48 周前更新
代码仓库

关于 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/ovachiever/droid-tings --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