2
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

KNIMEで、e-Stat(政府統計)からデータ取得!URL発行から一覧作成まで一気に処理してみた!

Posted at

はじめに

Excel処理の自動化をするのに、KNIMEを使うことが多く、いっそWEBAPIの処理にもKNIMEが使えないか、と思い立ち、やってみました。
ちなみに、使い勝手でいえばPostmanの方が優しいし、分かりやすいけど、KNIMEのメリットとして、URL作成からデータ取得、一覧化、データの整形、そして分析まで一気通貫でやれてしまうところに期待しています。
まずは、タイトルの通り、URL発行から一覧作成まで作ってみました。

前準備

KNIMEってなに?という方は、手前味噌ですが、Excel処理を自動化した記事を書いているので、こちらをご参照ください。

さて、実際の準備ですが、KNIMEをインストールして使えるようにすること( 上の記事参照 )、そして政府統計のサイトからappIdを発行してもらうことです。
メールアドレス、サイトURL等が必要になりますが、サイトURLはそんなに厳しくチェックしてなさそう。
準備ができたら、KNIMEのワークフローを作っていきます。

KNIMEの実装

簡単に流れを書くと、

 ①テーブルにURLを構成するID、値を入力する。
 ②取得したJSONの前処理する。
 ③取得した結果から項目名と値を抽出する。
 ④値を一覧にしてからコードを項目名に変換など、整形する。

こんな感じです。

①URL入力から作成まで

まずはこんな感じでURL入力から、APIに送信するURL作成までを説明します。
image.png

URL登録は、テーブルを使います。
image.png

Row0は、メインのURLを入力し、後から結合することを意識して、2列目に「?」を入れています。

ID行は、条件項目のIDを、Value行は、条件の値を入れています。
Row1は認証のためのappIdを入力しています。

こうすると、条件項目(ID)と値(Value)が見やすく、入力しやすいかな、と。

条件は複数入力されることを想定して、列数分ループする、ChunkLoopを使い、ID列とValue列を結合後、末尾に「&」を付けます。
ただし、Row0は「&」が不要なので、「?&」は「&」に変換します。

image.png

結合した結果は、Value列に上書きします。

そのあと、一旦整列(ID振り直し)した後、一つのURLとして結合するために、GroupByを使いますが、Groupとして認識させるためにIDを同じ値に修正(グループ用ID作成)します。
最後に、一律で追加した「&」のうち、URL末尾の「&」を削除(余分な文字列の削除)します。

ちなみに、今回のリクエストは、e-Statにサンプルとして記載されている、東京都の情報を取得する条件になります。

②APIリクエストから取得後、編集前まで

続いて作ったURLを使って、e-Statから情報を取得し、それを編集する前までです。
image.png

それぞれのアイコンの出力は下記の通りです。

image.png

image.png
結果は、String Valueに保存されています。
image.png
String valueをJSONに変換した結果、JSONという項目ができました。
ただし、値が「?」になっていて見えませんが、実際には値が入っています。
image.png
JSON以外の項目は不要なので、除外します。

③結果を項目名と値に分割

得られた結果には、値だけでなく、表の名称や意味、項目名など、様々な情報が含まれます。
本来、取得する際に、条件を絞って取得した方がデータ量、負荷、参照のしやすさなど、多くの面でメリットがあるんですが、とりあえず取得してから編集しました。

トライ&エラーにワクワクする人、きっと良い酒飲めると思います!
image.png
上が値の流れ、下が項目の流れです。
まず上から。
image.png
JSONから値を抽出するのに、JSON Pathを設定しています。
Pathに記載の通り、GET_STATS_DATA→STATISTICAL_DATA→DATA_INF→VALUE→(行数)→項目名で取得しています。

ちなみに、おススメの設定方法ですが、プレビュー画面で取得したいところをクリックすると、背景が青く塗られるので、「Add JSONPath」をクリックすれば、その項目を追加できるので、楽です。

これで、項目ごとに行が分かれ、その行の中でリスクと化されたデータができます。
image.png
カンマ区切りで値がつながっていますね。
これをUngroupすると、一覧になります。

image.png
ここまでは簡単でした。
ただ、これだけだと、コードで表現されているので、意味が分かりません。

そこで、コードを項目名に変換するのに、結果データから項目名とコードを取得します。

まずは項目名を含む、「CLASS_OBJs」を取得します。
image.png
image.png
「CLASS_OBJs」を展開します。
image.png
データ種別、項目、都道府県、調査年度があります。
そこからさらに分解します。
この時、都道府県だけ、東京都を指定していたため、単項目になっており、同一の処理ができませんでした。。。
(よく見ると、「”CLASS”:」の後のかっこが「[」(複数項目)と「{」(単項目)で違います)

そのため、Splitterで分けてから処理しました。

まずは複数項目です。
下記はJSON Path の設定です。
image.png
出力結果です。
image.png

次が単項目です。
下記はJSON Path の設定です。
image.png
idやnameなど、項目の前に[*]がないのは東京都一つしかないからです。
image.png
次に処理を合流させるため、複数項目と単項目を結合します。
image.png
値を展開して、「?」を補完した結果が下記です。
image.png
一部、補完しきれていない項目がありますが、問題ないため、無視。
なぜかというと、欲しい項目がidとnameで、その2つしか補完対象にしていないからです。

④コード変換から出力まで(最後)

JOINを使ってコード変換後、不要な項目を削除します。
image.png
JOINの設定は下記で、コード(下記では「@cat01」)と項目名を合わせたいので、項目名テーブルの「@code」を照会します。
image.png
全ての項目をJOINした結果が下記です。
image.png
整列したり、欲しい項目(「@time」から右の項目群)だけ残したりするため、Column Resorter、Column Filter、Column Rename、RowIDを使って整形します。

その結果が下記です。
image.png
最初は基礎データの人口総数です。
人口が減っている日本ですが、東京都はご覧の通り、右肩上がりなのが分かります。
他にも指標データとして、国内銀行預金残高(人口1人当たり)といったデータもあります。
image.png
東京都在住の方は、預金額でいうとほぼ右肩上がりですね。

おわりに

URLの作成から結果の取得、一覧化まで、一通りKNIMEでできました。
あとは、そのままKNIMEでデータ分析するも良し、一旦Excelに書き出してから編集しても良し、ということで、結構使えるんじゃないかと思います。

せっかく政府統計のデータを取得したので、今度は分析や仮設検証もしてみたいと思いますが、今日はここまでにさせていただきます。

こちら でブログも書いていますので、よろしければのぞいてみてください。
生活に根付いた情報や仕事についてなんかも書いています。

LifeUpperBlog!

2
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?