estatapiパッケージ0.3.0をリリースしました
夏ですね。夏休みの自由研究のネタに困っているみなさんのために、e-Stat APIをRから使うためのパッケージ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
、$
、value
、cat01_info
、cat02_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
のラベル)...unit
、value
という順番です。
#> 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_getStatsData
のOther parameters
のセクションまたはAPIの仕様書を参照してください。
estat_getStatsData()
による10万件を超えるデータの取得
e-Stat APIは、1度に取得できるレコード数は10万件までです。0.3.0からは、レコード数が10万以上の場合は自動で再取得するようになりました。
もし再取得をしないようにする場合には、.fetch_all = FALSE
を指定するか、limit
引数を指定してください。
estat_getDataCatalog()
の追加
e-Stat APIから直接取得できないデータを検索するAPIです。統計表ファイル(Excel、CSV、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のIssues、Twitterあたりでご相談ください。