学校外教育の参加率

Others
Author

Kentaro Kamada

Published

November 1, 2024

モチベーション

  • 学校外教育の参加率にについて、政府統計などを用いて示したい

パッケージ読み込み

library(tidyverse)
library(estatapi)

準備

  • あらかじめE-Stat APIの申請を行い、アプリケーションIDを取得しておく必要がある
  • .Renviron.Rprofileあたりで、環境変数ESTAT_APPIDにアプリケーションIDを設定しておくと便利
# E-Stat APIのアプリケーションIDを環境変数から取得
appid <- Sys.getenv('ESTAT_APPID')

メタデータ取得

使用するデータは以下の3つ

  1. 文部科学省「子供の学習費調査」3 学年(年齢)別,所在市町村の人口規模(学科)別の学習費支出状況 小学校 https://www.e-stat.go.jp/stat-search/database?statdisp_id=0003368820
  2. 文部科学省「子供の学習費調査」3 学年(年齢)別,所在市町村の人口規模(学科)別の学習費支出状況 中学校 https://e-stat.go.jp/stat-search/database?statdisp_id=0003368821
  3. 文部科学省「子供の学習費調査」3 学年(年齢)別,所在市町村の人口規模(学科)別の学習費支出状況 高等学校(全日制) https://e-stat.go.jp/stat-search/database?statdisp_id=0003368822
# 以下のコードでメタデータが取得できる
estat_getMetaInfo(appid, '0003368820')
estat_getMetaInfo(appid, '0003368821')
estat_getMetaInfo(appid, '0003368822')

データ取得

  • メタデータを参照しつつ必要な情報のみを取得
elementary <- 
  estat_getStatsData(
    appid, 
    '0003368820',
    cdTab = '110', 
    cdCat01 = '160,170,180,190,200,210', 
    cdCat02 = '320'
  )

jhigh <- 
  estat_getStatsData(
    appid, 
    '0003368821',
    cdTab = '110', 
    cdCat01 = '160,170,180', 
    cdCat02 = '320'
  )

high <- 
  estat_getStatsData(
    appid, 
    '0003368822',
    cdTab = '110', 
    cdCat01 = '160,170,180', 
    cdCat02 = '320'
  )

データ整形

df <- 
  bind_rows(
    小学校 = elementary,
    中学校 = jhigh,
    高校 = high,
    .id = '学校段階'
  ) |> 
  select(学校段階, 学年 = `学年(年齢)・所在市町村人口規模(学科)`, 公私立 = 公私立区分, 年度 = `時間軸(年度次)`, 塾利用率 = value) |> 
  mutate(
    年度 = parse_number(年度),
    学校段階 = fct_relevel(学校段階, '小学校', '中学校', '高校'),
    公私立 = fct_relevel(公私立, '公立', '私立'),
    学年 = fct_relevel(学年, '第1学年', '第2学年', '第3学年', '第4学年', '第5学年', '第6学年')
  )

プロット

df |> 
  ggplot(aes(学年, 塾利用率, fill = 公私立))+
  geom_col(position = position_dodge(), color = 'black')+
  geom_text(aes(label = 塾利用率), position = position_dodge(width = 0.9), vjust = 1.5)+
  facet_grid(rows = vars(学校段階), cols = vars(年度))+
  labs(y = '塾利用率(%)')+
  theme_bw(base_family = 'Noto Sans JP')+
  theme(legend.position = 'bottom')