論文一覧に戻る 🕸 論文ネットワーク 🗺 用語ネットワーク 統計データ分析コンペ 教育用再現集
🏆
2020年度(令和2年度) 統計データ分析コンペティション | 総務大臣賞【高校生の部】

人口増加と「住みやすい街」の関係

⏱️ 推定読了時間: 約35分
朝倉翔汰(慶應義塾湘南藤沢高等部) 高校生の部 最高賞 SSDSE-2020A 全国1,735市区町村
相関分析 / 無相関の検定 / 外れ値処理(四分位範囲ルール) / ヒートマップ
🔬 ヒートマップ🔬 外れ値処理🔬 無相関の検定🔬 相関分析🏷 移住・人口移動🏷 人口・少子化🏷 医療・健康
🔬 手法タグ / 🏷 応用タグ(クリックで同タグの論文をネットワーク検索)
🔬 再現カルテ — 原論文と同じデータ・同じ手法で再現

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

原論文が使ったデータSSDSE-2020A
分析単位:市区町村
中核手法:相関分析
この教材が使うデータ
原論文(PDF)人口増加と「住みやすい街」の関係
総務大臣賞/朝倉翔汰(慶應義塾湘南藤沢高等部)
✅ この教材でできること
  • 原論文の中核手法(相関分析)を実データで実行できる
  • 分析に使うデータは同梱済みで、ブラウザ上でそのまま読み込める
  • 数値・図を最後まで再計算できる(相関分析)
突合監査の結果、主要データと中核手法はいずれも原論文と一致しています。

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

🏅 論文審査会コメント(審査員はここを評価した)
「分析は丁寧で手間をかけており、相関係数、箱ひげ図やヒートマップなども多用して論文としても質の高いものとなっている。」
出典:統計センター「統計データ分析コンペティション」受賞論文PDF掲載の審査講評。プロの審査員が何を評価し、何を注文したかは論文の読み方の最良の手本になる。
📝 3行で分かる要約

目次

  1. 研究の背景:「86万ショック」と少子高齢化
  2. データと変数:SSDSE-Aと16の「住みやすさ」指標
  3. 人口区分Ⅰ〜Ⅳと増減率の記述統計
  4. 分析手順:外れ値処理と無相関の検定
  5. 結果:相関係数ヒートマップ
  6. 考察:「住みやすい街」の3要素と自治体の取り組み
  7. まとめ
  8. 📥 データの準備
  9. 💼 実社会での応用
  10. ⚠️ よくある誤解
  11. 📖 用語集
  12. 📐 手法ガイド
  13. 🚀 発展の可能性
  14. 🎯 自分でやってみよう
  15. 🤔 Q&A
  16. 🐍 ブラウザで動かす

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

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

このページの分析を自分で再現するには、以下の手順でデータを準備してください。コードの編集は不要です。原論文は SSDSE-2020A(2020年公開版)を使用していますが、現在配布されている最新版 SSDSE-A-2025 で同じ手順を追試できます(収録年次が異なるため数値は変わります)。

1
データをダウンロードする 独立行政法人統計センターの SSDSE(教育用標準データセット)配布ページから、以下のファイルをダウンロードします。
SSDSE-A-2025.csv ← SSDSE-A(市区町村データ)📥 直接DL
⬇ SSDSEダウンロードページを開く
2
ファイルを所定のフォルダに配置する ダウンロードしたCSVを、プロジェクトの data/raw/ フォルダに入れます。
2026 統計・データ解析コンペ/ ├── code/ │ └── 2020_H1_daijin.py ← 実行するスクリプト └── data/ └── raw/ SSDSE-A-2025.csv ← ここに置く
3
スクリプトをそのまま実行する ターミナルでプロジェクトルートに移動し、以下を実行します。
python3 code/2020_H1_daijin.py
図は html/figures/ に自動保存されます。
研究の背景:「86万ショック」と少子高齢化

2019年の人口動態統計で、日本人の国内出生数が初めて90万人を割り込んだ。少子化社会対策白書はこれを「86万ショック」と表現し、大きな社会的関心を集めた。出生数の減少と少子高齢化はこのまま加速すると見込まれており、人口減少に歯止めがかからないことは日本の将来を考えるうえで深刻な問題である。

著者は「少子高齢化対策を考えるということは、人が定住し、子供を産み、育てることを考えること」と捉え、その土台となる「住みやすさ」に注目した。感覚的に語られがちな「住みやすい街」を、公的統計の指標に分解して人口増加との関係を定量的に確かめる——これが本論文の出発点である。

研究の問い 市区町村単位の「住みやすさ」は、人口増加(自然増減・社会増減)とどのように関係しているか? その関係は人口規模(大都市〜町村)によって異なるか?

人口増加は自然増減(出生数−死亡数)社会増減(転入数−転出数)の2つに分けて考える。「住みやすさ」は医療・福祉、教育などの【安心度】、飲食・小売店などの【利便性】、人口密度・人口構成などの【住環境】、完全失業率などの【労働】の4観点・計16指標に整理し、全市区町村を人口規模でⅠ〜Ⅳの4つに分類したうえで、区分ごとに相関関係を分析する。

−0.91
高齢化率×自然増減率の相関
(区分Ⅰ・原論文の報告値)
+0.70
人口密度×社会増減率の相関
(区分Ⅰ・原論文の報告値)
1,735
分析対象の市区町村数
(原論文・SSDSE-2020A)
16
「住みやすさ」指標の数
(4観点に整理)
論文審査会コメント(コンペ公式) 「分析は丁寧で手間をかけており、相関係数、箱ひげ図やヒートマップなども多用して論文としても質の高いものとなっている。」

総務大臣賞 相関分析 無相関の検定 外れ値処理 ヒートマップ

1
データと変数:SSDSE-Aと16の「住みやすさ」指標

使用データ

独立行政法人統計センターが提供するSSDSE(教育用標準データセット)のうち、市区町村レベルの統計を収録した SSDSE-A を使用する。原論文は SSDSE-2020A(全国1,735市区町村)を用いた。本ページの追試には現行版の SSDSE-A-2025 を用いる。

データセット対象使われる場所備考
SSDSE-2020A全国1,735市区町村原論文(本文中の「原論文の報告値」)2015年国勢調査などがベース
SSDSE-A-2025全国1,741市区町村本ページの追試(図1・3・4、コード)2020年国勢調査などがベース。国勢調査人口0の福島県双葉町を除いた1,740で分析

