今回の課題
Store Sales - Time Series Forecastingのトレーニングデータの移動平均をグラフ化してみたい。
KaggleのTrend(Time Series)のチュートリアルを見ながら、
Store Sales - Time Series Forecastingのトレーニングデータの移動平均を可視化することに挑戦してみた。
使用したコード
# train_df(トレーニングデータ)をdate毎に集計して、salesの平均値を出す。
# dateはインデックス化しておく。
trend_df = train_df[["date", "sales"]].groupby(["date"], as_index=True).mean()
# rollingでウィンドウ関数を使用する。
moving_average = trend_df.rolling(
window=365
, center=True
, min_periods=183,
).mean()
# 変数axに、点でプロットするための情報を渡す。
ax = trend_df.plot(style=".", color="0.5", legend=False)
# 折れ線グラフをプロットする。引数にax変数を渡して、同じグラフに点でもプロットする。
moving_average.plot(ax=ax, linewidth=3, legend=False)
plt.show
出力結果
移動平均の折れ線グラフと、日別平均の点が同じグラフにプロットされる。

使用したコードの解説
1)train_dfのdateカラム毎に集計して、salesの平均値を算出する
下記のコードを使用する。
dateカラムはindex化しておく。
trend_df = train_df[["date", "sales"]].groupby(["date"], as_index=True).mean()
2)移動平均を算出する
moving_average = trend_df.rolling(
window=365
, center=True
, min_periods=183,
).mean()
-
rolling()・・・SQLのウィンドウ関数のように使用できる。 -
window引数・・・集計するwindowの範囲を指定。 -
center引数・・・center=Trueでwindowの中心に結果の値を格納する。 -
min_periods引数・・・移動平均の数がwindowに指定した数値に満たない場合は、欠損値NaNとして保持されてしまうが、min_periodsに整数値を指定しておくと、その値の個数のデータが含まれていれば結果が算出される。
※ここではWINDOWが365,min_periodsが183となっている。
centerがTrueなので、min_periodsに365の半分の値が指定されていれば、NaNが格納されることを避けられる
※参考:pandasでWINDOW関数を適用するrollingを使って移動平均などを算出
3)移動平均は折れ線グラフ、日別の売上(sales)は点をプロットして可視化
最後にこれを実行することで、グラフを出力することができる。
ax = trend_df.plot(style=".", color="0.5", legend=False)
moving_average.plot(ax=ax, linewidth=3, legend=False)
plt.show
- まず、
axに点をプロットするための情報を格納。 -
moving_average.plot(2)で移動平均を計算したもの)の情報を可視化する。この時に、引数にaxに点をプロットするための情報を格納したものを渡す。
以上で実装完了です。
