tushare是一个第三方财经数据接口包,需要安装包并完成注册。
pip install tushare
首先需要导入包已安装的tushare包。然后通过tokenID获取一个有访问权限的API接口,最终通过官方文档说明,使用index_daily() 来获取样例数据。这里取’399401.SZ’的交易日期和收盘价。
import tushare as ts
ts.set_token("1797f6915fbc1e612c33c6ed4cf85a2b7b349d85db80bf0860337fff")
pro=ts.pro_api()
df1=pro.index_daily(ts_code="399401.SZ")[['trade_date', 'close']]
# 查看数据类型
print(df1.dtypes)
# 查看样例数据
print(df1.head())
pandas中改变某列的数据类型为日期时,可用pd.to_datetime。修改完成后,将数据集中的日期字段重新设为索引。注意不要漏掉inplace=True。
df1.sort_values('trade_date', inplace=True)
# 转换列数据类型为日期
df1['trade_date']=pd.to_datetime(df1['trade_date'])
# 将指定的日期类型 列设为索引,并替代。
df1.set_index('trade_date', inplace=True)
# 获取多支交易数据数据,作对比分析
list1 = ['000002.SZ', '000012.SZ', '600010.SH']
for i, ts_code in enumerate(list1):
# 取指定日期的数据
df_tmp = pro.daily(ts_code=ts_code, start_date='20170101', end_date='20180101')[['trade_date', 'close']]
df_tmp.sort_values('trade_date', inplace=True)
df_tmp['trade_date']=pd.to_datetime(df_tmp['trade_date'])
df_tmp.rename(columns={'close': ts_code}, inplace=True)
df_tmp.set_index('trade_date', inplace=True)
if i==0 :
df = df_tmp
else:
# axis=1,沿第2条轴即X轴。列增加
df = pd.concat([df, df_tmp], axis=1)
print(ts_code)
# 查看数据
df.head()
import matplotlib.pyplot as plt
ax = df1.plot(color="blue", figsize=(12, 4), linewidth=2, fontsize=6)
ax.set_xlabel("trade date")
ax.set_ylabel("399401.SZ close")
ax.set_title("Trend analysis of recent years 2013-2019 ", fontsize=8)
# 添加水平线
ax.axvline("2018-08-15", color="red", linestyle="--", linewidth=2)
ax.axhline(6000, color="green", linestyle="--",linewidth=2 )
plt.show()
# 查看可用样式
import matplotlib.dates as mdate
print(plt.style.available)
plt.style.use("seaborn-talk")
ax1=df1.plot(figsize=(12, 4))
ax1.set_title("my mew style - seaborn-talk")
ax1.xaxis.set_major_formatter(mdate.DateFormatter('%Y-%m'))
plt.xticks(pd.date_range("2013-01-01", "2019-12-01", freq="10m"))
plt.show()
ax3 = df.plot(linewidth=3 , fontsize=16, figsize=(12, 4 ))
ax3.set_xlabel('trade_date')
ax3.set_ylabel("unit price")
# 指定X轴显示刻度 ,取代默认设置
ax3.xaxis.set_major_formatter(mdate.DateFormatter('%Y-%m'))
plt.xticks(pd.date_range("2017-01-01", "2018-01-01", freq="3m"))
ax3.legend(fontsize=12)
ax3.set_title("Comparison of analysis")
plt.show()