論文一覧に戻る 🕸 論文ネットワーク 🗺 用語ネットワーク 統計データ分析コンペ 教育用再現集
2021年度(令和3年度) 統計データ分析コンペティション | 統計活用奨励賞 [高校生の部]

外国人にとっての暮らしやすさとは

⏱️ 推定読了時間: 約30分
谷 優輝(慶應義塾湘南藤沢高等部) データ: SSDSE-B-2026(2019年断面・47都道府県)
🔬 相関分析🏷 外国人・国際
🔬 手法タグ / 🏷 応用タグ(クリックで同タグの論文をネットワーク検索)
🔬 再現カルテ — 原論文と同じデータ・同じ手法で再現

この教材は原論文と同じデータを読み込み、同じ手順で計算し直しています。画面に出る数値と図は、あなたのブラウザがその場で計算した結果です。

原論文が使ったデータ住民基本台帳に基づく人口、人口動態及び世帯数・人口推計・SSDSE-B-2021・在留外国人統計・過去の気象データ・統計でみる都道府県のすがた 2021・平成 29 年度日本語教育実態調査・労働力調査(基本集計)・工業統計調査・SSDSE-2020A
分析単位:都道府県
中核手法:相関分析
この教材が使うデータ
原論文(PDF)外国人にとっての暮らしやすさとは
統計活用奨励賞/谷 優輝(慶應義塾湘南藤沢高等部)
✅ この教材でできること
  • 原論文の中核手法(相関分析)を実データで実行できる
  • 分析に使うデータは同梱済みで、ブラウザ上でそのまま読み込める
  • 数値・図を最後まで再計算できる(相関分析)
突合監査の結果、主要データと中核手法はいずれも原論文と一致しています。

▶ ここに書いてある分析は、ページ下部の「🐍 ブラウザで動かす」でそのまま実行できます(インストール不要)。動かしているのは code/2021_H4_katsuyo.py(178 行)そのものです。

🏅 論文審査会コメント(審査員はここを評価した)
「外国人人口割合に関する記述に基づく現状把握を基に実に多角的に仮説設定を行い、単純な相関分析ではあるが研究としての完結性が強く、意外性も高い高校生らしい興味深い研究である。」
出典:統計センター「統計データ分析コンペティション」受賞論文PDF掲載の審査講評。プロの審査員が何を評価し、何を注文したかは論文の読み方の最良の手本になる。
📝 3行で分かる要約

目次

  1. 研究の背景と問い
  2. データと変数
  3. 外国人人口割合の地域分布
  4. 人口と外国人人口割合
  5. 要因の仮説と検証
  6. 結論
  7. 📥 データの準備
  8. 💼 実社会での応用
  9. ⚠️ よくある誤解
  10. 📖 用語集
  11. 📐 手法ガイド
  12. 🚀 発展の可能性
  13. 🎯 自分でやってみよう
  14. 🤔 Q&A
  15. 🐍 ブラウザで動かす

🎯 この記事を読むと何ができるようになるか

📥 データの準備(再現コードを動かす前に)

このページの分析を自分で再現するには、以下の手順でデータを準備してください。コードの編集は不要です。

1
データをダウンロードする 独立行政法人統計センターの SSDSE(教育用標準データセット) 配布ページから、以下のファイルをダウンロードします。
SSDSE-B-2026.csv ← SSDSE-B(都道府県データ)📥 直接DL
⬇ SSDSEダウンロードページを開く
2
ファイルを所定のフォルダに配置する ダウンロードしたCSVを、プロジェクトの data/raw/ フォルダに入れます。
2026 統計・データ解析コンペ/ ├── code/ │ └── 2021_H4_katsuyo.py ← 実行するスクリプト └── data/ └── raw/ SSDSE-B-2026.csv ← ここに置く
3
スクリプトをそのまま実行する ターミナルでプロジェクトルートに移動し、以下を実行します。
python3 code/2021_H4_katsuyo.py
図は html/figures/ に自動保存されます。
研究の背景と問い

日本の総人口は2011年以降、年々減少している。国立社会保障・人口問題研究所の「日本の将来推計人口(平成29年推計)」では、2017年時点の総人口の約30%分が2065年までにいなくなると予測された。一方で、日本に住む外国人の人口は年々増加しており(総務省の集計では増加数・総人口に占める割合ともに過去最高を更新)、その年齢構成は20〜39歳が約半分を占め、日本全体より若い。

そこで原論文の著者は「外国人に移り住んでもらうことが、人口減少・少子化を和らげる足掛かりになるのではないか」と考えた。 そのためには「外国人にとって暮らしやすい=移住したくなる地域の条件は何か」を明らかにする必要がある。 本研究は都道府県別の外国人人口割合を「暮らしやすさの結果」ととらえ、それを高める要因を統計的に探る。

研究の問い どのような要素が、都道府県別の外国人人口割合を高める要因になっているのか? 気候・言語(日本語教育)・労働環境(産業)のうち、何が効いているのか。
分析の流れ
外国人人口割合
を都道府県別に
算出
人口との
相関を確認
人口400万人
以下に絞る
6要因と
相関分析
受賞・著者(原論文1頁目より) 2021年度 統計データ分析コンペティション 統計活用奨励賞[高校生の部]/ 「外国人にとっての暮らしやすさとは」 谷 優輝(慶應義塾湘南藤沢高等部)。
論文審査会コメント:「外国人人口割合に関する記述に基づく現状把握を基に実に多角的に仮説設定を行い、単純な相関分析ではあるが研究としての完結性が強く、意外性も高い高校生らしい興味深い研究である。」

SSDSE-B ピアソンの積率相関係数 散布図・回帰直線 要因の仮説検証

データと変数

使用データ

本教材は独立行政法人統計センターの SSDSE(教育用標準データセット)-B 2026年版の2019年断面(47都道府県)を用いる。原論文は下表の多様な出典を組み合わせているが、本教材で実際に再計算できるのは SSDSE-B に収録された「総人口・日本人人口・年平均気温」に基づく部分のみである。

