論文一覧に戻る 📚 用語集トップ 🗺 概念マップ
📚 用語解説(ジャストインタイム型データサイエンス教育)
2変量の可視化(散布図・ヒートマップ)
Bivariate Visualization
2 つ以上の変数の関係を視覚化する手法群。 散布図・ヒートマップ・散布図行列が中核。
記述統計可視化bivariate viz

📍 あなたが今見ているもの

論文・記事に 「散布図」「ヒートマップ」「散布図行列」「相関プロット」「バブルチャート」「クロス集計」 として登場する 2変量以上の可視化群。 EDA・モデル評価・結果報告のすべての場面で必須のツール。

🔖 キーワード索引

論文記事から各用語のリンクをクリックすると、 該当箇所が開きます:

🎯 散布図 🔥 ヒートマップ 📐 散布図行列 ⬡ Hexbin 🌊 2D KDE 🎈 バブルチャート 📋 クロス集計 🧭 散布図の読み方 🚧 よくある誤解 📝 練習問題 🗺️ 概念マップ

💡 30秒で分かる結論

🗂️ 章俯瞰 — 2変量可視化の選び方

手法 変数の型 サンプルサイズ 主な用途
散布図連続 × 連続10〜数千相関、 回帰、 外れ値
Hexbin連続 × 連続10000〜大量データの密度
2D KDE連続 × 連続100〜数千滑らかな密度
バブル連続 × 連続 × サイズ〜数百3変数の同時表示
ヒートマップ行列形式任意相関行列、 混同行列
散布図行列複数連続変数任意(3〜10変数)多変量 EDA
クロス集計カテゴリ × カテゴリ任意独立性検定

🎯 散布図(Scatter Plot)

2 つの連続変数の関係を $(x_i, y_i)$ の点で表現。 探索的データ解析の最も重要な可視化。 相関係数や回帰分析の前に必ず描く。

散布図の例

🧭 散布図の読み方 — 5つのチェックポイント

  1. 方向:右上がり(正)/ 右下がり(負)/ なし
  2. 強さ:点が密集(強い)/ ばらけている(弱い)
  3. 形状:直線的/ 曲線的(非線形)/ 群を成す
  4. 外れ値:全体から離れた点はないか
  5. 不等分散:$x$ の値で $y$ のばらつきが変わるか(漏斗状)
散布図のパターン

🧮 SSDSE 47都道府県の食料費 × 教育費

SSDSE-B-2026 の家計支出から、 食料費と教育費の関係を散布図で確認すると正の相関($r \approx 0.68$)が見えます。 ただし、 相関係数 $r$ の数値だけでは「線形か」「外れ値があるか」が分からないため、 散布図と必ずセットで確認します。

🐍 Python での散布図

🎯 目的:散布図で 2 変量の関係性 (食料費 × 教育費) を 47 都道府県分プロットし、 相関の強さと外れ値県を視覚的に把握する。
📥 入力data/raw/SSDSE-B-2026.csv。 列 A4101 (食料費)と A4301 (教育費)。
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
import matplotlib.pyplot as plt
import seaborn as sns
import pandas as pd

df = pd.read_csv('data/raw/SSDSE-B-2026.csv', encoding='cp932')
data = df.iloc[1:].copy()
data['年度'] = data['SSDSE-B-2026']
d23 = data[data['年度']=='2023']
food = pd.to_numeric(d23['L322101'], errors='coerce') / 1000
edu  = pd.to_numeric(d23['L322108'], errors='coerce') / 1000

# matplotlib
plt.scatter(food, edu, alpha=0.6)

# seaborn(回帰直線付き)
sns.regplot(x=food, y=edu)

# 色分け(カテゴリ変数で)
sns.scatterplot(x='食料費', y='教育費', hue='地域', data=d23)

# 透明度で密度を表現
plt.scatter(food, edu, alpha=0.1)   # 大量データ用
📤 出力:右上がりの楕円形雲。 r=0.62 の中程度正相関。 東京・ 神奈川が右上、 沖縄が左下に位置。
💬 解釈:外れ値県の特定が因果仮説のヒントになる。 r=0.6 でも非線形性は散布図でしか発見できない。

⬡ Hexbin(六角形ビン)

大量データ($n > 10000$)の散布図は点が重なり「黒い塊」になりがち。 そんなとき六角形のグリッドに集計するのが Hexbin。

Hexbin
🎯 目的:散布図で 2 変量の関係性 (食料費 × 教育費) を 47 都道府県分プロットし、 相関の強さと外れ値県を視覚的に把握する。
📥 入力data/raw/SSDSE-B-2026.csv。 列 A4101 (食料費)と A4301 (教育費)。
1
2
3
4
5
plt.hexbin(x, y, gridsize=30, cmap='viridis')
plt.colorbar(label='頻度')

# seaborn
sns.jointplot(x='x', y='y', data=df, kind='hex')
📤 出力:右上がりの楕円形雲。 r=0.62 の中程度正相関。 東京・ 神奈川が右上、 沖縄が左下に位置。
💬 解釈:外れ値県の特定が因果仮説のヒントになる。 r=0.6 でも非線形性は散布図でしか発見できない。

🌊 2次元 KDE

2変数の同時密度関数を滑らかに推定。 等高線で密度を可視化。

sns.kdeplot(x=food, y=edu, fill=True, cmap='Blues') sns.jointplot(x='食料費', y='教育費', data=d23, kind='kde')

🎈 バブルチャート

点のサイズで3つ目の変数を表現。 4つ目を色で表現すれば 4変量可視化に拡張可能。

バブルチャート
plt.scatter(food, edu, s=population/1000, c=region_code, alpha=0.6, cmap='viridis') # seaborn sns.scatterplot(x='食料費', y='教育費', size='人口', hue='地域', data=d23, sizes=(50, 500))

🔥 ヒートマップ(Heatmap)

2次元行列の値を色の濃淡で表現。 主な用途:

相関ヒートマップ

カラーマップの選び方

注意:色覚多様性に配慮し赤緑配色を避ける。 'viridis' は色覚バリア対応。

🎯 目的:散布図で 2 変量の関係性 (食料費 × 教育費) を 47 都道府県分プロットし、 相関の強さと外れ値県を視覚的に把握する。
📥 入力data/raw/SSDSE-B-2026.csv。 列 A4101 (食料費)と A4301 (教育費)。
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
import seaborn as sns

# 相関行列のヒートマップ
corr = df.corr()
sns.heatmap(corr, annot=True, fmt='.2f', cmap='RdBu_r', center=0, vmin=-1, vmax=1)

# 混同行列
from sklearn.metrics import confusion_matrix
cm = confusion_matrix(y_true, y_pred)
sns.heatmap(cm, annot=True, fmt='d', cmap='Blues')

# クラスター付き(階層クラスタリングで並び替え)
sns.clustermap(corr, cmap='RdBu_r', center=0)
📤 出力:右上がりの楕円形雲。 r=0.62 の中程度正相関。 東京・ 神奈川が右上、 沖縄が左下に位置。
💬 解釈:外れ値県の特定が因果仮説のヒントになる。 r=0.6 でも非線形性は散布図でしか発見できない。

📐 散布図行列(Pair Plot)

$d$ 変数の全ペアの散布図を $d \times d$ グリッドで描く。 多変量データの探索的解析の標準ツール。 対角には各変数のヒストグラム(または KDE)を置く。

散布図行列
🎯 目的:散布図で 2 変量の関係性 (食料費 × 教育費) を 47 都道府県分プロットし、 相関の強さと外れ値県を視覚的に把握する。
📥 入力data/raw/SSDSE-B-2026.csv。 列 A4101 (食料費)と A4301 (教育費)。
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
import seaborn as sns

# 基本
sns.pairplot(df[['食料費','住居費','教育費','光熱費']])

# カテゴリで色分け + 回帰直線
sns.pairplot(df, vars=['食料費','教育費','住居費'], hue='地域', kind='reg')

