の続きです。
前回は政府統計の総合窓口(e-Stat)のサイトからファイルをダウンロードして、それをR言語のread.csvファイルを使って読み込みました。
今回は、APIを使って読み込んでみました。
https://www.dataquest.io/blog/r-api-tutorial/
ここのサイトを参考にしてやってみました。
まず、httprとjsonliteというパッケージを読み込みます。
tidyverseは必要ではないですが、グラフを書いたりするときに使うので一緒に読み込んでいます。
政府統計の総合窓口のサイトで、APIのURLを確認します。
DBのほうではなくて、APIのほうをクリックします。
こういうURLが表示されますので、コピーしてどこかに保存しておきます。
政府統計の総合窓口のサイトでログイン登録をして、APIのID, appIdを登録しておきます。
一部を黒塗にしていますが、こんな感じです。
これで準備完了です。
GET関数で取得するそうです。
appId=の後に取得した自分のappIdを挿入して、app/json/getStatsDataとjsonを挿入します。jsonを挿入しないとデータがXML形式で取得されます。
これで、resの中にデータが取り込めました。
resを見てみます。
Status:が200になっていれば、うまくデータを取り込んでいるそうです。
res$contentをrawToChar関数とfromJson関数でR言語のデータに変換します。
names関数でdataの中に何があるか見てみます。
GET_STATS_DATAというのが一つあるだけですね。
dataをdata$GET_STATS_DATAに置き換えます。
このdataの中には何があるか見てみます。
RESULT, PARAMETER, STATISTICAL_DATAの3つがありました。
RESULTの中身は何でしょうか?
あんまり関係ない中身でした。
PARAMETERの中身はどうでしょうか?
PARAMETERの中身も欲しいデータではありませんでした。
STATISTICAL_DATAの中身はどうでしょうか?
中略
STATISTICAL_DATAの中に欲しいデータが入っていました。
なので、dataをdata$STATISTICAL_DATAに置き換えます。
dataの中身を見てみましょう。
RESULT_INF, TABLE_INF, CLASS_INF, DATA_INFの4つがあることがわかりました。
RESULT_INFの中身を見てみます。
重要な情報ではないですね。
TABLE_INFの中身を見てみましょう。
これも欲しい情報ではないですね。
CLASS_INFはどうでしょうか?
CLASS_INFの中には欲しい情報が入っていました。
DATA_INFの中身はどうでしょうか?
DATA_INFの中身も欲しい情報でした。
CLASS_INFとDATA_INFの中に欲しいデータが入っています。
data$CLASS_INFをclass_infに、data$DATA_INFをdata_infと名付けます。
class_infの中をみてみます。
CLASS_OBJというのが一つあるだけでした。
class_inf$CLASS_OBJをclass_objと名付けます。
data_infの中には何があるでしょうか?
data_infの中にはNOTE, VALUEというのがありました。
NOTEの内容は何かな?
これは必要無い情報でした。
VALUEを見てみます。
VALUEがデータテーブルですね!
class_data$VALUEが欲しいデータテーブルでしたので、これをdf2と名前を付けて保存しておきます。
class_objの内容を確認しましょう。
@id, @name, CLASSの3つがあります。
@idは何でしょうか?
あんまり欲しい情報ではないです。
@nameはどうでしょうか?
これもあまり欲しい情報ではないです。
CLASSはどうでしょうか?
中略
CLASSに欲しい情報が入っていました。
class_obj$CLASSをclassと名前を付けて保存しておきます。
classの中をもう一度確認します。
中略
欲しいデータは、class1$"@name"とclass2$"@name"ですね!
それぞれ、class1, class2と名前を付けて保存しておきます。
class1を見てみます。
class1は品目名でした。
class2を見ます。
class2はデータタイプでした。
df2にclass1とclass2の情報を追加すればいいですね。
df2を確認します。
@cat01が品目名で、@cat03がデータタイプです。@unitは単位、$は値です。
変数名をわかりやすしておきます。
このdf2にhinmoku_code, type_codeという名前の変数を追加します。データはhinmoku, typeのコピーです。
hinmokuとtypeをclass1, class2に置き換えます。前段階の準備として、ファクター型にします。
hinmokuをclass1に、typeをclass2に置き換えます。
df2をstr関数で見てみます。
hinmoku, typeがうまく置き換わっています。valueが文字列型なので、数値型に変換して完成です。
これでやっと終わりました。
正直、APIで取得するより、ファイルをダウンロードしてread.csv関数で読み込むほうが楽ですね。
最後に整理すると、
データテーブルは、data$GET_STATS_DATA$STATISTICAL_DATA$DATA_INF$VALUEでした。
品目名は、data$GET_STATS_DATA$STATISTICAL_DATA$CLASS_INF$CLASS_OBJ$CLASS1$"@name"でした。
データタイプは、
data$GET_STATS_DATA$STATISTICAL_DATA$CLASS_INF$CLASS_OBJ$CLASS2$"@name"でした。
ほんとにそうか、確認しておきましょう。
ということでpathが確認できました。
今回は以上です。