再現可能性のトリアージ(重要)
  • 実再現できる:外国人人口割合(=総人口−日本人人口 から算出)、人口との相関(図2)、年平均気温との相関(図3)。
  • 再現できない(=原論文の報告値を引用):年平均相対湿度・日本語教育機関数・日本語常勤教師数・完全失業率・製造品出荷額との相関(図4)。これらは SSDSE-B-2026 に列が存在しないため、原論文(統計でみる都道府県のすがた/文化庁調査/労働力調査/工業統計)の報告値をそのまま可視化する。
  • 再表現できない:市区町村別の箱ひげ図(原論文 図4)や円グラフ(図6・図7)は元データが手元にないため、数表・文章で紹介し「グラフは原論文参照」とする。

原論文が使用した変数(表1・表2 の要約)

変数出典(原論文)本教材での扱い
都道府県別 総人口・日本人人口人口推計(総務省統計局)2019年SSDSE-Bで実再現
都道府県別 外国人人口在留外国人統計(法務省出入国在留管理庁)2019年総人口−日本人人口で代用
年平均気温気象庁「過去の気象データ」2019年(SSDSE-B収録)SSDSE-Bで実再現
年平均相対湿度統計でみる都道府県のすがた2021(総務省統計局)報告値を引用
日本語教育実施機関・施設等数(一般)平成29年度日本語教育実態調査(文化庁)報告値を引用
日本語の常勤教師数平成29年度日本語教育実態調査(文化庁)報告値を引用
完全失業率労働力調査 基本集計(総務省統計局)2019年報告値を引用
製造物出荷額工業統計調査(経済産業省)2019年報告値を引用

算出する指標(原論文 表2)

外国人人口 = 総人口 − 日本人人口
外国人人口割合[%] = 外国人人口 ÷ 総人口 × 100
コードの流れ 以下では ①データ読み込みと指標の算出 → ②地域色の付与 の順に準備します。各ブロックは「目的 → コード → 実行結果の読み取り」で解説します。
やってみようデータ読み込みと外国人人口割合の算出
🎯 このステップの目的
SSDSE-B から都道府県データを読み込み、原論文の中心指標「外国人人口割合」を作ります。原論文 表2 の定義どおり、外国人人口=総人口−日本人人口 で求めます。
まずは分析の土台となる 47 都道府県 × 2019 年断面のデータを用意するところから。
📝 コード
 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
import os
import numpy as np
import pandas as pd
import matplotlib
matplotlib.use('Agg')
import matplotlib.pyplot as plt
from scipy import stats

plt.rcParams['font.family'] = 'Hiragino Sans'
plt.rcParams['axes.unicode_minus'] = False
plt.rcParams['figure.dpi'] = 150

FIG_DIR = 'html/figures'
DATA_B  = 'data/raw/SSDSE-B-2026.csv'
os.makedirs(FIG_DIR, exist_ok=True)

df_b = pd.read_csv(DATA_B, encoding='cp932', header=1)
df_b = df_b[df_b['地域コード'].str.match(r'^R\d{5}', na=False)].copy()
df_b['年度'] = df_b['年度'].astype(int)

# 原論文に合わせ 2019 年断面を使用
df = df_b[df_b['年度'] == 2019].copy().reset_index(drop=True)
assert len(df) == 47, f"47都道府県のはずが {len(df)} 行"

# 外国人人口 = 総人口 - 日本人人口(原論文 表2 の定義)
df['外国人人口']     = df['総人口'] - df['日本人人口']
df['外国人人口割合'] = df['外国人人口'] / df['総人口'] * 100

print(f"対象: {df['年度'].iloc[0]}{len(df)}都道府県")
print(f"外国人人口割合  平均 {df['外国人人口割合'].mean():.3f}%  中央値 {df['外国人人口割合'].median():.3f}%")
▼ 実行結果
対象: 2019年 47都道府県
外国人人口割合  平均 1.516%  中央値 1.357%
💡 実行結果の読み取り
  • header=1 でSSDSE-Bの2行目(日本語列名)を見出しにし、地域コードが「R+数字5桁」の47都道府県行だけを残します。
  • 外国人人口 = 総人口 − 日本人人口。これは原論文 表2 の全国値の作り方を都道府県単位に適用したもの。原論文本体は都道府県の外国人人口に法務省「在留外国人統計」を使っていますが、SSDSEだけで完結させるため差分方式で再現しています。
  • 実出力の平均 1.516%・中央値 1.357% は、大半の県が1%台で一部の大都市圏が高い、という右に裾を引いた分布であることを示します。