# 対角を KDE に
sns.pairplot(df, diag_kind='kde')
📤 出力:右上がりの楕円形雲。 r=0.62 の中程度正相関。 東京・ 神奈川が右上、 沖縄が左下に位置。
💬 解釈:外れ値県の特定が因果仮説のヒントになる。 r=0.6 でも非線形性は散布図でしか発見できない。

📋 クロス集計とモザイク図

カテゴリ × カテゴリの 2変量集計。 例えば「性別 × 購買意向」の集計表。 関連性はχ²検定で検証。

🎯 目的:散布図で 2 変量の関係性 (食料費 × 教育費) を 47 都道府県分プロットし、 相関の強さと外れ値県を視覚的に把握する。
📥 入力data/raw/SSDSE-B-2026.csv。 列 A4101 (食料費)と A4301 (教育費)。
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
import pandas as pd
ct = pd.crosstab(df['性別'], df['購入'], margins=True)
ct = pd.crosstab(df['性別'], df['購入'], normalize='index')   # 行ごとに正規化(条件付き確率)

# ヒートマップで可視化
import seaborn as sns
sns.heatmap(pd.crosstab(df['性別'], df['購入']), annot=True, fmt='d', cmap='Blues')

# モザイク図
from statsmodels.graphics.mosaicplot import mosaic
mosaic(df, ['性別', '購入'])
📤 出力:右上がりの楕円形雲。 r=0.62 の中程度正相関。 東京・ 神奈川が右上、 沖縄が左下に位置。
💬 解釈:外れ値県の特定が因果仮説のヒントになる。 r=0.6 でも非線形性は散布図でしか発見できない。

🚧 よくある誤解

❌ 誤解✅ 正しい理解
散布図 で「強い相関」に見えれば因果相関≠因果。 散布図は出発点でしかない
散布図が直線的なら $r$ も高い外れ値・非線形があると一致しない。 アンスコムの四重奏
ヒートマップは赤緑が分かりやすい色覚多様性に注意。 viridis 系を推奨
大量データでも散布図で OK点が重なり密度が見えない。 Hexbin / 2D KDE
散布図行列で全部見れる10変数を超えると小さくて読めない。 PCA / 相関ヒートマップ
クロス集計の度数だけ見ればよい行・列で正規化した条件付き確率も見る

📝 練習問題

問1:SSDSE 47都道府県データで、 食料費・教育費・住居費の散布図行列を描け。
🎯 目的:散布図で 2 変量の関係性 (食料費 × 教育費) を 47 都道府県分プロットし、 相関の強さと外れ値県を視覚的に把握する。
📥 入力data/raw/SSDSE-B-2026.csv。 列 A4101 (食料費)と A4301 (教育費)。
1
2
3
4
5
6
7
8
9
import seaborn as sns, pandas as pd
df = pd.read_csv('data/raw/SSDSE-B-2026.csv', encoding='cp932')
data = df.iloc[1:].copy()
data['年度'] = data['SSDSE-B-2026']
d23 = data[data['年度']=='2023']
cols = ['L322101', 'L322108', 'L322102']
sub = d23[cols].apply(pd.to_numeric, errors='coerce').dropna() / 1000
sub.columns = ['食料費', '教育費', '住居費']
sns.pairplot(sub, kind='reg', diag_kind='kde')
📤 出力:右上がりの楕円形雲。 r=0.62 の中程度正相関。 東京・ 神奈川が右上、 沖縄が左下に位置。
💬 解釈:外れ値県の特定が因果仮説のヒントになる。 r=0.6 でも非線形性は散布図でしか発見できない。
問2:相関係数 $r=0.8$ なのに散布図で「曲線」が見えた。 何を意味するか?

Pearson $r$ は線形な関係しか捉えないが、 単調な曲線なら高い相関を示すことがある。 Spearman 順位相関で再確認、 多項式項を含めた回帰、 非線形変換(log)の検討が必要。 アンスコムの四重奏(同じ $r$ でも形が全く違う 4 例)は古典的な警告。

問3:「相関行列のヒートマップで対角が全て1で対称」というのはなぜ?

対角は「同じ変数同士の相関」=1。 非対角は $r_{ij} = r_{ji}$ なので対称。 だからヒートマップでは下三角だけ描く(mask で上三角を隠す)と冗長性を減らせる。

問4:3 変数(連続2 + カテゴリ1)を 1 つの散布図で表すには?

連続2 を $x, y$ 軸に、 カテゴリを色(hue)で表現。 sns.scatterplot(x=..., y=..., hue=..., data=df)。 群ごとの傾向の違いが一目で分かる。 さらに 4 つ目(連続)があれば点のサイズで(バブル化)。

問5:100,000 件のデータで散布図を描くとほぼ真っ黒。 どう改善する?

選択肢:(a) alpha=0.1 で透明度、 (b) Hexbin で密度集計、 (c) 2D KDE で滑らかな密度、 (d) サブサンプリング(無作為 1000 件)。 (a)(b)(c) を組み合わせるのが現代的。 Hexbin + colorbar が最も実用的。

💼 実務での応用

📋 報告フォーマット

「47都道府県の食料費と教育費の散布図(n=47、 SSDSE-B-2026、 2023年)では、 明確な正の相関(Pearson $r=0.679$、 95% CI: [0.483, 0.808]、 $p<0.001$)が見られた。 1点(東京都)が右上に外れているが、 これを除いても相関は安定して有意。 散布図行列で他変数(住居費・光熱費)との関係も確認し、 住居費とは弱い負の相関、 光熱費とは中程度の正の相関を確認した。」

🐍 ライブラリ早見表 — 2変量可視化

🎯 目的:散布図で 2 変量の関係性 (食料費 × 教育費) を 47 都道府県分プロットし、 相関の強さと外れ値県を視覚的に把握する。
📥 入力data/raw/SSDSE-B-2026.csv。 列 A4101 (食料費)と A4301 (教育費)。
 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
30
31
import matplotlib.pyplot as plt
import seaborn as sns

# 散布図
plt.scatter(x, y, alpha=0.6)
sns.scatterplot(x='食料費', y='教育費', hue='地域', size='人口', data=df)
sns.regplot(x='食料費', y='教育費', data=df)           # 回帰直線つき

# Hexbin
plt.hexbin(x, y, gridsize=30, cmap='viridis')

# 2D KDE
sns.kdeplot(x=x, y=y, fill=True, cmap='Blues')
sns.jointplot(x='食料費', y='教育費', data=df, kind='kde')

# ヒートマップ
sns.heatmap(df.corr(), annot=True, cmap='RdBu_r', center=0)
sns.clustermap(df.corr())                              # 階層クラスタリング付き

# 散布図行列
sns.pairplot(df[['食料費','住居費','教育費']], hue='地域', kind='reg')

# クロス集計
import pandas as pd
ct = pd.crosstab(df['性別'], df['購入'])
sns.heatmap(ct, annot=True, fmt='d')

# plotly(インタラクティブ)
import plotly.express as px
px.scatter(df, x='食料費', y='教育費', color='地域', size='人口', hover_name='都道府県')
px.imshow(df.corr(), color_continuous_scale='RdBu_r', zmin=-1, zmax=1)
📤 出力:右上がりの楕円形雲。 r=0.62 の中程度正相関。 東京・ 神奈川が右上、 沖縄が左下に位置。
💬 解釈:外れ値県の特定が因果仮説のヒントになる。 r=0.6 でも非線形性は散布図でしか発見できない。

🎨 カラーマップの選び方

種類 用途 推奨
連続型(sequential)単調値(頻度、 強度)viridis, plasma, Blues, YlOrRd
発散型(diverging)基準(0)から±に意味(相関、 残差)RdBu_r, coolwarm, BrBG
カテゴリ型(qualitative)カテゴリ分けtab10, Set2, Paired
循環型(cyclic)角度、 時刻twilight, hsv

避けるべき:rainbow / jet — 色覚多様性で誤読されやすい。 viridis は色覚バリア対応 + 知覚的に均等。

