論文一覧に戻る 📚 用語集トップ 🗺 概念マップ
📚 用語解説
📚 用語解説
関係性の可視化
Network Visualization
可視化
別称: グラフ可視化

💡 30秒で分かる結論

ネットワーク・グラフ・階層構造の可視化

🎨 直感で掴む

グラフの目的は「データを分かりやすく伝える」こと。 軸・凡例・出典・スケールを必ず明示してください。

本ページでは 関係性の可視化 を、 定義・前提条件・使い方・落とし穴の順に整理して解説します。 厳密な定義より、 まず何を、 いつ、 どう使うかを理解することを優先してください。

📐 定義

ネットワーク・グラフ・階層構造の可視化

英語名 Network Visualization。 同義・関連語:グラフ可視化。

🎯 いつ・どこで使うか

📋 前提条件・適用範囲

この用語を理解・使用するときは、 次のような前提を意識してください:

⚠️ よくある落とし穴

❌ 軸の切り取り
原点を切ると差が誇張されます。
❌ 色覚多様性
赤緑の組合せは識別困難な人がいます。 ColorBrewer のセットを推奨。
❌ 面積の誤解
半径を 2 倍にすると面積は 4 倍。 視覚的に強調されすぎる。

🐍 Python での扱い

SSDSE-B-2026 のような公的統計データを Python で扱う際の基本パターン:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
import pandas as pd
import numpy as np

# データ読み込み
df = pd.read_csv('data/raw/SSDSE-B-2026.csv', encoding='utf-8', skiprows=1)
print(df.shape)
print(df.dtypes)
print(df.describe())

# 「関係性の可視化」の文脈で扱う場合の例:
# 分野: 可視化
# 関連手法は同カテゴリの他用語を参照してください。

具体的なコードは 1変量の可視化 を参照してください。

📝 レポートでの報告

分析結果を報告するときに含めるべき情報:

✅ チェックリスト

🔎 ネットワーク可視化 ── 深掘り解説

ネットワーク可視化(Network Visualization) は、 ノード(点)とエッジ(線)でつながりを表す可視化。 SNS、 共著関係、 経路、 隣接関係などに使われ、 中心性指標で重要ノードを特定できる。

🔖 キーワード索引(拡張)

ネットワーク可視化Network Visualizationmatplotlibplotlyseaborn可視化データ可視化SSDSE-B都道府県色覚多様性凡例軸ラベルタイトルアクセシビリティ

📐 適用判断式

$$ C_B(v) = \sum_{s \ne v \ne t} \frac{\sigma_{st}(v)}{\sigma_{st}} \qquad (\text{Betweenness Centrality}) $$

🧮 他可視化との比較

中心性意味代表例
Degree接続数フォロワー数
Closeness最短距離の平均情報の届きやすさ
Betweenness経路の中継ハブ空港
PageRank推移的重要度Web 検索

🐍 Python 実装

 1
 2
 3
 4
 5
 6
 7
 8
 9
# networkx で都道府県隣接グラフ
import networkx as nx, matplotlib.pyplot as plt
G = nx.Graph()
adj = [('北海道','青森県'),('青森県','岩手県'),('青森県','秋田県'),
       ('岩手県','宮城県'),('岩手県','秋田県'),('秋田県','山形県'),
       ('宮城県','山形県'),('宮城県','福島県'),('福島県','茨城県')]
G.add_edges_from(adj)
nx.draw(G, with_labels=True, node_color='#80CBC4', node_size=900)
plt.savefig('network.png', dpi=150)
 1
 2
 3
 4
 5
 6
# 中心性の計算
deg = dict(G.degree())
betw = nx.betweenness_centrality(G)
import pandas as pd
rank = pd.DataFrame({'degree': deg, 'between': betw}).sort_values('degree', ascending=False)
print(rank)
 1
 2
 3
 4
 5
 6
 7
 8
# 重み付きエッジ : 都道府県人口の対数の積
import pandas as pd, numpy as np
df = pd.read_csv('data/raw/SSDSE-B-2026.csv', encoding='utf-8', skiprows=1)
pop = df.set_index('Prefecture')['A1101']
for u, v in G.edges():
    if u in pop.index and v in pop.index:
        G[u][v]['weight'] = np.log(pop[u] * pop[v])
print(list(G.edges(data=True))[:3])
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
# Plotly でインタラクティブ可視化
import plotly.graph_objects as go
pos = nx.spring_layout(G, seed=1)
edge_x, edge_y = [], []
for u, v in G.edges():
    edge_x += [pos[u][0], pos[v][0], None]
    edge_y += [pos[u][1], pos[v][1], None]