💡 Python TIPS df['A'] - df['B'] のような列同士の演算は要素ごと(行ごと)に実行され、forループは不要です。
やってみよう地域区分の付与(図の色分け用)
🎯 このステップの目的
散布図やランキングを見やすくするため、47都道府県を6地方に分けて色を割り当てます。分析結果は変えず、可視化を助けるための準備です。
指標ができたので、次のステップからの図づくりに向けて「地域色」を用意しておきます。
📝 コード
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
region_map = {
    '北海道': '北海道・東北', '青森県': '北海道・東北', '岩手県': '北海道・東北',
    '宮城県': '北海道・東北', '秋田県': '北海道・東北', '山形県': '北海道・東北',
    '福島県': '北海道・東北', '茨城県': '関東', '栃木県': '関東', '群馬県': '関東',
    '埼玉県': '関東', '千葉県': '関東', '東京都': '関東', '神奈川県': '関東',
    '新潟県': '中部', '富山県': '中部', '石川県': '中部', '福井県': '中部',
    '山梨県': '中部', '長野県': '中部', '岐阜県': '中部', '静岡県': '中部', '愛知県': '中部',
    '三重県': '近畿', '滋賀県': '近畿', '京都府': '近畿', '大阪府': '近畿',
    '兵庫県': '近畿', '奈良県': '近畿', '和歌山県': '近畿',
    '鳥取県': '中国・四国', '島根県': '中国・四国', '岡山県': '中国・四国',
    '広島県': '中国・四国', '山口県': '中国・四国', '徳島県': '中国・四国',
    '香川県': '中国・四国', '愛媛県': '中国・四国', '高知県': '中国・四国',
    '福岡県': '九州・沖縄', '佐賀県': '九州・沖縄', '長崎県': '九州・沖縄',
    '熊本県': '九州・沖縄', '大分県': '九州・沖縄', '宮崎県': '九州・沖縄',
    '鹿児島県': '九州・沖縄', '沖縄県': '九州・沖縄'
}
region_colors = {
    '北海道・東北': '#4e9af1', '関東': '#e05c5c', '中部': '#f0a500',
    '近畿': '#5cb85c', '中国・四国': '#9b59b6', '九州・沖縄': '#f39c12'
}
df['地域'] = df['都道府県'].map(region_map)
df['色']   = df['地域'].map(region_colors)
print(df['地域'].value_counts().to_string())
▼ 実行結果
地域
中部        9
中国・四国     9
九州・沖縄     8
北海道・東北    7
関東        7
近畿        7
💡 実行結果の読み取り
  • Series.map(辞書) は「1対1の置き換え」。都道府県名から地域名・色コードへ一気に変換しています。
  • 実出力の内訳(関東7・中部9・近畿7…)で、全47都道府県が漏れなく6地域に割り当てられたことを確認できます。
💡 Python TIPS 辞書での一括変換は .map()、条件分岐のロジックを当てるなら .apply() と使い分けます。
1
外国人人口割合の地域分布

まず47都道府県の外国人人口割合を高い順に並べ、全体像をつかむ。原論文4.1では市区町村別の箱ひげ図(図4)から「大半の市区町村は1%以下で、長野県川上村15.76%・群馬県大泉町14.46%などが突出」と報告している。本教材は市区町村データを持たないため、都道府県レベルのランキングで再現する。

都道府県別 外国人人口割合ランキング
図1:都道府県別 外国人人口割合ランキング(2019年・47都道府県)。外国人人口=総人口−日本人人口としてSSDSE-Bから算出した実再現図。色は地域区分。
(参考:原論文 図4 は市区町村別の箱ひげ図。最大値15.76%=長野県川上村。グラフは原論文参照。)
📌 このランキングの読み方
このグラフは
各都道府県の外国人人口割合を高い順に並べた棒グラフ。破線は全国平均。
読み方
左ほど割合が高い。棒の色(地域)を見ると、上位に関東・中部の県が集まる。
なぜそう解釈できるか
上位が東京都・愛知県・群馬県となり、原論文4.2の記述(東京都→愛知県→群馬県)と順位が一致する。
原論文の市区町村分布(図4)の報告値 最低値0%/第一四分位0.3559%/中央値0.6107%/平均0.8973%/第三四分位1.0809%/最大15.7586%。 1%以下の市区町村が全1741のうち1253を占め、10%超は長野県川上村(15.76%)・群馬県大泉町(14.46%)・長野県南牧村(12.56%)の3町村のみ。
やってみよう図1:都道府県別 外国人人口割合ランキング
🎯 このステップの目的
どの都道府県で外国人人口割合が高いのかを一望します。原論文 4.1〜4.2 の「東京都が最も高く、次いで愛知県、群馬県」という記述を、SSDSE-B から独立に再現できるか確かめます。
指標と色が揃ったので、まずは全体像=47都道府県のランキングを描きます。
📝 コード
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
ds = df.sort_values('外国人人口割合', ascending=False).reset_index(drop=True)
short = [s.replace('県','').replace('府','').replace('都','').replace('道','') for s in ds['都道府県']]

fig1, ax1 = plt.subplots(figsize=(12, 6))
ax1.bar(range(len(ds)), ds['外国人人口割合'], color=ds['色'], edgecolor='white', linewidth=0.5)
ax1.set_xticks(range(len(ds)))
ax1.set_xticklabels(short, rotation=90, fontsize=8)
ax1.set_ylabel('外国人人口割合 [%]', fontsize=12)
ax1.set_title('図1:都道府県別 外国人人口割合ランキング(2019年・SSDSE-Bより再現)', fontsize=13)
ax1.axhline(ds['外国人人口割合'].mean(), color='gray', ls='--', lw=1,
            label=f"全国平均 {ds['外国人人口割合'].mean():.2f}%")
from matplotlib.patches import Patch
handles = [Patch(facecolor=c, label=r) for r, c in region_colors.items()]
handles.append(ax1.get_legend_handles_labels()[0][0])
ax1.legend(handles=handles, fontsize=9, ncol=2)
ax1.grid(True, axis='y', alpha=0.3)
fig1.tight_layout()
fig1.savefig(os.path.join(FIG_DIR, '2021_H4_fig1.png'), bbox_inches='tight')
plt.close(fig1)

print("上位5:"); print(ds.head(5)[['都道府県','外国人人口割合']].to_string(index=False))
print("下位5:"); print(ds.tail(5)[['都道府県','外国人人口割合']].to_string(index=False))
▼ 実行結果
上位5:
都道府県  外国人人口割合
 東京都 4.033697
 愛知県 3.387588
 群馬県 2.924577
 三重県 2.748177
 大阪府 2.601221
下位5:
都道府県  外国人人口割合
和歌山県 0.644468
 高知県 0.572246
 宮崎県 0.557103
 青森県 0.478851
 秋田県 0.411523
💡 実行結果の読み取り
  • 実出力の上位は 東京都(4.03%) → 愛知県(3.39%) → 群馬県(2.92%)。原論文 4.2 の「最も高いのは東京都、次点で愛知県、3番目が群馬県」という記述と順位が完全に一致します。
  • 下位は秋田県(0.41%)・青森県(0.48%)など、北東北・南九州の県。棒の色(地域)を見ると、高い方に関東・中部が集まる傾向が読み取れます。
  • 群馬県・三重県のように人口規模は大きくないのに割合が高い県があり、これが原論文が「人口以外の要因」を探る出発点になります。
