2014-03-06 14 views
1

我的代碼是關於循環1200多個股票代碼並從yahoo飼料中檢索歷史報價(160〜200天)。因爲它需要時間,我存儲在csv報價,只是讓它下載時間增量的報價,即任何報價的日期差異或任何報價csv文件丟失...我用熊貓函數調用get_data_yahoo(stocknum ,開始,結束)。如何優化大熊貓從雅虎飼料中檢索股票報價的性能

但是,我發現整個過程所需的時間沒有任何區別,似乎有一天的d/l報價與200天的報價相同......大熊貓是如何處理來自雅虎的股票報價的?任何其他飼料更好?任何建議或提高我可以加快這一進程?

這裏下面的函數調用我爲股票報價檢索。

高清readStockPrice(股票,週期= 200,延遲= 1):

#define the period for stock filtering 
now=dt.date.today() 
end=now.strftime("%Y-%m-%d") 
#start=(now-dt.timedelta(days=period)).strftime("%Y-%m-%d") 

if os.path.isfile('cache/'+stock+'.csv'): 
    df=pd.read_csv('cache/'+stock+'.csv',index_col=0,parse_dates=True) 
    lastrecorddate=df.index.to_pydatetime()[-1].date() 
    delta=(now-lastrecorddate).days 
    if delta>delay: 

     #print("retrieving "+stock+" quotes from the web") 
     start=(lastrecorddate+dt.timedelta(days=1)).strftime("%Y-%m-%d") 
     try: 
      df_delta=web.get_data_yahoo(stock,start,end) 
      df=df.append(df_delta) 
      df_delta.to_csv('cache/'+stock+'.csv',header=False,mode='a') 
     except IOError: 
      return pd.DataFrame() 
else: 
    #print("retrieving "+stock+" quotes from the web") 
    start=(now-dt.timedelta(days=period)).strftime("%Y-%m-%d") 
    try: 
     df=web.get_data_yahoo(stock,start,end) 
     if not df.empty: 
      df.to_csv('cache/'+stock+'.csv') 
    except IOError: 
     return pd.DataFrame() 

return df 

回答

0

熊貓使用_get_hist_yahoo,讓您的數據大熊貓/ IO/data.py,如下圖所示:

def _get_hist_yahoo(sym, start, end, retry_count, pause): 
""" 
Get historical data for the given name from yahoo. 
Date format is datetime 

Returns a DataFrame. 
""" 
start, end = _sanitize_dates(start, end) 
url = (_HISTORICAL_YAHOO_URL + 's=%s' % sym + 
     '&a=%s' % (start.month - 1) + 
     '&b=%s' % start.day + 
     '&c=%s' % start.year + 
     '&d=%s' % (end.month - 1) + 
     '&e=%s' % end.day + 
     '&f=%s' % end.year + 
     '&g=d' + 
     '&ignore=.csv') 
return _retry_read_url(url, retry_count, pause, 'Yahoo!') 

我認爲它會從ULR被轉移到一個SQL查詢像

where date between START_TIME and END_TIME 

如果雅虎把指數的日柱,也可能我們e指數如此反應時間與期限無關。

+0

我的代碼是從儲存的csv(任何一種股票的整個報價)檢索報價,或從雅虎下載。因此我需要一個時間窗口,即在幾天的時間裏,我從現在開始有多遠。那爲什麼它只關心開始而不是結束。 – timeislove

+0

@timeislove對不起,我誤解你的問題之前,現在我檢查熊貓的源代碼,並重新編輯我的答案,請看看它是否有任何幫助。 – linpingta

+0

這就是我所猜測的...但即使雅虎只是把參數(索引作爲猜測),下載的數據塊的長度差異很大,我說的是一個約1:200的數據幀(有6〜7個列的數目,例如開放,高... adj close等等)time 1200+ nos of stocks !!!不應該有任何性能差異?如果你的猜測是正確的,我可以做什麼來增強下載時間(性能)? – timeislove

相關問題