基于python的股票数据的读取及可视化(K线图)

发布时间:2023-09-20 18:30

文章目录

  • 1.读取数据
  • 2.绘制股票走势图
  • 3.绘制K线图

1.读取数据

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安装为例,给大家展示一下:
基于python的股票数据的读取及可视化(K线图)_第1张图片
安装完成以后接下来就是我们的获取股票数据。

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()

获取数据结果展示:
基于python的股票数据的读取及可视化(K线图)_第2张图片
我们后面案例通过万科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()

结果展示:
‘’基于python的股票数据的读取及可视化(K线图)_第3张图片
注:open 开盘价,close 收盘价,high 最高价,low为最低价,volume为成交量,code为股票代码。
若想获取数据写入Excel工作簿中,我们可以按如下代码:

df.to_excel('D:\\Python\\股价数据.xlsx',index = False)

注意:index参数False表示忽略原来的行索引,运行后生成一个名为“股价数据.xlsx”的Excel文件。
如上面我是设置了将文件保存到D:\Python\下面,完全可以不用设置,只要自己知道默认文件夹在哪,一定要自己方便查找。

2.绘制股票走势图

下面绘制一下股票走势图:

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 = '股票走势图')

结果展示:
基于python的股票数据的读取及可视化(K线图)_第4张图片
上述使用的是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()

运行结果展示:
基于python的股票数据的读取及可视化(K线图)_第5张图片

3.绘制K线图

1.安装绘制K线图的库

K线分为两种,如果当天收盘价高于开盘价,即当天价格上涨,称为阳线。通常绘为红线。
反之就是当天价格上涨,称为阴线,通常绘为绿线。
python在绘画K线的时候也用到一个库,mpl_finance库,参照以前推送安装教程,该库中的candlestick_ochl()函数绘制K线图,下面就用python编写的案例大家参考一下。
安装成功截图:(jupyter notebook安装方法)
基于python的股票数据的读取及可视化(K线图)_第6张图片
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()

运行结果:
基于python的股票数据的读取及可视化(K线图)_第7张图片
3.日期格式调整以及表格转换

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轴的刻度线格式为常规日期格式

运行结果展示:
基于python的股票数据的读取及可视化(K线图)_第8张图片
添加均线图:以添加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()

运行结果:
基于python的股票数据的读取及可视化(K线图)_第9张图片
我们在上面基础上再添加一个日成交量柱形图。代码如下:

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()

运行结果:
基于python的股票数据的读取及可视化(K线图)_第10张图片
本文主要就是介绍一下通过NumPy,pandas,Matplotlib三个数据分析利器画图,利用股票数据进行一些操作,大家也可以利用这个数据,做一些数据分析,练练手。

ItVuer - 免责声明 - 关于我们 - 联系我们

本网站信息来源于互联网,如有侵权请联系:561261067@qq.com

桂ICP备16001015号