💡 Python TIPS ax.axhline(値) は水平の基準線。平均値やしきい値を1本引くだけで、各県が平均より上か下かが一目で分かります。
2
人口と外国人人口割合

原論文4.2/図5の中心的発見は「都道府県の人口が多いほど外国人人口割合も高い」という正の相関である。原論文は在留外国人統計を用いて相関係数 0.661 を報告した。ここでは SSDSE-B から独立に再現する。

人口と外国人人口割合の散布図
図2:総人口と外国人人口割合の散布図(2019年・47都道府県・実再現図)。回帰直線 r=0.676。原論文の報告値は r=0.661(在留外国人統計ベース)。
再現結果 本教材の再計算では r = 0.676(p ≈ 1.8×10⁻⁷)。原論文の 0.661 とほぼ一致し、正の相関が独立に確認できた。 ただし右上の大都市(東京・愛知・大阪)を除くと、小人口の県でも割合が0.4〜2.9%まで広がり、「人口だけでは説明できない」ことが分かる。
やってみよう図2:人口と外国人人口割合の関係(散布図・相関)
🎯 このステップの目的
原論文 4.2/図5 の中心的な発見「人口が多い都道府県ほど外国人人口割合が高い」を再現します。ピアソンの積率相関係数で関係の強さを数値化します。
ランキングで見えた「大都市ほど高い」傾向を、横軸に人口をとった散布図で正面から検証します。
📝 コード
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
x = df['総人口'] / 10000    # 万人
y = df['外国人人口割合']
r, p = stats.pearsonr(x, y)

fig2, ax2 = plt.subplots(figsize=(9, 7))
for reg, c in region_colors.items():
    m = df['地域'] == reg
    ax2.scatter(x[m], y[m], c=c, s=60, alpha=0.85, label=reg, zorder=3)
xl = np.array([x.min(), x.max()])
sl, ic, rr, pp, _ = stats.linregress(x, y)
ax2.plot(xl, sl*xl + ic, 'k--', lw=1.5, label=f'回帰直線  r={r:.3f}')
for name in ['東京都','愛知県','群馬県','三重県','大阪府']:
    row = df[df['都道府県'] == name].iloc[0]
    ax2.annotate(name.replace('県','').replace('都','').replace('府',''),
                 (row['総人口']/10000, row['外国人人口割合']),
                 fontsize=9, xytext=(4, 4), textcoords='offset points')
ax2.set_xlabel('総人口 [万人]', fontsize=12)
ax2.set_ylabel('外国人人口割合 [%]', fontsize=12)
ax2.set_title('図2:総人口と外国人人口割合(2019年・47都道府県)', fontsize=13)
ax2.legend(fontsize=9, loc='upper left')
ax2.grid(True, alpha=0.3)
fig2.tight_layout()
fig2.savefig(os.path.join(FIG_DIR, '2021_H4_fig2.png'), bbox_inches='tight')
plt.close(fig2)
print(f"人口 × 外国人人口割合  r = {r:.3f}  (p = {p:.2e})")
▼ 実行結果
人口 × 外国人人口割合  r = 0.676  (p = 1.81e-07)
💡 実行結果の読み取り
  • 実出力は r = 0.676(p ≈ 1.8e-07)。原論文が在留外国人統計で報告した r = 0.661 とほぼ同じで、「人口が多いほど外国人人口割合が高い」という正の相関を独立に再現できました。
  • 散布図の右上には東京都・愛知県・大阪府といった大都市圏が並びます。ただし人口の小さい左側でも割合が0.4〜2.9%と幅広く散らばり、「人口だけでは説明しきれない」ことが見て取れます。
  • この「小人口でも割合が高い県」が次の仮説検証(気候・言語・産業)の主役になります。
💡 Python TIPS stats.pearsonr は相関係数 r と p値を同時に返します。r は関係の強さ・向き、p は「無相関という偶然で説明できるか」を示す別々の情報です。
3
要因の仮説と検証

人口の効果が大きいままでは他の要因が埋もれる。そこで原論文は人口400万人超の9都道府県(北海道・埼玉・千葉・東京・神奈川・愛知・大阪・兵庫・福岡)を除外し、残り38都道府県で6つの要因と外国人人口割合の相関を調べた。原論文が立てた仮説は次の3系統である。

原論文の3つの仮説
  • 気候:極端な気温や高湿を避けて住むはず → 年平均気温・年平均相対湿度
  • 言語:日本語で困らない環境ほど暮らしやすい → 日本語教育機関数・日本語常勤教師数
  • 労働環境:技能実習を受け入れる工業県ほど需要が大きい → 完全失業率・製造品出荷額

再現できる要因:年平均気温(図3)

年平均気温と外国人人口割合の散布図
図3:年平均気温と外国人人口割合(人口400万人以下・38都道府県・2019年・実再現図)。回帰直線 r=0.111。原論文の報告値 0.16 と同様「ほとんど相関なし」。
再現結果 本教材の再計算では r = 0.111(p = 0.508)。原論文の 0.16 と同じく、気温と外国人人口割合はほぼ無相関で統計的にも有意でない。 原論文は「本州の多くが温帯で年平均気温の差が小さく、平均気温だけでは四季をもつ日本の気候差を捉えきれない」と限界を述べている。

再現できない要因:報告値の可視化(図4)

湿度・日本語教育・完全失業率・製造品出荷額の各データは SSDSE-B-2026 に収録がなく、本教材では再計算できない。以下の図4は原論文5章が報告した相関係数をそのまま並べたもの(再計算ではない)である。

6要因の相関係数(原論文報告値)
図4:外国人人口割合と各要因の相関係数。原論文(図8〜13)の報告値をそのまま可視化したもので、本教材による再計算ではない。気温のみ図3で独立に再現済み。元の散布図は原論文を参照。

