我如何在python的时间序列中检测到这种类型的更改?click here to see image
感谢您的帮助
答案 0 :(得分:2)
有很多方法可以做到这一点。 我将展示一种最快捷,最简单的方法。它基于使用相关性。
首先,我们需要一个数据(时间序列)和模板(在我们的例子中,模板就像一个signum函数):
data = np.concatenate([np.random.rand(70),np.random.rand(30)+2])
template = np.concatenate([[-1]*5,[1]*5])
在检测之前,我强烈建议对数据进行标准化(例如:)
data = (data - data.mean())/data.std()
现在我们只需要使用相关函数:
corr_res = np.correlate(data, template,mode='same')
您需要选择结果的阈值(您应该根据模板定义该值):
th = 9
您可以看到结果:
plt.figure(figsize=(10,5))
plt.subplot(211)
plt.plot(data)
plt.subplot(212)
plt.plot(corr_res)
plt.plot(np.arange(len(corr_res))[corr_res > th],corr_res[corr_res > th],'ro')
plt.show()