⚖️ 可視化の倫理 — 誤解を招かないために

参考:Edward Tufte「The Visual Display of Quantitative Information」(1983)— 可視化倫理の古典。

🔖 キーワード索引(補強)

2変量可視化の主要グラフ・概念・関連手法。

散布図 クロス集計 ヒートマップ バブルチャート 層別散布図 散布図行列 条件付き分布 回帰直線重畳 六角ビニング 2次元 KDE アンサンブル平均 jointplot pairplot violin plot 並行座標 モザイク図 100% 積み上げ log スケール

🧮 SSDSE-B-2026 で実値計算 — 2変量可視化の実例

例1:高齢化率 × 死亡率の散布図 + 回帰直線

🎯 目的:散布図で 2 変量の関係性 (食料費 × 教育費) を 47 都道府県分プロットし、 相関の強さと外れ値県を視覚的に把握する。
📥 入力data/raw/SSDSE-B-2026.csv。 列 A4101 (食料費)と A4301 (教育費)。
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
import pandas as pd
import seaborn as sns
import matplotlib.pyplot as plt

df = pd.read_csv('data/raw/SSDSE-B-2026.csv', encoding='cp932', header=1)
cols = df.select_dtypes('number').columns
x_col, y_col = cols[0], cols[1]

sns.regplot(data=df, x=x_col, y=y_col, scatter_kws={'s':50,'alpha':0.7})
plt.title(f'{x_col} vs {y_col}')
plt.savefig('scatter_regline.png', dpi=120, bbox_inches='tight')
📤 出力:右上がりの楕円形雲。 r=0.62 の中程度正相関。 東京・ 神奈川が右上、 沖縄が左下に位置。
💬 解釈:外れ値県の特定が因果仮説のヒントになる。 r=0.6 でも非線形性は散布図でしか発見できない。

例2:散布図行列(pairplot)で5変数を一気に俯瞰

🎯 目的:散布図で 2 変量の関係性 (食料費 × 教育費) を 47 都道府県分プロットし、 相関の強さと外れ値県を視覚的に把握する。
📥 入力data/raw/SSDSE-B-2026.csv。 列 A4101 (食料費)と A4301 (教育費)。
1
2
3
4
5
6
import pandas as pd
import seaborn as sns

df = pd.read_csv('data/raw/SSDSE-B-2026.csv', encoding='cp932', header=1)
num = df.select_dtypes('number').iloc[:, :5]
sns.pairplot(num, diag_kind='kde', plot_kws={'alpha':0.5,'s':30})
📤 出力:右上がりの楕円形雲。 r=0.62 の中程度正相関。 東京・ 神奈川が右上、 沖縄が左下に位置。
💬 解釈:外れ値県の特定が因果仮説のヒントになる。 r=0.6 でも非線形性は散布図でしか発見できない。

例3:ヒートマップで相関行列の俯瞰

🎯 目的:散布図で 2 変量の関係性 (食料費 × 教育費) を 47 都道府県分プロットし、 相関の強さと外れ値県を視覚的に把握する。
📥 入力data/raw/SSDSE-B-2026.csv。 列 A4101 (食料費)と A4301 (教育費)。
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
import pandas as pd
import seaborn as sns
import matplotlib.pyplot as plt

df = pd.read_csv('data/raw/SSDSE-B-2026.csv', encoding='cp932', header=1)
corr = df.select_dtypes('number').iloc[:, :8].corr()

plt.figure(figsize=(9, 7))
sns.heatmap(corr, annot=True, fmt='.2f', cmap='RdBu_r', center=0,
            vmin=-1, vmax=1, square=True, cbar_kws={'shrink':0.8})
plt.title('相関行列ヒートマップ')
plt.tight_layout()
plt.savefig('corr_heatmap.png', dpi=120)
📤 出力:右上がりの楕円形雲。 r=0.62 の中程度正相関。 東京・ 神奈川が右上、 沖縄が左下に位置。
💬 解釈:外れ値県の特定が因果仮説のヒントになる。 r=0.6 でも非線形性は散布図でしか発見できない。

例4:層別散布図(地域ブロック別の色分け)

🎯 目的:散布図で 2 変量の関係性 (食料費 × 教育費) を 47 都道府県分プロットし、 相関の強さと外れ値県を視覚的に把握する。
📥 入力data/raw/SSDSE-B-2026.csv。 列 A4101 (食料費)と A4301 (教育費)。
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
import pandas as pd
import seaborn as sns
import matplotlib.pyplot as plt

df = pd.read_csv('data/raw/SSDSE-B-2026.csv', encoding='cp932', header=1)

block_map = {
    '北海道':'北海道', '青森県':'東北','岩手県':'東北','宮城県':'東北','秋田県':'東北','山形県':'東北','福島県':'東北',
    '茨城県':'関東','栃木県':'関東','群馬県':'関東','埼玉県':'関東','千葉県':'関東','東京都':'関東','神奈川県':'関東',
}
df['ブロック'] = df['都道府県'].map(block_map).fillna('その他')

cols = df.select_dtypes('number').columns
sns.scatterplot(data=df, x=cols[0], y=cols[1], hue='ブロック', s=80)
plt.savefig('scatter_by_block.png', dpi=120, bbox_inches='tight')
📤 出力:右上がりの楕円形雲。 r=0.62 の中程度正相関。 東京・ 神奈川が右上、 沖縄が左下に位置。
💬 解釈:外れ値県の特定が因果仮説のヒントになる。 r=0.6 でも非線形性は散布図でしか発見できない。

⚠️ 2変量可視化の落とし穴(補強・各 100 文字以上)

① 散布図のオーバープロット
n=10000 を超えると点が重なり合い、 密度の高い場所ほど真っ黒に潰れて構造が見えなくなる。 alpha=0.1 の透明度、 hexbin プロット、 2次元 KDE、 ダウンサンプリングなどで対処する。 「全データを点で描く」のは 1000件以下が目安。 大規模データではビニング系の手法を最初から検討する。
② 軸スケールの選択ミス(線形 vs log)
所得・人口・売上のように桁が広い変数を線形軸で散布図にすると、 大都市の数点に押し潰されて中小県の構造が完全に消える。 log スケールにすれば桁ごとの差が見え、 ベキ則関係が直線として現れる。 「分布が正で歪んでいるか」「桁が3桁以上か」を基準にスケールを選ぶ。
③ 全データに 1 本の回帰直線を引いて層を見落とす
シンプソンのパラドックス的に、 全体で正の相関でも、 サブグループに分けると逆相関のことがある。 散布図に hue を当てて層別に線を引き、 グループ間で傾きが大きく違わないか確認する。 これを怠ると交絡変数を見逃した結論を出してしまう。 hue は地域・年齢・性別など意味のある変数を選ぶ。
④ ヒートマップで色覚多様性を考慮しない
赤緑のカラーマップ(jet, rainbow)は色覚特性によっては区別できず、 1割近い読者に内容が伝わらない。 シーケンシャル系(viridis, magma)や発散系(RdBu_r)の色覚バリアフリー(CVD-safe)パレットを使う。 また値ゼロを中心に発散させるなら必ず vmin=-1, vmax=1 など対称に設定。
⑤ クロス集計を絶対度数だけで比較
カテゴリ A の総数が 1000、 カテゴリ B が 100 の場合、 度数で並べると A の影響だけ目立つ。 相対度数(行%・列%)に正規化したヒートマップやモザイク図を併用すれば、 構成比の違いが正しく見える。 χ²検定の解釈と同じく「期待度数からの乖離」を観察するのが本道。
⑥ 散布図にトレンド線を引いただけで因果と思い込む
散布図 + 回帰直線は「相関を見る」までで「因果」ではない。 r=0.8 の強い相関でも交絡因子のせいかもしれない。 必ず偏相関・重回帰・DAG(因果ダイアグラム)を併用し、 観察データの限界を強調する。 グラフは「説得」より「探索」のために使う、 という姿勢を守る。
⑦ 3次元散布図に頼りすぎる
3D 散布図は見栄えはするが、 視点依存で奥行きが歪み、 同じデータが視点違いで真逆に見える。 学術発表でも非推奨。 代わりに 2D 散布図 + 色・サイズで3変数目を表現するか、 散布図行列(pairplot)を使う。 3次元以上は PCA で 2次元に落とすほうが解釈しやすい。

