前回の続きで Strava の記録をヒートマップにする
ヒートマップをつくる
folium のプラグインでヒートマップも手軽に生成できることを知ったのでスクリプトを書いた。大したモノじゃないんだけど。
- よく通るルートは目立つように
- 滅多に通らないルートは控えめに
という可視化ができるんじゃないかと試行錯誤して、結果、なかなかビジュアル映えするものができて満足
サンプル1
過去の走行データを全てまとめてプロットすると よく走っているエリアが赤くなって表示される。練馬付近が真っ赤だ
ズームレベルを上げると、どの道路を頻繁に通っているか色で判別できる
東秩父・奥武蔵の山が連なる当たりを見てみよう。
中央の峠道が赤くなっているが、実は2-3度しか訪れてない場所なのだ … なぜ赤くなるのだろう?
実は Garmin Edge (≒ 計測器・サイクルコンピューター) で1秒ごとに現在の緯度・経度を記録するモードにしている。したがって、山道を登っている = 速度が遅くなることで計測点が密になり、ヒートマップ化の際に密度が高いポイントとして計算されてしまうのだった。同様に、自転車を押しながら徒歩でウロウロしているポイントなども密に記録されている。
私がやりたいのは「頻繁に通過する ≒ 異なる日時に通過している」ルートが目立つようすることなので、「日時が異なる計測点が重なる場合に色を変えるヒートマップ」という実装が必要そうだが、さてはて、どうやるのがいいんだろうね?
サンプル2
タイルサーバーや配色を変えると全然違った印象の地図になる
bin/heatmap.py --gradient '{ "0.4":"blue","0.65":"cyan","1":"white" }' --radius 3 --blur 4
チェレンコフ光ぽい色を選ぶと無駄に見栄えがいい
厨二感を出すには背景色は黒ベースがいいだろう。 漆黒の闇に瞬きし我が蒼炎の軌跡。よくワカラナイ
少しだけズームレベルを上げる。自宅付近が光ってしまうので ある程度のズームレベルで許して
ズームレベルを最大にするとパーティクル状にプロットされているのが確認できる。前述の通り Garmin Edge で 1秒ごとに緯度・経度を記録するモード にしてるので、緯度・経度を計測したポイントが 点 として表現されるのだ
一旦、デフォルトカラーに戻したマップで別の地点を見てみよう
鎌倉に行った際に鶴岡八幡宮に寄り道した際の記録だ。参道の入り口や境内に点が密集していて、速度を落としてうろついているのがわかる。思い返すと、景色の良い場所で自撮りしたくて自転車を押しながらウロウロしていたのだった。
… とあれこれ思い出せる地図にもなってくれた
サンプル3
bin/heatmap.py --gradient '{ "0.4":"blue","0.65":"red","1":"white" }' --radius 2 --blur 1
更に色を変えてみる。赤を混ぜるとグロいって思う人もいるかな 💀
ウネウネしながら触ってくるやつをおもいだす
彩色を変えることで違ったプレゼンテーションとなる地図をつくれる。かっこいい配色があればアドバイスしてほしい
Strava の Global HeatMap
前回のエントリを書いている途中で知ったのだが、 Strava では Global HeatMap という名称で利用者の走行記録をヒートマップにして閲覧できる機能を提供している
Strava のヒートマップは複数の計測点をあれこれ正規化するなどして扱っているので、 folium のヒートマップとはアプローチが違うようだ。
カッコイイし面白い。荒川の彩湖付近だが、川沿いのサイクリングロードが人気なのがひと目で分かる
ロード乗りは山が好き。秩父のあたりの山道が真っ赤
正規化のやり方は下記のブログに書いてある通りだと思う。さて、どうやって実装しているのだろう
The normalization is very local, taking into account the 8 neighboring tiles. For each tile the 95% percentile, non-zero, GPS count is computed. These values are averaged into 4 corner “heatmax” values for the current tile. The count for every pixel is divided by the bilinear interpolation of those values, capped at 1. This [0,1] value is used to color each pixel using a gradient function. You can see the local effect on roads that branch away from popular routes.
プライバシー
画像をご覧になって理解できると思うが、私の過去の行動パターンや現在の居住地などがはっきりと見て取れる地図になるので一般公開は差し控える。ご了承を 😲
コード
コードはここにあげております。ユーザーフレンドリーなレベルまで作り込めてないのはご了承を 😳