読者です 読者をやめる 読者になる 読者になる

isseium's blog

田舎に住むWebエンジニアのブログ

Movesのログを1年分 elasticsearch に突っ込んで kibana の地図で見てみた

今日は、elasticsearch と kibana の勉強がてら、なにかしようと思って

qiita.com

を参考に、自分が2015年行ったところを地図でビジュアライズしようとした。

やりたかったこと

滞在時間の多い地点の色を濃くしたヒートマップをみたかった。こんなイメージ。

https://i.gyazo.com/3b3b3d11dab19fd3e364c073c930db38.png

※ これも実際に出力した地図だけど、「滞在時間の多い地点」ではなくて「よく行っている地点」の色が濃い。結果からいうと、「滞在時間の多い地点の色を濃くしたヒートマップ」はできなかったです... 出来る方法があれば教えてください。

やったこと

やったことのだいたいの流れは次のとおり。

  1. 万歩計アプリの moves から移動情報をエクスポート
  2. elasticsearch に ruby でぶっこむ
    • はじめ、Amazon Elasticsearch Service でやってみたけど、Kibana のバージョンが古くてやめた(表現したかった地図の種類が選択ができなかった)
  3. 地図で見てみる
    • moves ログから滞在時間 (place の endTime - startTime) を算出して合計だす。ruby 側で計算しようと思ったら、Elasticsearch に、「Scripted fields」という各カラムの値をもとに演算する仕組みがあったのでそれを利用。
    • ヒートマップでみられるけど、現バージョンだとどうやら濃淡を滞在時間を係数にした指定はできないみたい(周辺のプロットの数 = よく行っている地点でしかヒートマップで表示できない)
    • 仕方がないので、滞在時間を濃淡の値に指定できる「Shaded Geohash Grid」という表現形式にしてみた。

地図

世界

https://gyazo.com/5b3e3e339ccff48420da0f0bf33e4d90.png

2015年は、台湾、カリフォルニアシンガポール、ハワイに行ったので正しそう。 中国の奥地に行ったことがあるようになっているのは moves の誤検知かと思われる。

Grid にマウスオーバーすると滞在時間が現れます。ログ上は、シンガポールには 216時間いたみたい。 だけど、シンガポールは8日間の日程だったので誤差があるか、あるいはMovesのログの取り扱い間違ってそうですね。(今回は無視)

https://i.gyazo.com/a3f44ee835eceaa50ce2bc46386324c4.png

日本

次に日本にフォーカスしてみます。岩手に住んでいるので岩手が真っ赤ですね。

https://i.gyazo.com/290da058eda717c352379a98eae83036.png

主な生活圏と思われる、「盛岡」周辺にズームしてみます。

https://gyazo.com/dd0210d66c02dc4d432ed6a04ee68d1f.png

一番赤いところは、岩手県立大学周辺ですね。昨年春まで大学院生だったり、所属していた会社の事務所が周辺にあったりしたのでよくいたんだと思います。

ちなみにこの地図はデータの加工を1つしています。それは自宅周辺に滞在したデータです。 昨年は後半から完全リモートワークになり、1日の大半を過ごす自宅が圧倒的に真っ赤過ぎて、他の地点の色に差がでなかったので自宅の周囲 300m くらいのデータを省きました。 省いたデータによると自宅付近に合計6500時間くらいいたみたいです。

まとめ

Movesのログを1年分 elasticsearch に突っ込んで kibana の地図で見ることができた。