2015-01-25 5 views
0

Я работаю над кодированием модели волатильности HAR-RV, где я регрессирую ежедневно, еженедельно и ежемесячно, чтобы предсказать ежедневную волатильность завтрашнего дня. У меня есть 6-летняя ежедневная информация, на которую я хотел бы протестировать. Сначала я подумал, что это будет довольно просто - я использовал pandas asfreq для преобразования моих ежедневных данных в еженедельные и ежемесячные, чтобы вычислять ежедневные, еженедельные и ежемесячные pct_change, чтобы начать анализ. Проблема в том, что я пытаюсь найти функцию в python, которая позволит мне рассчитать ежемесячную и еженедельную pct_change для каждой ежедневной точки данных, чтобы на 1/24/15 у меня была неделя начиная с 17.01.2012 (-7 дней) и месяца, начинающегося 12/25/2014 (-30 дней), и для ежедневной точки данных 1/23/15 У меня будет неделя начала 1/16/2015 (-7 дней) и начало месяца 12/24/2014 (- 30 дней) и т. Д.Динамические периоды даты и времени Python

Однако, используя asfreq ('W') и asfreq ('M'), я получаю 31 ежедневную точку данных за каждый месяц (ОК) 1 ежемесячную точку данных за каждый месяц (не в порядке)) и 4 еженедельных данных за каждый месяц (не в порядке). Мне нужно 31 ежедневный пункт, 31 еженедельный баллы и 31 ежемесячный баллы за каждый месяц.

Любые указания относительно того, как я могу достичь соответствующих еженедельных и ежемесячных pct_change для каждого ежедневного дня? Вот код, который я в настоящее время с помощью:

import pandas as pd 
import numpy as np 
from zipline.data.loader import load_bars_from_yahoo 
start = pd.Timestamp('2009-07-26') 
end = pd.Timestamp('2015-01-18') 
data = zp.utils.factory.load_from_yahoo(
    stocks=['USO'], 
    start=start, 
    end=end, 
    ) 
daily = data 
weekly = daily.asfreq('W-FRI') 
monthly = daily.asfreq('M')` 

ответ

2

Метод asfreq используется для переиндексации данных. Иными словами, он заполняет его в разные периоды времени.

Что вы хотите сделать, это рассчитать прокат статистика. http://pandas.pydata.org/pandas-docs/stable/computation.html#moving-rolling-statistics-moments

Вот реализация с помощью пользовательской функции лямбды и rolling_apply, который, кажется, что вы хотите:

from pandas import Series, date_range 
import numpy as np 

# Generate some synthetic price data 
ts = pd.Series(np.random.randn(1000), index=date_range('1/1/2000', periods=1000)) 
ts = ts.cumsum() + 100 
ts.plot() 

# Define a function to calculate percent change over an x-day period 
rollingChange = lambda x: 100*(x[-1]-x[0])/x[0] 

# Use rolling_apply to calculate 7 and 30 day rolling prcnt_change 
week = pd.rolling_apply(ts, 7, rollingChange) 
month = pd.rolling_apply(ts, 30, rollingChange) 

Вот ссылка nbviewer еще несколько деталей: http://nbviewer.ipython.org/gist/twowheelmotion/70e8f114b208c194ac8b

+0

Благодаря это был именно тем, что я ищу! – molivizzy

Смежные вопросы