fig = go.Figure()
fig.add_trace(go.Scatter(x=edge_x, y=edge_y, mode='lines'))
fig.add_trace(go.Scatter(x=[pos[n][0] for n in G.nodes()],
                         y=[pos[n][1] for n in G.nodes()],
                         mode='markers+text',
                         text=list(G.nodes()), textposition='top center'))
fig.write_html('network.html')

⚠️ 落とし穴(ネットワーク可視化固有)

❌ 軸の範囲を恣意的に切る
「ゼロ起点でない棒グラフ」のような誤誘導につながります。 必ず範囲を明示。
❌ 色を増やしすぎる
5 色を超えると識別が困難になります。 グループ化やパターンを併用。
❌ 凡例・タイトル不足
情報の出典・期間・単位を必ず記載。
❌ 印刷・モノクロでの崩壊
デジタル前提のカラーパレットが印刷で識別不能になることがあります。

🔗 関連用語(拡張)

[並列]散布図 [並列]ヒストグラム [並列]ヒートマップ [並列]棒グラフ [並列]折れ線グラフ [並列]円グラフ [並列]レーダーチャート [並列]地理可視化 [並列]ネットワーク可視化 [発展]インタラクティブ可視化 [応用]相関係数 [応用]高齢化率 [発展]特徴量設計 [応用]標準化 [応用]正規性

📚 補足資料 — FAQ/追加コード/背景

FAQハンズオンSSDSE-BPython事例研究データ駆動教育

❓ よくある質問 (FAQ)

ネットワーク可視化はいつ使うのが最適?
つながり・関係性を持つデータ(SNS、 共著、 経路、 隣接)の構造把握。
色の選び方は?
色覚多様性を考え viridis、 cividis、 ColorBrewer の colorblind-safe スキームを推奨。
matplotlib と Plotly どちらで描く?
静的論文は matplotlib、 探索/ダッシュボードは Plotly。 同じデータで両方残すと再利用可。
軸ラベル・凡例の必須情報は?
単位・出典・期間・サンプル数を必ず付ける。
印刷時のサイズは?
図の高さ・幅は 6×4 inch 程度を基本に。 dpi=150 以上で印刷品質。

🧪 SSDSE-B-2026 を使った追加計算例

ネットワークノードエッジ応用例
地理隣接都道府県隣接ペアクラスタ
人口移動都道府県流入数流動
業界連関産業取引構造分析
文献論文引用影響度
感染個人接触拡散

🐍 さらにコードを書く

Spring layout vs Circular layout

 1
 2
 3
 4
 5
 6
 7
 8
import networkx as nx, matplotlib.pyplot as plt
G = nx.karate_club_graph()
fig, axes = plt.subplots(1,2, figsize=(10,5))
nx.draw(G, ax=axes[0], pos=nx.spring_layout(G,seed=1), node_color='#80CBC4')
axes[0].set_title('spring')
nx.draw(G, ax=axes[1], pos=nx.circular_layout(G), node_color='#FFB300')
axes[1].set_title('circular')
plt.savefig('layouts.png', dpi=150)

コミュニティ検出(Louvain)

 1
 2
 3
 4
 5
 6
 7
 8
import networkx as nx
G = nx.karate_club_graph()
try:
    import community as cm
    part = cm.best_partition(G)
    print('コミュニティ数:', len(set(part.values())))
except ImportError:
    print('python-louvain をインストール')

Pagerank と Betweenness の比較

 1
 2
 3
 4
 5
import networkx as nx, pandas as pd
G = nx.karate_club_graph()
pr = nx.pagerank(G); bw = nx.betweenness_centrality(G)
df = pd.DataFrame({'pr':pr,'bw':bw}).sort_values('pr', ascending=False)
print(df.head())

💡 実務的アドバイス

🕰 歴史的背景・発展経緯

ネットワーク可視化 は古典的可視化手法の一つで、 統計可視化の標準教科書 (Tufte, Cleveland) でも扱われます。

matplotlib (2003-) は MATLAB ライクな API で広く普及。 ggplot2 (R, 2007) で文法 of graphics が確立。 Vega-Lite / Altair (2017) が宣言型表現を Web に持ち込みました。

近年は SVG/Canvas/WebGL の多層実装が普及し、 大規模データでもブラウザ可視化が可能に。 GPU 利用の Datashader, deck.gl が研究機関で活躍。