DataFrameで同じ日付を合計する方法

前回の記事では、iPhoneのヘルスケアデーアをapplehealthdata.pyでわかりやすく書き出した歩数データ「StepCount.csv」の中身について紹介しました。

【ヘルスケアデーア】applehealthdata.pyで書き出した歩数データ「StepCount.csv」の中身
前回の記事では、ヘルスケアアプリから書き出したファイルとapplehealthdata.pyを使って、歩数計データ「StepCount.csv」を書き出しました。 最終的には歩数計データをグラフ化したいのですが、 今回は、グラフ化するにあた...

今回の記事で何を紹介するかというと、1日の歩数データが複数にわかれてしまっているので、それを集約する方法です。

最終的にはグラフ化もしてみます。

解決したい問題の整理

  • ヘルスケアデータで書き出したデータをapplehealthdata.pyで処理して作成された歩数計のデータ「StepCount.csv」をグラフ化しようとした際、同じ日付でも複数のデータが保存されていた。
  • 同じ日付は合計したい

ヘルスケアの歩数計データ「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')

ヘルスケアデータ、1日の歩数の推移グラフ
▲このような画像が出力されました。

まとめ

StepCount.csvファイルから、1日の歩数を合計することができ、グラフ化をすることもできました。

改善点(見やすさの工夫)としては、日毎だけではなく、月ごと、年ごとに表示してみるのも良さそうです。

コメント

タイトルとURLをコピーしました