この教材は原論文と同じデータを読み込み、同じ手順で計算し直しています。画面に出る数値と図は、あなたのブラウザがその場で計算した結果です。
| 原論文が使ったデータ | 平成 30 年住宅・土地統計調査 |
|---|---|
| この教材が使うデータ |
|
| 原論文(PDF) | 空き家を減らすために 特別賞/田中月霧・福永奈々花・冨谷伊吹・美安健志(兵庫県立姫路西高等学校) |
▶ ここに書いてある分析は、ページ下部の「🐍 ブラウザで動かす」でそのまま実行できます(インストール不要)。動かしているのは code/2020_H5_3_shorei.py(308 行)そのものです。
このページの再現分析を自分で動かすには、以下のファイルを配置してください。コードの編集は不要です。
data/raw/ に入れます。html/figures/ に保存されます。
著者・所属・受賞区分は原論文PDF1頁目の表記による。
総務省統計局によると、2013年の全国の平均空き家率は13.5%に達し、2008年の調査結果(13.1%)と比べて増加している(原論文の記述)。空き家が適切に管理されないと、住宅は急速に老朽化し、防災・防犯上の問題や、地域コミュニティの弱体化を招く可能性がある。
日本の空き家は①賃貸用の住宅・②売却用の住宅・③二次的住宅・④その他の住宅に分類される。本研究は「その他の住宅」に属する空き家に焦点を当てる。相続などで引き継がれず放置され、最も周辺に損害を与えると考えられるからである。
SSDSE-E(都道府県) SSDSE-B(地価) SSDSE-A(世帯) 相関分析 外れ値の扱い
原論文は「平成30年住宅・土地統計調査」「国土交通省アンケート」「グーグルマップの距離」「NPOの費用単価」など多様な資料を使っている。ここでは、そのうち教育用標準データセット SSDSE で再計算できる部分だけを実データで再現し、それ以外は原論文の報告値を可視化・再掲する。
| 原論文の分析 | 本ページでの扱い | 使用データ |
|---|---|---|
| 高齢者率 × 空き家(図1) | 実データで再現(図1) | SSDSE-E |
| 地価 × 空き家(図2・3) | 実データで再現(図2) | SSDSE-E+B |
| 高齢者世帯 × 空き家(図7) | 実データで再現(図3) | SSDSE-E+A |
| 都心からの距離 × 空き家(図4・5) | 報告値のみ(グラフは原論文参照) | グーグルマップ(SSDSE未収録) |
| 空き家化の理由(図8) | 報告値の可視化(図4/再計算ではない) | 国交省アンケート(SSDSE未収録) |
| 処理費用の試算 | 報告値の再掲(再計算ではない) | NPO単価等(SSDSE未収録) |
※ SSDSE(教育用標準データセット)は独立行政法人統計センターが公表。空き家数・総住宅数・世帯数は住宅・土地統計調査/国勢調査ベース、地価は地価公示ベース。
ここからは、SSDSEを読み込んで4つの変数(高齢者率・空き家率・地価・高齢者のみ世帯割合)を用意し、原論文の仮説を相関で確かめる。各ステップは「①目的 → ②橋渡し → ③コード → ④実行結果の読み取り」で進む。
まず「原論文の主役である空き家率と高齢者率を、都道府県単位で用意する」ことが目的。そのために、教育用標準データセット SSDSE-E から総人口・65歳以上人口・総住宅数・空き家数を取り出し、割合に直す。
67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 | # ============================================================ # STEP1: SSDSE-E(都道府県データ)を読み込み、47都道府県を抽出 # 高齢者率 = 65歳以上人口 / 総人口 × 100 # 空き家率 = 空き家数 / 総住宅数 × 100 (=全空き家の率) # ============================================================ print("STEP1: SSDSE-E を読み込み中 ...") raw_e = pd.read_csv(DATA_E, encoding='cp932', header=0) codes = list(raw_e.columns) names = raw_e.iloc[1].tolist() # 2行目 = 日本語の変数名 code_of = dict(zip(names, codes)) # 変数名 -> 変数コード e = raw_e.iloc[2:].copy() # 3行目以降が実データ e = e[e['SSDSE-E-2026'].astype(str).str.match(r'^R\d{5}$')] e = e[e['SSDSE-E-2026'] != 'R00000'] # 全国計を除外 def col_e(jp): return pd.to_numeric(e[code_of[jp]], errors='coerce') df_e = pd.DataFrame({ '都道府県': e['Prefecture'].values, '高齢者率': (col_e('65歳以上人口') / col_e('総人口') * 100).values, '空き家率': (col_e('空き家数') / col_e('総住宅数') * 100).values, }) print(f" 抽出: {len(df_e)} 都道府県") print(df_e.head(5).round(2).to_string(index=False)) |
STEP1: SSDSE-E を読み込み中 ... 抽出: 47 都道府県 都道府県 高齢者率 空き家率 北海道 33.25 15.64 青森県 35.71 16.74 岩手県 35.37 17.33 宮城県 29.58 12.42 秋田県 39.46 15.77
header=0 で読み込むと1列目にコード(A1101 等)、2行目に日本語の変数名が入る。dict(zip(names, codes)) で「変数名→コード」の辞書を作り、後で名前で列を引けるようにしている。str.match(r'^R\d{5}$') で「R+数字5桁」の行=47都道府県だけを残し、全国計(R00000)は除外している。a/b は要素ごと(element-wise)。47行を一気に計算できる。次に「地価と空き家率の関係を見る」ための地価データを揃えるのが目的。そのため SSDSE-B の「標準価格(平均価格)(住宅地)」から、最新年度の値を都道府県ごとに取り出す。
93 94 95 96 97 98 99 100 101 102 103 104 105 | # ============================================================ # STEP2: SSDSE-B から住宅地の地価(標準価格)を取得 # ============================================================ print("STEP2: SSDSE-B(地価)を読み込み中 ...") b = pd.read_csv(DATA_B, encoding='cp932', header=1) b = b[b['地域コード'].astype(str).str.match(r'^R\d{5}')].copy() b['年度'] = pd.to_numeric(b['年度'], errors='coerce') latest = int(b['年度'].max()) b = b[b['年度'] == latest] b['地価'] = pd.to_numeric(b['標準価格(平均価格)(住宅地)'], errors='coerce') df_b = b[['都道府県', '地価']].reset_index(drop=True) print(f" 対象年度: {latest} 年度 / {len(df_b)} 都道府県") print(f" 地価レンジ: {df_b['地価'].min():,.0f} 〜 {df_b['地価'].max():,.0f} 円/m^2") |
STEP2: SSDSE-B(地価)を読み込み中 ... 対象年度: 2023 年度 / 47 都道府県 地価レンジ: 13,200 〜 404,400 円/m^2
年度==最新で1年ぶんに絞る。{x:,.0f} の , は3桁区切り。大きな金額を読みやすく表示できる。原論文の仮説②「次の世帯がない高齢者が住宅を維持できず放棄する」を確かめたい。そのため「高齢者のみ世帯の割合」を都道府県ごとに用意する。SSDSE-A(市区町村)を都道府県で合計し、高齢単独+高齢夫婦のみ世帯を一般世帯数で割る。
107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 | # ============================================================ # STEP3: SSDSE-A(市区町村)を都道府県ごとに集計し、 # 「高齢者のみ世帯」割合を算出 # 高齢者のみ世帯 = 65歳以上の単独世帯 + 夫65歳以上・妻60歳以上の夫婦のみ世帯 # ============================================================ print("STEP3: SSDSE-A から高齢者のみ世帯割合を集計中 ...") raw_a = pd.read_csv(DATA_A, encoding='cp932', header=0) a_name = raw_a.iloc[1].tolist() a_code = dict(zip(a_name, list(raw_a.columns))) a = raw_a.iloc[2:].copy() def col_a(jp): return pd.to_numeric(a[a_code[jp]], errors='coerce') a['一般世帯数'] = col_a('一般世帯数') a['高齢単独'] = col_a('65歳以上世帯員の単独世帯数') a['高齢夫婦'] = col_a('夫65歳以上、妻60歳以上の夫婦のみの世帯数') g = a.groupby('Prefecture').agg( 一般世帯数=('一般世帯数', 'sum'), 高齢単独=('高齢単独', 'sum'), 高齢夫婦=('高齢夫婦', 'sum')).reset_index() g['高齢者のみ世帯割合'] = (g['高齢単独'] + g['高齢夫婦']) / g['一般世帯数'] * 100 df_a = g[['Prefecture', '高齢者のみ世帯割合']].rename(columns={'Prefecture': '都道府県'}) print(f" {len(df_a)} 都道府県 / 高齢者のみ世帯割合 レンジ: " f"{df_a['高齢者のみ世帯割合'].min():.1f}% 〜 {df_a['高齢者のみ世帯割合'].max():.1f}%") |
STEP3: SSDSE-A から高齢者のみ世帯割合を集計中 ... 47 都道府県 / 高齢者のみ世帯割合 レンジ: 19.1% 〜 31.4%
groupby('Prefecture').sum() で都道府県に集計する。groupby(...).agg(新名=('列','sum')) は、集計と同時に列名を付けられる名前付き集約。分析に使う4変数(高齢者率・空き家率・地価・高齢者のみ世帯割合)を1枚の表にまとめるのが目的。そのため都道府県名をキーに3つのデータを結合する。
133 134 135 136 137 138 | # ============================================================ # STEP4: 3つのデータを都道府県名で結合(47都道府県のパネル) # ============================================================ df = df_e.merge(df_b, on='都道府県').merge(df_a, on='都道府県') print(f"STEP4: 結合完了 -> {len(df)} 都道府県 × {df.shape[1]} 変数") print(df.head().round(2).to_string(index=False)) |
STEP4: 結合完了 -> 47 都道府県 × 5 変数 都道府県 高齢者率 空き家率 地価 高齢者のみ世帯割合 北海道 33.25 15.64 23600 28.65 青森県 35.71 16.74 16100 26.05 岩手県 35.37 17.33 26100 24.46 宮城県 29.58 12.42 48400 20.38 秋田県 39.46 15.77 13200 28.20
merge(..., on='都道府県') は共通の都道府県名で行を突き合わせる(SQLの内部結合)。df だけで相関と散布図を作れる。merge はメソッドチェーンでつなげられる:A.merge(B).merge(C)。いよいよ原論文の仮説(高齢者率↑で空き家↑、地価↑で空き家↓、高齢者世帯↑で空き家↑)がSSDSEでも成り立つかを数値で確かめる。そのため4組のピアソン相関係数を計算し、地価については原論文と同じく大都市圏を外れ値として除いた版も出す。
140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 | # ============================================================ # STEP5: 相関分析(全空き家率ベース) # ============================================================ def report(x, y, label): r, p = stats.pearsonr(df[x], df[y]) print(f" {label:26s}: r = {r:+.3f} (p = {p:.4f})") print("STEP5: 相関分析") report('高齢者率', '空き家率', '高齢者率 × 空き家率') report('地価', '空き家率', '地価 × 空き家率') report('高齢者のみ世帯割合', '空き家率', '高齢者のみ世帯 × 空き家率') report('高齢者率', '地価', '高齢者率 × 地価') # 原論文が外れ値扱いした7大都市圏を除外した地価×空き家率 outliers = ['東京都', '神奈川県', '大阪府', '京都府', '愛知県', '埼玉県', '兵庫県'] sub = df[~df['都道府県'].isin(outliers)] r_o, p_o = stats.pearsonr(sub['地価'], sub['空き家率']) print(f" 地価 × 空き家率(7大都市圏を除外, n={len(sub)}): r = {r_o:+.3f} (p = {p_o:.4f})") |
STEP5: 相関分析 高齢者率 × 空き家率 : r = +0.735 (p = 0.0000) 地価 × 空き家率 : r = -0.532 (p = 0.0001) 高齢者のみ世帯 × 空き家率 : r = +0.760 (p = 0.0000) 高齢者率 × 地価 : r = -0.712 (p = 0.0000) 地価 × 空き家率(7大都市圏を除外, n=40): r = -0.483 (p = 0.0016)
stats.pearsonr(x, y) は相関係数 r と p値を返す。r の符号(+/−)が「関係の向き」。原論文の仮説①は「空き家は過疎地域ほど多い」。過疎地域は高齢化が進み、人口が流出しやすく、住宅が放棄されやすい、という考え方である。これを①-1 高齢者率と①-2 地価の2つの角度から確かめる。
相関の数字を目で見て確かめるのが目的。そのため高齢者率を横軸、空き家率を縦軸にとった散布図を描き、回帰直線を重ねる(原論文 図1 に対応)。
159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 | # ============================================================ # 図1: 高齢者率 × 空き家率(散布図+回帰直線) # ============================================================ print("図1 を生成中 ...") fig, ax = plt.subplots(figsize=(9, 6.5)) x = df['高齢者率'].values y = df['空き家率'].values ax.scatter(x, y, s=60, c='#6aa84f', alpha=0.85, edgecolors='white', linewidth=0.6, zorder=3) sl, ic, r, p, se = stats.linregress(x, y) xs = np.linspace(x.min(), x.max(), 100) ax.plot(xs, sl * xs + ic, color='#e69138', lw=2.2, zorder=2, label=f'回帰直線 y={sl:.3f}x{ic:+.3f} (r={r:.3f})') for _, row in df.iterrows(): ax.annotate(short(row['都道府県']), (row['高齢者率'], row['空き家率']), xytext=(3, 3), textcoords='offset points', fontsize=7, color='#555') ax.set_xlabel('高齢者率(65歳以上人口の割合, %)', fontsize=12) ax.set_ylabel('空き家率(空き家数/総住宅数, %)', fontsize=12) ax.set_title('図1 高齢者率 × 空き家率(47都道府県, SSDSE-E)', fontsize=13, fontweight='bold') ax.legend(fontsize=10, loc='upper left') ax.grid(alpha=0.3, linestyle='--') ax.set_axisbelow(True) fig.text(0.5, -0.03, '※SSDSE-E(全空き家率)による再現。原論文 図1 は住宅・土地統計調査の「その他の住宅」割合を用いており、\n' ' 傾き(原論文 y=0.025x-0.3504)や個別数値は原論文の報告値とは一致しない(符号=向きの比較用)。', ha='center', fontsize=8, color='#777') plt.tight_layout() fig.savefig(os.path.join(FIG_DIR, '2020_H5_3_fig1.png'), bbox_inches='tight') plt.close(fig) print(f" -> fig1 保存 (r={r:.3f}, p={p:.4f})") |
図1 を生成中 ... -> fig1 保存 (r=0.735, p=0.0000)
stats.linregress で回帰直線の傾き・切片・r を求め、凡例に式を表示している。
原論文は「地価が100万円/m²を超えると、地価が高い地域ほど空き家が少ない(負の相関)」とし、地価が極端に高い愛知・京都・埼玉・神奈川・大阪・東京・兵庫を外れ値として除いても弱い負の相関が残る、と述べている。SSDSEでも同じ手続きを再現する。
原論文 図2・3 に対応。「地価が高いほど空き家が少ない」か、外れ値を除くとどうなるかを1枚で示すのが目的。そのため大都市圏を別マーカーで描き、全47件と外れ値除外の回帰直線を2本引く。
192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 | # ============================================================ # 図2: 地価 × 空き家率(大都市圏を外れ値として区別/回帰直線2本) # ============================================================ print("図2 を生成中 ...") fig, ax = plt.subplots(figsize=(9, 6.5)) is_out = df['都道府県'].isin(outliers) ax.scatter(df.loc[~is_out, '地価'], df.loc[~is_out, '空き家率'], s=60, c='#3d85c6', alpha=0.85, edgecolors='white', linewidth=0.6, label='通常の県', zorder=3) ax.scatter(df.loc[is_out, '地価'], df.loc[is_out, '空き家率'], s=95, c='#cc0000', alpha=0.9, marker='D', edgecolors='white', linewidth=0.6, label='大都市圏(外れ値)', zorder=4) for _, row in df[is_out].iterrows(): ax.annotate(short(row['都道府県']), (row['地価'], row['空き家率']), xytext=(4, 2), textcoords='offset points', fontsize=8, color='#990000') sl1, ic1, r1, p1, _ = stats.linregress(df['地価'], df['空き家率']) sl2, ic2, r2, p2, _ = stats.linregress(sub['地価'], sub['空き家率']) xs1 = np.linspace(df['地価'].min(), df['地価'].max(), 100) xs2 = np.linspace(sub['地価'].min(), sub['地価'].max(), 100) ax.plot(xs1, sl1 * xs1 + ic1, color='#999', lw=1.8, ls='--', label=f'全47件 (r={r1:.3f})', zorder=2) ax.plot(xs2, sl2 * xs2 + ic2, color='#e69138', lw=2.2, label=f'外れ値除外 (r={r2:.3f})', zorder=2) ax.set_xlabel('住宅地の地価(標準価格, 円/m^2)', fontsize=12) ax.set_ylabel('空き家率(%)', fontsize=12) ax.set_title('図2 地価 × 空き家率(47都道府県, SSDSE-E+B)', fontsize=13, fontweight='bold') ax.legend(fontsize=9, loc='upper right') ax.grid(alpha=0.3, linestyle='--') ax.set_axisbelow(True) fig.text(0.5, -0.03, '※SSDSE(全空き家率)による再現。原論文 図2・3 は「その他の住宅」割合を用いており数値は一致しない。', ha='center', fontsize=8, color='#777') plt.tight_layout() fig.savefig(os.path.join(FIG_DIR, '2020_H5_3_fig2.png'), bbox_inches='tight') plt.close(fig) print(f" -> fig2 保存 (全47 r={r1:.3f}, 除外後 r={r2:.3f})") |
図2 を生成中 ... -> fig2 保存 (全47 r=-0.532, 除外後 r=-0.483)

