2016-07-27 5 views
2

, хотя я все еще как нуб, я с энтузиазмом изучал Python и вот проект, над которым я работаю. Мне нужно собрать исторические цены на акцию за десять дней до США государственных праздников в течение последних двадцати лет, и вот что я сделал: (я использовал pandas_datareader и праздники здесь)историческая цена акций за десять дней до праздников в течение последних двадцати лет

start=datetime.datetime(1995,1,1) 
end=datetime.datetime(2015,12,31) 
history_price=web.get_data_yahoo('SPY', start, end) 
us_holidays=holidays.UnitedStates() 
test=[] 
for i in dates: 
    if i in us_holidays: 
     test.append((history_price['Adj Close'].ix[pd.date_range(end=i, periods=11, freq='B')])) 
test 

И результат таков:

Freq: B, Name: Adj Close, dtype: float64, 1995-02-06 32.707565 
1995-02-07 32.749946 
1995-02-08 32.749946 
1995-02-09 32.749946 
1995-02-10 32.792328 
1995-02-13 32.802975 
1995-02-14 32.845356 
1995-02-15 33.025457 
1995-02-16 32.983076 
1995-02-17 32.855933 
1995-02-20   NaN 

Длина списка «тест» составляет 233. Мой вопрос: как преобразовать этот список в словарь с праздниками, когда ключи и цены акций являются значениями под каждым ключом.

Заранее благодарю вас за руководство.

+0

Десять дней, предшествующих Новому году, будут пересекаться с Рождеством. Ваша функция не учитывает это. – Alexander

+0

Да, я знаю об этом. Технически я все еще могу извлечь цены на акции за десять рабочих дней до нового года, просто пропустив рождественский день. – wastetime909

ответ

0

Это использует словарь и понимание списка, чтобы создать набор из десяти рабочих дней в США, предшествующих каждому празднику. Цены на акции для этих дней затем сохраняются в словаре (с ключом в праздничные дни) в виде списка цен, последние последние (h-1) и старые (последний) (h-10).

from pandas.tseries.holiday import USFederalHolidayCalendar 
from pandas.tseries.offsets import CustomBusinessDay 

holidays = USFederalHolidayCalendar().holidays(start='1995-1-1', end='2015-12-31') 
bday_us = CustomBusinessDay(calendar=USFederalHolidayCalendar()) 

start = '1995-01-01' 
end = '2015-12-31' 
days = 10 

dates = {holiday: [holiday - bday_us * n for n in range(1, days + 1)] 
     for holiday in USFederalHolidayCalendar().holidays(start=start, end=end)} 

>>> dates 
{... 
Timestamp('2015-12-25 00:00:00'): [ 
    Timestamp('2015-12-24 00:00:00'), 
    Timestamp('2015-12-23 00:00:00'), 
    Timestamp('2015-12-22 00:00:00'), 
    Timestamp('2015-12-21 00:00:00'), 
    Timestamp('2015-12-18 00:00:00'), 
    Timestamp('2015-12-17 00:00:00'), 
    Timestamp('2015-12-16 00:00:00'), 
    Timestamp('2015-12-15 00:00:00'), 
    Timestamp('2015-12-14 00:00:00'), 
    Timestamp('2015-12-11 00:00:00')]} 

result = {holiday: history_price.ix[dates[holiday]].values for holiday in dates} 

>>> result 
{... 
Timestamp('2015-12-25 00:00:00'): 
    array([ 203.56598 , 203.902497, 201.408393, 199.597201, 197.964166, 
      201.55487 , 204.673725, 201.722125, 199.626485, 198.622952])} 
+0

Спасибо, это работает! – wastetime909