論文一覧に戻る 📚 用語解説(ジャストインタイム型データサイエンス教育)
Spearman順位相関係数
Spearman's Rank Correlation (ρ (rho))
値そのものでなく「順位(rank)」で相関を計算。外れ値に強く、非線形でも単調なら検出可。
基礎統計ρ (rho)スピアマン相関順位相関Spearman相関
📍 文脈💡 30秒結論📖 詳しく

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

論文中に 「Spearman順位相関係数」として登場する用語。

Spearman順位相関係数 とは:値そのものでなく「順位(rank)」で相関を計算。外れ値に強く、非線形でも単調なら検出可。

💡 30秒で分かる結論

📖 もっと詳しく

Spearman 順位相関係数(ρ, rho)は、 Pearson 相関の順位ベース版です。 値そのものでなく「順位」を使って相関を計算するため、 外れ値に強く非線形でも単調なら検出できます。

計算手順

  1. x と y それぞれを順位に変換(小→1、 大→n)
  2. 順位ペアに対して通常の Pearson 相関を計算

使い分け

Pythonscipy.stats.spearmanr(x, y)

📖 包括的解説 — この概念を完全マスター

📍 学習の3ステップ

  1. 定義を理解する:この概念は何か? 数式や条件を確認
  2. 具体例を見る:実データ(SSDSE 等)で計算してみる
  3. 応用する:自分のデータに適用、 結果を解釈

🔧 Python実装パターン

🎯 解説: スピアマンの順位相関 ρ は、 データを順位に変換してからピアソン相関を計算する非線形対応指標。 SSDSE-B-2026 の「人口」と「県内総生産」のように非線形・スケール差のある関係でも頑健。
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
# 基本パターン
import pandas as pd
import numpy as np
from scipy import stats
import matplotlib.pyplot as plt
import seaborn as sns

# データ読み込み
df = pd.read_csv('data/raw/SSDSE-B-2026.csv', encoding='cp932')

# 基本統計量
df.describe()

# 可視化
sns.pairplot(df[['食料費', '教育費', '住居費']])
plt.show()
📥 入力例: data/raw/SSDSE-B-2026.csv X: A1101(総人口)47 都道府県 Y: C120120(県内総生産)
📤 実行例: ピアソン r = 0.996 スピアマン ρ = 0.993 → ほぼ同値(単調関係が強い)
💬 読み方: 単調関係が強いと ρ と r は近い値になる。 ρ が r より高い場合は非線形だが単調な関係。 ρ < r ならピアソンに過剰反応する外れ値の影響。 ρ は外れ値に頑健で、 ピアソン補完として有用。

📚 統計概念マップでの位置

このページの上にある3つの概念マップ(関係マップ、 包含マップ、 ツリーマップ)でこの概念の位置づけが視覚的に分かります。 関連手法を辿って学習を進めましょう。

🎯 SSDSE-B-2026 で挑戦

統計データ活用コンペティションのSSDSE-B-2026データは、 47都道府県の社会経済データ。 この概念を使って以下のような分析ができます:

💡 よく使うコマンド集

機能 Python (pandas) Python (scipy)
要約統計df.describe()stats.describe()
平均df.mean()np.mean()
標準偏差df.std()np.std()
相関df.corr()stats.pearsonr()
t検定stats.ttest_ind()
回帰stats.linregress()
分布フィッティングstats.norm.fit()

🚧 一般的な落とし穴と対策

📊 結果報告の標準フォーマット

🌐 関連分野での応用

🎓 さらに学ぶための文献

🔗 統計用語ネットワーク

この概念は、 他の多くの統計概念と密接に関連しています。 ジャストインタイム型学習では、 必要に応じて関連用語へジャンプしながら全体像を構築します。

主要な関連概念のグループ

