Подтвердить что ты не робот

Данные Python Smooth Time Series

У меня есть некоторые данные в python, которые являются unixtime, значение:

[(1301672429, 274), (1301672430, 302), (1301672431, 288)...]

Время постоянно увеличивается на одну секунду. Как я могу уменьшить эти данные, чтобы временная метка была каждую секунду, но значение представляет собой среднее значение окружающих 10 значений?

Скользящие средние Fancier также были бы хороши, но эти данные будут графически, поэтому в основном сгладить график.

Последовательность (TSQL Rolling Average of Time Groupings после того, как вы пришли к выводу, что попытка сделать это в SQL - это путь боли).

4b9b3361

Ответ 2

Использование http://www.scipy.org/Cookbook/SignalSmooth:

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)