原論文が報告した相関係数(5.1 の一覧)

要因原論文の図相関係数 r判定本教材
年平均気温図80.16ほとんど相関なし図3で再現(0.111)
年平均相対湿度図9−0.47負の相関報告値
日本語教育機関数図100.54正の相関報告値
日本語常勤教師数図110.54正の相関報告値
完全失業率図12−0.26弱い負の相関報告値
製造品出荷額図130.72強い正の相関報告値

※原論文5.1の一覧表は図番号を「図7〜12」と表記しているが、本文および図の見出し(図8〜13)と対応させると上表のとおり。数値・符号・判定は原論文の報告値。

原論文の要因別考察(要旨)
  • 製造品出荷額(0.72):関東内陸・中部の工業地帯ほど割合が高い。技能実習生の職種は機械・金属・建設・食品製造など工業関連が大半で、工業県で需要が高いと解釈。
  • 日本語教育(0.54・0.54):日本語教育機関・常勤教師が充実した県ほど割合が高い。言語支援の質が暮らしやすさに直結すると解釈。
  • 相対湿度(−0.47):群馬・三重・岐阜など割合の高い県は湿度65%未満。低湿で快適な県ほど割合が高い傾向。
  • 完全失業率(−0.26):弱い負の相関。ただし都道府県別失業率は標本が小さく、指標としての正確性に不安があると原論文も留保。
やってみよう図3:年平均気温と外国人人口割合(人口400万人以下)
🎯 このステップの目的
原論文は人口の効果を除くため、人口400万人超の9都道府県を除外して要因を分析しました。ここでは SSDSE-B に収録の「年平均気温」で図8を再現します。
人口の影響が大きいと他の要因が埋もれます。そこで原論文にならい大人口県を除いた38県に絞り、気温との関係を見ます。
📝 コード
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
big = ['北海道','埼玉県','千葉県','東京都','神奈川県','愛知県','大阪府','兵庫県','福岡県']
sub = df[~df['都道府県'].isin(big)].copy()   # 人口400万人以下の38都道府県
rt, pt = stats.pearsonr(sub['年平均気温'], sub['外国人人口割合'])

fig3, ax3 = plt.subplots(figsize=(9, 6.5))
for reg, c in region_colors.items():
    m = sub['地域'] == reg
    ax3.scatter(sub.loc[m,'年平均気温'], sub.loc[m,'外国人人口割合'],
                c=c, s=55, alpha=0.85, label=reg, zorder=3)
xl = np.array([sub['年平均気温'].min(), sub['年平均気温'].max()])
sl, ic, *_ = stats.linregress(sub['年平均気温'], sub['外国人人口割合'])
ax3.plot(xl, sl*xl + ic, 'k--', lw=1.5, label=f'回帰直線  r={rt:.3f}')
ax3.set_xlabel('年平均気温 [℃]', fontsize=12)
ax3.set_ylabel('外国人人口割合 [%]', fontsize=12)
ax3.set_title('図3:年平均気温と外国人人口割合(人口400万人以下・2019年)', fontsize=13)
ax3.legend(fontsize=9)
ax3.grid(True, alpha=0.3)
fig3.tight_layout()
fig3.savefig(os.path.join(FIG_DIR, '2021_H4_fig3.png'), bbox_inches='tight')
plt.close(fig3)
print(f"除外した人口400万人超の県: {len(big)}件 → 残り {len(sub)}都道府県")
print(f"年平均気温 × 外国人人口割合  r = {rt:.3f}  (p = {pt:.3f})")
▼ 実行結果
除外した人口400万人超の県: 9件 → 残り 38都道府県
年平均気温 × 外国人人口割合  r = 0.111  (p = 0.508)
💡 実行結果の読み取り
  • 除外した9県は原論文の除外リスト(北海道・埼玉・千葉・東京・神奈川・愛知・大阪・兵庫・福岡)と完全に一致し、残り38都道府県で分析します。
  • 実出力は r = 0.111(p = 0.508)。原論文の報告値 0.16 と同じく「ほとんど相関なし」で、統計的にも有意ではありません(p>0.05)。
  • 原論文は「本州の多くが温帯で年平均気温の差が小さいため、気温だけでは地域差を捉えにくい」と考察しており、この弱い相関はその解釈と整合します。
💡 Python TIPS ~df['列'].isin(リスト)~ は「否定」。「リストに含まれない行だけ」を素早く抽出できます。
やってみよう図4:6要因の相関係数(原論文の報告値の可視化)
🎯 このステップの目的
原論文 5章の相関係数一覧を1枚の棒グラフにまとめます。湿度・日本語教育・完全失業率・製造品出荷額は SSDSE-B-2026 に無いため再計算はできません。ここでは原論文が報告した数値をそのまま並べます。
気温は再現できましたが、残る要因はSSDSEに収録がありません。そこで原論文の結論を俯瞰するため、報告された相関係数だけを可視化します。
📝 コード
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
# ★ 以下は原論文(5章)が報告した相関係数の「そのまま可視化」であり再計算ではない
reported = [
    ('年平均気温',       0.16),
    ('年平均相対湿度',  -0.47),
    ('日本語教育機関数', 0.54),
    ('日本語常勤教師数', 0.54),
    ('完全失業率',      -0.26),
    ('製造品出荷額',     0.72),
]
labels = [x[0] for x in reported]
vals   = [x[1] for x in reported]
colors = ['#C62828' if v < 0 else '#1565C0' for v in vals]

fig4, ax4 = plt.subplots(figsize=(9, 5.5))
ypos = range(len(labels))
ax4.barh(list(ypos), vals, color=colors, edgecolor='white')
for i, v in enumerate(vals):
    ax4.text(v + (0.02 if v >= 0 else -0.02), i, f'{v:+.2f}',
             va='center', ha='left' if v >= 0 else 'right', fontsize=11)
