LoginSignup
0
0

More than 1 year has passed since last update.

【データ可視化/Python】移動平均折れ線グラフと日別平均点グラフを同じグラフで可視化をする

Posted at

今回の課題

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

出力結果

移動平均の折れ線グラフと、日別平均の点が同じグラフにプロットされる。
image.png

使用したコードの解説

1)train_dfのdateカラム毎に集計して、salesの平均値を算出する

下記のコードを使用する。
dateカラムはindex化しておく。

trend_df = train_df[["date", "sales"]].groupby(["date"], as_index=True).mean()

※上記のコードを出力すると、下記のように出力される。
image.png

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
  1. まず、ax点をプロットするための情報を格納。
  2. moving_average.plot2)で移動平均を計算したもの)の情報を可視化する。この時に、引数にaxに点をプロットするための情報を格納したものを渡す。

以上で実装完了です。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0