最近身の周りの数値を取って可視化する活動をコツコツ進めている
今回はiPhoneのヘルスケア(歩数)データをPixelaに投げて可視化する
前日分に関してはiPhoneのショートカットで毎朝前日分のデータを投げるようにしているが過去分のデータもせっかくなら見たいなと思い調べて試してみたのでその記録
ヘルスケアデータのCSVへの書き出しは次の記事のコードを使い日付ごとの歩数データを生成した
iOS標準アプリ「ヘルスケア」からデータを書き出しcsvに変換
- ヘルスケアデータから歩数データをCSVへ書き出す(上記記事のスクリプトに少し足しただけ)
import pandas as pd import xml.etree.ElementTree as ET tree = ET.parse('apple_health_export/export.xml') root = tree.getroot() datetime = [] counts = [] for child in root: data = child.attrib try: if data['type'] == 'HKQuantityTypeIdentifierStepCount': datetime.append(data['startDate']) counts.append(data['value']) except: pass df = pd.DataFrame({ 'datetime': datetime, 'stepCount': counts }) df['stepCount'] = df['stepCount'].astype(int) df.to_csv('df.csv', index=False)
- 歩数データから日毎の集計を行いCSVへ書き出す(上記記事のスクリプトに少し足しただけ)
import pandas as pd df = pd.read_csv('df.csv', index_col='datetime') df.index = pd.to_datetime(df.index, utc=True) df['datetimeja'] = df.index.tz_convert('Asia/Tokyo') df['date'] = df['datetimeja'].dt.date daySummary = df.groupby(['date']).sum() print(daySummary) daySummary.to_csv('daily_steps.csv')
出力されたCSVは次のようになっていた
- daily_steps.csv
date,stepCount 2014-11-02,3509 2014-11-03,1053 2014-11-04,4879 2014-11-05,7580 2014-11-06,6735 2014-11-07,11617
2014年からデータがあったので驚いたw
- 生成した日毎CSVからPixelaへのimport
こちらは自分がRubyのほうが手になじむのでPixelaへ入れ込む用のスクリプトを雑に書いた
require 'pixela' require 'awesome_print' require 'csv' require 'date' client = Pixela::Client.new(username: 'hoge', token: ENV['PIXELA_TOKEN']) csv = CSV.read('./daily_steps.csv', headers: true) id = 'walk' csv.each do |row| client.create_pixel(graph_id: id, date: Date.parse(row['date']), quantity: row['stepCount'].to_i) end
- 結果(投稿日のスクショ)
今年の話でいうとコロナによる在宅開始の影響がはっきり出ていることがわかった
- 3月まで
- 木曜のみリモート(他の日は保育園の送り+通勤)
- 3月から
- 完全在宅開始+妻育休で保育園も休み→送りなし(一歩も外でない)
- 7月から
- 引き続き在宅+妻復職で保育園再開→送りあり(少し外に出る)
やはりこういう可視化は気付きがあるし面白くて良い