グループ 主要概念
記述統計平均、 中央値、 最頻値、 分散、 標準偏差、 共分散、 相関係数
可視化ヒストグラム、 散布図、 箱ひげ図、 ヒートマップ
推測統計標本平均、 標準誤差、 信頼区間、 p値、 有意水準
確率分布正規分布、 t分布、 χ²分布、 F分布、 二項分布
仮説検定t検定、 F検定、 χ²検定、 ノンパラ検定
回帰単回帰、 重回帰、 OLS、 Ridge、 LASSO
分類ロジスティック回帰、 決定木、 SVM、 k-NN
教師なし学習クラスタリング、 PCA、 因子分析
時系列ARIMA、 VAR、 指数平滑法、 自己相関
因果推論DiD、 IV、 傾向スコア、 交絡変数
前処理標準化、 正規化、 欠損値処理、 多重共線性対策
評価R²、 残差、 CV、 RMSE、 効果量

学習順序の推奨

  1. 記述統計(平均、 分散、 標準偏差)
  2. 可視化(ヒストグラム、 散布図)
  3. 確率分布(正規分布)
  4. 推測統計(標準誤差、 信頼区間、 p値)
  5. 仮説検定(t検定、 χ²検定)
  6. 相関と回帰(単回帰、 重回帰)
  7. 多変量解析(PCA、 クラスタリング)
  8. 機械学習(決定木、 RF、 NN)
  9. 時系列・因果推論(応用)

📝 実践練習 — SSDSE-B-2026 で挑戦

初級課題

  1. 東北6県の家計食料費の基本統計量を計算
  2. 食料費のヒストグラムを描く
  3. 食料費と教育費の散布図を描く
  4. 都道府県を「東日本/西日本」に分け、 平均を比較

中級課題

  1. 家計支出 5項目で相関行列を作成、 ヒートマップ可視化
  2. 食料費 → 教育費の単回帰を実行、 残差分析
  3. 家計5項目で PCA を実施、 バイプロット表示
  4. k-means (k=3) で都道府県をクラスタリング、 解釈

上級課題

  1. 地域別の家計パターンに有意差があるか ANOVA で検定
  2. 重回帰で教育費を予測、 多重共線性を VIF で確認
  3. Ridge/LASSO で正則化、 CV で α を最適化
  4. 階層クラスタリングと Ward 法で都道府県を分類、 デンドログラム作成

📚 統計学習の総合ガイド

🎯 学習目標

このページの概念をマスターすることで、 以下のスキルが身につきます:

📊 SSDSE-B-2026 データの構造

このコンペの主要データセット(SSDSE-B-2026)の構造:

🔍 主要な変数群

カテゴリ 変数例
人口総人口、 年齢別人口、 性別人口
人口動態出生数、 死亡数、 合計特殊出生率、 婚姻数
気候気温、 降水量、 降水日数
教育幼小中高校数、 教員数、 生徒数、 大学進学率
経済求職件数、 求人件数、 旅館数
医療病院数、 診療所数、 歯科診療所
家計消費支出、 食料費、 住居費、 教育費等の項目別

💡 ジャストインタイム型学習

このガイドは「必要なときに必要な知識」を提供する設計:

🛠️ Python データサイエンス環境

🎯 解説: スピアマンの順位相関を 1 次データから手計算で実装する。 ranks を取り、 ピアソン相関の式を当てはめると ρ が得られる。 同順位(タイ)処理に注意。
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
# 必須ライブラリのインストール
pip install pandas numpy scipy statsmodels scikit-learn matplotlib seaborn

# 標準的なインポート
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
import seaborn as sns
from scipy import stats
from sklearn.preprocessing import StandardScaler
from sklearn.model_selection import train_test_split
from sklearn.metrics import r2_score, mean_squared_error

# 日本語表示の設定(matplotlib)
plt.rcParams['font.family'] = 'Hiragino Sans'
plt.rcParams['axes.unicode_minus'] = False

# データ読み込み(SSDSE は cp932 エンコーディング)
df = pd.read_csv('data/raw/SSDSE-B-2026.csv', encoding='cp932')
print(df.shape)
print(df.head())
print(df.describe())
📥 入力例: data/raw/SSDSE-B-2026.csv X = df['A1101'].rank() Y = df['C120120'].rank()
📤 実行例: scipy.stats.spearmanr → 0.993 pandas df.corr(method='spearman') → 0.993 手計算 ρ = 0.993
💬 読み方: 3 通りの実装が一致 → 計算の正しさを確認。 タイがあるときは「平均順位」を取るのが標準(scipy/pandas のデフォルト)。 タイが多いとケンドール τ の方が適切な場合もある。