原論文の仮説②は「次の世帯がない高齢者が、住宅を維持できず放棄することが空き家増加の原因」。これを②-1 高齢者のみ世帯の割合(図3)と、②-2 空き家化の理由(図4)で確かめる。
原論文 図7 に対応。仮説②「高齢者のみ世帯が多い地域ほど空き家が多い」を散布図で確かめるのが目的。
231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 | # ============================================================ # 図3: 高齢者のみ世帯割合 × 空き家率(散布図+回帰直線) # ============================================================ print("図3 を生成中 ...") fig, ax = plt.subplots(figsize=(9, 6.5)) x = df['高齢者のみ世帯割合'].values y = df['空き家率'].values ax.scatter(x, y, s=60, c='#8e7cc3', alpha=0.85, edgecolors='white', linewidth=0.6, zorder=3) sl, ic, r, p, se = stats.linregress(x, y) xs = np.linspace(x.min(), x.max(), 100) ax.plot(xs, sl * xs + ic, color='#e69138', lw=2.2, zorder=2, label=f'回帰直線 y={sl:.3f}x{ic:+.3f} (r={r:.3f})') for _, row in df.iterrows(): ax.annotate(short(row['都道府県']), (row['高齢者のみ世帯割合'], row['空き家率']), xytext=(3, 3), textcoords='offset points', fontsize=7, color='#555') ax.set_xlabel('高齢者のみ世帯の割合(%, SSDSE-A集計)', fontsize=12) ax.set_ylabel('空き家率(%)', fontsize=12) ax.set_title('図3 高齢者のみ世帯割合 × 空き家率(47都道府県)', fontsize=13, fontweight='bold') ax.legend(fontsize=10, loc='upper left') ax.grid(alpha=0.3, linestyle='--') ax.set_axisbelow(True) fig.text(0.5, -0.03, '※SSDSE(全空き家率/高齢者のみ世帯はSSDSE-A集計)による再現。原論文 図7 とは変数定義が異なり数値は一致しない。', ha='center', fontsize=8, color='#777') plt.tight_layout() fig.savefig(os.path.join(FIG_DIR, '2020_H5_3_fig3.png'), bbox_inches='tight') plt.close(fig) print(f" -> fig3 保存 (r={r:.3f}, p={p:.4f})") |
図3 を生成中 ... -> fig3 保存 (r=0.760, p=0.0000)

