发布时间:2023-09-20 18:30
TuShare是一个免费、开源的python财经数据接口包。主要实现对股票等金融数据从数据采集、清洗加工 到 数据存储的过程,能够为金融分析人员提供快速、整洁、和多样的便于分析的数据,为他们在数据来源方面极大地减轻了工作 量,使他们更加专注于策略和模型的研究与实现上。考虑到Python pandas包在金融量化分析中体现出的优势,TuShare返回的绝大部分的数据格式都是pandas DataFrame类型,非常便于用pandas/NumPy/Matplotlib进行数据分析和可视化。当然,如果您习惯了用Excel或者关系型数 据库做分析,您也可以通过TuShare的数据存储功能,将数据全部保存到本地后进行分析。应一些用户的请求,从0.2.5版本开始,TuShare同时 兼容Python 2.x和Python 3.x,对部分代码进行了重构,并优化了一些算法,确保数据获取的高效和稳定。
python的强大之处就在于有一帮第三方库的兄弟,股票方面也是如此,今天给大家讲一下这个库,他就是tushare库(官方地址:http://tushare.org/),大家可以直接用pip安装,以Windows安装为例吧。
安装过程可以参考我以前的博客:点击查看python用命令安装第三方库教程
我下面以jupyter notebook安装为例,给大家展示一下:
安装完成以后接下来就是我们的获取股票数据。
import tushare as ts
df = ts.get_k_data('000002',start = "2010-01-01",end = '2020-01-01')
df.set_index('date',inplace = True)
df.head()
获取数据结果展示:
我们后面案例通过万科A来进行的,所以我们先获取一下万科A的数据,通过get_k_data()函数获取上市公司万科从2009-01-01到2019-01-01这十年的股票日线级别的数据,参数“000002”为万科的股票代码。
import tushare as ts
df = ts.get_k_data('000002',start ='2009-01-01',end='2019-01-01')
df.head()
结果展示:
‘’
注:open 开盘价,close 收盘价,high 最高价,low为最低价,volume为成交量,code为股票代码。
若想获取数据写入Excel工作簿中,我们可以按如下代码:
df.to_excel('D:\\Python\\股价数据.xlsx',index = False)
注意:index参数False表示忽略原来的行索引,运行后生成一个名为“股价数据.xlsx”的Excel文件。
如上面我是设置了将文件保存到D:\Python\下面,完全可以不用设置,只要自己知道默认文件夹在哪,一定要自己方便查找。
下面绘制一下股票走势图:
import tushare as ts
import matplotlib.pyplot as plt
df = ts.get_k_data('000002',start ='2009-01-01',end='2019-01-01')
plt.rcParams['font.sans-serif']=['simHei']#用来正常显示中文
df['close'].plot(title = '股票走势图')
结果展示:
上述使用的是plot()函数,我们也可以直接使用Matplotlib函数库的一些功能。
import tushare as ts
from datetime import datetime
import matplotlib.pyplot as plt
df = ts.get_k_data('000002',start ='2009-01-01',end='2019-01-01')
#要注意细节,调整日期格式,让横坐标的显示效果更佳清洗,美观
df['date'] = df['date'].apply(lambda x:datetime.strptime(x,'%Y-%m-%d'))
plt.plot(df['date'],df['close'])
plt.show()
1.安装绘制K线图的库
K线分为两种,如果当天收盘价高于开盘价,即当天价格上涨,称为阳线。通常绘为红线。
反之就是当天价格上涨,称为阴线,通常绘为绿线。
python在绘画K线的时候也用到一个库,mpl_finance库,参照以前推送安装教程,该库中的candlestick_ochl()函数绘制K线图,下面就用python编写的案例大家参考一下。
安装成功截图:(jupyter notebook安装方法)
2.获取数据
import tushare as ts
import matplotlib.pyplot as plt
import mpl_finance as mpf
import seaborn as sns #引入图表美化库
sns.set()#激活
df = ts.get_k_data('000002','2019-06-01','2019-09-30')
df.head()
from matplotlib.pylab import date2num
import datetime #导入日期格式涉及的两个库
def date_to_num(dates):
num_time = []
for date in dates:
date_time = datetime.datetime.strptime(date,'%Y-%m-%d')
num_date = date2num(date_time)
num_time.append(num_date)
return num_time
df_arr = df.values #将DataFrame中数据转换成二维数组
df_arr[:,0] = date_to_num(df_arr[:,0])# 将二维数组中日期转换成数字格式
4.绘制K直线
fig,ax = plt.subplots(figsize = (15,6))
mpf.candlestick_ochl(ax,df_arr,width = 0.6,colorup = 'r',colordown = 'g',alpha = 1.0)
plt.grid(True)#绘制网格线
ax.xaxis_date()#设置x轴的刻度线格式为常规日期格式
运行结果展示:
添加均线图:以添加5日均线和10日均线为例、
df['MA5'] = df['close'].rolling(5).mean()
df['MA10'] = df['close'].rolling(10).mean()
将其制成图表查看:
plt.rcParams['font.sans-serif'] = ['SimHei'] #设置正常中文显示
fig,ax = plt.subplots(figsize = (15,6))
mpf.candlestick_ochl(ax,df_arr,width = 0.6,colorup = "r",colordown = 'g',alpha = 1.0) #绘制K直线
plt.plot(df_arr[:,0],df["MA5"])
plt.plot(df_arr[:,0],df['MA10'])
plt.grid(True) #绘制网格线
plt.title('万科A')#标题
plt.xlabel('日期')#X轴
plt.ylabel('价格')#y轴
ax.xaxis_date()
运行结果:
我们在上面基础上再添加一个日成交量柱形图。代码如下:
fig,axes = plt.subplots(2,1,sharex = True,figsize = (15,8))
ax1,ax2 = axes.flatten()
#绘制第一张子图:K线图和均线图
mpf.candlestick_ochl(ax1,df_arr,width = 0.6,colorup = 'r',colordown = 'g',alpha = 1.0)
ax1.plot(df_arr[:,0],df['MA5']) #绘制5日均线
ax1.plot(df_arr[:,0],df['MA10'])#绘制10日均线
ax1.set_title('万科A')
ax1.set_ylabel('价格')
ax1.grid(True)
ax1.xaxis_date()
#绘制第二张子图:每日成交柱形图
ax2.bar(df_arr[:,0],df_arr[:,5])
ax2.set_xlabel('日期')
ax2.set_ylabel('成交量')
ax2.grid(True)
ax2.xaxis_date()
运行结果:
本文主要就是介绍一下通过NumPy,pandas,Matplotlib三个数据分析利器画图,利用股票数据进行一些操作,大家也可以利用这个数据,做一些数据分析,练练手。