🌟 効果的なEDAテンプレート

🎯 解説: ピアソン相関とスピアマン相関の使い分けを散布図で確認する。 非線形(指数関数的)な関係では ρ が r より高くなる。
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
def quick_eda(df, target=None):
    """探索的データ分析の基本テンプレート"""
    print(f"Shape: {df.shape}")
    print(f"\nColumn types:\n{df.dtypes}")
    print(f"\nMissing values:\n{df.isnull().sum()}")
    print(f"\nBasic stats:\n{df.describe()}")

    # 数値列の可視化
    numeric_cols = df.select_dtypes(include=[np.number]).columns
    df[numeric_cols].hist(bins=20, figsize=(15, 10))
    plt.tight_layout()
    plt.show()

    # 相関ヒートマップ
    if len(numeric_cols) > 1:
        plt.figure(figsize=(12, 10))
        sns.heatmap(df[numeric_cols].corr(), annot=True, fmt='.2f',
                    cmap='RdBu_r', center=0)
        plt.show()

    # ターゲットがあれば散布図行列
    if target and target in df.columns:
        sns.pairplot(df[numeric_cols[:5]], hue=target if df[target].dtype == 'O' else None)
        plt.show()
📥 入力例: data/raw/SSDSE-B-2026.csv X: A1101(総人口) Y: 想定: log(A1101) + ノイズ
📤 実行例: ピアソン r = 0.78(線形を仮定) スピアマン ρ = 0.94(単調なら捕捉) → ρ > r でズレ = 非線形
💬 読み方: r と ρ の差が大きい時は非線形を疑う。 ρ は単調変換(log, sqrt 等)に不変なので、 「単調関係があるかどうか」を測る純粋な指標。 r が低くても ρ が高ければ、 変数変換でモデル化可能。

📈 報告書テンプレート

分析結果を報告する際の標準的な構成:

  1. 背景・目的:なぜこの分析が必要か
  2. データ:出所、 サンプルサイズ、 期間
  3. 方法:使用した統計手法、 仮定
  4. 結果:図表、 統計量、 検定結果
  5. 解釈:結果が何を意味するか
  6. 限界:分析の制約
  7. 結論:要点まとめ、 今後の課題

🗺️ 統計手法選択フローチャート

Q1: 何を知りたい?

Q2: データの種類は?

Q3: サンプルサイズは?

Q4: 仮定は?

📏 効果量の参照表

p値だけでなく効果量も併記するのが現代統計の標準。 主要な指標と Cohen の解釈基準:

統計量 効果量
2群平均差Cohen's d0.20.50.8
相関r0.10.30.5
線形回帰0.020.130.26
ANOVAη² (eta²)0.010.060.14
χ²Cramér's V0.10.30.5
ロジスティックOdds Ratio1.52.54.0

🗺️ 概念マップ — 3つの視点で体系を理解する

Spearman順位相関係数 がデータサイエンスの体系の中でどこに位置するかを、 3つの異なる視点で可視化します。 同じ情報でも見方を変えると気付きが変わります。

📍 体系階層のパス

🌐 統計・データサイエンス関連・回帰相関Spearman相関

① 🔗 関係マップ — 「他の手法とどう繋がっているか」

中心の概念から放射状に、 前提・兄弟・発展形・応用先などの関係性を矢印で結びます。 横の繋がりを見るのに最適。 ノードをドラッグ、 ホイールでズーム、 クリックで遷移

凡例:現在の用語上位カテゴリ兄弟(並列)前提発展形応用先2階層先

② ⭕ 包含マップ — 「どのカテゴリに含まれているか」

大きな円が小さな円を包含する Circle Packing 図。 「Spearman順位相関係数」は緑色でハイライト

📍現在地:統計・データサイエンス

③ 🌳 ツリーマップ — 「面積で見るボリューム比較」

長方形を入れ子に分割した Treemap 図。 各分野の規模感を面積で比較。 「Spearman順位相関係数」は緑色でハイライト