「住みやすさ」に関するデータ項目は、東洋経済オンライン「住みよさランキング2020」の指標を参考に追加・削除して選定された(原論文 表1)。

人口増減率の定義

人口規模の違う市区町村を比較するため、増減の実数ではなく「率(%)」に基準化する。分母には出生・死亡・転入・転出から逆算した前年人口を使う。

前年人口 = 総人口 − 出生数 + 死亡数 − 転入数 + 転出数
自然増減率(%) = (出生数 − 死亡数) ÷ 前年人口 × 100
社会増減率(%) = (転入数 − 転出数) ÷ 前年人口 × 100

「住みやすさ」16指標(原論文 表6)

次の16指標を SSDSE-A の収録項目から計算する。いずれも人口あたり・割合に基準化されている。

観点指標計算方法
安心度
(医療・福祉)
1万人当たり病院数(一般病院数+一般診療所数)÷(総人口/1万)
1万人当たり医師数医師数 ÷(総人口/1万)
高齢者1万人当たり介護・福祉施設数事業所数(医療・福祉)÷(65歳以上人口/1万)
民生費の割合民生費 ÷ 歳出決算総額 × 100
安心度
(教育)
15歳未満1万人当たり学校数(保育所等数+幼稚園数+小学校数+中学校数)÷(15歳未満人口/1万)
教育費の割合教育費 ÷ 歳出決算総額 × 100
安心度
(生活インフラ)
非水洗化率非水洗化人口 ÷ 総人口 × 100
1万人当たり公民館数公民館数 ÷(総人口/1万)
1万人当たり図書館数図書館数 ÷(総人口/1万)
利便性1万人当たり小売店数小売店数 ÷(総人口/1万)
1万人当たり飲食店数飲食店数 ÷(総人口/1万)
住環境1万世帯当たり可住地面積可住地面積 ÷ 世帯数 × 1万
可住地面積当たり人口密度総人口 ÷ 可住地面積
高齢化率65歳以上人口 ÷ 総人口 × 100
労働女性の就業化率就業者数(女)÷(総人口(女)−15歳未満人口(女))× 100
完全失業率完全失業者数 ÷ 15〜64歳人口 × 100

DS LEARNING POINT 1

「件数」のままでは比べられない——率への基準化

人口190万人の札幌市と人口5千人の村では、小売店の「数」はまるで違って当然。市区町村を比較するときは、必ず人口あたり・割合に直す。本論文の16指標がすべて「1万人当たり」「割合」の形をしているのはこのためだ。

1万人当たり小売店数 = 小売店数 / (総人口 / 10000) # 「数」のままだと総人口との相関を見ているのと同じになってしまう
2
人口区分Ⅰ〜Ⅳと増減率の記述統計

三大都市圏と地方圏では、同じ人口増加・減少でも要因が一律ではないと考え、総務省「地方公共団体の区分」に基づいて全市区町村を人口規模でⅠ〜Ⅳの4つに分類する(原論文 表2)。

区分人口規模n(原論文の報告値)n(SSDSE-A-2025追試)
50万人以上3535
20万人以上、50万人未満9495
5万人以上、20万人未満415395
5万人未満1,1911,215

自然増減率×社会増減率の正負マトリクス(原論文 表3)

区分ごとに、自然増減率と社会増減率の正負の組み合わせを数え上げると次のようになる。数値はすべて原論文の報告値(カッコ内は区分内シェア)。

区分自然+・社会+自然−・社会+自然+・社会−自然−・社会−
4(11%)17(49%)0(0%)14(40%)35
10(11%)30(32%)5(5%)49(52%)94
43(10%)95(23%)13(3%)264(64%)415
42(4%)175(15%)22(2%)952(80%)1,191
読み取り(原論文) いずれの区分でも「自然増減・社会増減とも減少」の市区町村が最多で、人口規模が小さくなるほどその割合が高くなる(Ⅰ:40% → Ⅳ:80%)。

区分別の平均と分散(原論文 表4)

自然増減率 平均−0.18−0.24−0.40−0.94
       分散0.030.060.140.33
社会増減率 平均+0.19+0.10−0.10−0.51
       分散0.090.190.280.59

平均は自然・社会ともⅠが最も高く、人口規模が小さくなるにつれて低下する。分散はⅠが最も小さく、人口規模が小さくなるほどばらつきが大きくなる——この観察が、次節の「外れ値の特定」につながる。

人口区分別の自然増減率・社会増減率の箱ひげ図(SSDSE-A-2025による追試)
図1 人口区分別 自然増減率・社会増減率の箱ひげ図(SSDSE-A-2025による追試)。区分Ⅳほど箱が下がり、ひげの外の外れ値が多い。※原論文の図1は「16指標それぞれの箱ひげ図」であり、そちらは原論文を参照。
📌 この箱ひげ図の読み方
このグラフは
箱が四分位数(Q1〜Q3)、中の線が中央値、ひげの外の点が外れ値の候補を表す。
読み方
Ⅰ→Ⅳへ進むほど箱・中央値が下(マイナス側)へ移動し、箱とひげの範囲も広がる=減少傾向とばらつきの拡大。
なぜそう解釈できるか
小規模町村は出生・転入の数件の増減でも率が大きく振れるため、分布の裾が長くなりやすい。だからこそ外れ値の扱いが論点になる。
やってみよう追試①: SSDSE-Aを読み込み、増減率と人口区分Ⅰ〜Ⅳを作る
📝 コード
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
import numpy as np
import pandas as pd
from scipy import stats

# SSDSE-A(市区町村データ)を読み込む(2・3行目=年度・変数名はスキップ)
df = pd.read_csv('data/raw/SSDSE-A-2025.csv', encoding='cp932', skiprows=[1, 2])
df = df[df['A1101'] > 0].copy()   # 国勢調査人口0の福島県双葉町を除外

# 前年人口 = 総人口 − 出生数 + 死亡数 − 転入数 + 転出数(原論文2.2と同じ)
df['前年人口']  = df['A1101'] - df['A4101'] + df['A4200'] - df['A5101'] + df['A5102']
df['自然増減率'] = (df['A4101'] - df['A4200']) / df['前年人口'] * 100
df['社会増減率'] = (df['A5101'] - df['A5102']) / df['前年人口'] * 100

