DatabricksにおけるYamathonデータの可視化

昨日はこちらのイベントに参加してきました。

https://tokyo-yamathon.com/ja/home-yamathon/

> ヤマソンは、2人～4人のチームが東京を歩いたり走ったりするために競う募金活動です。
>
> 有名なJR山手線の30の駅すべてを12時間以内に訪れます。

一応、日常的にジョギングはしているのですがこれだけの長丁場は初です。結果完走できました。

![IMG_9830.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1168882/92a736aa-452a-d1a9-4c67-037b06f7b29c.jpeg)

これだけで終わると普通のブログになってしまうので、完走を記念してデータの可視化をします。というか筋肉痛や疲労で難しいこと考えられないので詳細な分析はできないです。

# データのダウンロード

iPhone持って歩いていたのでGoogle MapsのTimelineとしては記録されています。これを以下のChrome拡張でダウンロードします。

https://chrome.google.com/webstore/detail/free-google-maps-timeline/mjjpapfcbfpgbkabmfkmacjfediepccp

なお、`Begin Time`などの時刻タイプの列はいくつか存在しており、それぞれフォーマットが異なるので注意してください。列には`Latitude`と`Longitude`を含めるようにします。

こんな感じのCSVです。本当はもう少し粒度の細かいデータが欲しいところですが。
![Screenshot 2023-10-22 at 19.41.46.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1168882/35d5bc18-20e7-2aad-2148-82adfca4148a.png)

# データのアップロード

Databricksのサイドメニューから**新規 > データの追加**を選択します。CSVをドラッグ&ドロップします。
![Screenshot 2023-10-22 at 19.42.02.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1168882/22b5a31c-805e-9297-00c6-d32e67152f6e.png)

テーブルを作成するカタログとデータベース(スキーマ)を選択します。この時点でもデータ型を指定できるのですが、除外しなくてはいけない文字列などがあるのでデフォルトのままでテーブルを作成します。

# テーブルの確認

カタログエクスプローラでテーブルを確認します。せっかくなので[AIコメント](https://qiita.com/taka_yayoi/items/d001e0b1b48a336fa65f)も承認しておきます。
![Screenshot 2023-10-22 at 19.43.11.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1168882/e7578dd4-45b1-8bec-8096-e76456a61989.png)

データも確認しておきます。`Distance in Meter`にカンマやmが入っていたりとなかなか前処理が大変そうです。
![Screenshot 2023-10-22 at 19.44.07.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1168882/e76da24b-1f1b-98c5-424a-a2662a89b327.png)

# クエリーとダッシュボードの作成

[最近リリースされたLakeview](https://qiita.com/taka_yayoi/items/161fe382efad41415198)を使ってもいいのですが、残念なことにまだ地図がサポートされていません。なので、素直にDatabricks SQLのクエリーとダッシュボードを使います。

不要な文字列を除外してあるべきデータ型に変化します。時間もタイムゾーンなどの処理をしなくてはいけないのですが、(疲れているので)今日はスキップします。

```sql:SQL
SELECT
  `Begin Time`,
  Name,
  CAST(Latitude AS FLOAT),
  CAST(Longitude AS FLOAT),
  CAST(
    REPLACE(TRIM(" m", `Distance in Meter`), ",", "") AS INTEGER
  ) AS Distance_meter,
  CAST(
    REPLACE(TRIM(" sec", `Duration In Seconds`), ",", "") AS INTEGER
  ) AS Duration_sec
FROM
  takaakiyayoi_catalog.default.timeline_viewer_oct_21_2023_oct_22_2023
```
![Screenshot 2023-10-22 at 20.24.02.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1168882/cbd2e04a-82f1-7f77-454d-5c032fb02bd1.png)

あとは、駅のマーカーを示す地図と移動時間・移動距離の散布図を作ります。
![Screenshot 2023-10-22 at 20.13.45.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1168882/0413bbae-39ca-e83c-557a-8b48ce1af55b.png)
![Screenshot 2023-10-22 at 20.13.59.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1168882/2111e985-39d9-99f3-d4a5-f60095f6ad91.png)

これをダッシュボードにまとめます。移動距離と移動時間は相関しているようですが、一部外れ値がありますね。あとで深掘りしたいところ。
![Screenshot 2023-10-22 at 20.14.25.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1168882/d88c4712-8376-08f8-ec1a-019df9f7f0cf.png)

これ以外にも時間帯と移動速度の相関といった分析観点がありそうです。ただ、今日はもう寝ます(年寄りは二日目の筋肉痛の方がキツい)。

### Databricksクイックスタートガイド

[Databricksクイックスタートガイド](https://www.amazon.co.jp/dp/B09V1YXFVQ/)


### Databricks無料トライアル

[Databricks無料トライアル](https://databricks.com/jp/try-databricks)