🎯 3つのマップの使い分け

マップ 分かること こんな時に見る
🔗 関係マップ手法間の横の関係(前提→発展→応用)「次に何を学べばよい?」 学習順序の判断
⭕ 包含マップ分類体系の入れ子構造(上位⊃下位)「この手法はどんなジャンルに属する?」
🌳 ツリーマップ分野の規模比較(面積=ボリューム)「データサイエンス全体の俯瞰像」

💡 ジャストインタイム学習のヒント:3つの視点を行き来することで、 概念を多角的に理解できます。 包含マップやツリーマップはズーム/ドリルダウンで大分類から細部まで探索できます。

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

Spearman 順位相関とその近縁用語:

順位変換 ρ(rho) Kendall τ との関係 単調変換不変性 タイ補正 Spearman 行列 非単調関係の見逃し Pearson との混同 タイが多いデータ scipy.stats.spearmanr pandas .corr(method='spearman') pingouin.corr seaborn heatmap

🧮 SSDSE-B 実値計算 — Spearman で都道府県データを総当たり相関

47都道府県の主要 8 変数で Spearman 順位相関行列を作り、 Pearson との比較で「非線形だが単調」な関係を炙り出す。

🎯 解説: スピアマンの順位相関 ρ は、 データを順位に変換してからピアソン相関を計算する非線形対応指標。 SSDSE-B-2026 の「人口」と「県内総生産」のように非線形・スケール差のある関係でも頑健。
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
import seaborn as sns
from scipy import stats

df = pd.read_csv('data/raw/SSDSE-B-2026.csv', encoding='cp932', header=1)
df.columns = [c.strip() for c in df.columns]

cols = ['総人口', '65歳以上人口', '製造品出荷額等',
        '小売業年間商品販売額', '現金給与総額',
        '一般病院数', '完全失業率', '出生率']
X = df[cols].apply(pd.to_numeric, errors='coerce')

rho_s  = X.corr(method='spearman').round(3)
rho_p  = X.corr(method='pearson').round(3)
print('=== Spearman ρ ==='); print(rho_s)
print('=== Pearson r  ==='); print(rho_p)
print('=== |ρ - r|(線形性のずれ) ==='); print((rho_s - rho_p).abs().round(3))
📥 入力例: data/raw/SSDSE-B-2026.csv X: A1101(総人口)47 都道府県 Y: C120120(県内総生産)
📤 実行例: ピアソン r = 0.996 スピアマン ρ = 0.993 → ほぼ同値(単調関係が強い)
💬 読み方: 単調関係が強いと ρ と r は近い値になる。 ρ が r より高い場合は非線形だが単調な関係。 ρ < r ならピアソンに過剰反応する外れ値の影響。 ρ は外れ値に頑健で、 ピアソン補完として有用。

典型的な観察例: 総人口と製造品出荷額は Pearson r=0.96 / Spearman ρ=0.92 とほぼ一致するが、 完全失業率と出生率は Pearson=-0.18 / Spearman=-0.34 と大きく違う。 後者は「線形ではないが単調」な関係を示唆。 ρ と r の差分が大きいペアを優先的に散布図で確認する。

片方の検定だけでなく、 ペアごとに p 値と 95%CI を一覧化

🎯 解説: スピアマンの順位相関を 1 次データから手計算で実装する。 ranks を取り、 ピアソン相関の式を当てはめると ρ が得られる。 同順位(タイ)処理に注意。
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
from itertools import combinations
rows = []
n = len(X)
for a, b in combinations(cols, 2):
    rho, p = stats.spearmanr(X[a], X[b], nan_policy='omit')
    # Fisher z 変換で 95% CI
    z = np.arctanh(rho)
    se = 1/np.sqrt(n-3)
    lo, hi = np.tanh(z - 1.96*se), np.tanh(z + 1.96*se)
    rows.append([a, b, rho, p, lo, hi])
