K_DM Book
用語集
対象者 標準
対象者別の入口 →

対象者の設定はこのブラウザの中にだけ保存されます。

言語 JA

パラレルコーディネートで多次元データを俯瞰

中級

06.7.27

パラレルコーディネートで多次元データを俯瞰

最終更新 2026-03-06 読了時間 2 分
まとめ
パラレルコーディネート(平行座標プロット)は、特徴量ごとに縦軸を横に並べ、1 サンプルを「各軸上の値を順に結んだ 1 本の折れ線」として描くことで、4 次元以上のデータを 2 次元の紙に展開する手法です。クラスごとに線の色を変えると、ある軸で色の帯が上下に分かれていれば「その特徴量でクラスが分離できる」と読め、帯が重なっていれば区別に役立たない特徴量だと分かります。pandas の parallel_coordinates(df, class_column="タイプ") が DataFrame の数値列を軸にして自動で描きます。読み終えると、スピード軸で攻撃型(平均 75)と技巧型(平均 50)の帯が分かれる様子から特徴量の判別力を読み取り、alpha と軸の並び順を調整して自分の多次元データを探索できるようになります。

直感 #

サッカー選手 180 人の「体力・技術・判断力・スピード」の 4 つのスコアを、攻撃型・技巧型・万能型の 3 タイプで比べたいとします。散布図は 2 軸までなので、4 変数なら 6 枚の散布図が必要です。パラレルコーディネートは 4 本の縦軸を横に並べ、1 人の選手を「体力の軸で 70、技術の軸で 65、判断力で 60、スピードで 75」の 4 点を結んだ 1 本の折れ線にします。タイプごとに色を分けると、180 本の線が 3 色の帯になり、帯が上下に離れている軸(この例ではスピード)がタイプを見分ける特徴量だと読めます。

Python で描く #

次のコードは、3 タイプ × 60 人の 4 つのスコアを、タイプごとに平均の異なる正規乱数で作ります。parallel_coordinates にタイプの列名を渡し、線を半透明にして 180 本を重ねます。

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
from pandas.plotting import parallel_coordinates

rng = np.random.default_rng(42)
n = 60

df = pd.DataFrame({
    "体力": np.concatenate([rng.normal(70, 8, n), rng.normal(55, 10, n), rng.normal(80, 6, n)]),
    "技術": np.concatenate([rng.normal(65, 7, n), rng.normal(75, 8, n), rng.normal(60, 9, n)]),
    "判断力": np.concatenate([rng.normal(60, 9, n), rng.normal(70, 7, n), rng.normal(75, 5, n)]),
    "スピード": np.concatenate([rng.normal(75, 6, n), rng.normal(50, 12, n), rng.normal(85, 5, n)]),
    "タイプ": ["攻撃型"] * n + ["技巧型"] * n + ["万能型"] * n,
})

fig, ax = plt.subplots(figsize=(9, 5))
parallel_coordinates(
    df, class_column="タイプ", ax=ax,
    color=["#2563eb", "#10b981", "#ef4444"], alpha=0.35, linewidth=0.8,
)

ax.set_title("選手タイプ別 能力プロファイル")
ax.set_ylabel("スコア")
ax.legend(loc="upper right")
ax.grid(axis="y", alpha=0.2)

fig.tight_layout()
plt.show()

パラレルコーディネートによる選手タイプ別能力プロファイル

実行結果の読み方 #

4 本の縦軸の間で色の帯がどう動くかを見ます。スピード軸では赤(万能型、平均 85)が上、青(攻撃型、75)が中、緑(技巧型、50)が下と 3 色が分かれており、この 1 軸だけでタイプをかなり判別できます。技術軸では 3 色が 60〜75 の範囲で重なるので、タイプの判別には弱い特徴量です。帯の太さはタイプ内のばらつきで、技巧型のスピード(標準偏差 12)が最も太く見えます。隣り合う軸の間で線が交差していれば「体力が高い選手はスピードが低い」のような負の関係、平行なら正の関係が読めます。

使いどころと落とし穴 #

パラレルコーディネートは、4〜10 次元のデータでクラスごとのプロファイルの違いを探す、特徴量エンジニアリングの初期段階に向いています。サンプルが 500 を超えると線が重なって真っ黒になります。alpha を 0.1〜0.3 に下げるか、タイプごとの中央値の線だけを太く重ねてください。次元が 15 を超えると軸ラベルが読めなくなるため PCA や t-SNE で 2〜3 次元に落として散布図にする方が現実的で、スケールの異なる列をそのまま渡すと一部の軸が潰れるので、描く前の z-score 標準化か 0〜1 への正規化も欠かせません。軸の並び順で見え方が変わるため、関心のある 2 つの特徴量は隣に置き、df[["スピード", "体力", "技術", "判断力", "タイプ"]] のように列順を入れ替えて何通りか試します。グループ平均だけを比べたいならレーダーチャートで十分です。