
データ分析の世界では、数値やテキストだけでなく「モノ同士のつながり」を読み解くことがとても重要です。SNSにおけるユーザー同士のフォロー関係や、Webページのリンク構造、さらには交通網や分子の結合構造まで、あらゆる「関係性」はグラフ理論(ネットワーク構造)として表現できます。
今回は、Pythonでグラフ構造を直感的かつ柔軟に扱える標準的なライブラリ「NetworkX」の基本から活用法までを分かりやすくご紹介します。
NetworkXとは?
NetworkXは、複雑なネットワーク構造(グラフ)を作成、操作、分析するためのPythonライブラリです。点(ノード)とそれらを結ぶ線(エッジ)から構成されるデータモデルを簡単に構築でき、数学的なグラフ理論に基づいた多彩なアルゴリズムが標準で実装されています。
「人と人のつながり」や「駅と線路の関係」など、目に見えない構造をモデル化できるのがとても面白いところです!
NetworkXを利用するメリット
- 直感的なデータ構築:ノードやエッジをPythonのオブジェクトとして自然に追加・削除できます。重みや属性情報も手軽に付与可能です。
- 豊富な分析アルゴリズム:最短経路の探索(ダイクストラ法など)や、重要なノードを特定する「中心性」の算出、コミュニティ検出などが網羅されています。
- 可視化ツールとの高い親和性:Matplotlibと組み合わせることで、作成したネットワーク構造を手軽にプロットして視覚的に確認できます。
NetworkXの基本的な使い方
ここでは、友人関係のネットワークを作成し、最短経路の探索や中心性の算出、可視化を行うサンプルコードを紹介します。
pip install networkx matplotlibimport networkx as nx
import matplotlib.pyplot as plt
# 1. グラフの初期化(無向グラフ)
G = nx.Graph()
# 2. ノードとエッジの追加
relationships = [
("Alice", "Bob"),
("Alice", "Charlie"),
("Bob", "Charlie"),
("Bob", "David"),
("Charlie", "Eve"),
("David", "Eve")
]
G.add_edges_from(relationships)
# 3. 最短経路の探索
path = nx.shortest_path(G, source="Alice", target="David")
print(f"AliceからDavidへの最短経路: {path}")
# 4. 各ノードの次数中心性(影響力)を計算
centrality = nx.degree_centrality(G)
print("次数中心性:")
for node, score in centrality.items():
print(f" {node}: {score:.2f}")
# 5. ネットワークの可視化
pos = nx.spring_layout(G, seed=42) # 配置アルゴリズム(シード固定)
plt.figure(figsize=(6, 4))
nx.draw(
G, pos,
with_labels=True,
node_color="skyblue",
node_size=2000,
font_size=10,
font_weight="bold",
edge_color="gray"
)
plt.title("Friendship Network")
plt.show()可視化する際、nx.spring_layout の引数に seed を指定しておくと、実行するたびにノードの配置が変わってしまうのを防げますよ。
このコードを実行すると、誰と誰がつながっているのかが直感的に図示され、ネットワークの中心にいる人物や最短経路が瞬時に把握できます。
AliceからDavidへの最短経路: ['Alice', 'Bob', 'David']
次数中心性:
Alice: 0.50
Bob: 0.75
Charlie: 0.75
David: 0.50
Eve: 0.50
みーちゃんのワンポイント
NetworkXは純粋なPythonで実装されているため、扱いやすい反面、ノードやエッジが数十万件を超えるような大規模データではメモリと計算速度の面で負荷が高くなりがちです。まずは小・中規模のデータセットで探索的な分析を行い、大規模ネットワークの本番運用では「igraph」やGPUを活用するライブラリを検討するのがおすすめですよ。

