estatapiパッケージ0.3.0をリリースしました

夏ですね。夏休みの自由研究のネタに困っているみなさんのために、e-Stat APIをRから使うためのパッケージestatapiの新しいバージョンをリリースしました。

CRAN - Package estatapi

すでにCRAN上にあるので、

install.packages("estatapi")

すれば0.3.0がインストールされます。

はじめに謝っておくと、いくつか非互換な変更があるので、すでにestatapiを使ったコードを動かしている方はご注意ください(すみません)。あと、あんまり大した機能追加はありません。。

なお、estatapiパッケージについての基本的な説明はこちらのQiitaの記事をご参照ください(毎度の他力本願)。私は淡々と変更点について書きます。

estat_getStatsList()estat_getStatsData()の挙動の変更

estat_getStatsList()

実はestat_getStatsList()には以下のバグがありました。元のJSON$という名前の要素が複数あって、それをdata.frameに直す時に変なまとめられかたをしてしまっている、というものです。(もしこの挙動で困ってらっしゃった方がいらっしゃれば、すみませんでした)

$というカラムはなくして、.use_labelという引数を追加しました。これをTRUE(デフォルト)にすると、各カラムはhuman-readableな名前になります。

estat_getStatsList(appId = appId, searchWord = "チョコレート", .use_label = TRUE)
#> # A tibble: 189 x 13
#>           @id        STAT_NAME    GOV_ORG
#>         <chr>            <chr>      <chr>
#> 1  0000100087 全国物価統計調査     総務省
#> 2  0000100104 全国物価統計調査     総務省
#> 3  0000100125 全国物価統計調査     総務省
#> 4  0000100126 全国物価統計調査     総務省
#> 5  0000100127 全国物価統計調査     総務省
#> ...

.use_label = FALSEを指定すると、コードになります。

estat_getStatsList(appId = appId, searchWord = "チョコレート", .use_label = FALSE)
#> # A tibble: 189 x 13
#>           @id STAT_NAME GOV_ORG
#>         <chr>     <chr>   <chr>
#> 1  0000100087  00200572   00200
#> 2  0000100104  00200572   00200
#> 3  0000100125  00200572   00200
#> 4  0000100126  00200572   00200
#> 5  0000100127  00200572   00200
#> ...

estat_getStatsData()

以前のバージョンでは、以下のような出力でした。@cat01@cat02...unit$valuecat01_infocat02_info...という順番にカラムが並んでいます。

#>   @cat01 @cat02 @cat03 @area      @time @unit    $ value
#> 1    008    001    001 00000 2011000000  千人 9782  9782
#> 2    008    001    001 01000 2011000000  千人  440   440
#> 3    008    001    001 02000 2011000000  千人   82    82
#>                                       cat01_info cat02_info cat03_info area_info time_info
#> 1 (行動者数)音楽会などによるクラシック音楽鑑賞       総数       総数      全国    2011年
#> 2 (行動者数)音楽会などによるクラシック音楽鑑賞       総数       総数    北海道    2011年
#> 3 (行動者数)音楽会などによるクラシック音楽鑑賞       総数       総数    青森県    2011年

これが、0.3.0では以下のような出力になっています。cat01_code、(cat01_codeのラベル)、cat02_code、(cat02_codeのラベル)...unitvalueという順番です。

#>   cat01_code                   趣味・娯楽の種類別行動者数等 cat02_code 性別 cat03_code
#> 1        008 (行動者数)音楽会などによるクラシック音楽鑑賞        001 総数        001
#> 2        008 (行動者数)音楽会などによるクラシック音楽鑑賞        001 総数        001
#> 3        008 (行動者数)音楽会などによるクラシック音楽鑑賞        001 総数        001
#>   ふだんの就業状態,年齢_2011 area_code 地域 _ 2011  time_code 時間軸(年次) unit value
#> 1                        総数     00000        全国 2011000000       2011年 千人  9782
#> 2                        総数     01000      北海道 2011000000       2011年 千人   440
#> 3                        総数     02000      青森県 2011000000       2011年 千人    82

つまり、

  • @XXX -> XXX_code
  • XXX_info -> human-readableな名前
  • @unit -> unit
  • $ -> (なし)

というように変更されました。これはe-Stat APIのバージョン2.1で追加されたgetSimpleStatsDataの結果のカラム名と合わせています。

パラメータ名を引数に

これまでは、

estat_getStatsList(appId, searchWord, ...)

という関数だったのが、

estat_getStatsList(appId, searchWord, lang = c("J", "E"), .use_label = TRUE,
  surveyYears = NULL, openYears = NULL, statsField = NULL,
  statsCode = NULL, searchKind = NULL, startPosition = NULL,
  limit = NULL, updatedDate = NULL, ...)

というように、APIのパラメータが可能な限り名前付き引数になっています。これで、RStudioなどのエディタでタブ補完されるようになりました。

ただし、estat_getStatsData()だけは、パラメータが多すぎる(cdCat01...cdCat15とかいう感じ)のであまり引数にできていません。 ここで指定可能なパラメータについては、?estat_getStatsDataOther parametersのセクションまたはAPIの仕様書を参照してください。

estat_getStatsData()による10万件を超えるデータの取得

e-Stat APIは、1度に取得できるレコード数は10万件までです。0.3.0からは、レコード数が10万以上の場合は自動で再取得するようになりました。 もし再取得をしないようにする場合には、.fetch_all = FALSEを指定するか、limit引数を指定してください。

estat_getDataCatalog()の追加

e-Stat APIから直接取得できないデータを検索するAPIです。統計表ファイル(ExcelCSV、PDF)および統計データベースの情報を取得できます。このAPIはファイルのURLを返すだけなので、そのままRで処理することは難しいかもしれません。

catalog1 <- estat_getDataCatalog(appId = appId, searchWord = "チョコレート", dataType = c("PDF", "XLS"))

catalog1[1, c("@id", "STAT_NAME", "TABLE_NAME", "SURVEY_DATE", "TABLE_SUB_CATEGORY1", "DATASET_NAME", "NAME", "LANDING_PAGE", "URL", "FORMAT")] %>%
  glimpse
#> Observations: 1
#> Variables: 10
#> $ @id                 <chr> "000000701890"
#> $ STAT_NAME           <chr> "全国物価統計調査"
#> $ TABLE_NAME          <chr> "業態別価格分布-全国,都市階級,都道府県"
#> $ SURVEY_DATE         <chr> "1997"
#> $ TABLE_SUB_CATEGORY1 <chr> "0104チョコレート"
#> $ DATASET_NAME        <chr> "平成9年全国物価統計調査_大規模店舗編_1997年"
#> $ NAME                <chr> "価格分布_1_業態別価格分布-全国,都市階級,都道府県_0104チョコレート"
#> $ LANDING_PAGE        <chr> "http://www.e-stat.go.jp/SG1/estat/GL08020...
#> $ URL                 <chr> "http://www.e-stat.go.jp/SG1/estat/GL08020...
#> $ FORMAT              <chr> "XLS"

まとめ

ということで、大して機能追加はないわりに色々あって挙動が変わっています。すみません。もしこの変更で不都合あれば、GithubのIssuesTwitterあたりでご相談ください。