消除异常值/最适合" spiky" Python中的数据

时间:2016-12-05 14:39:20

标签: python-2.7 curve-fitting analysis outliers

处理这样的数据相当新;我有两条曲线,我不知道如何处理,但我知道我希望得到什么作为结果。两个数据集的原始图如下所示(左);我觉得我想为他们提供的粗略配合显示在下方(右侧),覆盖的配合为红色。

第一个例子: enter image description here 振幅的突然下降是数据采集方式的假象。这意味着它本身就是不可预测的,我希望找到一种对这种行为具有鲁棒性的方法。

在第一种情况下,我可以通过使用阈值来尝试消除幅度的急剧下降,但在第二种情况下这对我没有帮助: enter image description here, 我仍然得到强烈的振荡,但最小值不再是0.

编辑:在编写短脚本以使用@JamesPhillips建议后,拟合结果如下所示;可以确认这是我正在寻找的,并且比其他拟合算法更好/更快。

enter image description here

enter image description here

1 个答案:

答案 0 :(得分:2)

一个可能的algothm:过滤类似这样的数据......

从图中显示的最小X值点开始,从最小的X值迭代到最大的X值。对于每一点:

1)如果下一个点的Y值大于或等于该点的Y值,请包括它。

2)如果下一个点的值小于该点Y值的[截止]百分比,则将其排除。

3)转到下一点。

运行过滤器并测试[cutoff]的不同值,每次绘制结果图以查看[cutoff]的值是否符合您的要求。您可能需要一个或两个额外的过滤条件,但这应该是您描述的过滤数据的良好开端。