はじめに
Excel処理の自動化をするのに、KNIMEを使うことが多く、いっそWEBAPIの処理にもKNIMEが使えないか、と思い立ち、やってみました。
ちなみに、使い勝手でいえばPostmanの方が優しいし、分かりやすいけど、KNIMEのメリットとして、URL作成からデータ取得、一覧化、データの整形、そして分析まで一気通貫でやれてしまうところに期待しています。
まずは、タイトルの通り、URL発行から一覧作成まで作ってみました。
前準備
KNIMEってなに?という方は、手前味噌ですが、Excel処理を自動化した記事を書いているので、こちらをご参照ください。
さて、実際の準備ですが、KNIMEをインストールして使えるようにすること( 上の記事参照 )、そして政府統計のサイトからappIdを発行してもらうことです。
メールアドレス、サイトURL等が必要になりますが、サイトURLはそんなに厳しくチェックしてなさそう。
準備ができたら、KNIMEのワークフローを作っていきます。
KNIMEの実装
簡単に流れを書くと、
①テーブルにURLを構成するID、値を入力する。
②取得したJSONの前処理する。
③取得した結果から項目名と値を抽出する。
④値を一覧にしてからコードを項目名に変換など、整形する。
こんな感じです。
①URL入力から作成まで
まずはこんな感じでURL入力から、APIに送信するURL作成までを説明します。
Row0は、メインのURLを入力し、後から結合することを意識して、2列目に「?」を入れています。
ID行は、条件項目のIDを、Value行は、条件の値を入れています。
Row1は認証のためのappIdを入力しています。
こうすると、条件項目(ID)と値(Value)が見やすく、入力しやすいかな、と。
条件は複数入力されることを想定して、列数分ループする、ChunkLoopを使い、ID列とValue列を結合後、末尾に「&」を付けます。
ただし、Row0は「&」が不要なので、「?&」は「&」に変換します。
結合した結果は、Value列に上書きします。
そのあと、一旦整列(ID振り直し)した後、一つのURLとして結合するために、GroupByを使いますが、Groupとして認識させるためにIDを同じ値に修正(グループ用ID作成)します。
最後に、一律で追加した「&」のうち、URL末尾の「&」を削除(余分な文字列の削除)します。
ちなみに、今回のリクエストは、e-Statにサンプルとして記載されている、東京都の情報を取得する条件になります。
②APIリクエストから取得後、編集前まで
続いて作ったURLを使って、e-Statから情報を取得し、それを編集する前までです。
それぞれのアイコンの出力は下記の通りです。
結果は、String Valueに保存されています。
String valueをJSONに変換した結果、JSONという項目ができました。
ただし、値が「?」になっていて見えませんが、実際には値が入っています。
JSON以外の項目は不要なので、除外します。
③結果を項目名と値に分割
得られた結果には、値だけでなく、表の名称や意味、項目名など、様々な情報が含まれます。
本来、取得する際に、条件を絞って取得した方がデータ量、負荷、参照のしやすさなど、多くの面でメリットがあるんですが、とりあえず取得してから編集しました。
トライ&エラーにワクワクする人、きっと良い酒飲めると思います!
上が値の流れ、下が項目の流れです。
まず上から。
JSONから値を抽出するのに、JSON Pathを設定しています。
Pathに記載の通り、GET_STATS_DATA→STATISTICAL_DATA→DATA_INF→VALUE→(行数)→項目名で取得しています。
ちなみに、おススメの設定方法ですが、プレビュー画面で取得したいところをクリックすると、背景が青く塗られるので、「Add JSONPath」をクリックすれば、その項目を追加できるので、楽です。
これで、項目ごとに行が分かれ、その行の中でリスクと化されたデータができます。
カンマ区切りで値がつながっていますね。
これをUngroupすると、一覧になります。
ここまでは簡単でした。
ただ、これだけだと、コードで表現されているので、意味が分かりません。
そこで、コードを項目名に変換するのに、結果データから項目名とコードを取得します。
まずは項目名を含む、「CLASS_OBJs」を取得します。
「CLASS_OBJs」を展開します。
データ種別、項目、都道府県、調査年度があります。
そこからさらに分解します。
この時、都道府県だけ、東京都を指定していたため、単項目になっており、同一の処理ができませんでした。。。
(よく見ると、「”CLASS”:」の後のかっこが「[」(複数項目)と「{」(単項目)で違います)
そのため、Splitterで分けてから処理しました。
まずは複数項目です。
下記はJSON Path の設定です。
出力結果です。
次が単項目です。
下記はJSON Path の設定です。
idやnameなど、項目の前に[*]がないのは東京都一つしかないからです。
次に処理を合流させるため、複数項目と単項目を結合します。
値を展開して、「?」を補完した結果が下記です。
一部、補完しきれていない項目がありますが、問題ないため、無視。
なぜかというと、欲しい項目がidとnameで、その2つしか補完対象にしていないからです。
④コード変換から出力まで(最後)
JOINを使ってコード変換後、不要な項目を削除します。
JOINの設定は下記で、コード(下記では「@cat01」)と項目名を合わせたいので、項目名テーブルの「@code」を照会します。
全ての項目をJOINした結果が下記です。
整列したり、欲しい項目(「@time」から右の項目群)だけ残したりするため、Column Resorter、Column Filter、Column Rename、RowIDを使って整形します。
その結果が下記です。
最初は基礎データの人口総数です。
人口が減っている日本ですが、東京都はご覧の通り、右肩上がりなのが分かります。
他にも指標データとして、国内銀行預金残高(人口1人当たり)といったデータもあります。
東京都在住の方は、預金額でいうとほぼ右肩上がりですね。
おわりに
URLの作成から結果の取得、一覧化まで、一通りKNIMEでできました。
あとは、そのままKNIMEでデータ分析するも良し、一旦Excelに書き出してから編集しても良し、ということで、結構使えるんじゃないかと思います。
せっかく政府統計のデータを取得したので、今度は分析や仮設検証もしてみたいと思いますが、今日はここまでにさせていただきます。
こちら でブログも書いていますので、よろしければのぞいてみてください。
生活に根付いた情報や仕事についてなんかも書いています。