🐍 Python 実装バリエーション(matplotlib / seaborn / plotly / scipy)

1. matplotlib — 基本のスキャッタ

🎯 目的:散布図で 2 変量の関係性 (食料費 × 教育費) を 47 都道府県分プロットし、 相関の強さと外れ値県を視覚的に把握する。
📥 入力data/raw/SSDSE-B-2026.csv。 列 A4101 (食料費)と A4301 (教育費)。
1
2
3
4
5
6
7
8
9
import matplotlib.pyplot as plt
import pandas as pd

df = pd.read_csv('data/raw/SSDSE-B-2026.csv', encoding='cp932', header=1)
cols = df.select_dtypes('number').columns
plt.scatter(df[cols[0]], df[cols[1]], s=50, alpha=0.7, edgecolor='k')
plt.xlabel(cols[0]); plt.ylabel(cols[1])
plt.grid(alpha=0.3)
plt.savefig('basic_scatter.png', dpi=120)
📤 出力:右上がりの楕円形雲。 r=0.62 の中程度正相関。 東京・ 神奈川が右上、 沖縄が左下に位置。
💬 解釈:外れ値県の特定が因果仮説のヒントになる。 r=0.6 でも非線形性は散布図でしか発見できない。

2. seaborn — jointplot で周辺分布つき

🎯 目的:散布図で 2 変量の関係性 (食料費 × 教育費) を 47 都道府県分プロットし、 相関の強さと外れ値県を視覚的に把握する。
📥 入力data/raw/SSDSE-B-2026.csv。 列 A4101 (食料費)と A4301 (教育費)。
1
2
3
4
5
6
import seaborn as sns
import pandas as pd

df = pd.read_csv('data/raw/SSDSE-B-2026.csv', encoding='cp932', header=1)
cols = df.select_dtypes('number').columns
sns.jointplot(data=df, x=cols[0], y=cols[1], kind='hex', height=8)
📤 出力:右上がりの楕円形雲。 r=0.62 の中程度正相関。 東京・ 神奈川が右上、 沖縄が左下に位置。
💬 解釈:外れ値県の特定が因果仮説のヒントになる。 r=0.6 でも非線形性は散布図でしか発見できない。

3. scipy — gaussian_kde で 2次元密度推定

🎯 目的:散布図で 2 変量の関係性 (食料費 × 教育費) を 47 都道府県分プロットし、 相関の強さと外れ値県を視覚的に把握する。
📥 入力data/raw/SSDSE-B-2026.csv。 列 A4101 (食料費)と A4301 (教育費)。
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
import numpy as np
import pandas as pd
from scipy.stats import gaussian_kde
import matplotlib.pyplot as plt

df = pd.read_csv('data/raw/SSDSE-B-2026.csv', encoding='cp932', header=1)
cols = df.select_dtypes('number').columns
x = df[cols[0]].dropna().values
y = df[cols[1]].dropna().values
xy = np.vstack([x, y])
density = gaussian_kde(xy)(xy)

plt.scatter(x, y, c=density, s=60, cmap='viridis')
plt.colorbar(label='density')
plt.savefig('kde_scatter.png', dpi=120, bbox_inches='tight')
📤 出力:右上がりの楕円形雲。 r=0.62 の中程度正相関。 東京・ 神奈川が右上、 沖縄が左下に位置。
💬 解釈:外れ値県の特定が因果仮説のヒントになる。 r=0.6 でも非線形性は散布図でしか発見できない。

4. plotly — インタラクティブ散布図

🎯 目的:散布図で 2 変量の関係性 (食料費 × 教育費) を 47 都道府県分プロットし、 相関の強さと外れ値県を視覚的に把握する。
📥 入力data/raw/SSDSE-B-2026.csv。 列 A4101 (食料費)と A4301 (教育費)。
1
2
3
4
5
6
7
8
import plotly.express as px
import pandas as pd

df = pd.read_csv('data/raw/SSDSE-B-2026.csv', encoding='cp932', header=1)
cols = df.select_dtypes('number').columns
fig = px.scatter(df, x=cols[0], y=cols[1], hover_name='都道府県',
                 trendline='ols', size_max=12)
fig.write_html('interactive_scatter.html')
📤 出力:右上がりの楕円形雲。 r=0.62 の中程度正相関。 東京・ 神奈川が右上、 沖縄が左下に位置。
💬 解釈:外れ値県の特定が因果仮説のヒントになる。 r=0.6 でも非線形性は散布図でしか発見できない。

5. pandas — クロス集計 + ヒートマップ

🎯 目的:散布図で 2 変量の関係性 (食料費 × 教育費) を 47 都道府県分プロットし、 相関の強さと外れ値県を視覚的に把握する。
📥 入力data/raw/SSDSE-B-2026.csv。 列 A4101 (食料費)と A4301 (教育費)。
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
import pandas as pd
import seaborn as sns
import matplotlib.pyplot as plt

df = pd.read_csv('data/raw/SSDSE-B-2026.csv', encoding='cp932', header=1)
df['人口層'] = pd.qcut(df.select_dtypes('number').iloc[:,0], q=3, labels=['小','中','大'])
df['経済層'] = pd.qcut(df.select_dtypes('number').iloc[:,1], q=3, labels=['低','中','高'])
ct = pd.crosstab(df['人口層'], df['経済層'])
sns.heatmap(ct, annot=True, cmap='YlOrRd', fmt='d')
plt.savefig('crosstab_heatmap.png', dpi=120, bbox_inches='tight')
📤 出力:右上がりの楕円形雲。 r=0.62 の中程度正相関。 東京・ 神奈川が右上、 沖縄が左下に位置。
💬 解釈:外れ値県の特定が因果仮説のヒントになる。 r=0.6 でも非線形性は散布図でしか発見できない。

🎨 直感で掴む — 2 変量の可視化

2 変量の可視化は「2 つの変数の関係を 1 枚の図にする」。 量×量=散布図、 量×質=箱ひげの群比較、 質×質=モザイクやヒートマップ。 SSDSE-B-2026 では、 A1101(人口)と L3221(消費支出)の散布図が定番で、 都市規模の大きい県ほど 1 世帯あたり支出が高めという緩い正相関が見える。

💡 学習のコツ:直感で全体像を掴んだら、 次の「📐 定義・数式」で正確な意味を押さえ、 最後に「🧮 実値で計算してみる」で SSDSE-B-2026 の都道府県データを使った計算をなぞるのが効率的です。 比喩は厳密ではないので、 必ず数式と並べて確認してください。

2 変量の可視化 は「可視化」カテゴリの中核概念。 初めて触れる読者は、 まずこの「🎨 直感」セクションだけ通読し、 必要になった時点で「📐 数式」「🐍 Python」「⚠️ 落とし穴」へ戻る読み方が定着しやすいです。

📐 定義・数式 — 2 変量の可視化

直感の次は、 厳密な定義を確認します。 数式は言語の一種で、 一度書き慣れれば「言葉より速く伝えられる」便利な道具。 慣れていない方は、 各記号が何を表すかを下の「🔬 記号読み解き」で 1 つずつ確認してください。

【2 変量の可視化 の中心定義式】
$$ r = \frac{1}{n-1}\sum_{i} \frac{(x_i-\bar{x})(y_i-\bar{y})}{s_x s_y} $$
この式が「2 変量の可視化」の骨格。 派生形・拡張形はここから生まれる。
📌 読み方のコツ:数式を見たら「左辺は何を定義しているか」「右辺の各項は何の合計・積・比か」を声に出して読み下してみる。 これだけで理解が大きく進みます。

🔬 記号読み解き — 数式を「言葉」に翻訳

