estatapiパッケージで読み込めないデータの取得を諦めない
先日、estatapiパッケージを使って政府統計の総合窓口 e-statが提供する統計データの取得を行おうとしました。
library(tidyverse) library(estatapi) df.list <- estat_getDataCatalog(appId = Sys.getenv("ESTAT_TOKEN"), searchWord = "自然公園") df.tgt <- df.list %>% filter(NAME == "1_自然公園の利用者の推移") df.tgt %>% use_series(`@id`)
## [1] "000003207752" "000003207753" "000003598436" "000003598437"
## [5] "000004030647" "000004030648" "000006926442" "000006926443"
## [9] "000006926486" "000006926487" "000006926510" "000006926511"
## [13] "000007477438" "000007477439" "000007821915" "000007821916"
estat_getStatsData(Sys.getenv("ESTAT_TOKEN"), statsDataId = "000006926486")
検索キーワードに「自然公園」を指定し、統計データの一覧を取得します。その後、データの参照に必要なidをestat_getStatsData()
に指定して実行するとエラーになります。idはあっているはずなのにナンデ!?
困っているとパッケージの開発者 id:yutannihilation さんが返信くださいました。
@u_ribo あー、「XLS形式だからダメ」です! getDataCatalogは主にAPIから取れないデータを検索するためのAPIで、APIから取れるやつを検索するのはgetStatsListの方なんだよね...
— Hiroaki Yutani (@yutannihilation) 2017年5月10日
e-stat APIで取得できるデータはestat_getStatsList()
! APIで取れないデータはestat_getDataCatalog()
!!
というわけでRを使ったデータ取得を諦め… ませんでした。
estat_getDataCatalog()
を実行して返ってくるデータフレームにはURLという変数があります。これはデータダウンロードに利用されるURLで、このURLにアクセスすることで対象のデータファイルがダウンロードされます。つまりestatapiの関数にはないですが、このURLを利用すればファイルのダウンロードが可能になるわけです。実際に試してみましょう。ファイルの拡張子についての情報もまたFORMATという変数に保存されています。
download.file(df.tgt$URL[1], paste0("dl_file", ".", tolower(df.tgt$FORMAT[1])))
RからAPIでダウンロードできないe-Statのデータをダウンロードすることができました。めでたしめでたし。
というか、httrでバイナリデータを取得してそれを読み込ませればファイルをダウンロードしなくて済むのでは? と思いきや、それはできなかった。
期待。