成果物
早速ですが、こちらが作成したダッシュボードです。
健康データ、スクリーンタイム、日々の活動、年間目標の達成状況を可視化してみました。
自分自身の備忘のため、そしてもし同様の可視化をしたい方がいた場合のために、作成手順をざっくりと記載しておきます。(2024年12月末現在、筆者環境と類似の環境があれば完全無料で作れると思います。)
必要なもの
- iPhoneとWindows PC(筆者環境はダッシュボードのCreditsページに記載)
- 後述の各種アプリ
- Tableau Desktop Public Edition:もちろん有償版でも可
- Python(任意、データ加工ツールとして)
使用データ
下記の4種類のデータを使用しました。(来年はもう少し増やしたい...)
- 健康データ:歩数、歩行速度、消費カロリーなど(データ元:iPhone標準のiOSアプリ "Apple Healthcare")
- スクリーンタイム:スマホとPCの使用時間など(データ元:iOSアプリ "OffScreen: Screen Time Control"、PCアプリ:"ActivityWatch"、Youtube視聴履歴)
- 日々の活動:訪れた場所や時間、活動内容(データ元:iOSアプリ "LifeCycle - Track Your Time")
- 年間目標:2024年の目標とその達成状況(データ元:Notionのメモ)
手順
データごとにざっくり手順を記載します。(より詳しく知りたい方や使用したコードを見たい方はご連絡ください。)
健康データ
-
Apple Healthcareからデータをエクスポート(「すべてのヘルスケアデータを書き出す」)します。
-
書き出されたexport.xmlファイルを加工し、csvファイルとして出力します。(筆者はpythonを使いましたが、下記のような加工ができればツールはなんでもよいと思います。)
- xmlファイルはTableauに読み込めないため、まずjsonファイルへ変換しましたが、筆者のファイルは重すぎてTableauに読み込めませんでした...(読み込めるのならそれ以上加工しなくともよいかもしれません。)
- jsonファイルからさらに、"Record"や"ActivitySummary"の部分を抽出してcsvファイルとして出力しました。
- "Record"部分で使ったのは"type", "unit", "startDate", "endDate", "value"のフィールドでした。
- "ActivitySummary"では(普段あまりHealthcareアプリを活用できていないせいか)"dateComponents"と"activeEnergyBurned"くらいしか使えませんでした。
-
Tableauに読み込んで可視化します。
-
そのまま表示するのも味気ないと思い、「1日の平均歩数」「平均歩行速度」「1日の上った階数」の3種を組み合わせて100点満点とする数式をTableau内で作成しました。
- 平均歩数(元気に動けている度合いの意味でVitality):10000歩で100点
- 平均歩行速度(足腰の健康度合いの意味でFitness):4.5km/hで100点
- 上った階数(日々の活動量の意味でActivity):10階で100点
- 総合スコア(Overall):歩数スコア×0.4+歩行速度スコア×0.4+階数スコア×0.2
-
スクリーンタイム
iPhone
iPhoneデフォルトのスクリーンタイムアプリではデータのエクスポート手段がかなり限られているようで、泣く泣く別アプリを利用しました。(しかもアプリごとのスクリーンタイムは取得できず、iPhoneを使っていた時間のみ...別の方法があればぜひ教えてください!)
- OffScreenからデータをエクスポート(Export Data as CSV file)します。
- zipフォルダを解凍し、ファイル名に「Pickup」と入ったものを使います。
PC
- ActivityWatchからデータをエクスポートします。
- 計測データ
- 「Raw Data」ページのBuckets一覧からBucket ID: aw-watcher-windowとある行を見つけます。
- 「More」をクリックし、「Export Bucket as JSON」を選択します。
- カテゴリデータ
- 「Settings」ページのCategorizationセクションでexportをクリックします。
- 計測データ
- 計測データとカテゴリデータを紐づけ、CSVとして出力します。(python)
統合
iPhoneとPCのスクリーンタイムをまとめて可視化したかったため、統合しました。(任意)
- iPhoneのファイルとPCのファイルを縦結合し、CSVとして出力します。(pythonであればconcat関数)
- Tableauに読み込んで可視化します。
Youtube
ついでにYoutubeの視聴履歴も取得してみました。
- Googleアカウントの設定画面に移動します。
- 「Data & privacy」タブ内にある「データをダウンロード」をクリックします。
- 「Youtube と Youtube Music」以外のチェックを外します。
- 重要:このとき、「複数の形式」をクリックして「履歴」の形式をHTMLからJSONへ変更しておきます。
- ページ下部の「次のステップ」からエクスポート先などを選択して「エクスポートを作成」をクリックします。
- 基本的にデフォルト設定でよいかと思いますが、ファイルサイズを10GBにしておくと履歴が多くても安心です。
- エクスポートにはしばらく時間がかかります。
- エクスポートされたwatch-history.jsonファイルを加工し、jsonファイルとして出力します。(python)
- そのままでは動画のカテゴリがないため、チャンネル名("name")や動画タイトル("title")をもとにカテゴリ分けをしました。
- カテゴリ分類のための文字列パターンは例えば、「野球:baseball, mlb, dodgers」のような感じで作成しました。
- 筆者の場合は、チャンネル名で分類した後、未分類のものをさらに動画タイトルで分類する手法をとりましたが、よりよい方法があれば教えてください!
- Tableauに読み込んで可視化します。
日々の活動
- LifeCycleからデータをエクスポートします。
- 「Settings」ページのAdvancedをクリックします。
- 最下部のDatabaseをクリックし、Export databaseを選択します。
- エクスポートしたLC_export.csvファイルを加工し、csvとして出力します。(python)
- そのままのデータでは、日付をまたいだ活動("Home"や"Sleep"など)がうまく可視化できなかったため、日付ごとに分割する加工を行いました。
- Tableauに読み込んで可視化します。
年間目標
かなり手作業なので、もっといい方法があるかもしれません...
- Notionなどのメモアプリに、年間目標を一覧化しておきます。
- 例えば、筆者は「○○の本を読む」「○○の資格勉強をする」「○○へ旅行に行く」など細かい目標を200個ほど箇条書きにしていました。(年初は100個ほどだったのですが、あとから「あの本も読みたい!」などとなって増えてしまいました...)
- 進捗は「完了(○)」と「途中(△)」だけで簡易につけていましたが、もっと細かくてもよいかもしれません。
- さらにカテゴリ分け(例えば「習慣」「体験」「知識」など)しておくとベターかと思います。
- 一覧を「マークダウンとCSV」形式でエクスポートします。
- エクスポートしたファイルを加工し、csvとして出力します。(python)
- Tableauに読み込んで可視化します。
Tableauでの可視化
Tableau Publicにはおしゃれなダッシュボードが沢山あるので、参考にさせていただきつつ作成しました。
特に参考にさせていただいたものをいくつか記載しておきます。
まとめ
今年1年の過ごし方を定量的に示され、気づきもある一方で、自分に言い訳ができなくて苦しい1年の振り返りになりました(笑)
来年はよりデータを増やしたいので、おすすめのトラッキングデバイスやアプリなどあればぜひ教えてください!