Googleマップのタイムライン情報を使って車のチョイ乗り率をレポートする
最近車のちょい乗りが増えていて、実際にどれくらいちょい乗りが増えているのかな?と気になったため、Googleマップで記録し続けていた位置情報を元に調べてみることにしました。
今回使用するのはGoogleマップのタイムライン機能によって保存された Location History Format のjsonです。
ちなみに、Googleマップのタイムライン情報は今後保存場所がクラウドからスマートフォン端末に変わることが昨年発表されております[1]。
最近Twitterなどで移行が始まったという報告や、移行したらデータをロストしたという報告を見るようになったので、今のうちにバックアップをとっておくことをオススメします。
追記
記事を書いてる途中で私のアカウントでもタイムライン情報をスマートフォンに移管してくださいとのアナウンスがありました。JSONフォーマットが変わっており、スクリプトなどに修正が必要でしたのでそちら適時追記しております。
チョイ乗り率のレポートとは
自動車のコンディションを良い状態で維持するためには色々なやるべきことがありますが、その中でも代表的なのがエンジンオイル交換です。
シビアなコンディションでの使用頻度が高い場合、標準的なエンジンオイル交換頻度よりも高い頻度での交換を行わないとエンジンの寿命を縮めることになります。
シビアコンディションと言われると長距離や悪路の走行をイメージしやすいですが、短距離走行の繰り返しもこれに含まれ、とくに首都圏ではこれに該当する乗り方が多いとされています。
乗っている車や走行する地域によっても条件は異なりますが、おおよそ下記のような条件が該当すると考えています。
- 1回の走行距離が10km以下または、走行時間が30分以下
そこで、Googleマップのタイムライン情報と、Googleスプレッドシートを使ってレポートを作成してみました。
これをみると2024年から短時間、短距離での走行頻度が上がっていることがわかります。
今までエンジンオイルは3-4000km, 半年以内で交換して来たのですが、これを機にもう少し頻度を上げていこうと思っています。
レポート作成方法
レポートの作成はやってみると意外と簡単でした。
- タイムライン情報をダウンロード
- jqコマンドを使ってCSV作成
- スプレッドシートでレポート作成
この3ステップだけです。
タイムライン情報をダウンロード
クラウド保存版
ブラウザでもタイムライン情報が閲覧できる方は Google データ エクスポートを使って書き出したものを使用します。
ダウンロードしたzipに含まれるSemantic Location Historyを今回は使用します。
スマホ保存版
スマートフォン端末にタイムライン情報を移管済みの方は下記の方法で取得してください。
- アプリの右上にあるユーザーアイコンをタップ
- 「タイムライン」をタップ
- 右上「…」のをタップ
- 「設定とプライバシー」をタップ
- 下の方にスクロールして「タイムラインデータをエクスポート」をタップ
- 共有モーダルが表示されるので、AirDropなどでパソコンに送る
jqコマンドを使ってCSV作成
jqコマンドを事前にインストールしておいてください。
homebrewなら brew install jq
です。
今回は簡単なシェルスクリプトを用意しました。
クラウド保存版
クラウド保存されている Location History Format は下記のスクリプトを使用してください。
#!/bin/bash
echo "Start Time,End Time,Distance (m)"
find "$1" -name "*.json" | xargs -I {} jq -r '
.timelineObjects[] | select(.activitySegment != null) | select(.activitySegment.activityType == "IN_PASSENGER_VEHICLE") |
{
startTime: .activitySegment.duration.startTimestamp,
endTime: .activitySegment.duration.endTimestamp,
distance: .activitySegment.distance
} |
[
(.startTime | gsub("\\.[0-9]+";"") | fromdateiso8601 | strflocaltime("%Y-%m-%d %H:%M:%S")),
(.endTime | gsub("\\.[0-9]+";"") | fromdateiso8601 | strflocaltime("%Y-%m-%d %H:%M:%S")),
.distance
] | @csv
' '{}'
activityType
が IN_PASSENGER_VEHICLE
であるレコードの、移動開始時間、終了時間、距離(m)の情報をCSVとして出力する簡単なスクリプトです。
実行は下記のような形になります。
$ bash ./vehicle_history.sh \
"$HOME/Downloads/location log/ロケーション履歴(タイムライン)/Semantic Location History" \
> $HOME/Desktop/vehicle_history.csv
スマホ版
スマートフォンに保存されたLocation History Formatとは別フォーマットのJSON場合は下記のスクリプトを使用してください。
#!/bin/bash
echo "Start Time,End Time,Distance (m)"
jq -r '
.[] | select(.activity != null) | select(.activity.topCandidate.type == "in passenger vehicle") |
{
startTime: .startTime,
endTime: .endTime,
distance: .activity.distanceMeters
} |
[
(.startTime | gsub("\\+[0-9:]+";"")),
(.endTime | gsub("\\+[0-9:]+";"")),
.distance
] | @csv
' $1
実行は下記のような形になります。
$ bash ./vehicle_history.sh \
"$HOME/Downloads/location-history.json" \
> $HOME/Desktop/vehicle_history.csv
スプレッドシートでレポート作成
スプレッドシートでのレポートする際には下記のような形で、フィリタリングや集計を行いました。
- 平均時速が120kmを超えるデータの排除
- 平均時速が早い順でデータを見てみたところ、上位のデータはGPSが途切れて瞬間移動的に記録されているデータだったので120kmでフィルタしました。
- 短すぎる、長すぎる移動の排除(1分未満、5時間以上)
- 1分未満のデータは大体何か誤って記録されたようなものが多かったので集計対象外としました。
- 元のデータは1日の集計ではなく、ぶっ続けノンストップでの移動時間になります。5時間ぶっ続け運転した記憶はないので集計対象外としました。
- 集計は1日単位
- 最初は日別ではなく個別のデータを元に見ていたのですが誤って途切れたデータなどがあり日別で集計する方向に変更しました。
サンプルファイルを用意したのでこちらコピーまたは参考にしていただけるとすぐにレポートできると思います。
CSVインポート時「vehicle_history.csv」シートに対して、「現在のシートを置換する」でインポートすると簡単なのですが、スプレッドシート上で追加している列なども消えてしまうので、
-
D列以降の1-2行目をコピー
-
置換でインポート後、D列1行目を選択してペースト
の手順で行うとスムーズです。
おわりに
レポート作成された方はぜひスクリーンショットをコメント欄やSNSなどで共有していただけると嬉しいです! #ちょい乗りレポート とかつけていただければ観測します!
スプレッドシートのデータはまあまあな個人情報だと思うので、あくまでスクリーンショット。スプレッドシートままの共有は控えることをオススメします。
今回は自動車移動のレポートでしたが、自転車やランニングなど各Activity Typeでレポートできるので、興味があればぜひカスタムしてみてください。
各Activity Typeは ここで 確認できます。
Discussion