ax4.axvline(0, color='black', lw=0.8)
ax4.set_yticks(list(ypos)); ax4.set_yticklabels(labels, fontsize=11)
ax4.set_xlim(-0.7, 0.9)
ax4.set_xlabel('外国人人口割合との相関係数 r(原論文の報告値)', fontsize=11)
ax4.set_title('図4:外国人人口割合と各要因の相関(原論文 報告値の可視化・再計算ではない)', fontsize=12)
ax4.grid(True, axis='x', alpha=0.3)
fig4.tight_layout()
fig4.savefig(os.path.join(FIG_DIR, '2021_H4_fig4.png'), bbox_inches='tight')
plt.close(fig4)
for lb, v in reported:
    print(f"  {lb}: r = {v:+.2f}")
▼ 実行結果
  年平均気温: r = +0.16
  年平均相対湿度: r = -0.47
  日本語教育機関数: r = +0.54
  日本語常勤教師数: r = +0.54
  完全失業率: r = -0.26
  製造品出荷額: r = +0.72
💡 実行結果の読み取り
  • 製造品出荷額が r=+0.72 と最も強い正の相関で、原論文は「技能実習生の需要が大きい工業県ほど外国人人口割合が高い」と結論づけました。
  • 日本語教育機関数・常勤教師数はともに r=+0.54 の正の相関。相対湿度は r=−0.47 の負の相関(低湿な県ほど割合が高い)。完全失業率は r=−0.26 と弱く、気温は r=+0.16 でほぼ無相関でした。
  • このうち本教材が SSDSE-B から独立に再計算できたのは気温(図3)のみ。残り5本は原論文の報告値をそのまま並べたもので、グラフは原論文(図8〜13)を参照してください。
💡 Python TIPS ax.barh は横棒グラフ。ラベルが長い項目や、正負が混在する係数の比較には縦棒より横棒が読みやすくなります。

結論

主要な発見(報告値は原論文の値)

  1. 人口と外国人人口割合は正の相関(原論文 r=0.661/本教材の再現 r=0.676):人口が多い都道府県ほど外国人人口割合が高い。
  2. 人口400万人以下に絞った要因分析:製造品出荷額(0.72)が最も強い正の相関、日本語教育機関数・常勤教師数(ともに0.54)が正の相関、相対湿度(−0.47)が負の相関。気温(0.16/再現0.111)と完全失業率(−0.26)は弱い。
  3. 暮らしやすさを高める3要因:原論文は「低湿度で快適な気候」「質の高い日本語教育」「工業の発達(技能実習の需要)」の3点を、外国人人口割合を高める要因と結論づけた。
原論文の結論と提言 気候や工業化は行政が短期で操作しにくい。そこで原論文は「外国人に対する日本語教育の質を高めること」が最も現実的な施策だと提言する。 外国人の目線に立ち、言語で困らない環境を整える「おもてなしの心」が外国人人口の増加につながり、ひいては少子高齢化問題の緩和に資するのではないか、と締めくくっている。
手法主な知見限界
相関分析(人口)人口 × 外国人人口割合 r=0.661(本教材 0.676)大都市に強く引っ張られる
相関分析(6要因・人口400万人以下)製造品出荷額0.72/日本語教育0.54/湿度−0.47n=38の小標本、相関=因果ではない
気候の解釈気温はほぼ無相関(0.16)年平均気温は四季の気候差を捉えきれない
教育的価値(この分析から学べること)
  • 指標を自作する:「外国人人口=総人口−日本人人口」のように、欲しい指標を既存データの引き算で作る発想。
  • 交絡を外す工夫:人口という強い要因を除くため対象を「人口400万人以下」に絞る、という単純だが有効な操作。
  • 相関は因果ではない:製造品出荷額と割合が強く相関しても、それだけで「工業化すれば外国人が増える」とは言えない。背景の技能実習制度という文脈が必要。

データ・コードのダウンロード

分析スクリプト(2021_H4_katsuyo.py)
データ出典
SSDSE-B 都道府県データ(2019年断面)独立行政法人統計センター SSDSE(教育用標準データセット)2026年版
総人口・日本人人口総務省 人口推計(SSDSE-B 収録)
年平均気温気象庁 過去の気象データ(SSDSE-B 収録)
外国人人口・湿度・日本語教育・完全失業率・製造品出荷額法務省・総務省・文化庁・経済産業省(原論文が使用。図4は報告値を引用)

本教育用コードは SSDSE-B-2026.csv の実データを使用(合成データ不使用)。図2・図3の相関は実再現、図4は原論文報告値の可視化(再計算ではない)。

教育用再現コード | 2021年度(令和3年度) 統計データ分析コンペティション 統計活用奨励賞 [高校生の部]
「外国人にとっての暮らしやすさとは」谷 優輝(慶應義塾湘南藤沢高等部)| データ: SSDSE-B-2026(独立行政法人統計センター)

⚠️ よくある誤解と注意点

この研究は相関分析だけで構成されています。だからこそ「相関と因果の混同」に最も注意が必要です。読む前にも読んだ後にも目を通してみてください。

❌ 「相関がある=因果関係がある」ではない
製造品出荷額と外国人人口割合に強い正の相関(r=0.72)があっても、「工業化すれば外国人が増える」と即断はできません。背後には技能実習制度という制度的文脈があり、これが両者を同時に押し上げている可能性があります。相関を見たら必ず「第三の要因(交絡変数)はないか」を疑ってください。
❌ 「人口が多い=暮らしやすい」ではない
人口と外国人人口割合の相関(r=0.661)は強いですが、これは「大都市に雇用や同国人コミュニティが集まる」結果かもしれません。原論文が人口400万人以下に絞って要因を分析したのは、この強い交絡を取り除くための工夫です。強い変数を統制してから他の要因を見る、という順序が大切です。
❌ 「相関係数が大きい=重要」と決めつけない
完全失業率(r=−0.26)のように弱い相関は、標本の小ささや測定の問題で不安定になりがちです。原論文自身も「都道府県別の失業率は標本が小さく正確性に不安が残る」と留保しています。相関係数の値だけでなく、その指標の信頼性も併せて判断しましょう。
❌ 「年平均気温で気候を代表できる」わけではない
気温と割合がほぼ無相関(0.16)だったのは、年平均という要約が四季のある日本の気候差をならしてしまうためです。1つの平均値が現象を十分に代表しているか、常に立ち止まって考える必要があります。
❌ 「都道府県の傾向=個人の傾向」ではない
都道府県という集計単位で見えた関係を、そのまま個人に当てはめると生態学的錯誤になります。「工業県で割合が高い」からといって、個々の外国人が工業だけを理由に移住しているとは限りません。

