具有不规则边界的滚动平均值

时间:2017-05-29 17:00:22

标签: python-3.x pandas numpy scipy moving-average

我在我的数据上使用滚动平均值来平滑它。我的data可以找到here

我原始数据的说明是; Original Data

目前,我正在使用

import pandas as pd
import numpy as np

data = pd.read_excel('data.xlsx')
data = np.array(data, dtype=np.float)
window_length = 9
res = pd.rolling_mean(np.array(data[:, 2]), window_length, min_periods=1, center=True)

这是我在应用window_length为9的滚动均值后得到的结果;

Rolling Mean

当我将window_length增加到20时,我得到一个更平滑的图像,但在边界处,数据似乎是错误的。

enter image description here

问题是,如上图所示,滚动平均值在我的数据边界引入了某种错误,这些错误在原始数据中不存在。

有没有办法纠正这个?

我的猜测是,在边界处,因为window_length的一部分是在我的数据之外找到的,所以它夸大了平均值。

有没有办法使用pandas滚动平均值来纠正这个错误,还是有更好的pythonic方法呢?感谢。

聚苯乙烯。我知道我正在使用的滚动平均值的熊猫功能在新版本中已被弃用。

1 个答案:

答案 0 :(得分:0)

您可以尝试使用权重scipy.ndimage.filters.convolve等本机2D卷积方法,这样就可以使内核成为平均(平均)函数。

权重为:

n = 3. # size of kernel over which to calculate mean
weights = np.ones(n,n)/n**2

如果数据的白色区域由nans表示,这将减少n结果的占用空间,因为包含nan的任何内核戳将返回nan。如果这确实是一个问题,请试试astropy.convolution,它有更好的纳米处理。