page contents

WEBAPIのUIとしてKNIMEは使えるか?政府統計(e-Stat)で試してみた。

はじめに

WEBAPIを試すのに、取得するだけならpostmanが使いやすいんですが、データの中身をちょっと見てみたい、とか、Excelで一覧にしてから見よう、という、そこまでガッツリプログラムの世界に浸っていない人としては、URLのキーワード設定からリクエスト、一覧化まで一通り流せる方法があれば便利かなと思い、やってみました。

前準備

タイトル通り、使うのはKNIMEです。
KNIMEの概要や簡単や使い方は下記をご参照ください。

続いて、データを取得する対象である、政府統計にアクセスできるように、ユーザ登録をします。
ユーザ登録には、E-Mail、サイトURL等の登録が必要になります。
(サイトURLについては、厳密にはチェックされていないようですが)

登録すると、アプリケーションID(appId)が発行されます。

これで準備は完了です。
次からは実際に作ってみたKNIMEのワークフローを説明します。

KNIMEの実装例

概要

観点としては、2点です。

 ・リクエスト用のキーワードをなるべく入力しやすく
 ・結果は、見やすいように編集できる仕組みを設ける

で、簡単に流れを書くと、

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

こんな感じです。

①URL入力から作成まで

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の設定。
処理結果。

次が単項目です。

JOSN Pathの設定。

idやnameなど、項目の前に[*]がないのは東京都一つしかないからです。

次に処理を合流させるため、複数項目と単項目を結合します。

値を展開して、「?」を補完した結果が下記です。

一部、補完しきれていない項目がありますが、問題ないため、無視。
なぜかというと、欲しい項目がidとnameで、その2つしか補完対象にしていないからです。

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

JOINを使ってコード変換後、不要な項目を削除します。

JOINの設定は下記で、コード(下記では「@cat01」)と項目名を合わせたいので、項目名テーブルの「@code」を照会します。

全ての項目をJOINした結果が下記です。

整列したり、欲しい項目(「@time」から右の項目群)だけ残したりするため、Column Resorter、Column Filter、Column Rename、RowIDを使って整形します。

その結果が下記です。

最初は基礎データの人口総数です。
人口が減っている日本ですが、東京都はご覧の通り、右肩上がりなのが分かります。
他にも指標データとして、国内銀行預金残高(人口1人当たり)といったデータもあります。

東京都在住の方は、預金額でいうとほぼ右肩上がりですね。

おわりに

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

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