R で e-Stat のデータを取得する方法
記事の内容
R の {estatapi}
パッケージを利用して e-Stat から公的統計を取得する方法をまとめています。e-Stat とは日本の統計を閲覧するためのポータルサイトです。
estatapi とは
このパッケージを利用すると R から e-Stat の API にアクセスすることができます。{estatapi}
の詳細はこちらを、e-Stat API についてはこちらをご覧ください。
記事で扱う範囲
上記リンクの公式文書では以下の 4 つが紹介されていますが、ここではどのデータを取得したいかは決まっており、メタ情報と統計データの 2 つを取得したい状況を想定します。つまり以下のうち、2 と 3 についてまとめています。
- 統計表情報取得
- メタ情報取得
- 統計データ取得
- データカタログ情報取得
使い方
労働力調査の統計データを取得して、性別ごとの正規雇用者、非正規雇用者の人数に関する時系列グラフを作成してみます。
事前準備
e-Stat の API を利用するにはユーザ登録やアプリケーション ID の取得が必要です。詳しくは利用ガイドをご覧ください。この登録作業は短い時間で簡単に済んだ記憶があります。
メタ情報取得
パッケージの取得です。CRAN に登録されているので install.packages()
でインストールできます。{estatapi}
の他に、後から作図で使う別のパッケージも取得しています。
pacman::p_load(tidyverse, estatapi, ggrepel)
アプリケーション ID を appId
としておきます。
appId <- "ここに取得したアプリケーション ID を入力します。"
メタデータを取得する際に、statsDataId
という引数を指定する必要があります。今回は労働力調査から、1-1-4 農林業・非農林業,雇用形態別雇用者数(2013年~) というデータを使用します。このリンク内にある統計表表示 ID が上記の引数に与える数値になります。
meta <- estat_getMetaInfo(appId = appId,
statsDataId = "0003078094")
メタ情報の中身は以下のようになっています。cat*
はデータに含まれる属性を、time
はデータの時間軸を指しています。
> names(meta)
[1] "tab" "cat01" "cat02" "cat03" "area" "time" ".names"
具体的に、cat02
の中身は以下のとおりです。実際の分析では 03 「正規の職員・従業員」と 10 「非正規の職員・従業員」を使います。
> meta$cat02
# A tibble: 11 × 4
`@code` `@name` `@level` `@parentCode`
<chr> <chr> <chr> <chr>
1 00 雇用者 1 NA
2 02 役員を除く雇用者 2 NA
3 03 正規の職員・従業員 3 NA
4 10 非正規の職員・従業員 3 NA
5 04 パート・アルバイト 4 10
6 05 パート 5 04
7 06 アルバイト 5 04
8 07 労働者派遣事業所の派遣社員 4 10
9 11 契約社員 4 10
10 12 嘱託 4 10
11 09 その他 4 10
データを取得します。最後に不要な列を除外しています。
dat <- estat_getStatsData(appId = appId,
statsDataId = "0003078094",
cdCat01 = "00", # 全産業
cdCat02 = c("03", "10"), # 正規の職員・従業員、非正規の職員・従業員
cdCat03 = c("1", "2") # 男、女
) %>%
select(!c(tab_code, cat01_code, cat02_code, cat03_code,
area_code, time_code))
取得したデータの中身は以下のとおりです。
> head(dat)
# A tibble: 6 × 9
表章項目 産業分類 雇用形態 性別 地域 時間軸…¹ unit value annot…²
<chr> <chr> <chr> <chr> <chr> <chr> <chr> <dbl> <chr>
1 実数(人口) 全産業 正規の職員・従業員 男 全国 2013年 万人 2275 NA
2 実数(人口) 全産業 正規の職員・従業員 男 全国 2014年 万人 2267 NA
3 実数(人口) 全産業 正規の職員・従業員 男 全国 2015年 万人 2270 NA
4 実数(人口) 全産業 正規の職員・従業員 男 全国 2016年 万人 2286 NA
5 実数(人口) 全産業 正規の職員・従業員 男 全国 2017年 万人 2318 NA
6 実数(人口) 全産業 正規の職員・従業員 男 全国 2018年 万人 2347 NA
このデータで時系列グラフを作成します。ggplot
の書き方がスマートでないかもしれませんが、、以下のようなコードでグラフを作成できます。
windowsFonts(meiryo = "Meiryo UI") # フォント変更用
dat %>%
mutate(性別 = fct_relevel(性別, "男", "女")) %>%
ggplot(data = .,
mapping = aes(x = `時間軸(年次)`, y = value,
color = 雇用形態)) +
theme_classic() +
geom_point() +
geom_line(mapping = aes(group = 雇用形態), show.legend = FALSE) +
geom_text_repel(mapping = aes(label = value),
size = 3, family = "meiryo",
show.legend = FALSE) +
coord_cartesian(ylim = c(0, 2500)) +
scale_y_continuous(limits = c(0, 2500),
breaks = seq(0, 2500, by = 250)) +
labs(x = "年", y = "人数(単位: 万人)",
title = "雇用形態・性別の人数推移") +
theme(text = element_text(family = "meiryo"),
axis.text.x = element_text(angle = -45, size = 8),
axis.text.y = element_text(size = 8),
title = element_text(size = 10, face = "bold"),
axis.title.x = element_text(vjust = -1.5, size = 9, face = "bold"),
axis.title.y = element_text(vjust = 1.5, size = 9, face = "bold"),
legend.position = "bottom") +
facet_wrap(~ 性別, scales = "free")
できあがったグラフは以下のとおりです。
注意点
e-Stat にあるデータベースは、必ずしも最新版の調査まで公開されていないことがあります。e-Stat を直接確認しながらご利用されることをおすすめします。
Discussion