# 総務省「地方公共団体の区分」に基づく人口規模区分(原論文 表2)
df['区分'] = pd.cut(df['A1101'], [0, 50_000, 200_000, 500_000, np.inf],
                   labels=['Ⅳ', 'Ⅲ', 'Ⅱ', 'Ⅰ'], right=False)
for k in ['Ⅰ', 'Ⅱ', 'Ⅲ', 'Ⅳ']:
    print(f"区分{k}: n={(df['区分'] == k).sum()}")
▼ 実行結果
区分Ⅰ: n=35
区分Ⅱ: n=95
区分Ⅲ: n=395
区分Ⅳ: n=1215
💡 解説
  • skiprows=[1, 2] — SSDSE-Aは1行目が変数コード、2行目が年度、3行目が日本語名。ここでは変数コード(A4101=出生数 など)を列名に使います。
  • 増減率の分母は原論文と同じ「前年人口」(総人口から当年の出生・死亡・転入・転出を逆算した値)です。
  • 区分別の市区町村数は Ⅰ:35、Ⅱ:95、Ⅲ:395、Ⅳ:1215。原論文の報告値(Ⅰ:35、Ⅱ:94、Ⅲ:415、Ⅳ:1191)と収録年次の違いで少しずれます。区分Ⅲ→Ⅳへの移動は、この間に5万人を割った市町が多いことを意味します。
💡 Python TIPS pd.cut() は連続値を区間で切ってカテゴリ化する関数。right=False で「以上・未満」の区切りになります(50万人ちょうどは区分Ⅰ)。
やってみよう追試②: 正負のマトリクス(表3)と平均・分散(表4)
📝 コード
19
20
21
22
23
24
25
# 正負のマトリクス(原論文 表3)と平均・分散(原論文 表4)の追試
for k in ['Ⅰ', 'Ⅱ', 'Ⅲ', 'Ⅳ']:
    sub = df[df['区分'] == k]
    mm = ((sub['自然増減率'] < 0) & (sub['社会増減率'] < 0)).mean()
    print(f"区分{k}: 自然・社会とも減少 {mm:.0%} | "
          f"自然増減率 平均{sub['自然増減率'].mean():+.2f} 分散{sub['自然増減率'].var():.2f} | "
          f"社会増減率 平均{sub['社会増減率'].mean():+.2f} 分散{sub['社会増減率'].var():.2f}")
▼ 実行結果
区分Ⅰ: 自然・社会とも減少 37% | 自然増減率 平均-0.45 分散0.03 | 社会増減率 平均+0.19 分散0.09
区分Ⅱ: 自然・社会とも減少 51% | 自然増減率 平均-0.51 分散0.07 | 社会増減率 平均+0.06 分散0.17
区分Ⅲ: 自然・社会とも減少 63% | 自然増減率 平均-0.68 分散0.15 | 社会増減率 平均-0.11 分散0.14
区分Ⅳ: 自然・社会とも減少 78% | 自然増減率 平均-1.32 分散0.54 | 社会増減率 平均-0.48 分散0.57
💡 解説
  • 「自然増減・社会増減とも減少」の市区町村の割合は Ⅰ:37% → Ⅳ:78% と、人口規模が小さいほど高くなる。原論文の報告値(Ⅰ:40% → Ⅳ:80%)と同じ傾向です。
  • 分散も Ⅰ:0.03 → Ⅳ:0.54(自然増減率)と人口規模が小さいほど大きく、原論文の「Ⅳはばらつきが大きい」という指摘(表4)を確認できます。
  • 平均値の水準が原論文よりマイナス寄りなのは、原論文(2015年国勢調査ベース)から少子高齢化がさらに進んだためと考えられます。
💡 Python TIPS 真偽値の Series に .mean() を使うと「True の割合」がそのまま計算できます。クロス表が必要なら pd.crosstab() も便利です。
3
分析手順:外れ値処理と無相関の検定

原論文の分析は次の流れで進む。

16指標を作成
(表6)
箱ひげ図で
目視確認
四分位範囲ルールで
外れ値を反復除外
相関係数を算出
(ピアソン)
無相関の検定
(α=0.05)
ヒートマップ
で整理

外れ値の特定と除外(四分位範囲ルール)

区分Ⅳを中心にばらつきの大きい指標が多いため、原論文はまずテューキーの箱ひげ図で目視確認し、次に四分位範囲ルールを「上内・下内境界点の外にある数値がなくなるまで」繰り返して外れ値を除外した。

IQR = Q3 − Q1
下内境界点 = Q1 − 1.5 × IQR / 上内境界点 = Q3 + 1.5 × IQR
→ 境界点の外の値を外れ値として除外し、なくなるまで反復

項目・区分ごとの外れ値の件数は原論文 表7 に整理されている。以下はその一部(原論文の報告値)で、とくに区分Ⅳで件数が多い。

項目(区分Ⅳ・n=1,191)外れ値の件数
1万人当たり図書館数524件
1万人当たり公民館数386件
1万世帯当たり可住地面積185件
可住地面積当たり人口密度165件
非水洗化率128件
補足 原論文の表7には、最終的な16指標には含まれていない「1人当たり地方税収」「土木費の割合」の外れ値件数も記載されている(指標選定の途中経過とみられる)。また原論文自身が「項目によっては500件以上の外れ値が検出された」ことを研究課題として挙げている。

相関係数の評価基準(原論文 表5)

相関係数の値相関の強さ
1.0 〜 0.7強い正の相関
0.7 〜 0.4正の相関
0.4 〜 0.2弱い正の相関
0.2 〜 −0.2ほとんど相関がない
−0.2 〜 −0.4弱い負の相関
−0.4 〜 −0.7負の相関
−0.7 〜 −1.0強い負の相関

DS LEARNING POINT 2

無相関の検定:その相関係数は偶然では?

標本から計算した相関係数は、真の相関がゼロでも偶然ゼロ以外の値になる。「母集団で相関がゼロ」という帰無仮説を立てて検定するのが無相関の検定。原論文は有意水準0.05で検定し、ヒートマップに有意性の印を付けた。

t = r√(n−2) / √(1−r²) 〜 自由度 n−2 のt分布 # 原論文の表記: p<0.05 → *、p<0.01 → ** # n が大きいほど、小さな r でも「有意」になりやすい点に注意

