Apple Watchヘルスケアデータ可視化・分析ツール

Portfolio

Apple Watchの健康データから生成した月次トレンドレポートの画面

Apple Watchにたまったヘルスケアデータから、月次・週次・長期トレンドのレポートを作るPythonツールを開発しました。iPhoneのヘルスケアAppから書き出した export.xml をローカルで読み込み、日別グラフ、統計サマリー、目標達成率を含む16:9のHTML/PDFを生成します。

見た目だけの可視化ではなく、Apple Health XMLの前処理、欠損値の扱い、中間CSVの再利用、PDF変換、テストとLintまでをCLIで動かせる形にしました。さらに、出力した日別データを使い、睡眠時間と運動量の相関関係を分析するレポートも作成しています。個人の健康データなので、外部APIには送らない構成にしています。

開発背景

Apple Watchには睡眠、歩数、活動量、エクササイズ、スタンド時間などのデータがたまります。ただ、標準のヘルスケアAppだけで月ごとの振り返りや週単位の変化を同じ形式で見比べるのは、少し面倒でした。

自分の生活リズムを後から見返せるように、ローカルで完結するレポート生成ツールとして実装しました。実データはGit管理外に置き、公開しているPDFと画像にはダミーデータだけを使っています。

できること

Apple Healthの export.xml をストリーミングで読み込み、11種類の健康指標を日別、週次、月次、長期トレンドに分けて集計します。対象は睡眠時間、歩数、消費カロリー、エクササイズ時間、スタンド時間、入眠時刻、起床時刻、夜間覚醒の回数や時間などです。

  • 日別グラフと目標ライン付きの月次HTMLスライドを生成
  • 平均、最大、最小、目標達成率を指標ごとに計算
  • 過去10週間の週次レポートも生成
  • 複数月の集計結果から、長期トレンドの折れ線グラフと数値テーブルを生成
  • ブラウザで閲覧できるHTMLと、共有しやすいPDFの両方に対応
Apple Watch健康レポートの週次トレンドグラフとテーブル

睡眠時間と運動量の相関分析

このツールで整形した日別ヘルスケアデータを使い、別のデータ分析エージェントで「日中の活動量が睡眠の質に影響するか」を検証しました。対象期間は2026年2月1日から2026年7月3日までで、歩数、アクティブエネルギー、睡眠時間、夜間覚醒回数、夜間覚醒時間を分析しています。

結果として、このデータセットでは歩数・消費カロリーと睡眠時間・夜間覚醒の間に強い線形相関は見られませんでした。たとえば、歩数と睡眠時間の相関係数は -0.051、アクティブエネルギーと睡眠時間は -0.116 で、いずれもかなり弱い関係です。

歩数とアクティブエネルギーに対する睡眠時間、夜間覚醒回数、夜間覚醒時間の相関分析グラフ
歩数・アクティブエネルギーと睡眠指標の散布図。各グラフの回帰線はほぼ水平で、単純な線形関係だけでは睡眠の変化を説明しにくいことが分かります。

「運動すれば睡眠の質が上がる」という仮説は直感的には自然ですが、少なくとも今回の実データでは単純な相関としては確認できませんでした。次に見るべきなのは、運動の時間帯、強度、カフェイン、ストレス、室温などの交絡要因や、適度な運動量だけ効くような非線形の関係です。

技術仕様

実装はPython 3.12+です。環境とパッケージ管理には uv を使い、Apple Health XMLの抽出、中間CSVの生成、集計、グラフ描画、HTML出力、PDF化までをCLIから実行できるようにしています。

  • pandas: 日別CSV、週次集計、月次集計、複数月トレンドの整形と統計計算。
  • matplotlib: 各健康指標の棒グラフ、折れ線グラフ、目標ライン付きグラフの生成。
  • Jinja2: 16:9のHTMLスライドをテンプレートから出力。
  • Playwright: 生成済みHTMLをChromiumで開き、横長PDFに変換。
  • pytest / ruff: CLI、前処理、HTML生成、トレンド集計のテストとコード品質チェック。

実装で工夫した点

Apple Healthの export.xml は、使い続けるほどかなり大きくなります。そこでファイル全体をメモリに載せず、必要なレコードだけをストリーミングで取り出すようにしました。未装着日などの欠損値は、平均値や目標達成率に混ぜないようにしています。

XMLから取り出した日別データは中間CSVとして保存します。これで、重いXMLパースを毎回走らせずにHTMLレポートだけを作り直せます。レポートは16:9スライド形式にし、ブラウザで見てもPDFで共有しても崩れにくい形にしました。

プライバシーに関する注意点

Apple Watchの健康データはかなり個人的な情報なので、実データの input/export.xml と通常出力の output/ はGit管理外にしています。公開しているPDFと画像は、対象リポジトリの output-demo/ にあるダミーデータ由来の成果物だけです。

処理はAIなどを経由しない、ローカルなスクリプトで完結します。外部APIに健康データを送らない仕様です。

デモ出力

公開用のPDFは、すべてダミーデータから生成しています。月次、週次、日次の出力形式を確認できます。

今後やるなら

次にアップデートするのであれば、指標追加と月別比較を入れたいところです。テンプレートの見た目もまだ改善できると思います。個人ツールとしては十分動きますが、レポート生成の題材としてはもう少し育てられそうです。

GitHubリポジトリを見る

Portfolio 他のポートフォリオ



Portfolio一覧を見る