【发布时间】:2021-05-24 12:00:52
【问题描述】:
我在 python 中有一个数据列表,表示及时的作业数量。我想检测此数据集中的重大变化。我的意思是,我想检测每次数据值从上一个检查点增加或减少超过特定百分比时。
例如,如果我有 [10,..,10,100,..,100,200,200,...,100,10] 这样的数据。有 4 个重大变化。
检测此问题的理想方法/算法是什么?
【问题讨论】:
标签: python statistics data-analysis
我在 python 中有一个数据列表,表示及时的作业数量。我想检测此数据集中的重大变化。我的意思是,我想检测每次数据值从上一个检查点增加或减少超过特定百分比时。
例如,如果我有 [10,..,10,100,..,100,200,200,...,100,10] 这样的数据。有 4 个重大变化。
检测此问题的理想方法/算法是什么?
【问题讨论】:
标签: python statistics data-analysis
您可以查看当前和下一个列表元素之间的绝对差异,如果差异超过某个阈值,则报告其索引,例如:
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.
【讨论】:
如果数据的方差是常数,则可以使用标准差。如果数据已经存在(不是实时监听),你可以使用 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]
【讨论】: