python时间序列峰值检测_时间序列中的峰值检测

I'm currently working on a little project in which I want to compare two time-series. The similarity measure is really vague, they are considered to be similar if the two time series roughly have the same shape.

So I thought to myself "Well if they only need to have the same shape, I just compare the peaks of the two time-series, if the peaks are at the same position, then surely the time-series will be similar"

My problem now is to find a good algorithm for the peak detection. I used google, but I only came up with the paper Simple Algorithms for Peak Detection in Time-Series. The problem is, the algorithms described in this paper work well with really extreme and thin peaks, but in the most cases, my time-series have rather flat peaks so they will not be detected.

Does anybody know where I could find or search for an algorithm which would detect the peaks shown in the following image?

解决方案

You seem to simply look for slope inversion (from positive to negative and vice versa). A rough java algo could be (not tested):

List points = ... //all the points in your curve

List extremes = new ArrayList ();

double previous = null;

double previousSlope = 0;

for (Point p : points) {

if (previous == null) { previous = p; continue; }

double slope = p.getValue() - previous.getValue();

if (slope * previousSlope < 0) { //look for sign changes

extremes.add(previous);

}

previousSlope = slope;

previous = p;

}

Finally, a good way to measure similarity is correlation. In your case, I would look at % move correlation (in other words, you want your 2 series to go up or down at the same time) - that's typically what is done in finance where you calculate the correlation between 2 assets returns for example:

create 2 new series with the % move for each point of the 2 series

calculate the correlation between those 2 series

You can read more about returns correlations here for example. In summary, if your values are:

Series 1 Series 2

100 50

98 49

100 52

102 54

The "returns" series will be:

Series 1 Series 2

-2.00% -2.00%

+2.04% +6.12%

+2.00% +3.85%

And you calculate the correlation of those 2 returns series (in this example: 0.96) to get a measure of how much the 2 curves look alike. You might want to adjust the result for variance (i.e. if one shape has a much wider range than the other).

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值