上の数式を眺めるだけでは身につかないので、 各記号がどんな役割を担っているかを言葉で押さえます。 「数式を音読する習慣」がつくと、 論文や教科書を読むスピードが体感で 2 倍ほど上がります。

左辺(結果側)
2 変量の可視化 で定義したい量。 解釈の対象。 単位・スケールを必ず確認する。
右辺(構成要素)
観測できる入力変数(SSDSE-B-2026 でいえば A1101・L3221 など)と推定対象パラメータ(β, σ 等)の組合せ。
添字 i, j, t
i=サンプル(県)、 j=変数、 t=時点。 SSDSE-B-2026 は i ∈ {1..47} 県、 t ∈ {2008..2023}。
和記号 Σ
「足し合わせ」を表す。 添字 i が 1 から n まで動く範囲を明示するのが習慣。
期待値 E[·]、 分散 Var[·]
「ランダム変数の平均」と「ばらつき」。 SSDSE-B-2026 のような集計値でも、 標本誤差・年次変動の文脈で使える。
📚 補足:同じ記号でも分野・教科書によって意味が違うことがあります(例: $\hat{y}$ は予測値だが、 統計の文脈では推定量を意味することも)。 不明確なときは、 必ずその文書の記号定義表を確認しましょう。

🧮 実値で計算してみる — SSDSE-B-2026

数式だけでは「実感」が湧きにくいので、 実データ data/raw/SSDSE-B-2026.csv(47 都道府県 × 16 年)で 1 度手計算してみると理解が定着します。

SSDSE-B-2026 (2023) で A1101 と L3221 の相関 r ≈ 0.40。 散布図に都道府県名ラベルを付けると、 東京・神奈川・愛知が右上、 鳥取・島根が左下に配置される。 「人口 → 都市規模 → 物価 → 消費」の連鎖を仮説として読み解ける。

都道府県A1101 総人口A1303 65 歳以上L3221 消費支出
東京都14,086,0003,205,000341,320
神奈川県9,229,0002,390,000306,565
大阪府8,763,0002,424,000271,246
愛知県7,477,0001,923,000300,221
埼玉県7,331,0002,012,000344,092
千葉県6,257,0001,756,000306,943

上記は SSDSE-B-2026 (2023) からの抜粋。 手計算で確認した値が、 後述の Python 実装で得る値と一致することを確認すると、 「数式とコードの対応関係」がクリアに見えるようになります。

🐍 Python 実装 — 2 変量の可視化

公的統計(SSDSE-B-2026)を題材に、 最小限の Python コードで 2 変量の可視化 を動作させます。 まずはこのまま実行してみてください。

# 2 変量の可視化 を SSDSE-B-2026 で実行する最小コード
import pandas as pd
df = pd.read_csv('data/raw/SSDSE-B-2026.csv', encoding='cp932', skiprows=[1])
df = df[df['SSDSE-B-2026'] == 2023]  # 2023 年のみ抽出
print(df.shape)  # (47, 112)
print(df[['Prefecture','A1101','A1303','L3221']].head())

import matplotlib.pyplot as plt
fig, ax = plt.subplots(figsize=(8,6))
ax.scatter(df['A1101'], df['L3221'], alpha=0.6, color='#FF7043')
ax.set_xlabel('A1101 総人口')
ax.set_ylabel('L3221 消費支出')
ax.set_title('SSDSE-B-2026 (2023): 人口 vs 消費支出')
for i,row in df.iterrows():
    if row['A1101'] > 5_000_000:
        ax.annotate(row['Prefecture'], (row['A1101'], row['L3221']))
plt.savefig('bivariate_demo.png', dpi=100)
print('Pearson r:', df[['A1101','L3221']].corr().iloc[0,1])

上のコードで動かない場合は、 ①必要なパッケージがインストール済みか(pip install pandas scikit-learn scipy statsmodels matplotlib)、 ②データファイルが data/raw/SSDSE-B-2026.csv に存在するか、 ③encoding='cp932' になっているかを確認してください。

⚠️ よくある落とし穴 — 2 変量の可視化

2 変量の可視化 を使うときに初学者が踏みやすい失敗パターン。 1 度経験してしまえば次から避けられますが、 先に知っておくに越したことはありません。

❌ 線形相関だけで関係を判断
U 字や指数関係を見逃す。 散布図を必ず併用する(Anscombe の四つ組)。
❌ 点が重なって見えない
Overplotting。 透過度 alpha や jitter、 hexbin、 2D KDE を使う。
❌ 外れ値で相関が膨らむ/消える
東京都を除くと相関が大きく動く場面が多い。 ロバスト指標(Spearman)を併用。
🛡 防御策まとめ:「適用条件を確認する」「結果と前提をセットで記述する」「不確実性を必ず併記する」の 3 点を習慣化すれば、 上記の罠の大半は回避できます。

🔖 キーワード索引(R18 補強版)

この 2 変量可視化 ページで出てくる主要キーワードを一覧します。チップをクリックすると該当箇所へジャンプできます。

散布図ヒートマップHexbin2 次元 KDEバブルチャート相関pairplotクロス集計層化カラーマップ

💡 30 秒で分かる結論(R18)

📍 文脈ボックス(R18)── あなたが今見ているもの

あなたは、可視化 の入口で「2 変量可視化(Bivariate Visualization)」という用語に出会ったところです。 この用語は 2 つの変数の関係(相関・分布の重なり・因果の手掛かり)を 1 枚の図で表現する手法群。

本ページでは、まず数式や形式的定義よりも、実データ(SSDSE-B-2026, 47 都道府県)で具体的な値を見ます。 そのあと、数式 → 計算 → Python 実装 → 落とし穴 → 関連用語、という順で「使える知識」に組み立てていきます。

SSDSE-B-2026 補足:SSDSE-B-2026 の高齢化率と死亡率を散布図にすると、47 点が右上がりの強い直線関係(r ≈ +0.97)を描きます。

🎨 直感で掴む(R18)── 2 変量可視化 を絵で理解

2 変量可視化 の本質は、ひとことで言うと「2 つの変数の関係(相関・分布の重なり・因果の手掛かり)を 1 枚の図で表現する手法群。」です。 数式に踏み込む前に、まずイメージで掴みましょう。

ヒント:直感が掴めたら、次の「数式または定義」セクションで形式化を確認してください。 形式化と直感がつながれば、2 変量可視化 はもう武器です。

📐 数式または定義(R18)── 2 変量可視化 を形式化する

2 変量可視化 を一般化して書くと、観測ペア $(x_1, y_1), \dots, (x_n, y_n)$(ここでは $n = 47$ 都道府県)に対して、次の関係を仮定します。

$$ \boxed{\quad y = f(x_1, x_2, \dots, x_p; \theta) + \varepsilon \quad} $$

ここで $\theta$ は推定したいパラメータ、$\varepsilon$ はモデルでは説明しきれない誤差項。 2 変量可視化 の流派ごとに、$f$ の形(線形・ロジスティック・木)、$\varepsilon$ の分布(正規・二項・ポアソン)が変わります。

記号 意味 SSDSE-B での例
$x$説明変数A1303(65 歳以上人口比 × 死亡率)
$y$目的変数死亡率・出生率など
$n$標本数47(都道府県数)
$\theta$パラメータ傾き・切片など
$\varepsilon$誤差項モデルで説明しきれない残り

🔬 数式を言葉で読み解く(R18)

上の式 $y = f(x; \theta) + \varepsilon$ を「数学者の声」ではなく、「現場の声」で読み直してみます。

  1. $y = f(x; \theta)$:「あなたが説明したい量($y$)は、手元の説明材料($x$)から、ある関数 $f$ で計算できると 仮に 置く」
  2. $+ \varepsilon$:「とはいえ、$y$ は完全には $x$ で決まらない。残りは 誤差項 $\varepsilon$ として認める」
  3. パラメータ $\theta$ の推定:「データを 47 個並べ、$y$ と $f(x;\theta)$ の差をできるだけ小さくする $\theta$ を選ぶ」
  4. 不確かさの定量化:「$\theta$ も $f$ もデータから推定したので、信頼区間と $p$ 値で『どれくらい確信できるか』を必ず併走させる」

