Python平滑时间序列数据

Python平滑时间序列数据,python,time-series,Python,Time Series,我在python中有一些数据是unixtime,value: [(1301672429, 274), (1301672430, 302), (1301672431, 288)...] 时间总是一秒一秒地流逝。如何减少这些数据,使时间戳为每秒一次,但该值是周围10个值的平均值 更漂亮的滚动平均值也不错,但这些数据是用图表表示的,所以主要是为了平滑图表 跟进(得出在SQL中尝试这样做会带来痛苦的结论后)。使用: 这似乎是合理的。如果你想要平均值,那么你的窗户应该是平的。其他窗口协议对窗口中的数据点

我在python中有一些数据是unixtime,value:

[(1301672429, 274), (1301672430, 302), (1301672431, 288)...]
时间总是一秒一秒地流逝。如何减少这些数据,使时间戳为每秒一次,但该值是周围10个值的平均值

更漂亮的滚动平均值也不错,但这些数据是用图表表示的,所以主要是为了平滑图表

跟进(得出在SQL中尝试这样做会带来痛苦的结论后)。

使用:


这似乎是合理的。如果你想要平均值,那么你的窗户应该是平的。其他窗口协议对窗口中的数据点的权重不同。如果使用python 3,请确保将带有ValueErrors的行更改为:
raisevalueError(“smooth仅接受一维数组”)
import numpy
def smooth(x,window_len=11,window='hanning'):
        if x.ndim != 1:
                raise ValueError, "smooth only accepts 1 dimension arrays."
        if x.size < window_len:
                raise ValueError, "Input vector needs to be bigger than window size."
        if window_len<3:
                return x
        if not window in ['flat', 'hanning', 'hamming', 'bartlett', 'blackman']:
                raise ValueError, "Window is on of 'flat', 'hanning', 'hamming', 'bartlett', 'blackman'"
        s=numpy.r_[2*x[0]-x[window_len-1::-1],x,2*x[-1]-x[-1:-window_len:-1]]
        if window == 'flat': #moving average
                w=numpy.ones(window_len,'d')
        else:  
                w=eval('numpy.'+window+'(window_len)')
        y=numpy.convolve(w/w.sum(),s,mode='same')
        return y[window_len:-window_len+1]
   if form_results['smooth']:
            a = numpy.array([x[1] for x in results])
            smoothed = smooth(a,window_len=21)
            results = zip([x[0] for x in results], smoothed)