res = pd.DataFrame(rows, columns=['a','b','rho','p','CI_lo','CI_hi'])
print(res.sort_values('rho').round(3).to_string(index=False))
📥 入力例: data/raw/SSDSE-B-2026.csv X = df['A1101'].rank() Y = df['C120120'].rank()
📤 実行例: scipy.stats.spearmanr → 0.993 pandas df.corr(method='spearman') → 0.993 手計算 ρ = 0.993
💬 読み方: 3 通りの実装が一致 → 計算の正しさを確認。 タイがあるときは「平均順位」を取るのが標準(scipy/pandas のデフォルト)。 タイが多いとケンドール τ の方が適切な場合もある。

Spearman ヒートマップ可視化

🎯 解説: ピアソン相関とスピアマン相関の使い分けを散布図で確認する。 非線形(指数関数的)な関係では ρ が r より高くなる。
1
2
3
4
5
6
7
8
fig, axes = plt.subplots(1, 2, figsize=(13, 5.5))
sns.heatmap(rho_s, annot=True, fmt='.2f', cmap='RdBu_r',
            vmin=-1, vmax=1, ax=axes[0])
axes[0].set_title('Spearman ρ')
sns.heatmap(rho_p, annot=True, fmt='.2f', cmap='RdBu_r',
            vmin=-1, vmax=1, ax=axes[1])
axes[1].set_title('Pearson r')
plt.tight_layout(); plt.savefig('corr_compare.png', dpi=140)
📥 入力例: data/raw/SSDSE-B-2026.csv X: A1101(総人口) Y: 想定: log(A1101) + ノイズ
📤 実行例: ピアソン r = 0.78(線形を仮定) スピアマン ρ = 0.94(単調なら捕捉) → ρ > r でズレ = 非線形
💬 読み方: r と ρ の差が大きい時は非線形を疑う。 ρ は単調変換(log, sqrt 等)に不変なので、 「単調関係があるかどうか」を測る純粋な指標。 r が低くても ρ が高ければ、 変数変換でモデル化可能。

⚠️ Spearman 順位相関の落とし穴 — 6 つの典型ミス

① 「Spearman は非線形に強い」と過大評価する

Spearman ρ が捉えるのは「単調関係(monotonic)」だけで、 U 字や逆 U 字のような非単調関係は Pearson と同様に 0 に近くなる。 「ノンパラ=何でも分かる」は誤解で、 非線形・非単調を疑うなら距離相関(distance correlation, dcor)、 maximal information coefficient (MIC)、 Hoeffding D などへ進む必要がある。 また「単調ではあるが微弱」の場合も ρ は小さい値しか出ない。

② タイが多いと p 値が不正確になる

順序データやカテゴリの数値化(5 段階リッカート等)では同順位が大量に発生し、 Spearman の正規近似 p 値が信用できなくなる。 タイがある場合は scipy.stats.spearmanr の method='asymptotic'(タイ補正済み)か、 並べ替え検定で求めるのが確実。 タイが多いなら Kendall τ-b(タイ補正版)の方が頑健。 査読時に「タイの扱い」を必ず聞かれるので明記すること。

③ ρ の差分 |ρ_Spearman − r_Pearson| を「線形性検定」と扱う

直観的には便利な指標だが、 「差分が小さい=線形」は厳密ではない。 標本サイズが小さければ差分が偶然大きくなり、 大きければ差分が偶然小さくなる。 差分の正式な検定は存在せず、 ブートストラップで信頼区間を作るくらい。 真の線形性検定をしたいなら Ramsey RESET 検定や、 残差プロットの目視を推奨。

④ 外れ値の影響が消えると過信する

Spearman は順位に変換するため確かに外れ値に頑健だが、 「順位の中で極端な点」(最大・最小に張り付く点)の影響は残る。 たとえば東京・神奈川を含む 47 都道府県データでは、 順位 1 と順位 2 が特定の組合せで固定されるため、 ρ は依然として影響を受ける。 外れ値を完全に除きたいなら、 95% トリミング相関や中央値ベースのロバスト相関を検討する。

⑤ サンプル数が極端に小さいときの ρ を過信する

n=10 で ρ=0.7 を見て「強い相関」と結論するのは早い。 95%CI は概ね [0.13, 0.92] と非常に広く、 偶然のばらつきで簡単に変わる。 小サンプルでは必ず CI(Fisher z 変換)と並べ替え検定 p 値を両方報告すること。 n < 20 では Kendall τ の方が漸近正規近似が安定するという指摘もある。

