この教材は原論文と同じデータを読み込み、同じ手順で計算し直しています。画面に出る数値と図は、あなたのブラウザがその場で計算した結果です。
| 原論文が使ったデータ | SSDSE-基本素材・SSDSE-県別推移・SSDSE-市区町村・国勢調査・全国学力・学習状況調査【中学校】調査結果 分析単位:都道府県 中核手法:相関分析 |
|---|---|
| この教材が使うデータ |
|
| 原論文(PDF) | 都市部と地方の教育格差の要因と課題 ~日本の教育現場において~ 統計活用奨励賞/森下 達也(愛知県立一宮高等学校) |
▶ ここに書いてある分析は、ページ下部の「🐍 ブラウザで動かす」でそのまま実行できます(インストール不要)。動かしているのは code/2022_H4_katsuyo.py(226 行)そのものです。
著者:森下 達也(愛知県立一宮高等学校) 受賞:統計活用奨励賞[高校生の部](2022年度)
論文の概要(原文):都道府県別の進学者数、県民所得、教育費支出、教育関係事業所数等を用い、都道府県別の教育格差やその要因を分析するとともに、教育のデジタル化として、県別のデジタル教科書整備率や電子黒板整備率を比較し、都市部におけるデジタル整備が進んでいないことを示した。
審査会コメント(原文):データを眺めながら仮説を順次提示し考察する姿勢は好ましい。都市と地方の教育格差については、地方にいるほど強く感じられ、行政として取り組まなければならないテーマであり、検討も経済面と学校における設備や学習環境の充実度から行われており、的を射たものである。
このページの4つの散布図(図1〜図3)と相関比較(図4)は、以下の手順で自分で再現できます。コードの編集は不要です。(県民所得・事業所数・整備率はSSDSE-Bに無いため、それらに関わる図は原論文の報告値を可視化します。)
data/raw/ フォルダに入れます。html/figures/ に自動保存されます。
本研究の目的は、日本の教育現場における都市部と地方の教育格差の要因と課題を分析し、是正に向けた取り組みの手掛かりを探ることにある。著者は、学習塾や英会話教室など家庭学習を補う機関が都市部に多く、中高一貫校も都市部に多いなど、より専門的に学ぶ機会に差があることに格差を感じたという。
さらに2020年の新型コロナウイルスによる全国一斉休校の際、都市部に多い私立の中学・高校がいち早くタブレットを用いたオンライン授業を行い注目を集めた。そこで著者は、経済面の格差に加えてデジタル教育の実態や格差も調査することにした。
高校生の部 SSDSE・e-Stat・全国学力調査 相関分析・単回帰 ロジックツリー デジタル教育の整備率
本研究は高校生および高等学校を対象としたデータを用い、教育格差の要因を「個人の経済面」と「学校教育における設備や学習環境の充実度」の2側面から分析した。年度の異なるデータを組み合わせている点に注意が必要である。
| データ名 | 年次 | 出典 |
|---|---|---|
| 一人当たりの県民所得(平成23年基準)[千円] | 2017 | 統計センター SSDSE-基本素材 |
| 教育費(二人以上世帯の月間消費支出額の年平均値)[円] | 2019 | 統計センター SSDSE-県別推移 |
| 高等学校卒業者のうち進学者数[人] | 2019 | 統計センター SSDSE-県別推移 |
| 事業所数(教育・学習支援業)(民営)[所] | 2016 | 統計センター SSDSE-市区町村 |
| 大学数[校] | 2020 | 統計センター SSDSE-県別推移 |
| 人口集中地区人口/デジタル教科書整備率/電子黒板整備率/高等学校数/進学率 | 2015-2020 | e-Stat 政府統計の総合窓口 |
| 全国学力・学習状況調査【中学校】【都道府県別】 | 2022 | 国立教育政策研究所 |
一人当たりの県民所得・教育費・進学者数・進学率・大学数・教育学習支援事業所数について、散布図と相関係数・決定係数を求め、経済的な要因が進学にどう効くかを調べた。
高等学校のデジタル教科書・普通教室の電子黒板の整備率を都道府県別に比較し、「都市部の方が整備が進んでいる」という仮説を検証した。
個人の経済面について、原論文が報告した6つの関係の相関係数・決定係数は次のとおり(原論文 表2、および図4)。これらは原論文の報告値の転記である。
| 比較した関係 | 相関係数 | 決定係数 | SSDSE-Bで再現 |
|---|---|---|---|
| 一人当たりの県民所得 × 教育費(図4) | 0.4632 | 0.2146 | ✗(県民所得が無い) |
| 教育費 × 進学者数(図5) | 0.5286 | 0.2694 | ✓ |
| 教育・学習支援事業所数 × 進学者数(図6) | 0.9945 | 0.9891 | ✗(事業所数が無い) |
| 教育・学習支援事業所数 × 教育費(図7) | 0.5039 | 0.2431 | ✗(事業所数が無い) |
| 大学数 × 教育費(図8) | 0.4863 | 0.2365 | ✓ |
| 教育費 × 進学率(図9) | 0.5961 | 0.3554 | ✓ |
| 大学数 × 進学率(図10) | 0.5742 | 0.3298 | ✓ |
原論文の経済面の分析は、都道府県別の教育費・進学者数・進学率・大学数の相関である。これらはSSDSE-Bにも収録されているので、原論文の出典年次に合わせて変数を構築し、相関・回帰を実際に計算し直してみる。
header=0, skiprows=[1](1行目=列コード、2行目=日本語名を読み飛ばす)で読み込み、教育費・進学者数・進学率は2019年、大学数は2020年を抽出。原論文の「都市部9都道府県」フラグを付ける。edu データセットが、後の図1〜図4(散布図と相関比較)すべての材料になる。原論文の出典年次に合わせるのがポイント。76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 | df = pd.read_csv(DATA_B, encoding='cp932', header=0, skiprows=[1]) df['SSDSE-B-2026'] = df['SSDSE-B-2026'].astype(int) d19 = df[df['SSDSE-B-2026'] == 2019].copy() # 教育費・進学者数・進学率 d20 = df[df['SSDSE-B-2026'] == 2020].copy() # 大学数 d19['進学率'] = d19['E4602'] / d19['E4601'] * 100 # 進学者数 / 卒業者数 × 100 edu = d20[['Prefecture', 'E6102', 'E4101']].merge( d19[['Prefecture', 'L322108', 'E4602', '進学率']], on='Prefecture') edu = edu.rename(columns={'E6102': '大学数', 'E4101': '高校数', 'L322108': '教育費', 'E4602': '進学者数'}) edu['都市部'] = edu['Prefecture'].isin(CITY9) print('=== [DATA] SSDSE-B から構築した教育格差データセット ===') print(f'対象: 全{len(edu)}都道府県 / 都市部9都道府県: {" ".join(CITY9)}') print(f'教育費(月間, 円) : {edu["教育費"].min():.0f} 〜 {edu["教育費"].max():.0f}') print(f'進学率(%) : {edu["進学率"].min():.1f} 〜 {edu["進学率"].max():.1f}') print(f'大学数(校) : {edu["大学数"].min():.0f} 〜 {edu["大学数"].max():.0f}') print('東京都 例: 教育費={:.0f}円, 進学者数={:.0f}人, 大学数={:.0f}校, 高校数={:.0f}校'.format( *edu[edu['Prefecture'] == '東京都'][['教育費', '進学者数', '大学数', '高校数']].values[0])) |
=== [DATA] SSDSE-B から構築した教育格差データセット === 対象: 全47都道府県 / 都市部9都道府県: 北海道 埼玉県 千葉県 東京都 神奈川県 愛知県 大阪府 兵庫県 福岡県 教育費(月間, 円) : 5095 〜 20381 進学率(%) : 40.7 〜 67.8 大学数(校) : 2 〜 143 東京都 例: 教育費=19935円, 進学者数=66643人, 大学数=143校, 高校数=428校
個人の経済面のうち、まず教育費と進学者数の関係を見る。原論文は「教育費が高い都道府県ほど進学者数も多い、やや強い正の相関」と報告した。これをSSDSE-Bで実際に描き直す。
scatter() を定義し、まず教育費 × 進学者数(原論文 図5)を描く。単回帰の傾き・切片・相関係数・決定係数を計算し、原論文の報告値と並べて表示する。99 100 101 102 103 104 105 106 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 132 133 134 135 136 | def scatter(x, y, xlabel, ylabel, title, fname, xreport, yreport): """都市部を●、地方を○で描く散布図+回帰直線(実再現)。報告値も併記して返す。""" s, i, r, p, se = stats.linregress(x, y) fig, ax = plt.subplots(figsize=(9, 6)) m_city = edu['都市部'].values ax.scatter(x[~m_city], y[~m_city], facecolors='none', edgecolors='#888', s=55, linewidths=1.2, label='地方') ax.scatter(x[m_city], y[m_city], color='#C62828', s=70, label='都市部(人口集中地区人口300万人超)') for pref in LABEL_CITY: row = edu[edu['Prefecture'] == pref] ax.annotate(pref, (row[x.name].values[0], row[y.name].values[0]), fontsize=9, color='#B71C1C', xytext=(4, 4), textcoords='offset points') xr = np.linspace(x.min(), x.max(), 100) ax.plot(xr, s * xr + i, color='#1565C0', linewidth=1.8) ax.text(0.97, 0.06, f'y = {s:.4g}x + {i:.4g}\n$R^2$ = {r**2:.4f} (r = {r:.4f})', transform=ax.transAxes, ha='right', fontsize=12, bbox=dict(boxstyle='round', fc='#EFF3FF', ec='#1565C0')) ax.set_xlabel(xlabel, fontsize=12) ax.set_ylabel(ylabel, fontsize=12) ax.set_title(title, fontsize=13, fontweight='bold') ax.legend(fontsize=10, loc='upper left') ax.grid(alpha=0.3) plt.tight_layout() plt.savefig(os.path.join(FIG_DIR, fname), dpi=150, bbox_inches='tight') plt.close() print(f' 再現値 : r = {r:.4f} , R^2 = {r**2:.4f} , y = {s:.4g}x + {i:.4g} , p = {p:.2e} , N = {len(x)}') print(f' 報告値 : r = {xreport} , R^2 = {yreport} (原論文)') return r, r**2 # ============================================================ # [FIG1] 教育費 × 進学者数(原論文 図5 の実再現) # ============================================================ print('\n=== [FIG1] 教育費 × 高等学校卒業者のうち進学者数(原論文 図5 の実再現) ===') r1, d1 = scatter(edu['教育費'], edu['進学者数'], '教育費(月間消費支出額)[円]', '高等学校卒業者のうち進学者数[人]', '教育費 × 進学者数(SSDSE-B 2019年・実再現, N=47)', '2022_H4_fig1_ts.png', '0.5286', '0.2694') |
=== [FIG1] 教育費 × 高等学校卒業者のうち進学者数(原論文 図5 の実再現) === 再現値 : r = 0.5190 , R^2 = 0.2694 , y = 1.832x + -7701 , p = 1.85e-04 , N = 47 報告値 : r = 0.5286 , R^2 = 0.2694 (原論文)
進学者「数」は人口の多い都市部で大きくなりがち。そこで規模の影響を除いた進学率で、教育費・大学数との関係を見直す。
scatter() 関数で、教育費 × 進学率(原論文 図9)と大学数 × 進学率(原論文 図10)を描く。分子を進学者数から進学率(=進学者数÷卒業者数×100)に変えると、都道府県の規模の違いを除いた比較になる。142 143 144 145 146 147 148 149 150 151 152 153 154 | r2, d2 = scatter(edu['教育費'], edu['進学率'], '教育費(月間消費支出額)[円]', '高等学校卒業者の進学率[%]', '教育費 × 進学率(SSDSE-B 2019年・実再現, N=47)', '2022_H4_fig2_scatter.png', '0.5961', '0.3554') # ============================================================ # [FIG3] 大学数 × 進学率(原論文 図10 の実再現) # ============================================================ print('\n=== [FIG3] 大学数 × 高等学校卒業者の進学率(原論文 図10 の実再現) ===') r3, d3 = scatter(edu['大学数'], edu['進学率'], '大学数[校]', '高等学校卒業者の進学率[%]', '大学数 × 進学率(大学数2020年・進学率2019年・実再現, N=47)', '2022_H4_fig3_ols.png', '0.5742', '0.3298') |
=== [FIG2] 教育費 × 高等学校卒業者の進学率(原論文 図9 の実再現) === 再現値 : r = 0.5963 , R^2 = 0.3556 , y = 0.001033x + 40.98 , p = 9.74e-06 , N = 47 報告値 : r = 0.5961 , R^2 = 0.3554 (原論文) === [FIG3] 大学数 × 高等学校卒業者の進学率(原論文 図10 の実再現) === 再現値 : r = 0.5748 , R^2 = 0.3304 , y = 0.1646x + 49.47 , p = 2.38e-05 , N = 47 報告値 : r = 0.5742 , R^2 = 0.3298 (原論文)
大学が多い都道府県ほど進学率が高いか。原論文は相関係数0.5742のやや強い正の相関を報告した。地図の代わりに散布図で地域差を表現する。
個別の散布図で一致を確認したので、最後に4つの関係をまとめて、原論文の報告値と再現値を並べて「どれだけ再現できたか」を検証する。
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 | rel_names = ['教育費×\n進学者数\n(図5)', '大学数×\n教育費\n(図8)', '教育費×\n進学率\n(図9)', '大学数×\n進学率\n(図10)'] reported = [0.5286, 0.4863, 0.5961, 0.5742] # 大学数×教育費 も再現しておく(図として保存はしないが比較に使う) s8, i8, r8, p8, _ = stats.linregress(edu['大学数'], edu['教育費']) reproduced = [r1, r8, r2, r3] for nm, rp, rr in zip(['教育費×進学者数', '大学数×教育費', '教育費×進学率', '大学数×進学率'], reported, reproduced): print(f' {nm:12s} 報告値 r={rp:.4f} / 再現値 r={rr:.4f} (差 {abs(rp-rr):.4f})') fig, ax = plt.subplots(figsize=(10, 5.5)) xpos = np.arange(len(rel_names)) w = 0.38 ax.bar(xpos - w / 2, reported, w, color='#90A4AE', label='原論文の報告値(表2)') ax.bar(xpos + w / 2, reproduced, w, color='#1565C0', label='本ページの再現値(SSDSE-B)') for xp, rp, rr in zip(xpos, reported, reproduced): ax.text(xp - w / 2, rp + 0.01, f'{rp:.3f}', ha='center', fontsize=10) ax.text(xp + w / 2, rr + 0.01, f'{rr:.3f}', ha='center', fontsize=10, color='#1565C0') ax.set_xticks(xpos) ax.set_xticklabels(rel_names, fontsize=10) ax.set_ylabel('相関係数 r', fontsize=12) ax.set_ylim(0, 0.75) ax.set_title('原論文の報告値と再現値はほぼ一致する(実再現の検証)', fontsize=13, fontweight='bold') ax.legend(fontsize=11) ax.grid(axis='y', alpha=0.3) plt.tight_layout() plt.savefig(os.path.join(FIG_DIR, '2022_H4_fig4_gap.png'), dpi=150, bbox_inches='tight') plt.close() print(' → 4関係すべてで報告値と再現値の差は0.01前後。SSDSE-Bで原論文を再現できた。') |
=== [FIG4] 相関係数:原論文の報告値(表2)と本再現の比較 === 教育費×進学者数 報告値 r=0.5286 / 再現値 r=0.5190 (差 0.0096) 大学数×教育費 報告値 r=0.4863 / 再現値 r=0.4863 (差 0.0000) 教育費×進学率 報告値 r=0.5961 / 再現値 r=0.5963 (差 0.0002) 大学数×進学率 報告値 r=0.5742 / 再現値 r=0.5748 (差 0.0006) → 4関係すべてで報告値と再現値の差は0.01前後。SSDSE-Bで原論文を再現できた。
教育格差のもう一つの側面、学校の設備・学習環境を見る。原論文は「都市部の方がデジタル教育の整備が進んでいる」と仮説を立てたが、結果は逆だった。整備率はSSDSE-Bに無いため、原論文 表3・表4・図13・図14 の報告値を可視化する(再計算ではない)。
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 | dig_pref = ['東京都', '愛知県', '大阪府', '石川県', '佐賀県', '岐阜県'] dig_rate = [33.9, 17.5, 21.0, 93.3, 90.7, 81.1] dig_city = [True, True, True, False, False, False] eb_pref = ['東京都', '愛知県', '大阪府', '鳥取県', '佐賀県', '石川県'] eb_rate = [82.1, 7.3, 29.8, 132.3, 115.5, 82.6] eb_city = [True, True, True, False, False, False] DIG_AVG, EB_AVG = 30.2, 22.3 # 原論文 図13・図14 の全国平均(報告値) fig, (axL, axR) = plt.subplots(1, 2, figsize=(12, 5)) for ax, prefs, rates, cityflag, avg, ttl in [ (axL, dig_pref, dig_rate, dig_city, DIG_AVG, 'デジタル教科書の整備率(原論文 表3)'), (axR, eb_pref, eb_rate, eb_city, EB_AVG, '普通教室の電子黒板整備率(原論文 表4)')]: colors = ['#C62828' if c else '#2E7D32' for c in cityflag] ax.bar(prefs, rates, color=colors) for xp, v in enumerate(rates): ax.text(xp, v + 1.5, f'{v}', ha='center', fontsize=10) ax.axhline(avg, color='#555', linestyle='--', linewidth=1.3) ax.text(len(prefs) - 0.4, avg + 2, f'全国平均 {avg}%', ha='right', fontsize=10, color='#333') ax.set_ylabel('整備率[%]', fontsize=11) ax.set_title(ttl, fontsize=12, fontweight='bold') ax.grid(axis='y', alpha=0.3) fig.suptitle('デジタル教育の整備率:都市部3都府県(赤)vs 整備率上位3県(緑)' ' ※報告値の可視化(再計算ではない)', fontsize=12.5, fontweight='bold') plt.tight_layout(rect=[0, 0, 1, 0.96]) plt.savefig(os.path.join(FIG_DIR, '2022_H4_fig5_digital.png'), dpi=150, bbox_inches='tight') plt.close() print(' ※ SSDSE-B に整備率の列は無い。上記はすべて原論文 表3・表4・図13・図14 の報告値の転記。') print(f' デジタル教科書 全国平均 {DIG_AVG}% / 電子黒板 全国平均 {EB_AVG}%(ともに50%未満)。') |
=== [FIG5] デジタル教科書・電子黒板 整備率(報告値の可視化・再計算ではない) === ※ SSDSE-B に整備率の列は無い。上記はすべて原論文 表3・表4・図13・図14 の報告値の転記。 デジタル教科書 全国平均 30.2% / 電子黒板 全国平均 22.3%(ともに50%未満)。 → 整備率上位は石川・佐賀・岐阜・鳥取など地方。「都市部の方が進んでいる」仮説は偽。
| 区分 | 都道府県 | デジタル教科書 整備率[%] | 電子黒板 整備率[%] | 高等学校数[校] |
|---|---|---|---|---|
| 都市部 | 東京都 | 33.9 | 82.1 | 428 |
| 都市部 | 愛知県 | 17.5 | 7.3 | 222 |
| 都市部 | 大阪府 | 21.0 | 29.8 | 256 |
| 上位県 | 石川県 | 93.3 | 82.6 | 56 |
| 上位県 | 佐賀県 | 90.7 | 115.5 | 46 |
| 上位県 | 岐阜県/鳥取県 | 81.1(岐阜) | 132.3(鳥取) | 81/32 |
※ 整備率が100%を超える県があるのは、原論文の元データ(e-Stat)で「整備台数÷普通教室数」等の定義により1教室あたり複数台となるため。値はすべて原論文の報告値。
原論文は分析結果を次のように整理した。教育格差の要因は、所得に占める教育費の差である。所得の低い地方の世帯では、大学や教育・学習支援事業所への通学に経済的負担が大きく、教育格差が生じると考えられる。是正には、地方世帯の所得増加や、地方の高校生への教育に関する経済的支援が必要だと著者は述べている。
デジタル教育およびその学習環境の整備については、都市部・地方に関わらず差があった。各都道府県で導入への取り組みが大きく異なるためと考えられる。デジタル教科書・電子黒板の整備率の全国平均はともに50%を下回っており、著者は「地域による教育格差を広げぬよう、またデジタル教育で日本が世界に遅れをとらぬよう、早急な整備と対応」を強く求めている。
本研究は、都道府県別のデータを用いて都市部と地方の教育格差を、①個人の経済面(所得・教育費・進学)と②学校の設備・学習環境(デジタル整備率)の2側面から分析した。経済面では教育費・大学数・事業所数が進学者数・進学率とやや強い正の相関を示し、教育格差の主因は所得に占める教育費の差だと結論づけた。デジタル教育の整備率は地域を問わず全国平均50%未満で、都市部が進んでいるという仮説は偽だった。
このページの図1〜図4(実再現)は、以下から再現できます。
🐍 再現コード(.py) 📊 SSDSE-B-2026.csv
※ 図1〜図4はSSDSE-Bの教育費・進学者数・進学率・大学数からの実再現です。図5(デジタル整備率)と表2〜表4は、県民所得・事業所数・整備率がSSDSE-B外のため、原論文の報告値を可視化・転記したものです(再計算ではありません)。
この研究を読むとき・まねするときに陥りやすい誤解を整理する。
クリックすると各用語の詳しい解説ページに移動できます。
この研究で使われている手法を、手を動かす順に説明する。
この研究の「相関は見つけたが因果は不明・学力との関係は未検証」という結論は、次の研究の出発点になる。
再現コードを少し変えるだけで試せる課題を、易しい順に用意した。
d19 = df[df['SSDSE-B-2026'] == 2019] の 2019 を 2013 や 2023 に変えて、教育費×進学者数の相関が年で変わるか確かめよう。edu['進学者数'] を edu['進学率'] に変えて、規模の影響を除くと点の並びがどう変わるか比べよう。edu.groupby('都市部')[['教育費','進学率','大学数']].mean() で、都市部9都道府県と地方の平均を比較しよう。差はどのくらい?E4501)で割った「高校生あたり大学数」を作り、進学率との相関が弱まるか確かめよう。人口規模という交絡の効果を体感できる。E4501(高等学校生徒数)を d19 から取ってきて割り算する。「地域単位のデータで社会現象の要因を相関・回帰で探る」発想は、行政や教育政策で広く使われている。
この研究を読んで浮かびやすい疑問に答える。
この論文を理解できたか、クリックで確認しましょう。間違えても解説が出ます。
このページの分析は、この画面の中でそのまま実行できます。
Python をインストールする必要も、CSV をダウンロードする必要もありません。
下のセルの 「▶ ブラウザで実行」 を上から順に押すか、
「▶ 最初から全部実行」 で一気に流してください。
表示されるのは、本文の図表とまったく同じ計算の結果です
(動かしているのは再現スクリプト code/2022_H4_katsuyo.py そのもの)。
コードは書き換えられます。「✏️ 書き換える」で数字や変数を変えて ▶ を押すと、 結果がどう変わるかをその場で確かめられます(元に戻すボタンつき)。 ページを開いた時点で裏で実行環境の準備が始まっているので、待ち時間はほとんどありません。 初回だけ実行環境の取得にインターネット接続が必要です。