📖 用語集(この記事に出てくる統計用語)

本文で見慣れない言葉が出てきたら、ここに戻って確認してください。

相関係数(ピアソン)
2つの量が「一緒に増減する傾向」の強さと向きを −1〜+1 で表す指標。+1に近いほど強い正の相関、−1に近いほど強い負の相関、0付近はほぼ無相関。本研究の主役の指標。
散布図
横軸と縦軸に2変数をとり、各都道府県を点で描いた図。点の並びの傾き(右上がり/右下がり)で相関の向きが見える。
回帰直線
散布図の点全体の傾向を最もよく表す直線。傾きの符号が相関の向きに対応する。
p値
「本当は関係がない(無相関)」と仮定したとき、観察された相関以上の値が偶然得られる確率。慣例的に0.05未満で「統計的に有意」と判断する。
交絡変数
注目する2変数の両方に影響する第三の変数。これを見落とすと見かけの相関を真の関係と誤認する。本研究の「人口」がその典型。
外れ値
他から極端に離れた値。東京都の高い外国人人口割合などが該当し、相関係数を大きく動かすことがある。
集計データ
個人ではなく都道府県など集団単位でまとめたデータ。集団の傾向を個人に当てはめると生態学的錯誤が起きうる。
SSDSE(教育用標準データセット)
独立行政法人統計センターが提供する、公的統計を横断的にまとめた教育用データセット。都道府県版がSSDSE-B、市区町村版がSSDSE-A。

📐 使っている手法をわかりやすく解説

この論文は相関分析と、それを支える散布図・回帰直線・箱ひげ図だけで構成されています。手法ごとに「何のためか」「どう読むか」「注意点」を解説します。

◆ 統計の基本概念

🔍 p値とは
何?
「本当は無相関だとしたら、今回以上の相関が偶然出る確率」。
なぜ必要?
相関係数が「偶然かどうか」を判断する客観的な根拠になる。
読み方
p < 0.05 で「統計的に有意」。本研究では人口との相関 p≈1.8e-07(有意)に対し、気温との相関 p=0.508(有意でない)。

◆ この論文で使われている手法

🔗 相関分析(ピアソンの積率相関係数)
何?
2つの連続変数が一緒に増減する傾向の強さと向きを −1〜+1 の相関係数 r で数値化する手法。
どう使う?
散布図を描いて関係を目で確認し、scipy.stats.pearsonr で r と p値を計算する。
何がわかる?
「人口が多い県ほど外国人人口割合が高い」といった傾向を1つの数値で表せる。要因の絞り込みの第一歩。
結果の読み方
|r|>0.7 で強い、0.4〜0.7 で中程度、<0.3 でほぼ無相関が目安。相関は因果を意味しない点に注意。
⚠️ 注意点
(1) 交絡—強い第三変数(人口)があると見かけの相関が出る。対象を絞って統制する。(2) 外れ値—東京都などが係数を大きく動かす。散布図で必ず確認。(3) 非線形—曲線的な関係はピアソンrでは捉えられない。(4) 集計単位—都道府県の傾向を個人に当てはめない(生態学的錯誤)。
📊 散布図回帰直線
何?
2変数を平面上の点で表し、全体の傾向を1本の直線(回帰直線)で要約する図。
どう使う?
ax.scatter で点を描き、stats.linregress の傾き・切片で直線を重ねる。
結果の読み方
直線が右上がりなら正、右下がりなら負の相関。点が直線に近いほど相関が強い。
⚠️ 注意点
回帰直線はあくまで傾向線であり、外挿(データ範囲外の予測)や因果の証明には使えない。
📦 箱ひげ図(四分位)
何?
データを四分位(25%・50%・75%点)で要約し、分布の広がりと外れ値を1つの箱で表す図。
どう使う?
原論文4.1では市区町村別の外国人人口割合の分布に用い、中央値0.61%・最大15.76%(長野県川上村)を示した。
結果の読み方
箱が下に偏り上に長いひげ=右に裾を引いた分布。少数の突出値の存在が読み取れる。
⚠️ 注意点
箱ひげ図は分布の形は示すが、2変数の関係は示さない。相関の確認には散布図を併用する。

🚀 発展の可能性(結果 X → 新仮説 Y → 課題 Z)

この研究をさらに発展させる3つの方向性です。「今回わかったこと(X)」から「次に検証すべき仮説(Y)」を立て、「具体的に何をするか(Z)」まで考えてみましょう。

① 再現できなかった要因を実データで検証する
結果 X
本教材では気温と人口しか再計算できず、湿度・日本語教育・失業率・製造品出荷額は原論文の報告値を引用した。
新仮説 Y
元データ(統計でみる都道府県のすがた・文化庁調査・労働力調査・工業統計)を集めれば、6要因すべてを独立に再現・更新できる。
課題 Z
(1)各出典から2019年および最新年のデータを取得。(2)人口400万人以下の38都道府県で相関を再計算し、原論文の値と比較。(3)年による変化を考察する。
② 相関から一歩進んで交絡を統制する
結果 X
本論文は2変数ずつの単純相関にとどまり、要因どうしの絡み合いは扱っていない。
新仮説 Y
製造品出荷額・日本語教育・湿度を同時に入れた重回帰分析を行えば、各要因の「独自の効き目」を分離できる。
課題 Z
(1)6要因を説明変数に重回帰を実行。(2)多重共線性VIFで確認。(3)単純相関と偏回帰係数の違いを考察する。
③ 分析単位を市区町村に細かくする
結果 X
本教材は都道府県ランキングで代用したが、原論文4.1は市区町村別の箱ひげ図で「川上村・大泉町の突出」を示した。
新仮説 Y
市区町村(SSDSE-A等)まで細かくすると、県単位では見えない局所的な集積(工場城下町・農業地帯)が見える。
課題 Z
(1)市区町村別の外国人人口データを入手。(2)箱ひげ図・地図で分布を再現。(3)突出自治体の産業構成を調べ要因を考察する。