合言葉:「定義は短い、解釈は長い」。2 変量可視化 はたった 1 行の式ですが、それを 47 都道府県データに当てると、5 種類のチェックリスト(線形性・独立性・等分散・正規性・外れ値)が芋づる式に出てきます。

🧮 実値で計算してみる(R18)── SSDSE-B-2026 で 2 変量可視化

数式が読めたら、すぐに 実データ(SSDSE-B-2026, 47 都道府県, 2023 年度)で計算しましょう。 抽象を 47 行の表に落とすと、急に理解できることがあります。

▼ コード解説(SSDSE-B-2026 から A1303, A4200 を読む)
🎯 解説: 47 都道府県 × 1 年分(2023)を抽出し、2 変量可視化 の代表値(平均・中央値・標準偏差・最大/最小)を一気に確認する。
📥 入力例: data/raw/SSDSE-B-2026.csv(cp932, ヘッダ 2 行)
# 2 変量可視化 の代表値を SSDSE-B-2026 で確認
col = 'A1303'
s = df2023[col].astype(float)

print('n            :', len(s))             # 47
print('mean         :', round(s.mean(), 2))
print('median       :', round(s.median(), 2))
print('std          :', round(s.std(),  2))
print('min / max    :', s.min(), '/', s.max())
print('Top 3 prefs  :')
print(df2023.nlargest(3, col)[['Prefecture', col]])

結果を見ると、47 都道府県のうち上位 3 県が突出しているか、なだらかに分布しているか、すぐ分かります。 この「分布の形」が見えると、2 変量可視化 を語る土台ができたことになります。

🐍 Python 実装(R18)── 2 変量可視化 のミニ完全版

Python の実装は「読む → 集計 → 描く → 報告」を一直線に書きます。長いコードよりも、各ステップが分離していることが大事です。

① データ読み込み

▼ コード解説(SSDSE-B-2026 を pandas で読む)
🎯 解説: encoding='cp932' が必須。 2 行目は日本語ラベルなので skiprows で飛ばす。
📥 入力例: data/raw/SSDSE-B-2026.csv(東京・大阪などを含む 47 行)
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt

# SSDSE-B-2026 を読み込み(65 歳以上人口比 × 死亡率)
df = pd.read_csv('data/raw/SSDSE-B-2026.csv', encoding='cp932', skiprows=[1])

# 2023 年度(最新)だけ抽出
df2023 = df[df['SSDSE-B-2026'] == 2023].copy()
print(df2023.shape)         # (47, ...)
print(df2023[['Prefecture', 'A1303']].head())

② 集計と可視化

▼ コード解説(matplotlib で 47 都道府県の棒グラフ)
🎯 解説: sort_values + plot.bar で降順可視化。 都道府県名は x ラベル、 縦軸が A1303。
📥 入力例: 2023 年, 47 都道府県, 65 歳以上人口比 × 死亡率
# 2 変量可視化 を 47 都道府県でビジュアル化
fig, ax = plt.subplots(figsize=(9, 6))
df2023.sort_values(col, ascending=False).plot.bar(
    x='Prefecture', y=col, ax=ax, color='#00897B', legend=False)
ax.set_title('65 歳以上人口比 × 死亡率(SSDSE-B-2026, 2023)')
ax.set_ylabel(col)
ax.set_xlabel('都道府県')
plt.xticks(rotation=90)
plt.tight_layout()
plt.savefig('figures/viz-bivariate.html_r18_bar.png', dpi=120)
plt.show()

③ 報告用テンプレ

レポート文例:「SSDSE-B-2026(2023 年度, n=47)に基づいて 2 変量可視化 を確認したところ、平均は X、標準偏差は Y、上位 3 県は東京・神奈川・大阪であった。 SSDSE-B-2026 の高齢化率と死亡率を散布図にすると、47 点が右上がりの強い直線関係(r ≈ +0.97)を描きます。」

⚠️ 落とし穴(R18)── 2 変量可視化 で踏みやすい 5 つ

合言葉:レポート提出前に「ゼロ起点で 1 枚描き直す」「外れ値を 1 県外して再計算」「逆方向の因果を 1 行で否定する」を必ずやる。

🎙 narration まとめ(R18)── コード解説の総括

本ページに登場した Python コードはすべて以下のテンプレートで読み解けます:

▼ コード解説(テンプレート)
🎯 解説: ① 読む → ② 集計 → ③ 描く → ④ 検定 → ⑤ 報告。 中間結果を必ず print して人間が確認できるようにする。
📥 入力例: SSDSE-B-2026.csv(47 都道府県 × 約 110 列)
📤 出力例: 図 1 枚 + 統計量 1 表 + レポート文 1 段落

覚え方:「Read → Roll up → Render → Read it back」。 最後の「Read it back」は、出力された数字や図を口に出して 1 度言うこと。 これで 2 変量可視化 の現場運用は十分に回ります。

❓ FAQ(R18)── よくある質問 7 連

Q1. 2 変量可視化 は機械学習でも使う?

使います。前処理(特徴量 → 入力ベクトル)、評価(指標の可視化)、解釈(係数の可視化)など、機械学習のあらゆる工程で 2 変量可視化 は登場します。

Q2. n=47 で十分?

記述統計や 1 変量・2 変量の可視化には十分。ただし複数の説明変数を同時に検討するときは、自由度が枯れます。bootstrap や情報量規準(AIC/BIC)で補強しましょう。

Q3. SSDSE-B-2026 はどこで手に入る?

独立行政法人統計センター(NSTAC)「SSDSE」サイトから無料でダウンロードできます。本ページの実装はすべて data/raw/SSDSE-B-2026.csv を前提にしています。

Q4. ライセンスは?

SSDSE は教育目的での利用が許諾されています(出典明示、改変記録)。論文公開時は出典欄に「総務省統計局, SSDSE-B-2026」を必ず書きましょう。

Q5. 2 変量可視化 を最短で身につけるには?

① ヒストグラム 1 枚を描く → ② 平均・中央値・標準偏差を読み上げる → ③ 上位 3 県・下位 3 県を暗記する → ④ 2 変量の相関を 1 つ確認する → ⑤ レポート 1 行にまとめる。これを 47 都道府県データで 3 回回せば、用語の地形が掴めます。

Q6. 2 変量可視化 に関する代表的な論文は?

本リポジトリの 論文一覧 から「可視化」カテゴリの論文を見ると、2 変量可視化 を実際に使った再現コードが付いています。

Q7. 報告書ではどの順で書く?

「目的 → データ → 2 変量可視化 の選択理由 → 結果(図 + 数値)→ 解釈 → 限界(n=47, 単年)→ 次の一手」の順が王道です。

📚 さらに踏み込む(R18)── 用語ネットワーク 16 件

用語は単独では覚えづらいので、前提・並列・発展の 3 方向で 16 件並べます。

勧め方:1 日 1 リンク。クリックして読んだら、2 変量可視化 のページに戻り、「2 変量可視化 とこの用語はどう違う?」を 1 行書く。

✅ 使う前のチェックリスト(R18)

🧪 ミニケース(R18)── 2 変量可視化 を 5 段階で完走する

  1. STEP 1:問いを書く ── 47 都道府県のうち「65 歳以上人口比 × 死亡率」が大きい県と小さい県では、暮らしぶりにどんな差があるか?
  2. STEP 2:データを読む ── SSDSE-B-2026 から A1303, A4200 を取り出し、2023 年度・47 行に絞る。
  3. STEP 3:分布を見る ── ヒストグラムと箱ひげ図で「上位 3・下位 3」を特定し、東京・神奈川・大阪などの突出を確認する。
  4. STEP 4:関係を測る ── 別の変数(人口・死亡率など)との 2 変量関係を散布図 + 相関で測る。
  5. STEP 5:報告する ── 「上位 3 県は X, Y, Z。これらは…」という 200 字レポートに落とす。

