Closed Tony-Wang closed 7 years ago
@Tony-Wang 严格来说应该是pandas具备这个功能,当然tushare可以再封装一下,您的建议很好,后面有时间了我重新整理一下,谢谢。
df = ts.get_h_data(stockCode, start=startDate, end=endDate)
能否如果下载过了,就不用再网上获取,不然很慢,一直获取也会被网站禁掉
http://tushare.org/storing.html 存储了df到excel,怎么再读取回来?
@gclsoft DataFrame可以存pickle.
import pandas as pd
# 保存
df.to_pickle(filename)
# 读取
df = pd.read_pickle(filename)
from dateutil import parser
import os.path
sleepTime = 1.0
endDateTime = parser.parse(endDate)
#def getHistory(stockCode)
def getFolder():
return "./stockData/"+startDate+"_"+endDate
if not os.path.exists(getFolder()):
os.makedirs(getFolder())
def saveFileName(stockCode):
filename=getFolder()+"/"+stockCode+".dat"
return filename
def getHistory(stockCode):
# def getStock(stockCode):
fname=saveFileName(stockCode)
if os.path.isfile(fname):
df = pd.read_pickle(fname)
if df is not None:
return df
global sleepTime
try:
print stockCode
df = ts.get_h_data(stockCode, start=startDate, end=endDate)
if df is not None:
df.to_pickle(fname)
#else: #TODO:如果是停牌要保存空的文件
if sleepTime > 0.9:
sleepTime = sleepTime * 0.9
return df
except:
print "sleep:" + str(sleepTime)
sleep(sleepTime)
sleepTime = sleepTime * 1.1
pass
return getHistory(stockCode) # -1,-1,-1,-1,-1,"",-1
return nil
谢谢 @cedricporter @jimmysoa 如果是停牌要保存空的文件,不然的话这个股票还是要从网上获取,要怎么做才能下次读取到这个空文件时返回的df包含停牌这个bool值?
@gclsoft
如果你的startDate,endDate间隔很长的话,停牌的话还是有其他历史数据的。至于停牌判断,你看看df的当天有没有数据就可以知道是否停牌了。
@cedricporter 我的意思是怎么怎么保存一个bool值到df里. 这样我就知道这个是停牌了,就不再网络获取了
d = {'isStop' : 1}
df = DataFrame(d)
试了下不行
比如df = DataFrame({'isStop': [1]})
df["isStop"]就获取不到这个值
@gclsoft 为啥要这样
@cedricporter 保存起来,下次就不用从网络获取并返回None出来,我自己提前就知道了
@jimmysoa 个人觉得直接在百度网盘提供一个你下载的所有股票历史数据的pandas的dataframe导出的压缩的hdf5文件比较好,应该也没多大,我这里不知为什么调用ts.get_hist_data('code'), 好多都显示timed out。这样也帮助那些网站减轻负担,你自己用的时候没有下载过所有数据吗?
我自己有,但是提供百度网盘的方式也不好。
百度网盘有什么不好?FQuantToolbox 就是这样做的http://pan.baidu.com/share/link?shareid=3327430951&uk=1761970726&adapt=pc&fr=ftw#path=%252FFQuantToolBox
可以考虑用免费得云存储服务撒
我在写脚本下载数据,好像 ts.get_hist_data比较快,但是没有复权,这一点文档里面没有清楚地说出来,囧,不过有p_change可以一定程度代替。用这个接口下载的近3年数据我分享在了链接:http://yunpan.cn/cLnEQ9Hc939CM 访问密码 e098 ,stocks.7z解压后用:
df = pd.read_hdf('PATH_TO/stocks.hdf', key='code300426')
'code'+code的访问方式作为hdf文件里对应股票的key来获取那个dataframe。 用 ts.get_h_data 的数据还在下载,好像慢很多,如果能正常执行完,我再传。
不知道为什么老是被百度取消分享,o(╯□╰)o, 改发360云盘。
上面那个分享链接又加了一个stocks_h.hdf.gz文件,解压后也用类似方式访问,是用ts.get_h_data(code,start='2005-01-01',end='2015-11-19')
下载的近10年数据集,详见https://gist.github.com/xgdgsc/d8e8ab94350c0363378e 。有兴趣的可以定期一起维护一个网盘更新。
tushare是不是能提供数据本地化的功能。
让用户可以在本地保持所有数据的副本,提供一个统一的数据访问接口,首先访问本地数据看是否命中,如果没有命中,自动去网上下载相应数据并在本地保存。这样的功能基本上所有使用tushare作为量化研究的数据来源应用都需要实现的。