原論文はエクセル統計を使用して相関係数の算出と無相関の検定を行った。本ページの追試では Python(scipy.stats.pearsonr)で同じ計算を行う。

4
結果:相関係数ヒートマップ

自然増減率・社会増減率(それぞれ区分Ⅰ〜Ⅳ)と16指標の相関係数を、正の相関を赤系、負の相関を青系に配色したヒートマップで示す(原論文 表8)。

自然増減・社会増減率と16指標の相関係数ヒートマップ(原論文表8の報告値を可視化)
図2 自然増減・社会増減率(Ⅰ〜Ⅳ別)と16指標の相関係数ヒートマップ。本図は原論文(SSDSE-2020A)表8の報告値をそのまま可視化したものであり、再計算ではない。**:p<0.01、*:p<0.05(無相関の検定・原論文 表9)。
📌 このヒートマップの読み方
このグラフは
行が「自然増減率/社会増減率 × 区分Ⅰ〜Ⅳ」の8通り、列が16指標。セルの色の濃さが相関の強さ(赤=正、青=負)。
読み方
列方向に見ると「その指標がどの区分で効くか」、行方向に見ると「その区分で何が効くか」がわかる。*印は無相関の検定で有意なセル。
なぜそう解釈できるか
128個(8行×16列)の相関係数を1枚に圧縮しているため、パターン(例:高齢化率の列だけ濃い青)が一目で見つかる。

相関係数の一覧(原論文 表8 の報告値)

図2と同じ数値を表形式で示す。太字は |r|≧0.4(原論文の基準で「相関」以上)、**は p<0.01、*は p<0.05。

観点指標自然増減率との相関社会増減率との相関
安心度(医療・福祉)1万人当たり病院数-0.10-0.06-0.26**-0.24**-0.20-0.11-0.16**-0.08**
1万人当たり医師数-0.09+0.02-0.09+0.01-0.24-0.09-0.06-0.02
高齢者1万人当たり介護・福祉施設数+0.51**+0.21+0.22**+0.23**+0.15+0.03+0.16**+0.10**
民生費の割合+0.10+0.34**+0.38**+0.37**+0.39*+0.41**+0.35**+0.28**
安心度(教育)15歳未満1万人当たり学校数-0.39*-0.40**-0.73**-0.59**-0.18-0.39**-0.58**-0.37**
教育費の割合+0.03+0.27*+0.24**+0.30**-0.02+0.25*+0.17**+0.15**
安心度(生活インフラ)非水洗化率-0.45*-0.52**-0.47**-0.39**-0.62**-0.54**-0.40**-0.25**
1万人当たり公民館数+0.13-0.38**-0.34**-0.37**+0.08-0.20-0.29**-0.21**
1万人当たり図書館数-0.16+0.15-0.15**-0.31**+0.08+0.20-0.04-0.21**
利便性1万人当たり小売店数-0.43*-0.38**-0.63**-0.48**-0.50**-0.44*-0.48**-0.30**
1万人当たり飲食店数-0.20-0.16-0.34*-0.08**-0.33-0.26*-0.30*-0.12**
住環境1万世帯当たり可住地面積-0.35-0.54**-0.55**-0.47**-0.54**-0.53**-0.45**-0.35**
可住地面積当たり人口密度+0.39*+0.49**+0.53**+0.33**+0.70**+0.53**+0.35**+0.29**
高齢化率-0.91**-0.90**-0.93**-0.88**-0.68**-0.56**-0.57**-0.41**
労働女性の就業化率-0.04-0.06+0.07+0.35**-0.38*-0.09-0.01+0.14**
完全失業率-0.61**-0.49**-0.44**-0.09**-0.60**-0.46**-0.30**+0.02

観点別の主要な読み取り(原論文の報告)

【住環境】高齢化率と人口密度が最強の指標 「高齢化率」は自然増減率と強い負の相関(Ⅰ〜Ⅳで −0.88〜−0.93)、社会増減率とも負の相関。「可住地面積当たりの人口密度」は正〜強い正の相関(社会増減率×Ⅰで +0.70)。「1万世帯当たり可住地面積」(=1世帯あたりの土地の広さ)はむしろ負の相関で、広さより生活の便が選ばれている。
【安心度】施設の「数」は負、公的支援の「質」は正 「民生費の割合」「教育費の割合」は正〜弱い正の相関。一方「15歳未満1万人当たりの学校数」は強い負〜負、「1万人当たりの病院数」も自然増減率に弱い負の相関。施設数を増やすことと人口増加は連動せず、公的支援を通じた質の向上が人口増加と結びつくと原論文は解釈する。「高齢者1万人当たりの介護・福祉施設数」は区分Ⅰ(都市部)でのみ正の相関(自然増減率で +0.51**)。
【利便性】小売店・飲食店の多さは人口増加と結びつかない 「1万人当たりの小売店数・飲食店数」は負〜弱い負の相関。交通網の発達で商業地から離れていても買い物や外食がしやすくなり、住居には閑静な住宅地が選ばれる傾向、と原論文は解釈する。
【労働】完全失業率はⅠ→Ⅳで相関が弱まり、女性の就業化率は符号が変わる 「完全失業率」は負〜弱い負の相関だが、Ⅰ→Ⅳにかけて相関が小さくなる(自然増減率で −0.61→−0.09)。「女性の就業化率」は社会増減率に対して区分Ⅰでは負(−0.38*)、区分Ⅳでは正の向き(+0.14**)。さらに区分Ⅳでは自然増減率に対して +0.35**と、町村部ほど女性の就業機会が人口増加と関連する

SSDSE-A-2025 での追試

同じ手順(四分位範囲ルールの反復除外→ピアソン相関→無相関の検定)を SSDSE-A-2025 で再計算した結果が図3である。

