crosshyou

主にクロス表(分割表)分析をしようかなと思いはじめましたが、あまりクロス表の分析はできず。R言語の練習ブログになっています。

農林水産物の輸出上位20品目のデータ分析2 - R言語でAPIを使って政府統計の総合窓口(e-Stat)からデータを取得する。

 

www.crosshyou.info

 の続きです。

前回は政府統計の総合窓口(e-Stat)のサイトからファイルをダウンロードして、それをR言語のread.csvファイルを使って読み込みました。

今回は、APIを使って読み込んでみました。

www.dataquest.io

https://www.dataquest.io/blog/r-api-tutorial/

 

ここのサイトを参考にしてやってみました。

まず、httprとjsonliteというパッケージを読み込みます。

library関数でパッケージの読み込み

tidyverseは必要ではないですが、グラフを書いたりするときに使うので一緒に読み込んでいます。

政府統計の総合窓口のサイトで、APIのURLを確認します。

API

DBのほうではなくて、APIのほうをクリックします。

APIのURL

こういうURLが表示されますので、コピーしてどこかに保存しておきます。

政府統計の総合窓口のサイトでログイン登録をして、APIのID, appIdを登録しておきます。

appIDの発行

一部を黒塗にしていますが、こんな感じです。

これで準備完了です。

GET関数で取得するそうです。

GET関数

appId=の後に取得した自分のappIdを挿入して、app/json/getStatsDataとjsonを挿入します。jsonを挿入しないとデータがXML形式で取得されます。

これで、resの中にデータが取り込めました。

resを見てみます。

status: 200

Status:が200になっていれば、うまくデータを取り込んでいるそうです。

res$contentをrawToChar関数とfromJson関数でR言語のデータに変換します。

fromJSON関数とrawToChar関数

names関数でdataの中に何があるか見てみます。

names関数

GET_STATS_DATAというのが一つあるだけですね。

dataをdata$GET_STATS_DATAに置き換えます。

f:id:cross_hyou:20201011145100p:plain

このdataの中には何があるか見てみます。

names関数

RESULT, PARAMETER, STATISTICAL_DATAの3つがありました。

RESULTの中身は何でしょうか?

f:id:cross_hyou:20201011145435p:plain

あんまり関係ない中身でした。

PARAMETERの中身はどうでしょうか?

f:id:cross_hyou:20201011145628p:plain

PARAMETERの中身も欲しいデータではありませんでした。

STATISTICAL_DATAの中身はどうでしょうか?

f:id:cross_hyou:20201011145915p:plain

中略

f:id:cross_hyou:20201011145941p:plain

STATISTICAL_DATAの中に欲しいデータが入っていました。

なので、dataをdata$STATISTICAL_DATAに置き換えます。

f:id:cross_hyou:20201011150118p:plain

dataの中身を見てみましょう。

f:id:cross_hyou:20201011150228p:plain

RESULT_INF, TABLE_INF, CLASS_INF, DATA_INFの4つがあることがわかりました。

RESULT_INFの中身を見てみます。

f:id:cross_hyou:20201011150508p:plain

重要な情報ではないですね。

TABLE_INFの中身を見てみましょう。

f:id:cross_hyou:20201011150647p:plain

これも欲しい情報ではないですね。

CLASS_INFはどうでしょうか?

f:id:cross_hyou:20201011150808p:plain

CLASS_INFの中には欲しい情報が入っていました。

DATA_INFの中身はどうでしょうか?

f:id:cross_hyou:20201011150939p:plain

DATA_INFの中身も欲しい情報でした。

CLASS_INFとDATA_INFの中に欲しいデータが入っています。

data$CLASS_INFをclass_infに、data$DATA_INFをdata_infと名付けます。

f:id:cross_hyou:20201011151200p:plain

class_infの中をみてみます。

f:id:cross_hyou:20201011151318p:plain

CLASS_OBJというのが一つあるだけでした。

class_inf$CLASS_OBJをclass_objと名付けます。

f:id:cross_hyou:20201011151450p:plain

data_infの中には何があるでしょうか?

f:id:cross_hyou:20201011151547p:plain

data_infの中にはNOTE, VALUEというのがありました。

NOTEの内容は何かな?

f:id:cross_hyou:20201011151725p:plain

これは必要無い情報でした。

VALUEを見てみます。

f:id:cross_hyou:20201011151841p:plain

VALUEがデータテーブルですね!

class_data$VALUEが欲しいデータテーブルでしたので、これをdf2と名前を付けて保存しておきます。

f:id:cross_hyou:20201011152032p:plain

class_objの内容を確認しましょう。

f:id:cross_hyou:20201011152134p:plain

@id, @name, CLASSの3つがあります。

@idは何でしょうか?

f:id:cross_hyou:20201011152320p:plain

あんまり欲しい情報ではないです。

@nameはどうでしょうか?

f:id:cross_hyou:20201011152419p:plain

これもあまり欲しい情報ではないです。

CLASSはどうでしょうか?

f:id:cross_hyou:20201011152608p:plain

中略

f:id:cross_hyou:20201011152629p:plain

CLASSに欲しい情報が入っていました。

class_obj$CLASSをclassと名前を付けて保存しておきます。

f:id:cross_hyou:20201011152819p:plain

classの中をもう一度確認します。

f:id:cross_hyou:20201011153015p:plain

中略

f:id:cross_hyou:20201011153038p:plain

欲しいデータは、class1$"@name"とclass2$"@name"ですね!

それぞれ、class1, class2と名前を付けて保存しておきます。

f:id:cross_hyou:20201011153358p:plain

class1を見てみます。

f:id:cross_hyou:20201011153507p:plain

class1は品目名でした。

class2を見ます。

f:id:cross_hyou:20201011153610p:plain

class2はデータタイプでした。

df2にclass1とclass2の情報を追加すればいいですね。

df2を確認します。

f:id:cross_hyou:20201011153749p:plain

@cat01が品目名で、@cat03がデータタイプです。@unitは単位、$は値です。

変数名をわかりやすしておきます。

f:id:cross_hyou:20201011153939p:plain

このdf2にhinmoku_code, type_codeという名前の変数を追加します。データはhinmoku, typeのコピーです。

f:id:cross_hyou:20201011154121p:plain

hinmokuとtypeをclass1, class2に置き換えます。前段階の準備として、ファクター型にします。

f:id:cross_hyou:20201011154253p:plain

hinmokuをclass1に、typeをclass2に置き換えます。

f:id:cross_hyou:20201011154400p:plain

df2をstr関数で見てみます。

f:id:cross_hyou:20201011154452p:plain

hinmoku, typeがうまく置き換わっています。valueが文字列型なので、数値型に変換して完成です。

f:id:cross_hyou:20201011154613p:plain

これでやっと終わりました。

正直、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"でした。

ほんとにそうか、確認しておきましょう。

f:id:cross_hyou:20201011155535p:plain

f:id:cross_hyou:20201011155836p:plain

f:id:cross_hyou:20201011155852p:plain

ということでpathが確認できました。

今回は以上です。