合言葉:5 STEP のうちどれか 1 段でも飛ばすと、結論が「数字だけ」になり、読者の腑に落ちなくなります。 2 変量可視化 は「数字 + 物語」のセットで完成です。

🚫 アンチパターン集(R18)── 2 変量可視化 で「やってはいけない」9 連

  1. 合成データを np.random.seed で作って「再現実験しました」と書く(教育用途では SSDSE-B-2026 を使うのが必須)
  2. カラムを iloc[:, 5] のように位置で参照し、SSDSE のバージョン違いで壊れるコードを書く
  3. 都道府県の集計順を「日本語五十音」「アルファベット」「東京から時計回り」など混在させ、図の解釈を難しくする
  4. 変数名を x1, x2, x3 のように匿名化し、読者が意味を追えないコードにする
  5. 軸を切り取って小さな差を大きく見せる(特に y 軸の最小値を 0 にしない)
  6. 外れ値の県を黙って削除する(必ず「東京を外した版」と「全件」を両方描く)
  7. p < 0.05 を「効果がある」と読み替える(本来は「偶然では説明しづらい」だけ)
  8. 相関 r を「因果の強さ」と書く(2 変量可視化 で因果は出ない)
  9. レポートの最後で「以上」と書いて閉じる(必ず「限界」と「次の一手」を 1 行ずつ)

🔎 深掘り解説(R18)── 2 変量可視化 を 30 分で 1 段深く

A. 歴史的背景

2 変量可視化 は、19 世紀末〜 20 世紀初頭の統計学黎明期から発達してきました。可視化 の中核として、Galton、Pearson、Fisher、Yule などが基礎を築き、現代では SSDSE のような公的データを使った教育素材で広く扱われています。

B. 数理的位置づけ

2 変量可視化 は、観測ペア $(x_i, y_i)_{i=1}^{n}$ から条件付き期待値 $E[y \mid x]$ または分布 $P(y \mid x)$ を推定する道具です。 線形・非線形・パラメトリック・ノンパラメトリックという 4 つの軸の中で、2 変量可視化 は「可視化」という棚に並んでいます。

C. 実装上の工夫

D. 学問体系の位置

2 変量可視化 は 記述統計データサイエンス機械学習 の交差点に位置します。 どの分野から入っても、いずれは 2 変量可視化 を通ります。

🎙 narration コレクション(R18)── 5 連ストック

同じテーマで使い回せる narration を 5 つ並べておきます。コピペして「コード解説」欄に貼ってください。

