[SciPy-User] Question about scikits.timeseries.lib.moving_funcs.mov_average
Pierre GM
pgmdevlist at gmail.com
Wed Jun 23 14:35:35 EDT 2010
On Jun 23, 2010, at 11:45 AM, Andreas wrote:
> Thanks a lot for your input!
>
>> You could try to fill your missing values beforehand, w/ functions like
>> backward_fill and forward_fill, then passing your series to mov_average.
>
> Well, that's not really what I want. By doing what you suggest, I make the
> assumption that the value actually changed on the day for which I have the
> measurement. But each measurement is only one single point in time, so I
> do not want to make this assumption.
Ah OK. Makes sense.
> Basically, I'm looking for a simple and efficient way to do something like
> this::
>
> w = 11 # the window size
> s = (w-1)*.5
> for d in data.dates:
> newdata[d] = data[d-s:d+s+1].mean()
Ah OK. Note that you should use cmov_mean, then...
Well, several possibilities:
* Make sure you don't have missing dates (use fill_missing_dates), then construct a list of slices and apply .mean() on the .series (so that you don't use __getitem__ on the whole series, only on the masked data part, saves some time).
* Use some tricks:
- the moving_funcs functions don't need timeseries as inputs, masked arrays are just fine
- compute cmov_mean on the data part (filled w/ 0)
- compute cmov_mean on the opposite of the mask (viz, np.logical_not(x.mask)
- divide the first by the second.
More information about the SciPy-User
mailing list