SSDSE-A-2025で再計算した相関係数ヒートマップ(追試)
図3 同じ手順を SSDSE-A-2025 で再計算したヒートマップ(本ページによる追試。原論文とはデータ年次・収録市区町村が異なるため数値は一致しない)。
追試の結果:主要なパターンは5年後のデータでも再現 高齢化率の強い負の相関(自然増減率で −0.88〜−0.94)、人口密度の正の相関、民生費の割合の正の相関、完全失業率のⅠ→Ⅳでの減衰(社会増減率で −0.43→+0.02)は、いずれも原論文と同じ向き・同じパターンで再現された。一方、「女性の就業化率×社会増減率×区分Ⅰ」は追試では有意にならないなど、細部は異なる(追試④参照)。
やってみよう追試③: 外れ値を除外してピアソンの相関係数+無相関の検定
📝 コード
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
# 「住みやすさ」指標の例(原論文 表6 の定義どおりに作成)
df['高齢化率']   = df['A1303'] / df['A1101'] * 100    # 65歳以上人口÷総人口
df['完全失業率'] = df['F1107'] / df['A1302'] * 100    # 完全失業者数÷15〜64歳人口
df['人口密度']   = df['A1101'] / df['B1103']          # 総人口÷可住地面積

def iqr_keep(s):
    """テューキーの四分位範囲ルール。外れ値がなくなるまで反復し、残す行を返す"""
    keep = s.notna()
    while True:
        q1, q3 = s[keep].quantile([0.25, 0.75])
        out = keep & ((s < q1 - 1.5*(q3-q1)) | (s > q3 + 1.5*(q3-q1)))
        if out.sum() == 0:
            return keep
        keep &= ~out

for item in ['高齢化率', '完全失業率', '人口密度']:
    line = []
    for k in ['Ⅰ', 'Ⅱ', 'Ⅲ', 'Ⅳ']:
        sub = df[df['区分'] == k]
        keep = iqr_keep(sub['社会増減率']) & iqr_keep(sub[item])
        r, p = stats.pearsonr(sub.loc[keep, item], sub.loc[keep, '社会増減率'])
        line.append(f"{k}: {r:+.2f}{'**' if p < 0.01 else '*' if p < 0.05 else ''}")
    print(f"{item} × 社会増減率  " + "  ".join(line))
▼ 実行結果
高齢化率 × 社会増減率  Ⅰ: -0.63**  Ⅱ: -0.60**  Ⅲ: -0.39**  Ⅳ: -0.33**
完全失業率 × 社会増減率  Ⅰ: -0.43*  Ⅱ: -0.41**  Ⅲ: -0.18**  Ⅳ: +0.02
人口密度 × 社会増減率  Ⅰ: +0.60**  Ⅱ: +0.60**  Ⅲ: +0.28**  Ⅳ: +0.31**
💡 解説
  • iqr_keep() が原論文の「四分位範囲ルールを、上内・下内境界点の外に数値がなくなるまで繰り返す」手続きそのものです。
  • stats.pearsonr() は相関係数 r と無相関の検定のp値を同時に返します。原論文と同じく p<0.01 に **、p<0.05 に * を付けました。
  • 高齢化率は全区分で負、人口密度は全区分で正、完全失業率はⅠ→Ⅳにかけて相関が弱くなり Ⅳ ではほぼ無相関。いずれも原論文(社会増減率で -0.60→0.02)と同じパターンが再現できました。
💡 Python TIPS s.quantile([0.25, 0.75]) は Q1 と Q3 を一度に返します。多重代入 q1, q3 = ... で受け取るとコードが簡潔になります。
やってみよう追試④: 人口規模で符号が変わる「女性の就業化率」
📝 コード
51
52
53
54
55
56
57
58
59
60
61
# 原論文の注目指標「女性の就業化率」= 就業者数(女)÷ 15歳以上の女性人口
df['女性の就業化率'] = df['F110202'] / (df['A110102'] - df['A130102']) * 100

for rate in ['自然増減率', '社会増減率']:
    line = []
    for k in ['Ⅰ', 'Ⅱ', 'Ⅲ', 'Ⅳ']:
        sub = df[df['区分'] == k]
        keep = iqr_keep(sub[rate]) & iqr_keep(sub['女性の就業化率'])
        r, p = stats.pearsonr(sub.loc[keep, '女性の就業化率'], sub.loc[keep, rate])
        line.append(f"{k}: {r:+.2f}{'**' if p < 0.01 else '*' if p < 0.05 else ''}")
    print(f"女性の就業化率 × {rate}  " + "  ".join(line))
▼ 実行結果
女性の就業化率 × 自然増減率  Ⅰ: +0.23  Ⅱ: -0.06  Ⅲ: +0.01  Ⅳ: +0.35**
女性の就業化率 × 社会増減率  Ⅰ: -0.18  Ⅱ: -0.27*  Ⅲ: -0.14**  Ⅳ: +0.04
💡 解説
  • 原論文の注目発見の一つ「女性の就業化率は、社会増減率に対して区分Ⅰでは負、区分Ⅳでは正の向き」を追試しました。
  • 自然増減率×区分Ⅳは +0.35** で、原論文の報告値(+0.35**)と一致。町村部では女性の就業機会と人口増加の関連が相対的に強いという原論文の解釈と整合します。
  • 社会増減率×区分Ⅰは −0.18(原論文 −0.38*)と向きは同じですが有意ではありません。同じ手順でもデータ年次が違えば有意性は変わる——これが追試の学びどころです。