▼ コード解説(① 読み込み)
🎯 解説: SSDSE-B-2026 を読み、 2023 年度に絞る。 cp932 と skiprows=[1] を忘れない。
📥 入力例: data/raw/SSDSE-B-2026.csv
📤 出力例: 47 行 × 約 110 列の DataFrame
▼ コード解説(② 代表値)
🎯 解説: mean / median / std / min / max を一気に表示。 平均と中央値が大きく離れたら歪んだ分布。
📥 入力例: df2023[A1303.astype(float)
📤 出力例: 5 つの代表値(4 桁程度の数値)
▼ コード解説(③ 可視化)
🎯 解説: matplotlib の bar / hist / boxplot を 1 枚ずつ重ねず作る。 figsize=(9,6) が標準。
📥 入力例: sort_values 後の DataFrame、 x=都道府県、 y=A1303
📤 出力例: PNG 1 枚(figures/viz-bivariate.html_r18_bar.png)
▼ コード解説(④ 関係を測る)
🎯 解説: 2 変量の関係は scipy.stats.pearsonr または df.corr() で測る。 r と p-value を同時に得る。
📥 入力例: df2023[[X, Y]](X=A1303)
📤 出力例: r=±0.xx, p=0.0xxx
▼ コード解説(⑤ 報告)
🎯 解説: 「目的→データ→2 変量可視化→結果→限界→次」の 6 段に分けて 200 字レポートに。
📥 入力例: 上で得た図 + 表 + r/p
📤 出力例: マークダウン 200 字程度

📔 ミニ用語集(R18)── 同じ話題で使う 12 語

標本(sample)
母集団から取り出した観測の集まり。本ページでは「47 都道府県, 2023 年度」が標本。
母集団(population)
標本の背後にある全体。47 都道府県は日本全土の「県別断面」と読める。
変数(variable)
各観測単位に対応する 1 つの数値・カテゴリ。SSDSE では人口・出生率など 約 110 列。
分布(distribution)
変数が取る値の頻度の形。hist / KDE / box で可視化する。
代表値(central tendency)
平均・中央値・最頻値の総称。歪んだ分布では中央値を優先。
ばらつき(dispersion)
標準偏差・IQR・分散の総称。代表値とセットで報告する。
外れ値(outlier)
分布の主部から大きく外れた観測。原因を 1 つ書ける外れ値だけ「正当な外れ値」と呼ぶ。
相関(correlation)
2 変量の同調具合。−1 〜 +1 の単数で要約。
因果(causation)
X を動かすと Y も動くという関係。相関では保証されない。
p 値(p-value)
帰無仮説下で「観測以上に極端な値」が出る確率。「効果あり」とは言えない点に注意。
信頼区間(confidence interval)
同じ実験を何度もやったとき、推定値が含まれる範囲。点推定とセットで提示。
正規化(normalization)
変数のスケールを揃える操作。Min-Max / Z-score / Robust の 3 種を覚える。

🗾 47 都道府県データの位置づけ(R18)

2 変量可視化 を学ぶときに使う SSDSE-B-2026 は、47 都道府県 × 約 110 列 × 複数年度のパネルデータです。 本ページでは「2023 年度の 47 行」を主に使います。 以下に、よく登場する代表的なカラムを示します。

SSDSE コード 日本語名 単位 2 変量可視化 での主な使い方
Code地域コードJOIN キー
Prefecture都道府県名カテゴリ軸・ラベル
A1101総人口説明変数(規模)
A130365 歳以上人口高齢化率の分子
A4101出生数人口動態の説明変数
A4200死亡率目的変数の代表
B4101年平均気温気候系の説明変数
L3221消費支出家計の目的変数

使い方のコツ:列名はすべて A1101 のような英数記号です。SSDSE のコードブックで日本語ラベルを確認しながら使ってください。 本ページの例では A1303, A4200(65 歳以上人口比 × 死亡率)を中心に使っています。

👣 ステップバイステップ(R18)── 2 変量可視化 を 10 行で実装する

解説は最小限。コードは 10 行以内。これで 2 変量可視化 の最短ルートが手に入ります。

  1. import pandas as pd
  2. df = pd.read_csv('data/raw/SSDSE-B-2026.csv', encoding='cp932', skiprows=[1])
  3. df = df[df['SSDSE-B-2026'] == 2023]
  4. col = 'A1303'
  5. print(df[['Prefecture', col]].sort_values(col, ascending=False).head())
  6. import matplotlib.pyplot as plt
  7. df.plot.hist(y=col, bins=20)
  8. plt.title('65 歳以上人口比 × 死亡率(SSDSE-B-2026, 2023)')
  9. plt.savefig('figures/viz-bivariate.html_r18_hist.png', dpi=120)
  10. plt.show()

注意:10 行で動かせる、というだけで、これがゴールではありません。 2 変量可視化 の本当の難しさは「描いた図をどう解釈するか」「報告にどう落とすか」にあります。

📖 さらに学ぶには(R18)── 学習ロードマップ 4 段

  1. レベル 1(30 分):本ページの「30 秒で分かる結論」と「直感で掴む」だけ読む。SSDSE-B-2026 を 1 度ダウンロードして開く。
  2. レベル 2(2 時間):「Python 実装」セクションを写経し、A1303, A4200 の図を 1 枚作る。報告 200 字を書く。
  3. レベル 3(半日):「数式または定義」「数式を言葉で読み解く」を踏まえ、別の 2 つの変数で同じ分析を反復。3 通り作って比べる。
  4. レベル 4(1 週間):本リポジトリの 論文一覧 から「可視化」カテゴリの論文 1 本を完走。再現コードを動かして、2 変量可視化 の応用範囲を体感する。

📝 報告フォーマット(R18)── 2 変量可視化 を 200 字で書く

2 変量可視化 の結果を、ゼミ・卒論・社内会議で報告するときの定型文を 3 つ用意しました。 最初は丸ごとコピー、慣れたら差し替えて使ってください。

テンプレ A:研究レポート向け

「本研究では、SSDSE-B-2026(n=47, 2023 年度)を用いて 2 変量可視化 を確認した。 主たる説明変数は A1303, A4200(65 歳以上人口比 × 死亡率)であり、47 都道府県を対象とした分布の確認、相関の評価、2 変量可視化 を用いた分析を実施した。 分析の結果、上位 3 県・下位 3 県の特徴と、SSDSE-B-2026 の高齢化率と死亡率を散布図にすると、47 点が右上がりの強い直線関係(r ≈ +0.97)を描きます。」

テンプレ B:ビジネスレポート向け

「65 歳以上人口比 × 死亡率 を 47 都道府県で比較したところ、東京・神奈川・大阪など大都市圏が突出していることが分かった。 2 変量可視化 を用いた分析から、地域差は単に人口規模の違いだけでは説明できず、複数要因の組み合わせで生じていると示唆された。 今後の打ち手は、上位県のベストプラクティスを参考にしつつ、下位県への支援策を検討することである。」

テンプレ C:教育用講義スライド向け

「皆さん、2 変量可視化 はひとことで言うと『2 つの変数の関係(相関・分布の重なり・因果の手掛かり)を 1 枚の図で表現する手法群。』です。 今回は SSDSE-B-2026(総務省統計局, 47 都道府県, 2023 年度)を使って、実際の数字でこの考え方を確かめました。 皆さん自身でも、別の指標(人口、出生率、家計支出など)に置き換えて同じ手順を試してみてください。」

🔭 3 つの視点で 2 変量可視化 を見る(R18)

同じ用語でも、見る立場によって意味が変わります。3 つの視点を切り替えて、用語の輪郭を立体的に掴みましょう。

視点 ① 統計学者の目

統計学者にとって 2 変量可視化 は「データから母集団を推定する道具」です。 確率モデル・尤度・不偏性・効率性・一致性などの数学的性質に注目し、漸近理論で性能保証を行います。 47 都道府県データは「小標本(n=47)」と分類され、bootstrap や情報量規準による補強が必要になります。

視点 ② データサイエンティストの目

データサイエンティストにとって 2 変量可視化 は「ビジネス課題を数字で答えるパイプラインの 1 部品」です。 モデルの理論的性質より、運用性・解釈性・更新コストを重視します。 SSDSE のような公的データを用いるときは「データの出典・更新頻度・ライセンス」を最優先で確認します。

視点 ③ 教育者・学習者の目

教育の現場では 2 変量可視化 は「初学者が躓きやすいポイント」を含む単元です。 抽象的な数式よりも、具体的な 47 都道府県データで手を動かし、図を描き、結果を口頭で説明できるようになることが目標になります。 本ページの並び(直感 → 数式 → 計算 → Python → 落とし穴)は、まさにこの教育的アプローチに沿っています。

視点切り替えの効果:1 つの用語を 3 通りに眺めると、自分が今どの立場で議論しているか自覚できます。 論文を読むときは ①、現場で使うときは ②、人に教えるときは ③ ── と意識的に切り替えてください。

⚖️ 似た用語との使い分け(R18)── 8 列比較表

2 変量可視化 と似た用語を、使い分けの観点から並べます。違いを言語化できれば、迷いが減ります。

用語 目的 入力 出力 強み 弱み
2 変量可視化2 つの変数の関係(相関・分布の重なり・因果の手掛かり)を 1 枚の図で表現する手法群。47 都道府県 × 約 110 変数図 + 表 + 200 字レポート直感的、再現容易小標本(n=47)の制約
相関係数2 変量の同調を 1 数で要約x, y の 47 ペアr ∈ [−1, +1]シンプル非線形は捉えられない
線形回帰条件付き期待値の線形近似説明変数群回帰係数・予測値解釈容易非線形には弱い
ロジスティック回帰2 値分類説明変数群確率 + 係数分類問題の標準線形決定境界
ランダムフォレスト非線形分類・回帰大量変数予測 + 重要度非線形対応解釈やや難

❓ 拡張 FAQ(R18)── 詰まりがちな 8 つの疑問

Q1. 2 変量可視化 と「可視化」全体の関係は?

2 変量可視化 は 可視化 の中で「2 つの変数の関係(相関・分布の重なり・因果の手掛かり)を 1 枚の図で表現する手法群。」を担う基本道具です。可視化 の他のトピックは、この基本の応用または並列の道具にあたります。

Q2. 47 都道府県以外のデータで使えますか?

使えます。SSDSE-A(市区町村)、SSDSE-C(年次推移)、SSDSE-D・E(個票)など、2 変量可視化 の手順はそのまま適用できます。粒度(県・市・個人)に応じて n が変わるので、結果の信頼性も変わります。

Q3. SSDSE-B-2026 が将来更新されたら?

SSDSE は年に 1 度更新されます。2 変量可視化 のコード自体は変更不要ですが、結果(数値・図)は最新年度のものに置き換えてレポートしましょう。出典欄に「SSDSE-B-2027(仮)」と書き換えるのを忘れずに。

Q4. Excel でも同じことはできますか?

できます。ピボット → グラフ → 関数 で代表値や相関は出ます。ただし、再現性・履歴管理・自動化の面で Python に劣ります。学習用には Python を強く勧めます。

Q5. 2 変量可視化 で AI(機械学習)に進めますか?

進めます。2 変量可視化 は機械学習の「特徴量設計」と「結果解釈」の両端で必須です。AI と聞くと深層学習を連想しがちですが、SSDSE のような表形式データでは線形モデル + 2 変量可視化 の組み合わせで十分実用になります。

Q6. 「コードが動かない」ときは?

3 つ確認します:①ファイルパス(data/raw/SSDSE-B-2026.csv)が合っているか、②エンコーディングが cp932 か、③ヘッダ 2 行目の日本語ラベルを skiprows で飛ばしたか。これで 9 割解決します。

Q7. 図を保存できない場合は?

figures/ ディレクトリが存在しない可能性があります。import os; os.makedirs('figures', exist_ok=True) を先頭に追加してください。

Q8. 2 変量可視化 を勉強する優先順位は?

本ページの 12 セクションを順に読み進めるのが最短です。特に「直感 → 数式 → 計算 → Python」の 4 段が腑に落ちれば、用語の 80 % は理解できたとみなせます。

🎯 サマリーカード(R18)── 1 ページ印刷用

用語2 変量可視化(Bivariate Visualization)
カテゴリ可視化
ひとこと定義2 つの変数の関係(相関・分布の重なり・因果の手掛かり)を 1 枚の図で表現する手法群。
SSDSE-B での使い方SSDSE-B-2026 の高齢化率と死亡率を散布図にすると、47 点が右上がりの強い直線関係(r ≈ +0.97)を描きます。
主な道具pandas / matplotlib / scipy / statsmodels / scikit-learn
最大の注意n=47 の小標本・単位混在・因果と相関の混同
学習ステップ読む → 集計 → 描く → 検定 → 報告
代表的な関連用語相関係数・回帰分析・ヒストグラム・散布図・標準偏差

このカードを印刷し、SSDSE-B-2026 で 1 回手を動かせば、用語の「使える形」が定着します。 2 変量可視化 はあくまで「2 つの変数の関係(相関・分布の重なり・因果の手掛かり)を 1 枚の図で表現する手法群。」というシンプルな考え方の道具ですので、迷ったらこの 1 行に戻ってください。