Google Mapsの位置情報履歴をバックアップとして保存する際、JSON形式のファイルとしてダウンロードすることができます。しかし、このJSONファイルはそのままでは読みづらいため、CSV形式に変換して閲覧するのが便利です。この記事では、Google MapsのバックアップファイルをCSVに変換する方法と、スプレッドシートでの扱い方について解説します。
JSONファイルの構造
Google Mapsのバックアップファイル(JSON)は、以下のような構造になっています:
{
"timelineObjects": [
{
"activitySegment": {
"startLocation": { "latitudeE7": "start_latitude", "longitudeE7": "start_longitude" },
"endLocation": { "latitudeE7": "end_latitude", "longitudeE7": "end_longitude" },
"duration": { "startTimestamp": "start_time", "endTimestamp": "end_time" },
"distance": "distance_value",
"activityType": "activity_type",
"confidence": "confidence_level"
}
},
{
"placeVisit": {
"location": { "latitudeE7": "visit_latitude", "longitudeE7": "visit_longitude" },
"duration": { "startTimestamp": "visit_start_time", "endTimestamp": "visit_end_time" },
"placeConfidence": "place_confidence",
"visitConfidence": "visit_confidence"
}
}
]
}
このJSONファイルには、位置情報の履歴が「timelineObjects」として含まれています。それぞれのオブジェクトは、「activitySegment」または「placeVisit」として保存されています。
CSV形式への変換
JSONファイルをCSV形式に変換するには、以下のようなヘッダーを使用します:
- startLocationLatitude
- startLocationLongitude
- endLocationLatitude
- endLocationLongitude
- startTimestamp
- endTimestamp
- distance
- activityType
- confidence
- visitLatitude
- visitLongitude
- visitStartTimestamp
- visitEndTimestamp
- placeConfidence
- visitConfidence
手順
- JSONファイルを読み込む
- 必要なデータを抽出して、CSV形式に整形する
- CSVファイルとして保存する
Pythonを使用してこれを実現するサンプルコードは以下の通りです:
import json
import csv
# JSONファイルの読み込み
with open('backup.json', 'r') as file:
data = json.load(file)
# CSVファイルの書き込み
with open('output.csv', 'w', newline='') as csvfile:
fieldnames = [
'startLocationLatitude', 'startLocationLongitude', 'endLocationLatitude', 'endLocationLongitude',
'startTimestamp', 'endTimestamp', 'distance', 'activityType', 'confidence',
'visitLatitude', 'visitLongitude', 'visitStartTimestamp', 'visitEndTimestamp',
'placeConfidence', 'visitConfidence'
]
writer = csv.DictWriter(csvfile, fieldnames=fieldnames)
writer.writeheader()
for item in data['timelineObjects']:
if 'activitySegment' in item:
row = {
'startLocationLatitude': item['activitySegment']['startLocation']['latitudeE7'],
'startLocationLongitude': item['activitySegment']['startLocation']['longitudeE7'],
'endLocationLatitude': item['activitySegment']['endLocation']['latitudeE7'],
'endLocationLongitude': item['activitySegment']['endLocation']['longitudeE7'],
'startTimestamp': item['activitySegment']['duration']['startTimestamp'],
'endTimestamp': item['activitySegment']['duration']['endTimestamp'],
'distance': item['activitySegment']['distance'],
'activityType': item['activitySegment']['activityType'],
'confidence': item['activitySegment']['confidence'],
}
writer.writerow(row)
elif 'placeVisit' in item:
row = {
'visitLatitude': item['placeVisit']['location']['latitudeE7'],
'visitLongitude': item['placeVisit']['location']['longitudeE7'],
'visitStartTimestamp': item['placeVisit']['duration']['startTimestamp'],
'visitEndTimestamp': item['placeVisit']['duration']['endTimestamp'],
'placeConfidence': item['placeVisit']['placeConfidence'],
'visitConfidence': item['placeVisit']['visitConfidence'],
}
writer.writerow(row)
スプレッドシートでのJSONデータの読み込み
Googleスプレッドシートで直接JSONデータを読み込むためには、Google Apps Scriptを使用します。以下の手順で実行できます:
- スプレッドシートを開く
- メニューから「拡張機能」 > 「Apps Script」を選択
- 以下のコードを貼り付ける
function importJSON() {
var url = 'https://example.com/path/to/your/backup.json'; // JSONファイルのURL
var response = UrlFetchApp.fetch(url);
var json = JSON.parse(response.getContentText());
var sheet = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet();
var header = [
'startLocationLatitude', 'startLocationLongitude', 'endLocationLatitude', 'endLocationLongitude',
'startTimestamp', 'endTimestamp', 'distance', 'activityType', 'confidence',
'visitLatitude', 'visitLongitude', 'visitStartTimestamp', 'visitEndTimestamp',
'placeConfidence', 'visitConfidence'
];
sheet.appendRow(header);
var timelineObjects = json.timelineObjects;
for (var i = 0; i < timelineObjects.length; i++) {
var item = timelineObjects[i];
if (item.activitySegment) {
var row = [
item.activitySegment.startLocation.latitudeE7, item.activitySegment.startLocation.longitudeE7,
item.activitySegment.endLocation.latitudeE7, item.activitySegment.endLocation.longitudeE7,
item.activitySegment.duration.startTimestamp, item.activitySegment.duration.endTimestamp,
item.activitySegment.distance, item.activitySegment.activityType, item.activitySegment.confidence,
'', '', '', '', '', ''
];
sheet.appendRow(row);
} else if (item.placeVisit) {
var row = [
'', '', '', '', '', '',
'', '', '',
item.placeVisit.location.latitudeE7, item.placeVisit.location.longitudeE7,
item.placeVisit.duration.startTimestamp, item.placeVisit.duration.endTimestamp,
item.placeVisit.placeConfidence, item.placeVisit.visitConfidence
];
sheet.appendRow(row);
}
}
}
- 「ファイル」 > 「保存」でスクリプトを保存
- メニューから「実行」 > 「importJSON」を選択してスクリプトを実行
日付と曜日の抽出
おそらくですが、日付が見にくいと思います。すこしtipsとして以下も書いておきます。スプレッドシートで日時データから日付や曜日を抽出するためには、以下の関数を使用します。
日付の抽出
例えば、startTimestampがA2セル(おそらく普通に上記で読み込むとM列になるはずですが、例示的に)にある場合、日付を抽出するには以下の関数を使用します:
=DATEVALUE(MID(A2, 1, 10))曜日の抽出
同じく、startTimestampがA2セルにある場合、曜日を抽出するには以下の関数を使用します:
=TEXT(DATEVALUE(MID(A2, 1, 10)), "dddd")これらの関数を使うことで、JSONデータから取り込んだ日時情報を日付や曜日に変換して、スプレッドシート上で簡単に管理できます。
まとめ
この記事では、Google Mapsのバックアップファイル(JSON)をCSVに変換する方法と、スプレッドシートで直接JSONデータを読み込む方法について解説しました。さらに、日時データから日付や曜日を抽出するためのスプレッドシート関数も紹介しました。これにより、Google Mapsの位置情報履歴をより簡単に閲覧・管理することができます。