# モデルで計算
from statsmodels import api as sm
decompose_result = sm.tsa.seasonal_decompose(
df["pv"],
period=7,
)
print(decompose_result.trend)
"""
date
2022-06-20 NaN
2022-06-21 NaN
2022-06-22 NaN
2022-06-23 1409.857143
2022-06-24 1408.714286
...
2022-11-02 1495.285714
2022-11-03 1512.000000
2022-11-04 NaN
2022-11-05 NaN
2022-11-06 NaN
Name: trend, Length: 140, dtype: float64
"""
# pandasで計算。7日移動平均をとって、3日シフトする
print(df["pv"].rolling(7).mean().shift(-3))
"""
date
2022-06-20 NaN
2022-06-21 NaN
2022-06-22 NaN
2022-06-23 1409.857143
2022-06-24 1408.714286
...
2022-11-02 1495.285714
2022-11-03 1512.000000
2022-11-04 NaN
2022-11-05 NaN
2022-11-06 NaN
Name: pv, Length: 140, dtype: float64
"""
decompose_result = sm.tsa.seasonal_decompose(
df["pv"],
period=7,
two_sided=False
)
print(decompose_result.trend.iloc[: 8])
"""
date
2022-06-20 NaN
2022-06-21 NaN
2022-06-22 NaN
2022-06-23 NaN
2022-06-24 NaN
2022-06-25 NaN
2022-06-26 1409.857143
2022-06-27 1408.714286
Name: trend, dtype: float64
"""
# np.tile で同じ値を繰り返す配列を作って引く
print(df["pv_detrended"] - np.tile(period_averages, 20))
"""
date
2022-06-20 NaN
2022-06-21 NaN
2022-06-22 NaN
2022-06-23 74.404726
2022-06-24 36.105478
...
2022-11-02 99.940064
2022-11-03 -749.738131
2022-11-04 NaN
2022-11-05 NaN
2022-11-06 NaN
Name: pv_detrended, Length: 140, dtype: float64
"""
# モデルの残差
print(decompose_result.resid)
"""
date
2022-06-20 NaN
2022-06-21 NaN
2022-06-22 NaN
2022-06-23 74.404726
2022-06-24 36.105478
...
2022-11-02 99.940064
2022-11-03 -749.738131
2022-11-04 NaN
2022-11-05 NaN
2022-11-06 NaN
Name: resid, Length: 140, dtype: float64
"""