按时间序列检测给定模式

时间:2017-08-13 07:20:29

标签: python time-series trend

我如何在python的时间序列中检测到这种类型的更改?click here to see image

感谢您的帮助

1 个答案:

答案 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()

result