如何优化大熊猫从雅虎Feed中检索股票报价的表现

时间:2014-03-06 02:20:15

标签: python pandas

我的代码是关于循环1200多个股票代码并从雅虎Feed中检索历史报价(160~200天)。因为需要时间,我在csv中存储引号,只是让它下载时间增量的引号,即日期差异的任何引号或任何引用csv文件丢失...我使用了pandas函数调用get_data_yahoo(stocknum) ,开始,结束)。

然而,我发现整个过程的时间没有区别,似乎有一天的d / l报价与200天的报价相同......大熊猫是如何处理来自雅虎的股票报价?任何其他饲料更好?我可以提出什么建议或改进来加快这个过程?

下面是我为股票报价检索所做的函数调用。

def 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

1 个答案:

答案 0 :(得分:0)

Pandas使用_get_hist_yahoo来获取pandas / 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

如果雅虎把索引放在日期列上,它可以使用索引,因此响应时间与期限无关。