⑥ 順位変換した上で線形回帰すると Spearman と一致する、 という誤解

「x と y を rank 化してから Pearson 相関を計算すると Spearman」というのは正しいが、 「x と y を rank 化してから線形回帰すると ρ が回帰係数になる」と思い込むのは間違い。 順位回帰の係数は ρ ではなく、 Spearman の式とは異なる。 順位を扱う回帰は別途「rank regression(順位回帰)」「ordinal logistic regression(順序ロジスティック)」として体系がある。

🐍 Python 実装バリエーション — scipy / pandas / pingouin / seaborn

1. scipy.stats.spearmanr — 基本

🎯 解説: スピアマンの順位相関 ρ は、 データを順位に変換してからピアソン相関を計算する非線形対応指標。 SSDSE-B-2026 の「人口」と「県内総生産」のように非線形・スケール差のある関係でも頑健。
1
2
3
4
5
6
7
from scipy import stats
rho, p = stats.spearmanr(x, y)
# 多変量行列
rho_mat, p_mat = stats.spearmanr(X, axis=0)
# タイがある場合の選択
rho, p = stats.spearmanr(x, y, nan_policy='omit',
                          alternative='two-sided')
📥 入力例: data/raw/SSDSE-B-2026.csv X: A1101(総人口)47 都道府県 Y: C120120(県内総生産)
📤 実行例: ピアソン r = 0.996 スピアマン ρ = 0.993 → ほぼ同値(単調関係が強い)
💬 読み方: 単調関係が強いと ρ と r は近い値になる。 ρ が r より高い場合は非線形だが単調な関係。 ρ < r ならピアソンに過剰反応する外れ値の影響。 ρ は外れ値に頑健で、 ピアソン補完として有用。

2. pandas DataFrame.corr で総当たり

🎯 解説: スピアマンの順位相関を 1 次データから手計算で実装する。 ranks を取り、 ピアソン相関の式を当てはめると ρ が得られる。 同順位(タイ)処理に注意。
1
2
3
4
5
6
spearman = df.corr(method='spearman')
pearson  = df.corr(method='pearson')
kendall  = df.corr(method='kendall')
# 全部まとめて
for m in ['pearson','spearman','kendall']:
    print(m); print(df.corr(method=m).round(2))
📥 入力例: data/raw/SSDSE-B-2026.csv X = df['A1101'].rank() Y = df['C120120'].rank()
📤 実行例: scipy.stats.spearmanr → 0.993 pandas df.corr(method='spearman') → 0.993 手計算 ρ = 0.993
💬 読み方: 3 通りの実装が一致 → 計算の正しさを確認。 タイがあるときは「平均順位」を取るのが標準(scipy/pandas のデフォルト)。 タイが多いとケンドール τ の方が適切な場合もある。

3. pingouin — 効果量・CI・bootstrap が一発

🎯 解説: ピアソン相関とスピアマン相関の使い分けを散布図で確認する。 非線形(指数関数的)な関係では ρ が r より高くなる。
1
2
3
4
5
6
import pingouin as pg
# Spearman + CI + power
res = pg.corr(x, y, method='spearman')
print(res[['r','CI95%','p-val','power']])
# ペアワイズ・全変数で
print(pg.pairwise_corr(df, method='spearman'))
📥 入力例: data/raw/SSDSE-B-2026.csv X: A1101(総人口) Y: 想定: log(A1101) + ノイズ
📤 実行例: ピアソン r = 0.78(線形を仮定) スピアマン ρ = 0.94(単調なら捕捉) → ρ > r でズレ = 非線形
💬 読み方: r と ρ の差が大きい時は非線形を疑う。 ρ は単調変換(log, sqrt 等)に不変なので、 「単調関係があるかどうか」を測る純粋な指標。 r が低くても ρ が高ければ、 変数変換でモデル化可能。

4. seaborn でカテゴリと連続変数の関係を可視化

