一.Tushare介绍
Tushare是一个免费开源的python财经数据接口包。主要实现对股票数据等从数据采集、清晰加工和数据存储的过程。考虑到Python pandas包在金融量化分析中体现出的优势,Tushare返回的绝大部分的数据格式都是pandas DataFrame类型,非常便于用pandas/NumPy/Matplotlib进行数据分析和可视化。当然也可以通过Tushare的数据存储功能将数据保存到本地后用excel或关系数据库分析。
二.安装Tushare
- 方式1:pip install tushare
- 方式2:访问https://pypi.python.org/pypi/Tushare/下载安装
版本升级
- pip install tushare --upgrade
查看当前版本的方法:
import tushare
print(tushare.__version__)
可以通过https://tushare.pro/register?reg=352648注册,在个人中心中获取token值,在IDLE上输入:(PS:换电脑后把以上操作一遍即可)
token=‘你复制下来的token’
ts.set_token(token)
pro=ts.pro_api()
三.简单使用
(1)获取上证指数历史行情数据
在python的IDLE上我们调取相应的上证数据:
import tushare as ts
import pandas as pd
# 设置token,只需要在第一次调用或者token失效时设置
# 设置完成后,之后就不再需要这一个命令了
# ts.set_token('*******')
pro = ts.pro_api()
df_daily = pro.index_daily(ts_code="000001.SH")
df_daily.head()
pd.set_option('display.width',None)
print(df_daily)
一开始没有加上pd.set_option('display.width',None)时显示的结果如下图,
ts_code trade_date close ... pct_chg vol amount
0 000001.SH 20200228 2880.3038 ... -3.7116 401216914.0 4.326578e+08
1 000001.SH 20200227 2991.3288 ... 0.1138 350523658.0 3.959556e+08
2 000001.SH 20200226 2987.9287 ... -0.8338 469049552.0 4.953414e+08
3 000001.SH 20200225 3013.0501 ... -0.5999 441622762.0 5.131286e+08
4 000001.SH 20200224 3031.2333 ... -0.2775 370430044.0 4.516014e+08
... ... ... ... ... ... ... ...
7131 000001.SH 19901225 120.2500 ... 4.9760 15.0 6.510000e+00
7132 000001.SH 19901224 114.5500 ... 4.9666 32.0 3.106300e+01
7133 000001.SH 19901221 109.1300 ... 4.5407 28.0 1.609600e+01
7134 000001.SH 19901220 104.3900 ... 4.4109 197.0 8.499200e+01
7135 000001.SH 19901219 99.9800 ... -0.0200 1260.0 4.943110e+02
[7136 rows x 11 columns]
由于列数太多默认显示省略号,所以要加上那一句才能显示如下:
注意如果是行与行之间的省略则要添加 pd.set_option('display.max_rows', None) 注意学习官方文档http://pandas.pydata.org/pandas-docs/stable/options.html 。
ts_code trade_date close open high low pre_close change pct_chg vol amount
0 000001.SH 20200228 2880.3038 2924.6407 2948.1261 2878.5443 2991.3288 -111.0250 -3.7116 401216914.0 4.326578e+08
1 000001.SH 20200227 2991.3288 2992.4919 3009.4575 2980.4774 2987.9287 3.4001 0.1138 350523658.0 3.959556e+08
2 000001.SH 20200226 2987.9287 2978.4195 3028.7788 2974.9423 3013.0501 -25.1214 -0.8338 469049552.0 4.953414e+08
3 000001.SH 20200225 3013.0501 2982.0696 3016.9458 2943.7168 3031.2333 -18.1832 -0.5999 441622762.0 5.131286e+08
4 000001.SH 20200224 3031.2333 3027.8925 3042.1821 3007.3557 3039.6692 -8.4359 -0.2775 370430044.0 4.516014e+08
... ... ... ... ... ... ... ... ... ... ... ...
7131 000001.SH 19901225 120.2500 120.0900 120.2500 114.5500 114.5500 5.7000 4.9760 15.0 6.510000e+00
7132 000001.SH 19901224 114.5500 113.5700 114.5500 109.1300 109.1300 5.4200 4.9666 32.0 3.106300e+01
7133 000001.SH 19901221 109.1300 109.0700 109.1300 103.7300 104.3900 4.7400 4.5407 28.0 1.609600e+01
7134 000001.SH 19901220 104.3900 104.3000 104.3900 99.9800 99.9800 4.4100 4.4109 197.0 8.499200e+01
7135 000001.SH 19901219 99.9800 96.0500 99.9800 95.7900 100.0000 -0.0200 -0.0200 1260.0 4.943110e+02
[7136 rows x 11 columns]
由上结果可以看出 收盘价、开盘价、最高价、最低价、昨日收盘价、涨幅、百分比涨幅、成交量和成交额
(2)处理日期
在刚才获取的数据中时间格式时20200228这种,而pandas
对于时间序列处理提供了良好的支持。我们可以先把日期对象转换为datetime
对象,以方便后续的使用。同时我们将时间设置为index。
df_daily.index = pd.to_datetime(df_daily['trade_date'])
df_daily.index[:5]
输出为
ts_code trade_date close open high low pre_close change pct_chg vol amount
trade_date
2020-02-28 000001.SH 20200228 2880.3038 2924.6407 2948.1261 2878.5443 2991.3288 -111.0250 -3.7116 401216914.0 4.326578e+08
2020-02-27 000001.SH 20200227 2991.3288 2992.4919 3009.4575 2980.4774 2987.9287 3.4001 0.1138 350523658.0 3.959556e+08
2020-02-26 000001.SH 20200226 2987.9287 2978.4195 3028.7788 2974.9423 3013.0501 -25.1214 -0.8338 469049552.0 4.953414e+08
2020-02-25 000001.SH 20200225 3013.0501 2982.0696 3016.9458 2943.7168 3031.2333 -18.1832 -0.5999 441622762.0 5.131286e+08
2020-02-24 000001.SH 20200224 3031.2333 3027.8925 3042.1821 3007.3557 3039.6692 -8.4359 -0.2775 370430044.0 4.516014e+08
... ... ... ... ... ... ... ... ... ... ... ...
1990-12-25 000001.SH 19901225 120.2500 120.0900 120.2500 114.5500 114.5500 5.7000 4.9760 15.0 6.510000e+00
1990-12-24 000001.SH 19901224 114.5500 113.5700 114.5500 109.1300 109.1300 5.4200 4.9666 32.0 3.106300e+01
1990-12-21 000001.SH 19901221 109.1300 109.0700 109.1300 103.7300 104.3900 4.7400 4.5407 28.0 1.609600e+01
1990-12-20 000001.SH 19901220 104.3900 104.3000 104.3900 99.9800 99.9800 4.4100 4.4109 197.0 8.499200e+01
1990-12-19 000001.SH 19901219 99.9800 96.0500 99.9800 95.7900 100.0000 -0.0200 -0.0200 1260.0 4.943110e+02
(3)绘制历史收盘价曲线
import seaborn as sns
import matplotlib.pyplot as plt
# 设置为seaborn的样式,更美观
sns.set()
# 绘制收盘价曲线
df.plot(y="close");
plt.show()
(4)绘制均线
股票行情受各种因素影响,波动较大,因此我们经常会用均线来作为一个稳定趋势的参考。就以60日均线为例看下如何使用Python绘制均线。
import matplotlib.pyplot as plt
df_daily = df_daily.sort_index(ascending=True)
plt.figure(figsize=(12, 6))
df_daily.close['20150101':].plot()
df_daily.close.rolling(60).mean()['20150101':].plot();
(5)查看估值水平
Tushare还提供了接口用于获取每天的各项指标,其中就包含了我们接下来要查看的PE水平。
df_basic = pro.index_dailybasic(ts_code='000001.SH')
df_basic.head()
总市值、流通市值、总股本、流通股本、换手率、基于流通股本的换手率、PE(市盈率)、动态PE、PB(市净率)这些字段。
ts_code trade_date total_mv float_mv total_share float_share free_share turnover_rate turnover_rate_f pe pe_ttm pb
0 000001.SH 20200228 3.883621e+13 2.856632e+13 4.811917e+12 3.543387e+12 1.394570e+12 1.12 2.84 13.14 12.44 1.32
1 000001.SH 20200227 4.028183e+13 2.961030e+13 4.811916e+12 3.543387e+12 1.394411e+12 0.97 2.48 13.62 12.90 1.37
2 000001.SH 20200226 4.023631e+13 2.954331e+13 4.811774e+12 3.542683e+12 1.393641e+12 1.31 3.33 13.60 12.89 1.37
3 000001.SH 20200225 4.052186e+13 2.970846e+13 4.811739e+12 3.539125e+12 1.391495e+12 1.23 3.14 13.70 12.98 1.38
4 000001.SH 20200224 4.078519e+13 2.989724e+13 4.811737e+12 3.539125e+12 1.390899e+12 1.03 2.63 13.79 13.07 1.39
... ... ... ... ... ... ... ... ... ... ... ... ...
2995 000001.SH 20071106 2.767806e+13 5.712421e+12 1.707958e+12 3.063398e+11 2.553918e+11 1.35 1.62 66.73 47.96 6.36
2996 000001.SH 20071105 2.820106e+13 5.746061e+12 1.707127e+12 3.061698e+11 2.553918e+11 1.58 1.89 67.99 48.86 6.48
2997 000001.SH 20071102 2.898440e+13 5.819473e+12 1.705926e+12 3.060803e+11 2.553918e+11 1.93 2.31 69.88 50.22 6.67
2998 000001.SH 20071101 2.963022e+13 5.944604e+12 1.705859e+12 3.058025e+11 2.553918e+11 2.11 2.52 71.43 51.34 6.82
2999 000001.SH 20071031 2.970958e+13 6.042734e+12 1.705817e+12 3.057889e+11 2.553918e+11 2.30 2.75 71.63 51.47 6.84
动态市盈率数据来看下当前A股上证的估值水平。
plt.figure(figsize=(12, 6))
sns.distplot(df_basic.pe_ttm, bins=100)
plt.axvline(x=df_basic.pe_ttm[0], color='red');
参考文章https://blog.csdn.net/qixizhuang/article/details/85254136