💡 Python TIPS f文字列の中で三項演算子(A if 条件 else B)を入れ子にすると、有意水準に応じた記号(**/*/なし)の付与が1行で書けます。
5
考察:「住みやすい街」の3要素と自治体の取り組み

原論文は分析結果から、「人々が住みやすいと感じる街」の大きな要素として次の3つを挙げる。

① 安心度:自治体の公的支援が充実していること 医療・福祉も教育も、施設の「数」ではなく民生費・教育費という公的支援の充実が人口増加と連関する。子育て支援や教育支援の質的な充実が若い世代の定住につながる。
② 住環境:人口密度が高く、若者の人口比率が高いこと 高齢化率の低さ(=労働人口比率の高さ)と人口密度の高さは、区分を問わず人口増加と強く関連する。核家族化と交通網の発達で「広い家」より「生活の便」が選ばれる。
③ 労働:働く機会が多くあること 就業機会の多い都市部は経済面・治安面の安心感で人を集める。人口の少ない地域では女性の就業機会の多さが人口増加と連関する。
高齢化率と人口増減率の散布図(SSDSE-A-2025による追試)
図4 高齢化率×自然増減率・社会増減率の散布図(SSDSE-A-2025による本ページの追試・外れ値除外前の全市区町村)。自然増減率とはほぼ直線的な強い負の関係(r=−0.79)がある一方、社会増減率との関係は弱く(r=−0.35)、ばらつきが大きい。

自然増減・社会増減がともにプラスの自治体の取り組み(原論文 5.2)

原論文は統計分析に加えて、増加率がともにプラスの自治体の取り組みを区分別に紹介している(いずれも原論文の記述の要約)。

区分自治体取り組みの特徴効いている観点
福岡県福岡市2010〜2015年の人口増加数・増加率が政令市1位。107の大学・専門学校、IT企業誘致や自動車工場、食や祭りの地域ブランド労働
茨城県つくば市「教育日本一」を掲げ、ICT教育・小中一貫教育・独自教科「つくばスタイル科」など教育で独自色安心度(教育)
千葉県流山市市にマーケティング課を設置し「都心から一番近い森の町」をPR。共働き世代向けイベントで地域ブランドを形成安心度・住環境
長野県南箕輪村「女性の育児と就労の両立」を掲げ、保育料引き下げ・長時間保育・放課後児童クラブ・就労相談室安心度・労働

どの自治体にも共通するのは、住民が住みやすいと思える特色ある取り組みを推進していること。全市区町村が同じ施策を行うのは難しいからこそ、地域の実情や特色を活かした「住みやすい」街づくりが大切だ——これが原論文の結論につながる。

まとめ

主要な発見(いずれも原論文の報告・解釈)

本研究の限界と課題(原論文 6章)

原論文自身が挙げる限界 (1)単年度のデータのみを使用しており、時系列変化の分析ができない。(2)相関分析であるため、人口増加との直接的な因果関係は示せない。(3)項目によっては外れ値が500件以上検出された。(4)大都市圏までの通勤時間・位置関係など、住みやすさに影響しうる指標を考慮できていない。
本ページの追試について 図2および本文の相関係数・外れ値件数・マトリクスの数値は原論文の報告値である。図1・3・4とコードの実行結果は SSDSE-A-2025(データ年次が異なる)による追試であり、原論文の数値の検算ではない。主要なパターン(高齢化率の強い負・人口密度の正・完全失業率の減衰・女性就業化率×自然増減率×Ⅳの +0.35)は追試でも再現された。

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

この論文を読むとき・自分で相関分析をするときに、はまりやすい誤解を整理します。

誤解1:「相関がある=それをすれば人口が増える」
民生費の割合と人口増加に正の相関があっても、民生費を増やせば人口が増えるという因果関係の証明にはならない。人口が増えている(若い世帯が多い)自治体ほど保育などの民生費支出が必要になる、という逆向きの説明も可能。原論文も「連関」という慎重な表現を使い、因果を示せないことを限界として明記している。
誤解2:「学校数・病院数が負の相関=施設を減らすべき」
「15歳未満1万人当たりの学校数」が負の相関なのは、子どもが少ない過疎地ほど分母(15歳未満人口)が小さく、指標の値が大きくなる構造も効いている。人口あたり指標は「充実度」と「人口の少なさ」の両方を反映する。指標の分母・分子が何かを常に確認しよう。
誤解3:「外れ値の除外=都合の悪いデータを消すこと」
恣意的な除外はデータの改ざんに近いが、原論文は四分位範囲ルールという機械的な基準を事前に決め、除外件数を表7で全て報告している。これが正しい作法。ただし「なくなるまで反復」する方式は除外が膨らみやすく(区分Ⅳの図書館数で524件)、歪んだ分布では中心部だけが残る点に注意が必要。
誤解4:「**が付いている=強い相関」
*印はp値が小さいこと(偶然では説明しにくいこと)を示すだけ。n=1,191の区分Ⅳでは r=−0.08 のような微弱な相関でも**が付く。関係の強さは相関係数の絶対値(原論文 表5の基準)で、確からしさはp値で、と分けて読むこと。
誤解5:「市区町村の傾向は個人にも当てはまる」
これは集団レベルの相関を個人に適用する「生態学的誤謬」。「女性就業化率が高い町村ほど人口が増える」ことは「働く女性ほど子どもを多く産む」ことを意味しない。分析の単位(市区町村)と結論の単位を一致させよう。

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

本文中の下線付き用語はクリックで詳しい解説がポップアップします。ここでは主要な用語をまとめます。

自然増減/社会増減
自然増減=出生数−死亡数、社会増減=転入数−転出数。人口の増減をこの2つに分解すると「生まれ育つ力」と「人を呼び込む力」を別々に評価できる。
ピアソンの積率相関係数
2変数の直線的な関連の強さと向きを −1〜+1 で表す指標。原論文は表5の基準(|r|≧0.7 で「強い」など)で言葉に翻訳している。
無相関の検定
「母集団の相関係数は0」という帰無仮説の検定。標本相関 r と標本サイズ n から t 値を計算する。原論文は有意水準0.05で実施し、p<0.05 に*、p<0.01 に**を付けた。
四分位範囲(IQR)
Q3(75%点)− Q1(25%点)。Q1−1.5×IQR を下内境界点、Q3+1.5×IQR を上内境界点と呼び、その外側の値を外れ値の候補とみなす(テューキーの基準)。
外れ値
他の観測値から極端に離れた値。相関係数は外れ値に強く引きずられるため、原論文は境界点の外の値がなくなるまで除外を繰り返した。
ヒートマップ
数値の大きさを色の濃淡で表した図。多数の相関係数を俯瞰してパターンを見つけるのに向く。原論文は正=赤系・負=青系に配色し、有意性の印を重ねた。
SSDSE
独立行政法人統計センターが公開する教育用標準データセット。SSDSE-A は市区町村別の基本データ(人口・経済・教育・医療など)を1枚のCSVに収録しており、本論文のように市区町村を単位とした分析ができる。

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

統計手法について「何のためか」「結果をどう読むか」を初心者向けに解説します。

◆ 統計の基本概念(どの論文にも共通)

🔍 相関係数見せかけの相関
何?
2変数が「一緒に増減する傾向の強さと向き」を −1〜+1 で表す指標。+1に近いほど強い正の相関、−1に近いほど強い負の相関。
なぜ注意?
第三の変数が両方に影響していると、直接の関係がなくても相関が出る(疑似相関)。本論文なら「高齢化率」が多くの指標と連動しており、たとえば公民館数と人口減少の負の相関の裏に高齢化が潜んでいる可能性がある。
何がわかる?
あくまで「関連の強さ」。因果関係(どちらが原因か)はデータだけからは決められない。
読み方
原論文の基準:|r| 0.7以上 強い、0.4〜0.7 相関、0.2〜0.4 弱い、0.2未満 ほとんど相関なし。
📏 「率」への基準化と分析単位
何?
件数を人口などで割って、規模の違う地域を比較可能にする操作。本論文の16指標はすべて「1万人当たり」「割合」の形。
なぜ必要?
件数のままでは「人口が多い市は何でも多い」という自明な相関しか出ない。
何がわかる?
規模を除いた「密度・充実度」の比較。ただし分母(総人口か、15歳未満人口か)で意味が変わる。
読み方
市区町村単位の分析結果は市区町村について言えることであり、個人については言えない(生態学的誤謬に注意)。

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

📈 相関分析(ピアソンの積率相関係数)——本論文の主役
何?
自然増減率・社会増減率と16指標の直線的な関連を、区分Ⅰ〜Ⅳ別に測る。合計 2×4×16=128個の相関係数。
どう使う?
外れ値を除外したうえで区分ごとに r を計算し、表5の基準で「強い負」「弱い正」などの言葉に翻訳する。
何がわかる?
「どの指標が・どの人口規模で・どちら向きに」人口増減と関連するか。区分別に計算したことで「女性の就業化率の符号反転」のような発見が生まれた。
結果の読み方
−1〜+1。本論文最大級は高齢化率×自然増減率の −0.91(区分Ⅰ)。
⚠️ 注意点
(1) ピアソンの相関は直線関係しか測れない。U字型の関係は r≈0 になるので散布図の目視が必須。(2) 外れ値に極端に弱い——だから本論文は外れ値処理とセットで使っている。(3) 相関は因果ではない。「率の分母」(人口)が両辺に入ると見せかけの相関も生じうる。
🧪 無相関の検定
何?
「母集団では相関がゼロ」という帰無仮説を、r と n から計算した t 値で検定する。
どう使う?
有意水準を0.05と決め、各相関係数のp値を計算。ヒートマップに p<0.05 は*、p<0.01 は**を重ねる。
何がわかる?
観測された相関が「偶然の産物」で説明できる範囲か。n=35の区分Ⅰでは r=−0.35 でも有意にならないことがある。
結果の読み方
p値は「関係の強さ」ではなく「偶然らしさ」。強さは r の絶対値で判断する。
⚠️ 注意点
(1) nに強く依存する:区分Ⅳ(n≈1,200)では r=−0.08 でも**が付き、区分Ⅰ(n=35)では r=−0.35 でも付かない。区分間で「有意かどうか」を単純比較しないこと。(2) 128個も検定すると、5%の有意水準でも偶然「有意」になるセルが数個は出る(多重検定の問題)。(3) 外れ値除外後のnで検定している点も忘れずに。
📦 テューキーの箱ひげ図四分位範囲ルール(外れ値処理
何?
Q1−1.5×IQR〜Q3+1.5×IQR(内境界点)の外の値を外れ値候補とみなす、分布の形に頼らない機械的な基準。
どう使う?
本論文は①箱ひげ図で目視→②境界点の外の値を除外→③外れ値がなくなるまで②を反復、という手順を16指標×4区分すべてに適用した。
何がわかる?
少数の極端な市区町村(例:観光地の飲食店数、原発事故避難区域の人口動態)に相関係数が引きずられるのを防げる。
結果の読み方
除外件数(原論文 表7)とセットで読む。除外が多い指標ほど「残ったデータだけの話」になっている。
⚠️ 注意点
(1) 「なくなるまで反復」は分布が右に歪んだ指標では除外が雪だるま式に増える(区分Ⅳの図書館数で524/1,191件)。1回だけ適用する流儀との違いを意識する。(2) 外れ値は「誤データ」とは限らず、特異な実態を持つ自治体かもしれない。除外した市区町村がどこかを確認すると新しい問いが見つかる。(3) 除外基準は分析前に決め、件数を必ず報告する。
🌡️ 相関係数ヒートマップ
何?
多数の相関係数を行列に並べ、値に応じて色を塗った図。本論文は正=赤系・負=青系、有意性の印を重ねた。
どう使う?
行=増減率×区分、列=16指標。列方向・行方向のパターンを探す。
何がわかる?
128個の数値を眺めるだけでは気づけない構造——「高齢化率の列だけ濃い」「完全失業率はⅠ→Ⅳで薄くなる」——が一目でわかる。
結果の読み方
色の濃さ=相関の強さ、色相=向き。凡例の区切り(0.2/0.4/0.7)は原論文 表5の評価基準と対応。
⚠️ 注意点
(1) 色の区切り方で印象が大きく変わる。連続的なグラデーションか段階的な色分けかを凡例で必ず確認する。(2) 赤・青の対比は色覚多様性に配慮した配色(青〜オレンジ系)を選ぶとより良い。(3) 色だけでは有意性がわからないため、本論文のように*印を重ねるのが丁寧な作法。

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

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

① 時間的拡張:単年度から複数年度へ
結果 X
原論文は単年度の断面データのみで、時系列変化を分析できないことを自ら限界に挙げた。
新仮説 Y
民生費・教育費を「増やした」自治体では、数年後に社会増減率が改善するのではないか(水準ではなく変化の効果)。
課題 Z
(1)SSDSE-A の複数年版(2020A〜2025)を接続して市区町村パネルデータを作る。(2)指標の変化量と増減率の変化量の相関を取る。(3)本ページの追試(2025年版)と原論文(2020年版)の比較はその第一歩になっている。
② 手法の発展:相関から多変量へ
結果 X
16指標は互いに強く相関している(高齢化率が高い町村は非水洗化率も高い等)ため、1指標ずつの相関では要因を分離できない。
新仮説 Y
高齢化率を統制すれば、公民館数・小売店数などの負の相関は消えるか弱まるのではないか。
課題 Z
(1)高齢化率を統制した偏相関係数を計算する。(2)重回帰分析で複数指標を同時に投入する(多重共線性に注意)。(3)スピアマンの順位相関で外れ値除外への依存度を確認する。
③ 指標の拡張:位置関係と「通いやすさ」
結果 X
原論文自身が「大都市圏までの通勤時間・位置関係の考慮」を今後の課題に挙げている。流山市の事例も「都心への近さ」が鍵だった。
新仮説 Y
同じ「住みやすさ」水準でも、大都市への近接性が高い市区町村ほど社会増減率が高いのではないか。
課題 Z
(1)都道府県庁所在地や三大都市圏までの距離・所要時間データを追加する。(2)区分Ⅲ・Ⅳを「都市圏内/外」に分けて相関を比較する。(3)国土数値情報などのオープンデータと SSDSE-A を市区町村コードで結合する。

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

学んだだけでは身につきません。実際に手を動かすのが最強の学習方法です。本ページのスクリプトをベースに、以下のチャレンジに挑戦してみてください。難易度別に5つ用意しました。

難易度 ★☆☆☆☆
1. スクリプトを実行して、自分の街の区分を調べる
python3 code/2020_H1_daijin.py を実行して図1〜4を再現しよう。さらに df[df['Municipality'] == '○○市'] で自分の住む市区町村の区分・自然増減率・社会増減率を表示してみよう。
難易度 ★★☆☆☆
2. 好きな指標で散布図を描く
16指標から1つ選び、社会増減率との散布図を区分別の色分けで描いてみよう。ヒートマップの1セル(相関係数1個)の裏に、どんな点の散らばりがあるかを確認する習慣が大切。
難易度 ★★★☆☆
3. 外れ値除外の前後で相関係数を比べる
iqr_keep() を使わない場合・1回だけ適用した場合・なくなるまで反復した場合の3通りで、同じ指標の相関係数を計算して比較しよう。どの指標が外れ値処理に敏感だろうか? 除外された市区町村名も表示してみよう。
難易度 ★★★★☆
4. スピアマンの順位相関で頑健性を確認する
stats.spearmanr()(順位に基づく相関)は外れ値に頑健で、外れ値除外なしでも計算できる。16指標×社会増減率で、外れ値除外+ピアソンの結果と比較し、結論が変わる指標を探そう。
難易度 ★★★★★
5. 高齢化率を統制した偏相関に挑戦
高齢化率はほぼすべての指標と相関しており、交絡の最有力候補。偏相関係数 rxy・z=(rxy−rxzryz)/√((1−rxz²)(1−ryz²)) で高齢化率 z を統制し、公民館数・小売店数などの負の相関が残るか検証しよう。結果が大きく変わったら、それはなぜか考察してみよう。
💡 ヒント:チャレンジ2〜4は本ページの追試③のコード(iqr_keepstats.pearsonr)を数行変えるだけでできます。まず動くコードを真似して、少しずつ改造するのが上達の近道です。

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

本論文で学んだ手法は、研究の世界だけでなく、行政・企業・NPO の現場でも様々に活用されています。具体的なシーンを紹介します。

🏛️
自治体のEBPM(証拠に基づく政策立案)
総合戦略・人口ビジョンの策定では、まさに本論文のように人口動態と地域指標の相関を人口規模別に分析し、重点施策(子育て支援か雇用創出か)を選ぶ材料にする。
🏠
不動産・住宅情報サービス
「住みよさランキング」(本論文が指標選定で参考にした東洋経済のランキング)や住宅サイトの街評価は、安心度・利便性・住環境といった観点別の指標を合成して作られている。
🏪
小売・外食チェーンの出店計画
商圏人口・人口密度・年齢構成と売上の相関分析は出店判断の基本。人口増減率の高いエリアの先取りにも同じデータが使われる。
📰
データジャーナリズム
「消滅可能性自治体」報道など、市区町村の人口動態分析は大きなニュースになる。ヒートマップや地図での可視化、外れ値(急成長する町)の深掘り取材はこの論文の手法と同じ発想。
🏥
医療・福祉の資源配置
人口1万人当たり医師数・施設数という基準化指標は、医療計画や介護保険事業計画で地域差を測る標準的な物差しとして使われている。
📊
品質管理・異常検知
テューキーの四分位範囲ルールは、製造業の品質管理やシステム監視での異常検知に現在も広く使われる、最も基本的な外れ値検出法。

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

この論文を読んだ人からよく出る質問と、その答えをまとめました。

Q1. 原論文はどんなソフトで分析したのですか? Pythonが必要ですか?
原論文は「エクセル統計」(Excelのアドイン)で相関係数の算出と無相関の検定を行っています。高校生でもExcelで十分に受賞レベルの分析ができる好例です。本ページの追試はPythonですが、同じ計算はExcelの CORREL 関数や分析ツールでも可能です。
Q2. なぜ人口規模でⅠ〜Ⅳに分けるのですか? 全部まとめて相関を取ってはだめ?
三大都市圏と地方圏では人口増減のメカニズムが違う(例:女性の就業化率の符号反転)ため、まとめて計算すると打ち消し合って関係が見えなくなることがあります。区分別の分析はこの「異質性」を捉える工夫で、本論文の発見の多く(完全失業率の減衰、教育費の割合が地方で強い等)は区分別だからこそ見つかりました。
Q3. 増減率の分母の「前年人口」はなぜ必要なのですか?
SSDSEの総人口は増減が起きた「後」の人口です。増減の起点に揃えるため、総人口から出生・死亡・転入・転出を逆算して前年人口を復元し、それを分母にしています。分母の取り方を明示するのは率の指標を作るときの基本作法です。
Q4. 本ページの追試の数値が原論文と違うのはなぜですか?
原論文は SSDSE-2020A(2015年国勢調査ベース)、追試は SSDSE-A-2025(2020年国勢調査・2022〜2023年の人口動態ベース)で、データ年次と収録市区町村数が異なるためです。それでも高齢化率の強い負の相関や完全失業率のⅠ→Ⅳでの減衰など主要パターンは再現されており、「結論が時点を超えて頑健か」を確かめる追試になっています。
Q5. 「住みやすさ」を高めれば本当に人口は増えるのですか?
この分析だけでは断定できません。相関分析は因果の向き(住みやすいから人が来るのか、人が来るから財政・施設が充実するのか)を区別できず、原論文も限界として明記しています。因果に近づくには、複数年データでの前後比較や、制度変更を利用した自然実験的な設計が必要です。

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

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

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

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

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