【PowerBIメモ】RESAS APIとRを使ってデータセットを作ってみる

PowerBIは、Microsoftが提供するビジネスインテリジェンスツールです。
PowerBIのデータセットは、Rスクリプトを使って作成することもできます。
今回は、RESAS APIをRで読み込み、PowerBIのデータセットとして利用する一連の流れを紹介したいと思います。

コードが汚いので、そのへんは暖かい目で見てくださいね。





#【対象読者】
PowerBIの使い方の幅を広げたい人
Rの基本的な操作がわかる人
オープンデータを使ったデータ分析がしたい人

#RESAS APIの利用準備
RRSASは、国が提供しているオープンデータの可視化Webサービスです。
公的データだけでなく、パートナー企業もデータ提供しており、
NTTのモバイル空間統計データや、ナビタイムの駅混雑予報などの情報も取得できます。

まずはRESAS APIの利用登録を以下より。
[RESAS-API](https://opendata.resas-portal.go.jp)
![図1.png](https://qiita-image-store.s3.amazonaws.com/0/165789/acf8dff1-24d2-e3f7-ba53-0d5773e7fbff.png)


登録は手順どおりに進めば難しくありません。
最終的に「APIキー」を取得できるので、控えておきます。


#RでRESAS-APIからデータ取得
RでRESAS-APIからデータ取得するためのスクリプトを作ります。
まずは都道府県一覧を読み込みます。
詳しい説明はコード内コメントに預けます。

```R:prefName.r
#使用パッケージの準備
library(RCurl) #RCurl httpリクエストの作成が可能になるパッケージ
library(rjson) #jsonデータを扱うパッケージ
library(dplyr) #%>%を使いたいだけ
library(purrr) #リスト操作のためのパッケージ

#各種パラメータの登録
url <- 'https://opendata.resas-portal.go.jp' 
#https://opendata.resas-portal.go.jp/docs/api/v1/index.html を見るといいかも

api.prefname <- '/api/v1/prefectures'
#自分が使いたいデータのAPIを選択、今回は都道府県一覧を取得するAPI
#先頭に"/"を記載

key <- 'xxxxxxxx'
#登録した時のAPIキー

#APIでjsonデータを取得
prefname.json <- getURL(paste(url,api.prefname,sep=''),httpheader = paste('X-API-KEY:',key))
#RCurlパッケージ

#jsonをリストに変換
prefname.list <- fromJSON(prefname.json)
#rjsonパッケージ

#データフレームをつくる
prefCode <- as.numeric(lapply(prefname.list$result,"[[",1))
prefName <- as.character(lapply(prefname.list$result,"[[",2))
prefname.df <- data.frame(prefCode,prefName)
```

これで都道府県一覧は完成です。
view関数等で、データフレームがしっかりできているか確認するといいですね。
次は都道府県ごとの将来推計人口を取得するスクリプトを作ります。



```R:poplation.r

#各都道府県全体の将来人口推計を取得
api.prefpop <- "/api/v1/population/composition/perYear"
#そのほかのパラメーターは先ほどのものを流用します。
#スクリプトを分ける場合は、それぞれに記述が必要です。

#APIでjsonデータを取得
#１都道府県ずつしか取得できないので、無理やり繰り返し処理。
#もっといい方法ありそう・・・
n <- 1
pop.df <- data.frame(matrix(rep(NA, 3), nrow=1))[numeric(0), ]
colnames(pop.df) <- c("year", "value", "prefCode")#空のデータフレームを作って、ここにデータを入れます
for(i in 1:47){
  prefpop.json <- getURL(paste(url,api.prefpop,"?cityCode=-&prefCode=",n,sep=''),httpheader = paste('X-API-KEY:',key))
    #力技で、都道府県コードの連番をＡＰＩで叩きます
  prefpop.list <- fromJSON(prefpop.json)
  temp.df <- lapply(prefpop.list$result$data[[1]]$data, flatten) %>%
    bind_rows
  temp.df <- transform(temp.df,prefCode = n)　#都道府県コード入れるのを忘れずに
  pop.df <- rbind(pop.df,temp.df)
  rm(temp.df) #一応おまじない
  n <- n + 1
}

```

最後のほうのコードは正直恥ずかしいレベルの力技ですね。。。
もっとリスト操作に習熟できるように励みます・・・。

さて、恥をさらしましたが
データフレームがしっかり作成出来ていることを確認したら、Ｒでの作業は完了です。


#PowerBIでRスクリプトを読み込む

やっとPowerBIにたどり着きました！
PowerBIはローカルやサーバー、Webサイトなど、あらゆる場所をデータソースとすることが出来ます。
先ほど作成したＲスクリプトもデータソースとして登録できます。

まずは、データ取得からRスクリプトを選択。
先ほど作ったコードをコピペします。
※PowerBI上でもスクリプト書けるんですけど、ご自身の慣れたエディタからのコピペがいいと思います。

（１）
![図2.png](https://qiita-image-store.s3.amazonaws.com/0/165789/5b7dfb53-cb47-a290-cf9e-846f68a38cdb.png)



（２）
![図3.png](https://qiita-image-store.s3.amazonaws.com/0/165789/38eb65f8-9a1d-bd78-2e9d-1b942ffc4c00.png)


PowerBI上でスクリプトが動くので、ちょっと時間がかかります。
こんな画面になったら成功。データフレームのオブジェクトが読み込まれていますね。
（３）
![図4.png](https://qiita-image-store.s3.amazonaws.com/0/165789/4576b1c4-ac47-02f2-e67e-552811e3c56f.png)


あとはPowerBI上で好きなように料理するだけ！

コードガシガシ書くのもいいですが、
インタラクティブな操作感がやっぱり素敵です。
上記のコードで作ったレポートを公開します。クリックでいろいろいじれるので、ぜひ操作してみてくださいね。
https://app.powerbi.com/view?r=eyJrIjoiMjJkMTBkNzctMmNiZS00YzMzLTk3YWQtYmNhZjE4MTgyZjI1IiwidCI6ImY3NmY1MDE3LTgzMDktNDJjNi05NTUxLTM1N2U0ZWFiM2RlNiIsImMiOjEwfQ%3D%3D


※Qiitaって、iframeの埋め込み使えないんだね・・・（；；）



#終わりに
PowerBIにRスクリプトを使ってデータを読み込む具体的な日本語リファレンスが見つからなかったので、勉強がてら試してみました。
PowerBIの勉強より、R上でのAPI操作をもっと学ばないとと反省する結果になりました（爆）
今度はggplot2などを使って、PowerBIのグラフィックにRを用いてみたいと思います。


##参考にさせていただいたプロフェッショナルの方々の記事
[RESAS-APIをRで使ってみる](http://qiita.com/aokikenichi/items/33cd6328b80fed117637)
[政府統計の総合窓口(e-Stat)のAPIを使ってみよう [R編]](http://qiita.com/R_Linux/items/e22d1ec28ab653f01f75)
大変勉強させていただきました。ありがとうございました。