Mímisbrunnr知恵の泉

← ネットワーク科学 一覧

🎓 レベル:基礎 | 重要度:B(推奨)

📎 前提:グラフの表現グラフラプラシアンとスペクトル | 関連:コミュニティ検出とは

要点(BLUF)

概念:グラフには位置がない

グラフは「誰と誰が繋がるか」だけの情報で、ノードがどこにあるかは決まっていません(グラフの表現)。だから可視化とは本質的にノードに座標を与える作業=レイアウトアルゴリズムです。良いレイアウトは、繋がりの強い集団を近くに、橋渡しを目立つ位置に置いて、構造を一目で読めるようにします。

代表的なレイアウト

レイアウト原理得意なこと
spring(力学モデル)エッジ=ばね、ノード間=斥力でエネルギー最小化コミュニティの分離、汎用
circular(円環)ノードを円周に等間隔配置小規模・エッジ密度の比較
kamada–kawaiグラフ上の最短路距離を平面距離で近似距離構造の保持
spectralラプラシアン固有ベクトルを座標に使うコミュニティが軸方向に分離

特に力学モデル(Fruchterman–Reingold)は、物理シミュレーションでエネルギーを最小化します。

E=(i,j)Ekspring(dij)2    ijkrepdijE = \sum_{(i,j)\in E} k_{\text{spring}} (d_{ij} - \ell)^2 \;-\; \sum_{i \neq j} \frac{k_{\text{rep}}}{d_{ij}}

第1項は「繋がったノードを適正距離 \ell に保つばね」、第2項は「すべてのノードを互いに離す斥力」。この綱引きの釣り合いが、密な集団を塊に、疎な部分を引き離した配置を生みます。スペクトルレイアウトはラプラシアン(グラフラプラシアンとスペクトル)の固有ベクトルを座標にするので、スペクトルクラスタリングと同じ原理でコミュニティが分かれます。

同じグラフ、4つの見え方

下図は空手クラブを4つのレイアウトで描いたもの(ノードの大きさ・色=次数)。同じネットワークが、座標の決め方でまるで違って見えます。

同じネットワークでもレイアウトで見え方が変わる(ノードの大きさ・色=次数)

import networkx as nx
import matplotlib.pyplot as plt
import japanize_matplotlib

G = nx.karate_club_graph()
degrees = dict(G.degree())
sizes = [degrees[n] * 40 for n in G.nodes()]      # 次数でノードサイズ

layouts = {
    "spring": nx.spring_layout(G, seed=42),
    "circular": nx.circular_layout(G),
    "kamada_kawai": nx.kamada_kawai_layout(G),
    "spectral": nx.spectral_layout(G),
}

fig, axes = plt.subplots(2, 2, figsize=(13, 11))
for ax, (title, pos) in zip(axes.flat, layouts.items()):
    nx.draw_networkx_edges(G, pos, ax=ax, alpha=0.3)
    nx.draw_networkx_nodes(G, pos, ax=ax, node_size=sizes,
                           node_color=list(degrees.values()), cmap="viridis")
    ax.set_title(title); ax.axis("off")
fig.savefig("figures/network_layouts.png", dpi=110, bbox_inches="tight")

springとkamada–kawaiでは2つの派閥が左右に分かれて見え、ハブ(大きい黄色のノード)が各派閥の中心に陣取ります。circularは構造を無視して円に並べるのでエッジの混み具合しか分からず、spectralはコミュニティが軸方向にくっきり分離します。

数式の直観的意味

力学モデルの EE は「繋がりたいノードは近づけ、無関係なノードは離す」という相反する力の妥協点です。ばねが集団を凝集させ、斥力が全体を広げる。エネルギー最小の配置では、密に繋がった集団が自然に塊(コミュニティ、コミュニティ検出とは)として浮かび上がります。つまり可視化は、コミュニティ検出と同じ「密な部分を見つける」作業を、座標という形で人間の目に見せているのです。ただし数千ノードを超えると、どんなレイアウトも「毛玉(hairball)」になり読めません。その規模では可視化を諦め、指標(中心性・モジュラリティ)で定量的に語るべきです。

⚠️ よくある誤解・落とし穴

対応シミュレーション

network-study/simulations/network_layouts.py(上図の生成コード)。

関連