检测数据列表中的重大更改

时间:2017-04-16 04:06:15

标签: python statistics data-analysis

我在python中有一个数据列表,它代表了及时的作业数量。我想检测此数据集中的重大更改。我的意思是,我希望每次数据值从上一个检查点增加或减少超过特定百分比时检测到。

例如,如果我有[10,..,10,100,..,100,200,200,...,100,10]之类的数据。有4个重大变化。

检测此问题的理想方法/算法是什么?

2 个答案:

答案 0 :(得分:1)

您可以查看当前列表元素和下一个列表元素之间的绝对差异,并在差异超过特定阈值时报告其索引,例如:

THR = 50
data = [10,10,100,100,200,200,100,10]
[(i,abs(x-y)>THR) for i,(x,y) in enumerate(zip(data,data[1:])) if abs(x-y)>THR]
#[1, 3, 5, 6] - gap after items 1 (10->100), 3 (100->200), etc.

答案 1 :(得分:0)

如果数据的方差是常数,可以使用标准差。如果数据已经存在(不是现场收听),可以使用pandas:

p=10 #instead of measuring difference from previous 1, can measure longer-distance differences (though this may not be exactly what you're asking)
import pandas as pd
s = pd.Series(data)
diffs = s.diff(periods=p)
std = diffs.std()
significant_changes = diffs.loc[diffs > std]