前回の記事では、iPhoneのヘルスケアデーアをapplehealthdata.pyでわかりやすく書き出した歩数データ「StepCount.csv」の中身について紹介しました。
【ヘルスケアデーア】applehealthdata.pyで書き出した歩数データ「StepCount.csv」の中身
前回の記事では、ヘルスケアアプリから書き出したファイルとapplehealthdata.pyを使って、歩数計データ「StepCount.csv」を書き出しました。 最終的には歩数計データをグラフ化したいのですが、 今回は、グラフ化するにあた...
今回の記事で何を紹介するかというと、1日の歩数データが複数にわかれてしまっているので、それを集約する方法です。
最終的にはグラフ化もしてみます。
解決したい問題の整理
- ヘルスケアデータで書き出したデータをapplehealthdata.pyで処理して作成された歩数計のデータ「StepCount.csv」をグラフ化しようとした際、同じ日付でも複数のデータが保存されていた。
- 同じ日付は合計したい
▲StepCount.csvのファイルはこのようなデータとなっています。
DataFrame上で、同じ日付はまとめて合計する方法
DataFrame上で、同じ日付をまとめて合計する方法のPythonコードです。
import matplotlib.dates as mdates import pandas as pd df = pd.read_csv('StepCount.csv') df.index = pd.DatetimeIndex(pd.to_datetime(df.startDate, format="%Y-%m-%d")) df_1day = df.resample("D").sum()
参考 Python – [python]日別の合計を集計する方法|teratail
df.index = pd.DatetimeIndex(pd.to_datetime(df.startDate, format="%Y-%m-%d"))
▲dfのstartDate列を、dfのDatetimeIndexに変換しています。
df_1day = df.resample("D").sum()
▲インデックスの日付が同じなら歩数を合計して、新しくdf_1dayというDataFrameを作成しています。
これで、df_1dayのindexには日付、df_1dayのvalueには1日の合計歩数がセットされました。
df_1dayを出力すると、こんな感じ↓
startDate value 2014-12-12 00:00:00+09:00 13207 2014-12-13 00:00:00+09:00 15308 2014-12-14 00:00:00+09:00 13354 2014-12-15 00:00:00+09:00 15639 2014-12-16 00:00:00+09:00 12495 ... ... 2021-12-09 00:00:00+09:00 3771 2021-12-10 00:00:00+09:00 2936 2021-12-11 00:00:00+09:00 1140 2021-12-12 00:00:00+09:00 10349 2021-12-13 00:00:00+09:00 3608
ここまで来れば、あとはdf_1dayをグラフ化すればよいです。
グラフ化までを含めたすべてのPythonコードはこんな感じ。
import matplotlib.pyplot as plt import matplotlib.dates as mdates import pandas as pd df = pd.read_csv('StepCount.csv') df.index = pd.DatetimeIndex(pd.to_datetime(df.startDate, format="%Y-%m-%d")) df_1day = df.resample("D").sum() #グラフ図示 fig, ax = plt.subplots(1, 1, figsize=(12, 4)) ax.xaxis.set_major_formatter(mdates.DateFormatter("%Y-%m-%d")) plt.bar(df_1day.index, df_1day.value) plt.ylabel("Step count per day") plt.grid() plt.show() #画像を保存する場合 #fig.savefig('stepcount.png')
▲このような画像が出力されました。
まとめ
StepCount.csvファイルから、1日の歩数を合計することができ、グラフ化をすることもできました。
改善点(見やすさの工夫)としては、日毎だけではなく、月ごと、年ごとに表示してみるのも良さそうです。
コメント