Agent Skills by ALSEL
Anthropic Claudeソフトウェア開発⭐ リポ 0品質スコア 50/100

networkx

Pythonで複雑なネットワークやグラフの作成・分析・可視化を行うための総合ツールキット。ネットワーク/グラフデータ構造の操作、エンティティ間の関係分析、最短経路・中心性・クラスタリングなどのグラフアルゴリズムの計算、コミュニティ検出、合成ネットワークの生成、ネットワークトポロジーの可視化が必要な場面で活用できる。ソーシャルネットワーク、生物学的ネットワーク、交通システム、引用ネットワークなど、ペアワイズな関係を扱うあらゆる領域に適用可能。

description の原文を見る

Comprehensive toolkit for creating, analyzing, and visualizing complex networks and graphs in Python. Use when working with network/graph data structures, analyzing relationships between entities, computing graph algorithms (shortest paths, centrality, clustering), detecting communities, generating synthetic networks, or visualizing network topologies. Applicable to social networks, biological networks, transportation systems, citation networks, and any domain involving pairwise relationships.

SKILL.md 本文

NetworkX

概要

NetworkXはPythonで複雑なネットワークとグラフを作成、操作、分析するためのパッケージです。社会ネットワーク、生物ネットワーク、輸送システム、引用ネットワーク、知識グラフ、またはエンティティ間の関係を含むあらゆるシステムなど、ネットワークまたはグラフデータ構造を扱う場合はこのスキルを使用します。

このスキルを使用する場合

以下のタスクが含まれる場合はこのスキルを実行してください:

  • グラフの作成: データからネットワーク構造を構築し、属性付きのノードとエッジを追加
  • グラフ分析: 中心性指標の計算、最短路の検索、コミュニティ検出、クラスタリングの測定
  • グラフアルゴリズム: Dijkstra法、PageRank、最小全域木、最大フローなどの標準アルゴリズムの実行
  • ネットワーク生成: テストやシミュレーション用の合成ネットワーク(ランダム、スケールフリー、スモールワールドモデル)の作成
  • グラフI/O: さまざまなフォーマット(エッジリスト、GraphML、JSON、CSV、隣接行列)での読み書き
  • 視覚化: matplotlibまたはインタラクティブライブラリを使用したネットワーク視覚化の描画とカスタマイズ
  • ネットワーク比較: 同型性チェック、グラフメトリクスの計算、構造的性質の分析

コア機能

1. グラフの作成と操作

NetworkXは4つの主要なグラフタイプをサポートしています:

  • Graph: 単一エッジを持つ無向グラフ
  • DiGraph: 一方向の接続を持つ有向グラフ
  • MultiGraph: ノード間で複数エッジを許可する無向グラフ
  • MultiDiGraph: 複数エッジを持つ有向グラフ

グラフは以下の方法で作成します:

import networkx as nx

# 空のグラフを作成
G = nx.Graph()

# ノードを追加(任意のハッシュ可能な型が使用可)
G.add_node(1)
G.add_nodes_from([2, 3, 4])
G.add_node("protein_A", type='enzyme', weight=1.5)

# エッジを追加
G.add_edge(1, 2)
G.add_edges_from([(1, 3), (2, 4)])
G.add_edge(1, 4, weight=0.8, relation='interacts')

リファレンス: 属性とサブグラフの操作を含む、グラフ構造の作成、修正、検査、管理に関する包括的なガイダンスについては references/graph-basics.md を参照してください。

2. グラフアルゴリズム

NetworkXはネットワーク分析用の広範なアルゴリズムを提供しています:

最短路:

# 最短路を検索
path = nx.shortest_path(G, source=1, target=5)
length = nx.shortest_path_length(G, source=1, target=5, weight='weight')

中心性指標:

# 次数中心性
degree_cent = nx.degree_centrality(G)

# 媒介中心性
betweenness = nx.betweenness_centrality(G)

# PageRank
pagerank = nx.pagerank(G)

コミュニティ検出:

from networkx.algorithms import community

# コミュニティを検出
communities = community.greedy_modularity_communities(G)

接続性:

# 接続性をチェック
is_connected = nx.is_connected(G)

# 接続成分を検索
components = list(nx.connected_components(G))

リファレンス: 最短路、中心性指標、クラスタリング、コミュニティ検出、フロー、マッチング、ツリーアルゴリズム、グラフトラバーサルを含むすべての利用可能なアルゴリズムの詳細なドキュメントについては references/algorithms.md を参照してください。

3. グラフジェネレーター

テスト、シミュレーション、またはモデリング用に合成ネットワークを作成します:

古典的なグラフ:

# 完全グラフ
G = nx.complete_graph(n=10)

# 閉路グラフ
G = nx.cycle_graph(n=20)

# 既知のグラフ
G = nx.karate_club_graph()
G = nx.petersen_graph()

ランダムネットワーク:

# Erdős-Rényiランダムグラフ
G = nx.erdos_renyi_graph(n=100, p=0.1, seed=42)

# Barabási-Albertスケールフリーネットワーク
G = nx.barabasi_albert_graph(n=100, m=3, seed=42)

# Watts-Strogatzスモールワールドネットワーク
G = nx.watts_strogatz_graph(n=100, k=6, p=0.1, seed=42)

構造化ネットワーク:

# グリッドグラフ
G = nx.grid_2d_graph(m=5, n=7)

# ランダムツリー
G = nx.random_tree(n=100, seed=42)

リファレンス: 古典的、ランダム、格子、二部、および特殊なネットワークモデルを含むすべてのグラフジェネレーターの包括的なカバレッジ、詳細なパラメーター、および使用例については references/generators.md を参照してください。

4. グラフの読み書き

NetworkXは多数のファイル形式とデータソースをサポートしています:

ファイル形式:

# エッジリスト
G = nx.read_edgelist('graph.edgelist')
nx.write_edgelist(G, 'graph.edgelist')

# GraphML(属性を保持)
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

# 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')

# DataFrameに変換
df = nx.to_pandas_edgelist(G)

行列形式:

import numpy as np

# 隣接行列
A = nx.to_numpy_array(G)
G = nx.from_numpy_array(A)

# スパース行列
A = nx.to_scipy_sparse_array(G)
G = nx.from_scipy_sparse_array(A)

リファレンス: CSV、SQLデータベース、Cytoscape、DOT、および異なるユースケース向けのフォーマット選択に関するガイダンスを含む、すべてのI/Oフォーマットの完全なドキュメントについては references/io.md を参照してください。

5. 視覚化

明確で有益なネットワーク視覚化を作成します:

基本的な視覚化:

import matplotlib.pyplot as plt

# シンプルな描画
nx.draw(G, with_labels=True)
plt.show()

# レイアウト付き
pos = nx.spring_layout(G, seed=42)
nx.draw(G, pos=pos, with_labels=True, node_color='lightblue', node_size=500)
plt.show()

カスタマイズ:

# 次数別に色分け
node_colors = [G.degree(n) for n in G.nodes()]
nx.draw(G, node_color=node_colors, cmap=plt.cm.viridis)

# 中心性でサイズ調整
centrality = nx.betweenness_centrality(G)
node_sizes = [3000 * centrality[n] for n in G.nodes()]
nx.draw(G, node_size=node_sizes)

# エッジの重み
edge_widths = [3 * G[u][v].get('weight', 1) for u, v in G.edges()]
nx.draw(G, width=edge_widths)

レイアウトアルゴリズム:

# スプリングレイアウト(力指向)
pos = nx.spring_layout(G, seed=42)

# 円形レイアウト
pos = nx.circular_layout(G)

# Kamada-Kawaレイアウト
pos = nx.kamada_kawai_layout(G)

# スペクトルレイアウト
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')  # ベクトル形式

リファレンス: レイアウトアルゴリズム、カスタマイズオプション、PlotlyおよびPyvisを使用したインタラクティブ視覚化、3Dネットワーク、および公開品質図の作成を含む視覚化技術の広範なドキュメントについては references/visualization.md を参照してください。

NetworkXの使用

インストール

NetworkXがインストールされていることを確認してください:

# インストール確認
import networkx as nx
print(nx.__version__)

# 必要に応じてインストール(bashを経由)
# uv pip install networkx
# uv pip install networkx[default]  # オプション依存関係付き

一般的なワークフローパターン

ほとんどのNetworkXタスクは以下のパターンに従います:

  1. グラフを作成またはロード:

    # スクラッチから作成
    G = nx.Graph()
    G.add_edges_from([(1, 2), (2, 3), (3, 4)])
    
    # またはファイル/データからロード
    G = nx.read_edgelist('data.txt')
    
  2. 構造を検査:

    print(f"ノード数: {G.number_of_nodes()}")
    print(f"エッジ数: {G.number_of_edges()}")
    print(f"密度: {nx.density(G)}")
    print(f"接続: {nx.is_connected(G)}")
    
  3. 分析:

    # メトリクスを計算
    degree_cent = nx.degree_centrality(G)
    avg_clustering = nx.average_clustering(G)
    
    # 路を検索
    path = nx.shortest_path(G, source=1, target=4)
    
    # コミュニティを検出
    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. 結果をエクスポート:

    # グラフを保存
    nx.write_graphml(G, 'analyzed_network.graphml')
    
    # メトリクスを保存
    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)

