NetworkXの高度な使い方
NetworkXは、Pythonでグラフ(ネットワーク)を操作するための強力なライブラリです。
高度な使い方を理解するためには、基本的な操作の理解が前提となりますが、ここでは少し進んだ操作や機能を中心に紹介します。
1. グラフの生成と操作
重み付きグラフの作成
1 | import networkx as nx |
[実行結果]
(A, B, 4.2) (A, C, 5.1) (B, C, 6.3)
2. ノード属性とエッジ属性
ノードとエッジに属性を追加
1 | # ノードに属性を追加 |
[実行結果]
{'color': 'red'}
{'weight': 4.2, 'capacity': 15}
3. グラフアルゴリズム
最短経路
1 | # 最短経路を見つける |
[実行結果]
Shortest path from A to C: ['A', 'C']
最小全域木
1 | # 最小全域木を見つける |
[実行結果]
Minimum Spanning Tree edges: [('A', 'B', {'weight': 4.2, 'capacity': 15}), ('A', 'C', {'weight': 5.1})]
4. グラフの可視化
Matplotlibを使ったグラフの描画
1 | import matplotlib.pyplot as plt |
[実行結果]
5. ネットワーク分析
クラスタリング係数
1 | # 各ノードのクラスタリング係数 |
[実行結果]
Clustering Coefficients: {'A': 1.0, 'B': 1.0, 'C': 1.0}
コミュニティ検出
1 | from networkx.algorithms import community |
[実行結果]
Communities: ({'A'}, {'B', 'C'})
6. データの入出力
グラフの保存と読み込み
1 | # グラフをファイルに保存 |
[実行結果]
Loaded graph: [('A', {'color': 'red'}), ('B', {'color': 'blue'}), ('C', {'color': 'green'})] [('A', 'B', {'weight': 4.2, 'capacity': 15}), ('A', 'C', {'weight': 5.1}), ('B', 'C', {'weight': 6.3, 'capacity': 10})]
7. 効率的な大規模グラフ操作
多重グラフの作成
1 | # 多重グラフの作成 |
[実行結果]
(A, B, 4.2) (A, B, 6.5)
8. ネットワークの生成
特定の構造を持つネットワークの生成
1 | # 完全グラフ |
[実行結果]
Complete graph: [(0, 1), (0, 2), (0, 3), (0, 4), (1, 2), (1, 3), (1, 4), (2, 3), (2, 4), (3, 4)] Scale-free graph: [(0, 1), (0, 0), (1, 2), (1, 2), (1, 2), (1, 2), (1, 2), (1, 2), (1, 0), (1, 0), (1, 0), (1, 0), (1, 0), (1, 0), (1, 0), (1, 0), (1, 0), (1, 0), (1, 0), (1, 0), (1, 1), (1, 1), (1, 1), (1, 1), (1, 8), (1, 8), (1, 8), (1, 8), (1, 11), (1, 11), (1, 44), (1, 5), (1, 13), (1, 6), (1, 6), (1, 6), (1, 12), (1, 41), (1, 88), (1, 85), (2, 0), (2, 1), (2, 1), (2, 1), (2, 2), (3, 0), (3, 0), (3, 0), (3, 0), (3, 0), (3, 0), (3, 0), (3, 0), (3, 1), (3, 24), (3, 8), (3, 8), (3, 5), (3, 5), (3, 28), (3, 6), (3, 6), (3, 31), (3, 2), (3, 2), (3, 51), (4, 2), (4, 2), (4, 0), (4, 0), (4, 0), (4, 8), (4, 8), (4, 1), (4, 46), (4, 24), (5, 2), (5, 2), (5, 12), (5, 67), (5, 0), (5, 91), (6, 0), (6, 0), (6, 0), (6, 1), (6, 1), (6, 1), (6, 24), (6, 98), (7, 2), (7, 1), (7, 4), (9, 2), (9, 0), (9, 0), (9, 59), (9, 65), (9, 24), (10, 1), (10, 0), (10, 36), (12, 2), (12, 2), (12, 1), (12, 1), (12, 17), (12, 11), (12, 5), (13, 2), (14, 0), (15, 8), (16, 5), (16, 1), (17, 5), (17, 6), (18, 2), (18, 2), (18, 2), (18, 0), (18, 0), (18, 26), (18, 54), (18, 59), (18, 1), (19, 2), (20, 8), (20, 0), (20, 0), (20, 17), (21, 2), (21, 6), (21, 0), (21, 8), (22, 2), (23, 4), (23, 2), (24, 0), (25, 1), (26, 8), (27, 8), (28, 0), (28, 13), (28, 2), (29, 0), (30, 0), (31, 28), (31, 67), (32, 8), (33, 1), (34, 2), (35, 2), (35, 1), (35, 92), (35, 6), (36, 1), (36, 2), (37, 2), (38, 5), (38, 0), (39, 2), (40, 8), (40, 96), (41, 5), (42, 8), (43, 31), (45, 0), (45, 2), (47, 0), (47, 6), (48, 0), (49, 24), (49, 0), (50, 2), (51, 8), (52, 0), (53, 44), (55, 13), (56, 24), (57, 24), (58, 0), (60, 0), (61, 31), (61, 36), (62, 28), (63, 4), (63, 13), (63, 0), (64, 0), (65, 0), (66, 4), (68, 8), (69, 0), (70, 31), (71, 0), (72, 0), (73, 0), (74, 4), (75, 0), (76, 1), (77, 1), (78, 1), (78, 54), (79, 11), (80, 36), (81, 12), (82, 0), (83, 0), (84, 2), (85, 54), (86, 0), (87, 0), (89, 0), (90, 31), (93, 0), (94, 66), (95, 0), (97, 34), (99, 6)]
これらの例を通じて、NetworkXの高度な機能を活用する方法を学べます。
実際のプロジェクトや研究に応じて、さらに詳細な設定やカスタマイズが必要になるかもしれません。
公式ドキュメントやコミュニティリソースを参照しながら、さらに深く掘り下げて学んでください。