「なぜ空き家になったのか」は、統計データではなく国土交通省のアンケート(原論文 図8)による。SSDSEには無い数値なので、原論文の報告値をそのまま円グラフに再掲する(再計算ではない)。
原論文 図8 に対応。「そもそも家が空き家になる一番の理由は何か」を示すのが目的。この数値は国土交通省アンケートの結果で SSDSE には無いため、原論文の報告値をそのまま円グラフに再掲する(再計算ではない)。
264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 | # ============================================================ # 図4: 空き家化の理由(国土交通省アンケートの報告値を可視化) # ※SSDSE未収録。原論文 図8 の報告値を再掲(再計算ではない) # ============================================================ print("図4(報告値の可視化)を生成中 ...") reasons = ['居住者の死亡のため', '居住者の転出のため', '家屋の建て替え等のため', 'その他', '入院・施設入居のため'] vals = [68.1, 23.4, 4.3, 4.3, 0.0] colors = ['#cc0000', '#e69138', '#6aa84f', '#999999', '#3d85c6'] fig, ax = plt.subplots(figsize=(8.5, 6)) wedges, _, _ = ax.pie( vals, colors=colors, startangle=90, counterclock=False, autopct=lambda v: f'{v:.1f}%' if v > 0.5 else '', pctdistance=0.75, wedgeprops=dict(edgecolor='white', linewidth=1.2)) ax.legend(wedges, [f'{n}({v:.1f}%)' for n, v in zip(reasons, vals)], loc='center left', bbox_to_anchor=(0.98, 0.5), fontsize=10) ax.set_title('図4 空き家化の理由(国土交通省アンケート)\n' '※原論文の報告値の可視化(再計算ではない)', fontsize=12, fontweight='bold') plt.tight_layout() fig.savefig(os.path.join(FIG_DIR, '2020_H5_3_fig4.png'), bbox_inches='tight') plt.close(fig) print(" -> fig4 保存(報告値の可視化)") |
図4(報告値の可視化)を生成中 ... -> fig4 保存(報告値の可視化)

