我的代码是关于循环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
答案 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
如果雅虎把索引放在日期列上,它可以使用索引,因此响应时间与期限无关。