30 e-Stat
30.1 API の使い方
初期設定
パッケージの、estatapi
が、e-Stat のデータを取得するためのものです。tidyverse
は基本的な解析をおこなうため、showtext
と showtext_auto()
は、グラフなどに、日本語が含まれる場合の文字化けを防ぐためのものです。
インストールされていないパッケージがありましたら、上のメニューの Tools > Install Packages から、インストールしてください。
library(tidyverse)
#> ── Attaching core tidyverse packages ──── tidyverse 2.0.0 ──
#> ✔ dplyr 1.1.3 ✔ readr 2.1.4
#> ✔ forcats 1.0.0 ✔ stringr 1.5.0
#> ✔ ggplot2 3.4.4 ✔ tibble 3.2.1
#> ✔ lubridate 1.9.3 ✔ tidyr 1.3.0
#> ✔ purrr 1.0.2
#> ── Conflicts ────────────────────── tidyverse_conflicts() ──
#> ✖ dplyr::filter() masks stats::filter()
#> ✖ dplyr::lag() masks stats::lag()
#> ℹ Use the conflicted package (<http://conflicted.r-lib.org/>) to force all conflicts to become errors
library(showtext)
#> Loading required package: sysfonts
#> Loading required package: showtextdb
library(estatapi)
#> このサービスは、政府統計総合窓口(e-Stat)のAPI機能を使用していますが、サービスの内容は国によって保証されたものではありません。
showtext_auto()
30.1.2 e-Stat 登録と、アプリケーションIDの取得
e-Stat API を利用するには、appId が必要です。
- e-stat: https://www.e-stat.go.jp/ のページへ行く。
- 右上の新規登録から、アカウント登録をします。
- メールアドレスを入力し、そこに届いてリンクを開き、パスワードを設定。
- パスワード設定は、Google などのアカウント連携ですることも可能です。
- アカウントにログイン。上の帯に、メールアドレスが表示されます。
- その右のマイページに行き、API機能(アプリケーションID発行)へ。まず、必要事項の入力が必要ですが、説明をみてください。
- 名称:API機能を利用するアプリケーション名(システム名等)- R または、RStudio
- URL:アプリケーションのURL(トップページ等のURL)
- If you do not use it on the public site, please enter “http: // test.localhost /” etc. - localhost でよいでしょう。
- 概要:アプリケーション(システム)の概要 - estatapi とでも書いておけば良いでしょう。
- 右の発行を押すと、appId が表示されます。これを記録。
30.2 estatapi
利用概要
CRAN estatspi
URL: https://CRAN.R-project.org/package=estatapi
30.2.2 統計表情報取得(estat_getStatsList())
提供されている統計表を検索します。この関数は、結果をtbl_df(dplyrのdata.frame。data.frameとほぼ同じように扱える)として返します。
STAT_NAMEやGOV_ORGは人間が読みやすい形式のラベルになっていますが、 プログラム中で扱う場合はコードのままの方が都合がいいこともあります。そのときは.use_label = FALSEを指定してください。
estat_getStatsList(appId = appId, searchWord = "")
estat_getStatsList(appId = appId, searchWord = "人口推計")
estat_getStatsList(appId = appId, searchWord = "外国人人口")
statsDataAPI=0003448219 statsDataAPI=0004001640
estat_getStatsList(appId = appId, searchWord = "国勢調査 時系列データ 男女,年齢,配偶関係")
statsDataID=0003410379
30.2.3 メタ情報取得(estat_getMetaInfo())
統計データのメタ情報を取得します。この関数は、結果をlistとして返します。listの各要素が、それぞれのデータ項目についてのメタ情報を含んだtbl_dfになっています。
meta_info <- estat_getMetaInfo(appId = appId, statsDataId = "")
meta_info <- estat_getMetaInfo(appId = appId, statsDataId = "0003410379")
glimpse(meta_info)
#> List of 5
#> $ tab : tibble [2 × 4] (S3: tbl_df/tbl/data.frame)
#> ..$ @code : chr [1:2] "020" "1120"
#> ..$ @name : chr [1:2] "人口" "人口性比"
#> ..$ @level: chr [1:2] "" ""
#> ..$ @unit : chr [1:2] "人" NA
#> $ cat01 : tibble [3 × 3] (S3: tbl_df/tbl/data.frame)
#> ..$ @code : chr [1:3] "100" "110" "120"
#> ..$ @name : chr [1:3] "総数" "男" "女"
#> ..$ @level: chr [1:3] "1" "1" "1"
#> $ area : tibble [50 × 4] (S3: tbl_df/tbl/data.frame)
#> ..$ @code : chr [1:50] "00000" "00100" "00200" "01000" ...
#> ..$ @name : chr [1:50] "全国" "人口集中地区" "人口集中地区以外の地区" "北海道" ...
#> ..$ @level : chr [1:50] "1" "2" "2" "2" ...
#> ..$ @parentCode: chr [1:50] NA "00000" "00000" "00000" ...
#> $ time : tibble [21 × 3] (S3: tbl_df/tbl/data.frame)
#> ..$ @code : chr [1:21] "1920000000" "1925000000" "1930000000" "1935000000" ...
#> ..$ @name : chr [1:21] "1920年" "1925年" "1930年" "1935年" ...
#> ..$ @level: chr [1:21] "1" "1" "1" "1" ...
#> $ .names: tibble [4 × 2] (S3: tbl_df/tbl/data.frame)
#> ..$ id : chr [1:4] "tab" "cat01" "area" "time"
#> ..$ name: chr [1:4] "表章項目" "男女_時系列" "地域_時系列" "時間軸(調査年)"
meta_info$cat01
30.2.4 統計データ取得(estat_getStatsData())
統計データを取得します。この関数は、結果をメタ情報と紐づけてtbl_dfとして返します。
必ず指定しなくてはいけないのはappIdとstatsDataIdだけですが、それだけだとデータがかなり大きくなって取得に時間がかかります。cdCat01(分類事項01)などを指定して必要な項目だけに絞ることをおすすめします。他に絞り込みに指定できるパラメータについては公式ドキュメントを参照してください。
estat_getStatsData(
appId = appId,
statsDataId = "",
cdCat01 = c("",""))
estat_pop <- estat_getStatsData(appId = appId, statsDataId = "0003410379")
#> Fetching record 1-4200... (total: 4200 records)
estat_pop
estat_pop_alien <- estat_getStatsData(appId = appId, statsDataId = "0003448219")
#> Fetching record 1-87... (total: 87 records)
estat_pop_alien
estat_pop_alien2 <- estat_getStatsData(appId = appId, statsDataId = "0004001640")
#> Fetching record 1-87... (total: 87 records)
estat_pop_alien2
0003445244
estat_pop_alien0 <- estat_getStatsData(appId = appId, lang = "E", statsDataId = "0003445244")
#> Fetching record 1-100000... (total: 100215 records)
#> Fetching record 100001-100215... (total: 100215 records)
estat_pop_alien0
estat_pop_alien0 |> distinct(Nationality) |> pull()
#> [1] "Total"
#> [2] "Foreigner"
#> [3] "Republic of Korea"
#> [4] "People's Republic of China"
#> [5] "Republic of the Philippines"
#> [6] "Kingdom of Thailand"
#> [7] "Republic of Indonesia"
#> [8] "Socialist Republic of Viet Nam"
#> [9] "India"
#> [10] "Federal Democratic Republic of Nepal"
#> [11] "United Kingdom of Great Britain and Northern Ireland"
#> [12] "United States of America"
#> [13] "Federative Republic of Brazil"
#> [14] "Republic of Peru"
#> [15] "Others"
#> [16] "Japanese"
#> [17] "Nationality not reported"
estat_pop_alien2020 <- estat_getStatsData(appId = appId, statsDataId = "0003445244")
#> Fetching record 1-100000... (total: 100215 records)
#> Fetching record 100001-100215... (total: 100215 records)
estat_pop_alien2020
estat_pop_alien2020 |> distinct(国籍) |> pull()
#> [1] "総数"
#> [2] "外国人"
#> [3] "韓国,朝鮮"
#> [4] "中国"
#> [5] "フィリピン"
#> [6] "タイ"
#> [7] "インドネシア"
#> [8] "ベトナム"
#> [9] "インド"
#> [10] "ネパール"
#> [11] "イギリス"
#> [12] "アメリカ"
#> [13] "ブラジル"
#> [14] "ペルー"
#> [15] "その他"
#> [16] "日本人"
#> [17] "日本人・外国人の別「不詳」"
colnames(estat_pop_alien2020)
#> [1] "tab_code" "表章事項"
#> [3] "cat01_code" "男女"
#> [5] "cat02_code" "国籍"
#> [7] "area_code" "全国,都道府県,市区町村"
#> [9] "time_code" "時間軸(年次)"
#> [11] "unit" "value"
#> [13] "annotation"
estat_pop_alien2020 |>
filter(`全国,都道府県,市区町村` == "全国") |>
filter(男女 == "総数") |>
filter(国籍 != "総数") |>
select(国籍, value) |>
arrange(desc(value))
estat_pop_alien2020 |>
filter(`全国,都道府県,市区町村` == "全国") |>
filter(男女 != "総数") |>
filter(!(国籍 %in% c("総数", "日本人", "外国人", "日本人・外国人の別「不詳」"))) |>
select(国籍, 男女, value) |>
arrange(desc(value)) |>
mutate(国籍別 = factor(fct_inorder(国籍))) |>
mutate(`人数(千人)`= value/1000) |>
ggplot(aes(国籍別, `人数(千人)`, fill = 男女)) + geom_col() +
labs(title = "国籍別日本在住外国人数", caption = "令和2(2020)年 国勢調査 統計表表示ID=0003445244")