🎯 自分でやってみよう(5つのチャレンジ)

学んだだけでは身につきません。実際に手を動かすのが最強の学習方法です。本論文のスクリプトをベースに挑戦してみてください。

★☆☆☆☆ 入門
CH1. 同じデータで分析を再現する
付属スクリプトをそのまま実行し、図1〜4を再現してください。
ポイント: 外国人人口割合がどの列から作られているか、各図がどのコードから出るかを辿る。
★★☆☆☆ 初級
CH2. 年を変えて相関を比べる
2019年の代わりに2022年や2023年の断面で人口との相関を計算してください。
ポイント: r の値は年でどう変わるか。国勢調査年(2015・2020)は総人口の定義が変わり値が飛ぶことに注意。
★★★☆☆ 中級
CH3. 除外基準を変えてみる
「人口400万人以下」の代わりに「300万人以下」「500万人以下」で気温との相関を計算し比較してください。
ポイント: どこで区切るかで結論が変わるか。基準の恣意性について考える。
★★★★☆ 上級
CH4. 再現できなかった要因を足す
製造品出荷額や完全失業率の実データを外部から集め、外国人人口割合との相関を自分で計算してください。
ポイント: 原論文の報告値(0.72・−0.26)を再現できるか。差が出たら原因(年・定義)を考える。
★★★★★ 発展
CH5. オリジナルの問いを立てる
「外国人人口割合が高い県は何が違うのか」を、あなた自身の仮説(例:大学数、外国人向け求人、家賃)で検証してください。
ポイント: 問い・データ・手法・結論を1ページにまとめる。これがデータ分析の実践。
💡 ヒント: 詰まったら本サイトの他の相関分析の論文のスクリプトを参考に。用語集・手法ガイドも活用しましょう。

💼 この手法は実社会でこう使われている

本論文の相関分析は、研究だけでなく行政・企業・NPOの現場でも広く使われています。

🏛️
自治体の多文化共生政策
外国人住民が多い自治体は、地域特性と在留状況の相関を分析して日本語教室・生活相談窓口・多言語表示などの配置を決めます。本論文の「日本語教育と割合の正の相関」はまさにこの発想の裏づけです。
🏢
企業の人材・立地戦略
技能実習生や特定技能人材を受け入れる製造業は、地域の産業集積と外国人労働力の関係を分析して工場立地や採用計画を検討します。
📊
メディア・データジャーナリズム
「なぜこの県は外国人が多いのか」といった記事は、公開統計の相関分析と散布図が中核です。本論文と同じ手順で作れます。
🎓
学術研究(人口・地理・社会学)
移民・人口移動の実証研究では、地域属性と外国人分布の相関・回帰が基本的な分析手法として日常的に使われます。

🤔 よくある質問(読者からの想定Q&A)

この論文を読んで初心者が抱きやすい疑問に、教育的観点から答えます。

Q1. この分析、自分でもできますか?
はい。SSDSE-Bは無料で公開されており、Pythonのpandasとscipyがあれば、本ページのスクリプトを実行するだけで図1〜4が再現できます。
Q2. なぜ外国人人口を「総人口−日本人人口」で作るのですか?
原論文の表2が全国値をこの引き算で定義しているためです。SSDSE-Bには総人口と日本人人口の両方が収録されているので、都道府県別の外国人人口をこの差分で作れます(原論文本体は都道府県値に法務省の在留外国人統計を使用)。
Q3. 結論は「因果関係」を示していますか?
いいえ。本論文は相関分析のみで、因果は示していません。「製造品出荷額が高い県ほど割合が高い」は関連であって、工業化が外国人を呼ぶと証明したわけではありません。背景に技能実習制度という文脈がある点に注意が必要です。
Q4. なぜ気温だけ再現して、湿度や失業率は再現しないのですか?
年平均気温はSSDSE-B-2026に列がありますが、湿度・日本語教育・完全失業率・製造品出荷額は収録されていないためです。数値を勝手に作ることはできないので、図4ではこれらを原論文の報告値として引用しています。
Q5. もっと深く学ぶには?
相関と因果の違いは「統計的因果推論」の入門書が、地域データの扱いは「計量経済学」や「空間データ分析」の教科書が参考になります。本サイトの重回帰を使った論文も読み比べてみてください。

✅ 理解度チェック(4問)

この論文を理解できたか、クリックで確認しましょう。間違えても解説が出ます。

🐍 ブラウザで動かす — インストール不要でこの論文の分析を再現する

このページの分析は、この画面の中でそのまま実行できます。 Python をインストールする必要も、CSV をダウンロードする必要もありません。 下のセルの 「▶ ブラウザで実行」 を上から順に押すか、 「▶ 最初から全部実行」 で一気に流してください。 表示されるのは、本文の図表とまったく同じ計算の結果です (動かしているのは再現スクリプト code/2021_H4_katsuyo.py そのもの)。

コードは書き換えられます。「✏️ 書き換える」で数字や変数を変えて ▶ を押すと、 結果がどう変わるかをその場で確かめられます(元に戻すボタンつき)。 ページを開いた時点で裏で実行環境の準備が始まっているので、待ち時間はほとんどありません。 初回だけ実行環境の取得にインターネット接続が必要です。