原論文 第4章は、空き家の特徴に応じた3つの処理方法(解体・売却・賃貸)のメリット・デメリットを整理し、それぞれの総費用を試算している。
| 方法 | メリット | デメリット | 使える場面 |
|---|---|---|---|
| 解体 | 費用が安い/土地を利用できる | ビジネスに活かしにくい/密集地は解体困難 | 築年数が長く改修点が多い空き家 |
| 売却 | 経済が回る/解体しなくてよい | 買い手が多くない/仏壇・墓の管理に支障、改修が必要 | 築年数が短く住みやすさに支障がない空き家 |
| 賃貸 | 財産を手放さない/賃貸所得を得られる | 引き続き管理が必要/借り手がいないと固定資産税を払う | 管理者がいて賃貸の知識をもって行える場合 |
原論文は「損傷なし→賃貸、平成3年以降の損傷あり→売却(改修)、それ以外・不明→解体」と区分し、平成26年空家実態調査(建築時期)と NPO の単価を使って総費用を積算している。
原論文 第4章のしめくくり。「空き家を片づけるのにいくらかかるか」の規模感を示す。この試算はSSDSE未収録の単価・区分を使った原論文独自のものなので、報告値をそのまま再掲する。
288 289 290 291 292 293 294 | # ============================================================ # 参考: 空き家処理費用の試算(原論文の報告値, 再掲) # ※SSDSE未収録の単価・区分を用いた原論文独自の試算 # ============================================================ print("空き家処理費用(原論文の報告値, 再掲):") for name, oku in [('解体', 3270), ('売却(改修)', 134), ('賃貸(管理)', 123)]: print(f" {name:9s}: 約 {oku:>4d} 億円") |
空き家処理費用(原論文の報告値, 再掲): 解体 : 約 3270 億円 売却(改修) : 約 134 億円 賃貸(管理) : 約 123 億円
原論文は、空き家の分布や他の事象との相関を調べ、空き家を効率よく減らす方法を探った。本ページは、そのうち SSDSE で再計算できる関係を実データで再現した。
結論(原論文):空き家増加の主因は高齢者の死亡後の管理不足であり、特に過疎地域で顕著である。解体費が世帯収入以上の規模に達するため、個人レベルでの解決は難しく、国レベルの継続的な方策や、ボランティア・企業などの協力が重要である。
データ出典:SSDSE-E-2026/SSDSE-B-2026/SSDSE-A-2025(独立行政法人統計センター公表の教育用標準データセット)。原論文の報告値は「平成30年住宅・土地統計調査」「国土交通省 空き家等の現状について」等による。
再現コード:code/2020_H5_3_shorei.py
この論文(相関分析・外れ値の扱い・報告値の可視化)で、初心者がやりがちな勘違いをまとめます。
本文で見慣れない言葉が出てきたら、ここで確認してください。
この論文で実際に使われている手法について、「何のためか」「結果をどう読むか」「注意点」を手法別にまとめます。
この研究をさらに発展させる3つの方向性です。
手を動かすのが最強の学習法です。本ページのスクリプトをベースに挑戦してみましょう。
outliers のリストを変えて(例:東京だけ、または大都市圏を除かない)再実行。statsmodels で実行。相関分析・地域データ分析は、行政や企業の現場で広く使われています。
この論文を読んで抱きやすい疑問に答えます。
この論文を理解できたか、クリックで確認しましょう。間違えても解説が出ます。
このページの分析は、この画面の中でそのまま実行できます。
Python をインストールする必要も、CSV をダウンロードする必要もありません。
下のセルの 「▶ ブラウザで実行」 を上から順に押すか、
「▶ 最初から全部実行」 で一気に流してください。
表示されるのは、本文の図表とまったく同じ計算の結果です
(動かしているのは再現スクリプト code/2020_H5_3_shorei.py そのもの)。
コードは書き換えられます。「✏️ 書き換える」で数字や変数を変えて ▶ を押すと、 結果がどう変わるかをその場で確かめられます(元に戻すボタンつき)。 ページを開いた時点で裏で実行環境の準備が始まっているので、待ち時間はほとんどありません。 初回だけ実行環境の取得にインターネット接続が必要です。