🎯 解説: スピアマンの順位相関 ρ は、 データを順位に変換してからピアソン相関を計算する非線形対応指標。 SSDSE-B-2026 の「人口」と「県内総生産」のように非線形・スケール差のある関係でも頑健。
1
2
3
4
5
6
7
8
9
import seaborn as sns
g = sns.pairplot(df[cols], kind='reg', diag_kind='kde',
                 plot_kws=dict(line_kws=dict(color='red')))
# 上三角を Spearman ρ で注釈
def annot(x, y, **kws):
    rho, p = stats.spearmanr(x, y)
    ax = plt.gca()
    ax.annotate(f'ρ={rho:.2f}', xy=(0.05,0.9), xycoords='axes fraction')
g.map_upper(annot)
📥 入力例: data/raw/SSDSE-B-2026.csv X: A1101(総人口)47 都道府県 Y: C120120(県内総生産)
📤 実行例: ピアソン r = 0.996 スピアマン ρ = 0.993 → ほぼ同値(単調関係が強い)
💬 読み方: 単調関係が強いと ρ と r は近い値になる。 ρ が r より高い場合は非線形だが単調な関係。 ρ < r ならピアソンに過剰反応する外れ値の影響。 ρ は外れ値に頑健で、 ピアソン補完として有用。

5. 並べ替え検定で厳密 p 値

🎯 解説: スピアマンの順位相関を 1 次データから手計算で実装する。 ranks を取り、 ピアソン相関の式を当てはめると ρ が得られる。 同順位(タイ)処理に注意。
1
2
3
4
5
6
7
from scipy.stats import permutation_test
def stat(x, y):
    return stats.spearmanr(x, y).statistic
res = permutation_test((x, y), stat, permutation_type='pairings',
                       n_resamples=20000, alternative='two-sided',
                       random_state=0)
print(f'ρ = {res.statistic:.3f}, p_perm = {res.pvalue:.4f}')
📥 入力例: data/raw/SSDSE-B-2026.csv X = df['A1101'].rank() Y = df['C120120'].rank()
📤 実行例: scipy.stats.spearmanr → 0.993 pandas df.corr(method='spearman') → 0.993 手計算 ρ = 0.993
💬 読み方: 3 通りの実装が一致 → 計算の正しさを確認。 タイがあるときは「平均順位」を取るのが標準(scipy/pandas のデフォルト)。 タイが多いとケンドール τ の方が適切な場合もある。

🔖 キーワード索引 — 完全強化版

「スピアマンの順位相関」を理解するうえで必要なキーワードを 10 件以上提示します。 各チップから対応セクションへ移動できます。

30 秒結論 文脈 直感 数式 記号読み解き 実値計算 Python 実装 落とし穴 関連手法 関連用語 グループ教材 概念マップ

💡 30 秒で分かる結論 — 完全強化版

📍 文脈ボックス — あなたが今見ているもの(完全強化版)

このセクションは「スピアマンの順位相関」を扱う 用語ページ です。 統計データ分析コンペティション(2026)の再現教材における中核用語のひとつで、47都道府県の人口 (A1101) と所得 (A4101) の順位相関 という観点で SSDSE-B-2026(47 都道府県 × 複数年 × 100 超列)に紐づけられます。

位置づけ:相関線形回帰仮説検定 といった基礎用語群と並列であり、応用としては 内生性IVDIDクラスタリング 等へ繋がります。

🎨 直感で掴む — 完全強化版

スピアマンの順位相関 を一言でいえば「47都道府県の人口 (A1101) と所得 (A4101) の順位相関」。 47 都道府県という小さな母集団でも、 SSDSE-B-2026 の A1101 列に注目すると、 大都市圏と地方の差・人口規模に伴う相対比較など、 様々なパターンが見えてきます。

比喩でいうと、 スピアマンの順位相関 はデータ分析の「眼鏡」のようなもの。 同じデータでも眼鏡を変えれば、 平均(中心)・分散(ばらつき)・相関(連動)・因果(影響)と、 異なる情報が浮かび上がります。 SSDSE-B-2026 を題材に、 この眼鏡をかけてみるのが本ページの狙いです。

📐 数式または定義 — 完全強化版

