はじめに
kibana lens を試すために適当なデータを探していたら、政府統計(e-Stat) に行き着きました。
実際に Kibana lens で可視化するための道のりをまとめました。
動作環境
- Mac OS X 10.15.3
- Java 11.0.5
- Elasticsearch 7.6.0
- Kibana 7.6.0
- Logstash 7.6.0
e-Stat API
ユーザー登録 と アプリケーションIDの取得
私はこちら を参考にアプリケーションIDを取得しました。
データの選択と該当する REST API のリンク取得
今回は以下の統計データを選択しました。
上のアドレスの画面上の、APIボタンをクリックすると統計に対応するURLが表示されます。
今回はこちら
http://api.e-stat.go.jp/rest/2.1/app/getStatsData?appId=&lang=J&statsDataId=0003281493&metaGetFlg=Y&cntGetFlg=N§ionHeaderFlg=1
- 今回は Kibana で可視化したいので、データは JSON で受け取るため、url に
/app/json/getStatsDatas?
を追加します。 - このappID= のあとの部分にアプリケーションIDを設定します。
Kibana で可視化するためのデータ抽出
# appid=の後の部分はご自身で取得します。
curl --location --request GET 'http://api.e-stat.go.jp/rest/2.1/app/json/getStatsData?appId=&lang=J&statsDataId=0003287753&metaGetFlg=Y&cntGetFlg=N§ionHeaderFlg=1' > traffic.json
cat traffic.json | jq -c .GET_STATS_DATA.STATISTICAL_DATA.DATA_INF.VALUE[] > data.json
logstash でデータの加工
# cat estat.traffic.0003281493.conf
input {
file {
codec => "json"
path => "/path/to/data.json"
start_position => "beginning"
sincedb_path => "/dev/null"
}
}
filter {
translate {
field => "@tab"
destination => "code"
dictionary => {
"1010" => "発生件数"
"1060" => "負傷者数"
"1270" => "死者数"
"1360" => "人口10万人当たり死者数"
}
}
mutate {
remove_field => ["[@tab]"]
rename => { "$" => "count" }
gsub => ["@time", "(\d{4})(\d{6})", "\1-01-01T00:00:00.000Z"]
convert => {"count" => "integer"}
add_field => { "year" => "%{@time}" }
}
}
output {
elasticsearch {
hosts => "localhost:9200"
index => traffic
}
}
$ cat run.sh
rm -rf data
conf="/Users/surfer/elastic/labs/logstash/logstash.config/estat.traffic.0003281493.conf"
./bin/logstash -f $conf
$
Kibana の画面
- index pattern (traffic*) 作成後に Lens を使用した際のサンプル画像
- 統計がある 1947 年から現在までの交通事故年間死亡者数のグラフを描画しました。
- 1968 が歯抜けの理由は分からず。(ドキュメントは存在するのだが)