学习Tushare的初衷是为了完成我的本科毕业设计,从安装一步步学起,在这个过程中,几乎每一步都会遇到问题,通过各个平台查找资料才得以解决,也花费了不少时间。把这里作为记录我学习Tushare的过程,也为之后使用此数据库的小伙伴们提供一些经验。
Tushare 官方网址:Tushare大数据社区
目录
一、程序准备
1. Tushare下载和安装
我的系统是windows 10,在安装Tushare之前,要先配置好环境。
1. 下载Anaconda:Anaconda | Individual Edition
按照提示完成Anaconda的安装。
2. 快捷键Win+R,打开cmd后在终端键入
python
3. 继续键入:
pip install tushare
等待后显示安装成功。
2. 下载IDE
下载Pycharm:PyCharm: the Python IDE for Professional Developers by JetBrains
此处可以查找pycharm的安装教程,不做详述。
3. 注册Tushare并获取token
1. 注册后打开个人主页——接口token——粘贴到剪贴板
2. 在IDE中新建python file,键入程序:
import tushare as ts
#上一步复制的token粘贴到下方
token = "3ead77*******************************"
ts.set_token(token)
pro = ts.pro_api()
右键点击运行(如下图)
二、数据获取
1.沪深300指数收盘价
沪深300指数的是:hs300
指数可以使用指数接口index_daily和通用行情接口pro_bar等
1. 使用get_hist_data来获取
#沪深300 1B0300 旧版接口(不推荐)
df=ts.get_hist_data('600848',start='2015-01-05',end='2015-01-09')
2. daily接口
pro = ts.pro_api()
df = pro.daily(ts_code='hs300', start_date='20180701', end_date='20180718')
#多个股票
df = pro.daily(ts_code='000001.SZ,600000.SH', start_date='20180701', end_date='20180718')
后来发现Tushare中hs300只能用旧版接口,且时段为2019.7月以后,新版接口不支持沪深300,遂改用上证综指。
2. 上证综指
df=ts.get_k_data(code='sh', ktype='D',start='2006-01-01', end='2021-01-01')
df.to_csv('d:/biyesheji/szzz.csv')
获取上证综指的数据时,要特别注意上证的ts_code是sh,如果打000001获取的是平安银行的股票信息。
输入参数
名称 | 类型 | 必选 | 描述 |
---|---|---|---|
ts_code | str | Y | 指数代码 |
trade_date | str | N | 交易日期 (日期格式:YYYYMMDD,下同) |
start_date | str | N | 开始日期 |
end_date | str | N | 结束日期 |
输出参数
名称 | 类型 | 描述 |
---|---|---|
ts_code | str | TS指数代码 |
trade_date | str | 交易日 |
close | float | 收盘点位 |
open | float | 开盘点位 |
high | float | 最高点位 |
low | float | 最低点位 |
pre_close | float | 昨日收盘点 |
change | float | 涨跌点 |
pct_chg | float | 涨跌幅(%) |
vol | float | 成交量(手) |
amount | float | 成交额(千元) |
3. Shibor
#接口调用
pro = ts.pro_api()
df = pro.shibor(start_date='20180101', end_date='20181101')
输入参数
名称 | 类型 | 必选 | 描述 |
---|---|---|---|
date | str | N | 日期 (日期输入格式:YYYYMMDD,下同) |
start_date | str | N | 开始日期 |
end_date | str | N | 结束日期 |
输出参数
名称 | 类型 | 默认显示 | 描述 |
---|---|---|---|
date | str | Y | 日期 |
on | float | Y | 隔夜 |
1w | float | Y | 1周 |
2w | float | Y | 2周 |
1m | float | Y | 1个月 |
3m | float | Y | 3个月 |
6m | float | Y | 6个月 |
9m | float | Y | 9个月 |
1y | float | Y | 1年 |
三、数据导出格式
1. excel格式
方法如下:
import tushare as ts
df = ts.get_hist_data('000875')
#直接保存
df.to_excel('c:/day/000875.xlsx')
#设定数据位置(从第3行,第6列开始插入数据)
df.to_excel('c:/day/000875.xlsx', startrow=2,startcol=5)
常用参数说明:
- excel_writer: 文件路径或者ExcelWriter对象
- sheet_name:sheet名称,默认为Sheet1
- sep : 文件内容分隔符,默认为,逗号
- na_rep: 在遇到NaN值时保存为某字符,默认为’‘空字符
- float_format: float类型的格式
- columns: 需要保存的列,默认为None
- header: 是否保存columns名,默认为True
- index: 是否保存index,默认为True
- encoding: 文件编码格式
- startrow: 在数据的头部留出startrow行空行
- startcol :在数据的左边留出startcol列空列
2. csv格式
这里我选择导出csv格式,方便python或MATLAB处理数据。
方法如下:
import tushare as ts
df = ts.get_hist_data('000875')
#直接保存
df.to_csv('c:/day/000875.csv')
#选择保存
df.to_csv('c:/day/000875.csv',columns=['open','high','low','close'])
#某些时候,可能需要将一些同类数据保存在一个大文件中,这时候就需要将数据追加在同一个文件里,简单举例如下:
import tushare as ts
import os
filename = 'c:/day/bigfile.csv'
for code in ['000875', '600848', '000981']:
df = ts.get_hist_data(code)
if os.path.exists(filename):
df.to_csv(filename, mode='a', header=None)
else:
df.to_csv(filename)
四、错误汇总
1. Attribute Error: partially initialized module ' ' has no attribute ' ' (most likely due to a circular import)
命名.py文件的时候文件名与python内置的模块名称冲突,重新对文件命名就好了。
2. 导出数据文件后只有标题栏,内容为空白:
没有添加:
pro = ts.pro_api()
或
ts.set_token(token)
3.PermissionError: [Errno 13] Permission denied: 'd:/biyesheji/hs300.csv'
保存的目标文件被打开,关闭之后就可以了