2016-07-27 10 views
2

まだnoobとしても、私は熱狂的にPythonをしばらく学んでいます。ここでは私が取り組んでいるプロジェクトです。私は過去20年間で10日、米国祝日前の過去の株価を収集する必要があり、ここで私がやったものだ。(私はここpandas_datareaderと休日を使用)過去20年間の休日の10日前

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

新年の10日前はクリスマスと重複します。あなたの関数はこれを考慮していません。 – Alexander

+0

はい、私はそれを認識しています。技術的には、まだクリスマスの日をスキップするだけで、新年の10営業日前に株価を引き出すことができます。 – wastetime909

答えて

0

これは辞書とリストの理解度を使用して、各休暇に先立つ10の米国の営業日のセットを生成します。当時の株価は、最近の最初の株価(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

関連する問題