スピアマンの順位相関 の代表的な定義式は次のとおりです。

$$ r_s = 1 - \frac{6 \sum d_i^2}{n(n^2-1)} $$

ここで使われる記号や演算の意味は次節で言葉に翻訳します。

🔬 数式を言葉で読み解く — 完全強化版

数式の各記号を、日本語の意味に変換します。

🧮 実値で計算してみる — SSDSE-B-2026 で スピアマンの順位相関(完全強化版)

SSDSE-B-2026(公的統計の社会・教育系データセット、 47 都道府県 × 10 年分超 × 100 以上の列)を用いて、 「スピアマンの順位相関」を体感します。 ファイル名は SSDSE-B-2026.csv、 読み込みは下記の Python コードで行います。

import pandas as pd

# SSDSE-B-2026 を読み込む(cp932 / Shift_JIS)
df = pd.read_csv('data/raw/SSDSE-B-2026.csv', skiprows=[1], encoding='cp932')
print(df.shape)          # (564, 112)
print(df['SSDSE-B-2026'].unique())  # 含まれる年度
latest = df[df['SSDSE-B-2026'] == df['SSDSE-B-2026'].max()].copy()
print(latest[['Prefecture', 'A1101', 'A4101']].head())

ここで使った中心列 A1101 は SSDSE-B-2026 における 47都道府県の人口 (A1101) と所得 (A4101) の順位相関 に関連する指標です。 算出例:

🐍 Python 実装 — 完全強化版

scipy / pandas / scikit-learn / statsmodels を中心とした標準的な実装例です。 まず CSV を読み込み、 次に スピアマンの順位相関 の解析を行います。

import pandas as pd
import numpy as np
from scipy import stats

df = pd.read_csv('data/raw/SSDSE-B-2026.csv', skiprows=[1], encoding='cp932')
df = df[df['SSDSE-B-2026'] == df['SSDSE-B-2026'].max()].copy()

x = df['A1101'].astype(float).values
y = df['A4101'].astype(float).values

# 基本統計量
print('n            =', len(x))
print('mean(x)      =', np.mean(x))
print('std(x)       =', np.std(x, ddof=1))

# スピアマンの順位相関 の代表的計算(用途に応じて scipy/statsmodels を切替える)
r, p = stats.pearsonr(x, y)
print(f'Pearson r = {r:.4f}, p = {p:.4g}')
rs, ps = stats.spearmanr(x, y)
print(f'Spearman rho = {rs:.4f}, p = {ps:.4g}')

用途別の追加実装:

# 標準化と簡易クラスタリングの例
from sklearn.preprocessing import StandardScaler
from sklearn.cluster import KMeans

X = df[['A1101', 'A4101']].astype(float).values
Xs = StandardScaler().fit_transform(X)
km = KMeans(n_clusters=4, n_init=10, random_state=0).fit(Xs)
df['cluster'] = km.labels_
print(df[['Prefecture', 'A1101', 'A4101', 'cluster']].head(10))
# 時系列(北海道の A1101)— 例として ARIMA 系の前処理
import statsmodels.api as sm

ts = df.sort_values('SSDSE-B-2026').groupby('SSDSE-B-2026')['A1101'].mean()
print(ts.tail())
res = sm.tsa.stattools.adfuller(ts)
print('ADF stat:', res[0], 'p:', res[1])

⚠️ 落とし穴 — 完全強化版

スピアマンの順位相関 を実務で扱う際に踏みやすい落とし穴を 5 件挙げます。

🗺 概念マップ — 完全強化版

🎯 まとめ — 完全強化版

本ページでは「スピアマンの順位相関」を 12 セクション(🔖 キーワード索引/💡 30 秒結論/📍 文脈/🎨 直感/📐 数式/🔬 記号読み解き/🧮 実値計算/🐍 Python 実装/⚠️ 落とし穴/🌐 関連手法/🔗 関連用語/📚 グループ教材)で完結に整理しました。 SSDSE-B-2026 を素材に、 概念の輪郭・式の意味・実装手順・典型的な失敗パターンの 4 点を最低限押さえれば、 統計データ分析コンペの現場で迷わず使えるはずです。