覚え書きブログ

pandasでresampleを用いてデータ単位の変換

時系列データが時間単位になっているものを日にちや月単位に変換したいことがよくある。
以下、Kaggleのhourly energy consumptionデータを用いて、時間単位のデータを、日にち単位に変換する例である。

www.kaggle.com

まず、以下のようにCSVファイルを読み込む。

import pandas as pd
import seaborn as sns
import matplotlib.pylab as plt
import numpy as np
import datetime as dt

# csvファイルの読み込み
df=pd.read_csv('AEP_hourly.csv')
df.haed()

以下のように、時間単位のデータになっている。
f:id:hirotaka_hachiya:20190917171110p:plain

まず、日時文字列のカラム'Datetime'を、datetime型に変換して、dataframeのインデックスに設定する。

df['Datetime']=pd.to_datetime(df['Datetime'])
df=df.set_index(['Datetime'])

以下のように、Datetimeカラムがインデックスに格上げされているのがわかる。
f:id:hirotaka_hachiya:20190917170010p:plain

そして、resampleとmeanを用いて、任意の時間単位で平均する。

# 日単位'1d'に変換
dfDaily=df.resample('1d').mean()
dfDaily.head()

以下のように、日にち単位に変換されていることがわかる。
f:id:hirotaka_hachiya:20190917171305p:plain

最後に、seabornを用いてプロットしてみる。

sns.lineplot(data=dfDaily[dfDaily.index<dt.datetime(2015,12,31)])

f:id:hirotaka_hachiya:20190917171506p:plain