8.1 e-Stat API

ここでは、e-StatのAPI機能を使って、Rから直接e-Statのデータを取得する手順について紹介します。e-Stat APIでは、一部のデータを除き、e-Statで公開されている主要なデータを利用することができます。e-Stat APIで利用できるデータの一覧は以下のURLから確認できますので、データを探す際はこちらを参照するとよいでしょう。

e-StatのAPI機能を使うには、予めユーザー登録をしてアプリケーションIDを取得しておく必要があります。

Rからe-Stat APIを使う際には、estatapiパッケージを利用します。初めて利用する場合は、インストールしておきます。

install.packages("estatapi")

estatapiを利用するセッションでは、最初に

library(estatapi)

を実行しておきます。また、取得したアプリケーションIDは、estatapiパッケージの関数を呼び出すごとに用いますので、以下のように変数に入れておくとよいでしょう。

appId <- "取得したアプリケーションID"

8.1.1 統計表の検索

e-Stat APIで利用可能な統計表を検索する場合はウェブサイトからの方が便利ですが、estatapiの関数でもestat_getStatsList()関数で検索できます。

search_result <- estat_getStatsList(appId, "チョコレート")

8.1.2 メタ情報の取得

指定した統計データに関する情報(データ本体ではなく、列名や変数のカテゴリに関する情報など)を取得するには、estat_getMetaInfo()関数を用います。ここでは、家計調査における品目分類ごとの支出額についてのデータを見てみましょう。データのIDは、前の表から、0003103532となっています。

metainfo_result <- estat_getMetaInfo(appId, "0003103532")

結果はリストで帰ってきますので、要素の一覧を確認します。

names(metainfo_result)
## [1] "tab"    "cat01"  "cat02"  "area"   "time"   ".names"

リストの要素ごとに中身を確認します。

metainfo_result$cat01
## # A tibble: 703 x 5
##    `@code`   `@name`                            `@level` `@unit`  `@parentCode`
##    <chr>     <chr>                              <chr>    <chr>    <chr>        
##  1 000100000 世帯数分布(抽出率調整)           1        一万分比 <NA>         
##  2 000200000 集計世帯数                         1        世帯     <NA>         
##  3 000300000 世帯人員                           1        人       <NA>         
##  4 000400000 18歳未満人員                       2        人       000300000    
##  5 000500000 65歳以上人員                       2        人       000300000    
##  6 000600000 65歳以上無職者人員                 3        人       000500000    
##  7 000700000 有業人員                           1        人       <NA>         
##  8 000800000 世帯主の年齢                       1        歳       <NA>         
##  9 000900000 持家率                             1        %       <NA>         
## 10 001000000 家賃・地代を支払っている世帯の割合 1        %       <NA>         
## # ... with 693 more rows
metainfo_result$cat02
## # A tibble: 4 x 3
##   `@code` `@name`                                                       `@level`
##   <chr>   <chr>                                                         <chr>   
## 1 03      二人以上の世帯(2000年~)                                    1       
## 2 04      二人以上の世帯のうち勤労者世帯(2000年~)                    1       
## 3 01      二人以上の世帯(農林漁家世帯を除く)(1985年~2007年,2017年) 1       
## 4 02      二人以上の世帯のうち勤労者世帯(農林漁家世帯を除く)(1985年~ 1
metainfo_result$tab
## # A tibble: 1 x 3
##   `@code` `@name` `@level`
##   <chr>   <chr>   <chr>   
## 1 01      金額    ""
metainfo_result$area
## # A tibble: 53 x 3
##    `@code` `@name`        `@level`
##    <chr>   <chr>          <chr>   
##  1 00000   全国           1       
##  2 01003   01100 札幌市   1       
##  3 02003   02201 青森市   1       
##  4 03003   03201 盛岡市   1       
##  5 04003   04100 仙台市   1       
##  6 05003   05201 秋田市   1       
##  7 06003   06201 山形市   1       
##  8 07003   07201 福島市   1       
##  9 08003   08201 水戸市   1       
## 10 09003   09201 宇都宮市 1       
## # ... with 43 more rows
metainfo_result$time
## # A tibble: 420 x 3
##    `@code`    `@name`    `@level`
##    <chr>      <chr>      <chr>   
##  1 1985000101 1985年1月  1       
##  2 1985000202 1985年2月  1       
##  3 1985000303 1985年3月  1       
##  4 1985000404 1985年4月  1       
##  5 1985000505 1985年5月  1       
##  6 1985000606 1985年6月  1       
##  7 1985000707 1985年7月  1       
##  8 1985000808 1985年8月  1       
##  9 1985000909 1985年9月  1       
## 10 1985001010 1985年10月 1       
## # ... with 410 more rows

分類品目において、「チョコレート」を含む分類を確認します。

metainfo_result$cat01 %>% 
  filter(str_detect(`@name`, "チョコレート"))
## # A tibble: 2 x 5
##   `@code`   `@name`              `@level` `@unit` `@parentCode`
##   <chr>     <chr>                <chr>    <chr>   <chr>        
## 1 010800130 352 チョコレート     5        円      010800000    
## 2 010800140 353 チョコレート菓子 5        円      010800000

8.1.3 統計データの取得

ここでは、チョコレート(010800130)の月別支出金額を見てみましょう。cdArea = "00000"は「全国」、cdCat01 = "02"は「2人以上の世帯」を指定しています。

choco <- estat_getStatsData(appId, "0003103532", cdArea = "00000",
                            cdCat01 = "010800130", cdCat02 = "03")
## Fetching record 1-240... (total: 240 records)

このデータを使って、月別支出金額の折れ線グラフを作成してみます。

choco %>% 
  mutate(time = paste0(`時間軸(月次)`, "1日")) %>% 
  mutate(time = lubridate::ymd(time)) %>% 
  ggplot(aes(time, value, group = 1)) +
  geom_line() +
  theme_minimal()

年毎の折れ線グラフを重ねて描画するには以下のようにします。

choco %>% 
  mutate(time = paste0(`時間軸(月次)`, "1日")) %>% 
  mutate(time = lubridate::ymd(time)) %>%
  mutate(year = lubridate::year(time)) %>% 
  mutate(month = lubridate::month(time)) %>% 
  ggplot(aes(month, value, group = year, color = factor(year))) +
  geom_line() +
  theme_minimal() +
  scale_x_continuous(breaks = 1:12)