我有一个数据集:不同范围的温度和压力值。我想过滤掉所有偏离"x"%以上的数据;正常的";价值此数据发生在进程故障时。
额外:正常值可能会在更长的时间内发生变化,因此时间戳1处的异常在时间戳2处可能是正常的。
我看了一些噪音过滤器,但我不确定这是噪音。
您问了两个问题。
1
处理派生列,因此很容易进行筛选。
对于";x%";,比如5%,你可以使用
avg = np.mean(df.pressure)
df['pres_deviation'] = abs(df.pressure - avg) / avg
print(df[df.pres_deviation < .05])
但是,与其用百分比来工作,你可能会发现处理标准偏差更自然,从平均值中过滤出例如超过三个标准偏差的值。参见
- https://en.wikipedia.org/wiki/Standard_score
- sklearn标准缩放器
2
(额外:正常值可能随时间变化。(
您可以使用";最近的100个样本";要定义平滑平均值,请将其存储为一个额外的列,并替换上面计算中的avg
标量。
一般来说,您可以手动将高/低阈值设置为数据中的时间序列。
你所描述的区域被称为";"变化点检测";,我们发现了大量关于它的文献,例如。https://paperswithcode.com/task/change-point-detection。我用过破裂的方法效果很好,我推荐给你。