ChangeFinderを用いて変化点検出を実現したい
プログラム初心者です。
Python3において、変化点検出ライブラリ「ChangeFinder」を用いて元のデータ(data)と変化量(result)をプロットしたいのですが、変化量のプロットがうまくいきません。(具体的には少しのプロットだけで途切れている状態)
日付ラベル、温度データが格納されたファイルをlistに格納しています。
用いたソースコードを以下に記します。
-----プログラム1(Python3)-----
import pylab
from statsmodels.tsa.ar_model import AR
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
from statsmodels.tsa import stattools
from statsmodels.tsa import ar_model
from statsmodels.graphics import tsaplots
import changefinder
#---温度生データ---
df_templeture = pd.read_csv('templeture_data_.csv')
y = pd.Series(df_templeture.templeture.values, index=pd.date_range(start='2019-11-11 22:00:00', periods=len(df_templeture),freq='min'))#indexつける
#----------
#---変化点検出---
# r:忘却パラメタ
# order:ARモデルの次数
# smooth:スコアの平滑化のウィンドウ幅
y_diff = y.diff()
data = y_diff.values.tolist()#pd.Seriesをlistに変換
print(len(data))#出力:1441(dataの量は1441個あるはず)
cf = changefinder.ChangeFinder(r=0.01, order=12, smooth=7)
result = np.empty(len(data))
for i, d in enumerate(data):
# スコア
result[i] = cf.update(d)
fig = plt.figure()
ax = fig.add_subplot(111)
ax.plot(result, label="score")
ax2 = ax.twinx()
ax2.plot(data, alpha=0.3, label="observation")
#----------
下に出力されるグラフを示します。元のdataは薄くプロットされていますが、変化量(濃い青でのプロット)がうまく出力されない状態です。
次に、参考にしたソースコードと、そのときの出力図を示します。
-----プログラム2(Python3)-----
data = np.concatenate([np.random.normal(0.7, 0.05, 300), np.random.normal(1.5, 0.05, 300), np.random.normal(0.6, 0.05, 300), np.random.normal(1.3, 0.05, 300),])
#r: 忘却パラメータ
#order: ARモデルの次数
#smooth: スコアの平滑化のウィンドウ幅
cf = changefinder.ChangeFinder(r=0.01, order=1, smooth=7)
result = np.empty(len(data))
for i, d in enumerate(data):
#score
result[i] = cf.update(d)
fig = plt.figure()
ax = fig.add_subplot(111)
ax.plot(result, label="score")
ax2 = ax.twinx()
ax2.plot(data, alpha=0.3, label="observation")
ご意見、ご回答いただけると幸いです。
よろしくお願いします。