Сглаживание данных временного ряда Python - PullRequest
13 голосов
/ 01 апреля 2011

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

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

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

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

Отслеживание ( Скользящее среднее значение TSQL для группировок времени после того, как пришло к выводу, что попытка сделать это в SQL - это мучительный путь).

Ответы [ 2 ]

16 голосов
/ 01 апреля 2011

Использование 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)
11 голосов
/ 01 апреля 2011

Если у вас есть доступ к numpy, вы можете попробовать этот рецепт:

http://www.scipy.org/Cookbook/SignalSmooth

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...