クイックリファレンス

基本操作

# 作成
G = nx.Graph()
G.add_edge(1, 2)

# クエリ
G.number_of_nodes()
G.number_of_edges()
G.degree(1)
list(G.neighbors(1))

# チェック
G.has_node(1)
G.has_edge(1, 2)
nx.is_connected(G)

# 修正
G.remove_node(1)
G.remove_edge(1, 2)
G.clear()

必須アルゴリズム

# 路
nx.shortest_path(G, source, target)
nx.all_pairs_shortest_path(G)

# 中心性
nx.degree_centrality(G)
nx.betweenness_centrality(G)
nx.closeness_centrality(G)
nx.pagerank(G)

# クラスタリング
nx.clustering(G)
nx.average_clustering(G)

# 成分
nx.connected_components(G)
nx.strongly_connected_components(G)  # 有向

# コミュニティ
community.greedy_modularity_communities(G)

ファイルI/Oクイックリファレンス

# 読み込み
nx.read_edgelist('file.txt')
nx.read_graphml('file.graphml')
nx.read_gml('file.gml')

# 書き込み
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ネットワーク、二部レイアウト、および公開品質図の作成を含む視覚化技術の広範なドキュメント。

追加リソース

ライセンス: MIT(寛容ライセンスのため全文を引用しています) · 原本リポジトリ

詳細情報

作者
davila7
リポジトリ
davila7/claude-code-templates
ライセンス
MIT
最終更新
不明

Source: https://github.com/davila7/claude-code-templates / ライセンス: MIT

関連スキル

汎用ソフトウェア開発⭐ リポ 39,967

doubt-driven-development

重要な判断はすべて、本番環境への展開前に新しい視点から対抗的レビューを実施します。速度より正確性が重要な場合、不慣れなコードを扱う場合、本番環境・セキュリティに関わるロジック・取り消し不可の操作など影響度が高い場合、または後でバグを修正するよりも今検証する方が効率的な場合に活用してください。

by addyosmani
汎用ソフトウェア開発⭐ リポ 1,175

apprun-skills

TypeScriptを使用したAppRunアプリケーションのMVU設計に関する総合的なガイダンスが得られます。コンポーネントパターン、イベントハンドリング、状態管理(非同期ジェネレータを含む)、パラメータと保護機能を備えたルーティング・ナビゲーション、vistestを使用したテストに対応しています。AppRunコンポーネントの設計・レビュー、ルートの配線、状態フローの管理、AppRunテストの作成時に活用してください。

by yysun
OpenAIソフトウェア開発⭐ リポ 797

desloppify

コードベースのヘルスチェックと技術負債の追跡ツールです。コード品質、技術負債、デッドコード、大規模ファイル、ゴッドクラス、重複関数、コードスメル、命名規則の問題、インポートサイクル、結合度の問題についてユーザーが質問した場合に使用してください。また、ヘルススコアの確認、次の改善項目の提案、クリーンアップ計画の作成をリクエストされた際にも対応します。29言語に対応しています。

by Git-on-my-level
汎用ソフトウェア開発⭐ リポ 39,967

debugging-and-error-recovery

テストが失敗したり、ビルドが壊れたり、動作が期待と異なったり、予期しないエラーが発生したりした場合に、体系的な根本原因デバッグをガイドします。推測ではなく、根本原因を見つけて修正するための体系的なアプローチが必要な場合に使用してください。

by addyosmani
汎用ソフトウェア開発⭐ リポ 39,967

test-driven-development

テスト駆動開発により実装を進めます。ロジックの実装、バグの修正、動作の変更など、あらゆる場面で活用できます。コードが正常に動作することを証明する必要がある場合、バグ報告を受けた場合、既存機能を修正する予定がある場合に使用してください。

by addyosmani
汎用ソフトウェア開発⭐ リポ 39,967

incremental-implementation

変更を段階的に実施します。複数のファイルに影響する機能や変更を実装する場合に使用してください。大量のコードを一度に書こうとしている場合や、タスクが一度では完結できないほど大きい場合に活用します。

by addyosmani
本サイトは GitHub 上で公開されているオープンソースの SKILL.md ファイルをクロール・インデックス化したものです。 各スキルの著作権は原作者に帰属します。掲載に問題がある場合は info@alsel.co.jp または /takedown フォームよりご連絡ください。
原作者: davila7 · davila7/claude-code-templates · ライセンス: MIT