用 Python 进行金融数据可视化

系统 1551 0

Python量化的关键是金融数据可视化,无论是传统的K线图,还是现在的策略分析,都需要大量的可视化图表。具体到编程代码,就是使用Python绘图模块库绘图,比如传统的Python绘图模块库有Matplotlib,Seaborn等。

对于股票和财经的金融数据源,可以使用Tushare库来获取和分析股票财经数据,我们获得财经数据源后,就可以使用Pandas对金融数据的各种指标进行定制化的分析了,最后让数据可视化,可以使用Matplotlib来绘制出美观大方的金融图形,为企业的决策提供便利。金融绘图的主要步骤如下:

用 Python 进行金融数据可视化_第1张图片

获得股票数据源

Tushare是一个免费、开源的Python财经数据接口包。主要实现对股票等金融数据从数据采集、清洗加工到数据存储的过程,能够为金融分析人员提供快速、整洁、和多样的便于分析的数据,为他们在数据获取方面极大地减轻工作量,使他们更加专注于策略和模型的研究与实现上。考虑到Python 的Pandas包在金融量化分析中体现出的优势,Tushare返回的绝大部分的数据格式都是Pandas的 DataFrame类型,非常便于用Pandas,NumPy和Matplotlib进行数据分析和可视化。

Tushare的官网地址

              
                http:
                
                  //tushare.org
                
                

在Tushare中使用的股票代码,可以参考东方财富网提供的股票代码查询页面,如图7-63所示

              
                http:
                
                  //quote.eastmoney.com/stocklist.html
                
                

用 Python 进行金融数据可视化_第2张图片

图763股票代码查询页面

使用pip安装Tushare。安装Tushare之前,需要使用pip命令先安装好lxml,requests和bs4模块。

              
                
                  pip
                
                 install tushare
                


640?wx_fmt=jpeg

显示股票历史数据

TuShare里的 get_hist_data()函数用于获取到目前为止3年的历史数据。获取个股历史交易数据(包括均线数据),可以通过参数设置获取日k线、周k线、月k线,以及5分钟、15分钟、30分钟和60分钟k线数据。本接口只能获取近3年的日线数据,适合搭配均线数据进行选股和分析。

参数说明:

  • code:股票代码,即6位数字代码,或者指数代码(sh=上证指数 sz=深圳成指 hs300=沪深300指数 sz50=上证50 zxb=中小板 cyb=创业板)

  • start:开始日期,格式YYYY-MM-DD

  • end:结束日期,格式YYYY-MM-DD

  • ktype:数据类型,D=日k线 W=周 M=月 5=5分钟 15=15分钟 30=30分钟 60=60分钟,默认为D

  • retry_count:当网络异常后重试次数,默认为3

  • pause:重试时停顿秒数,默认为0

返回值说明:

  • date:日期

  • open:开盘价

  • high:最高价

  • close:收盘价

  • low:最低价

  • volume:成交量

  • price_change:价格变动

  • p_change:涨跌幅

  • ma5:5日均价

  • ma10:10日均价

  • ma20:20日均价

  • v_ma5:5日均量

  • v_ma10:10日均量

  • v_ma20:20日均量

  • turnover:换手率[注:指数无此项]

查看编号为600848的股票代码在2018年3月的历史数据,使用Tushare的get_hist_data()返回的是Pandas的DataFrame对象,这个DataFrame对象的columns比较多,在控制台显示不全,所以使用Pandas的to_csv()函数保存到hist_data.csv文件中。

              
                
                  import
                
                 tushare 
                
                  as
                
                 ts
                
data  = ts.get_hist_data( '600848' ,start= '2018-03-01' ,end= '2018-03-31' )
data .to_csv( 'hist_data.csv'  )

运行脚本,已记事本打开hist_data.csv文件。

用 Python 进行金融数据可视化_第3张图片

我们查看hist_data.csv文件会发现,编号为600848的股票代码在2018年3月的历史交易数据是按照交易日期降序排列的。但展示在折线图上的的日期一般要按升序排列。所以还要对DataFrame对象的index属性进行排序。使用Pandas的DataFrame对象的sort_index()函数,使交易日期按照从小到到大的升序排列。这样画出的折线图就符合人们查看历史交易数据的正常习惯了,完整代码如下。

              
                
                  import
                
                 tushare 
                
                  as
                
                 ts
                

data  = ts.get_hist_data( '600848' ,start= '2018-03-01' ,end= '2018-03-31' )
# 对交易时间进行降序排列
data  =  data .sort_index()
data .to_csv( 'hist_data.csv'  )

获得编号为600848的股票代码在2018年3月的历史交易数据后,就可以使用Maplotlib画出股票历史数据的折线图,折线图的横坐标是股票历史数据的交易日期,纵坐标是股票交易数据的开盘价(open)。

              
                
                  import
                
                 tushare 
                
                  as
                
                 ts
                
import  matplotlib.pyplot  as  plt
from datetime  import  datetime

data  = ts.get_hist_data( '600848' ,start= '2018-03-01' ,end= '2018-03-31' )
# 对时间进行降序排列
data  =  data .sort_index()

xs = [datetime.strptime(d,  '%Y-%m-%d' ).toordinal()  for  d  in   data .index ]
plt.plot_date( xs ,  data [ 'open' ] ,  'b-' )
plt.gcf().autofmt_xdate()  # 自动旋转日期标记
plt.show()

运行脚本输出以下图形。

用 Python 进行金融数据可视化_第4张图片

以上代码的核心代码如下,使用Tushare的get_hist_data()函数返回股票交易代码的股票历史数据,也就是Pandas的DataFrame对象data,data.index索引值是日期型字符串,使用Matplotlib的plot_date()画图函数,需要转换成函数可以识别的Gregoian Calendar类型数据。

              
                xs = [datetime.strptime(d, 
                
                  '%Y-%m-%d'
                
                ).toordinal() 
                
                  for
                
                 d 
                
                  in
                
                 data.
                
                  index
                
                 ]
                

以上表达式语句等同于以下语句。

              
                xs = []
                
for   date   in  data.index:
     print date  )
    transDate = datetime.strptime(  date  ,  '%Y-%m-%d' )
    xs.append( transDate.toordinal())

绘制折线图的X 轴的日期也可以使用 matplotlib.dates.strpdate2num() 函数进行转换,完整代码如下。

              
                
                  import
                
                 tushare 
                
                  as
                
                 ts
                
import  matplotlib.pyplot  as  plt
import  matplotlib.dates  as  mdates

data  = ts.get_hist_data( '600848' ,start= '2018-03-01' ,end= '2018-03-31' )
# 对时间进行降序排列
data  =  data .sort_index()

xs = [mdates.strpdate2num( '%Y-%m-%d' )(d )  for  d  in   data .index ]

plt.plot_date( xs ,  data [ 'open' ] ,  'b-' )
plt.gcf().autofmt_xdate()  # 自动旋转日期标记
plt.show()

运行脚本输出以下图形。

用 Python 进行金融数据可视化_第5张图片

获取60分钟k线数据。

              
                
                  import
                
                 tushare 
                
                  as
                
                 ts
                
import  matplotlib.pyplot  as  plt
import  matplotlib.dates  as  mdates

data  = ts.get_hist_data( '600848' , ktype= '60' )
xs = [mdates.strpdate2num( '%Y-%m-%d %H:%M:%S' )(d )  for  d  in   data .index ]

#设置时间标签显示格式
ax = plt.gca()
ax.xaxis.set_major_formatter(mdates.DateFormatter( '%Y-%m-%d %H:%M:%S' ))

plt.plot_date(xs,  data [ 'open' ], '-'  , label= 'open' )
plt.legend(loc= 0   )

plt.gcf().autofmt_xdate()
plt.show()

运行脚本输出以下图形。

用 Python 进行金融数据可视化_第6张图片

图768编号为600848的股票代码的60分钟内的k线图

留言回复你用Python做过哪些有趣的应用 ,我们会在留言中随机抽取一位读者免费送出北京大学出版社出版的《Python 3 数据分析与机器学习实战》图书一本。


热 门 推 荐
用Python创建微信机器人

用Python机器人监听微信群聊

用Python获取摄像头并实时控制人脸

开源项目 | 用Python美化LeetCode仓库

推荐Python中文社区旗下的几个服务类公众号
征稿启事 | Python中文社区有奖征文

用 Python 进行金融数据可视化_第7张图片 文章节选自北京大学出版社出版的《Python 3 数据分析与机器学习实战》,本书现在5折优惠,点击阅读原文 购书~


更多文章、技术交流、商务合作、联系博主

微信扫码或搜索:z360901061

微信扫一扫加我为好友

QQ号联系: 360901061

您的支持是博主写作最大的动力,如果您喜欢我的文章,感觉我的文章对您有帮助,请用微信扫描下面二维码支持博主2元、5元、10元、20元等您想捐的金额吧,狠狠点击下面给点支持吧,站长非常感激您!手机微信长按不能支付解决办法:请将微信支付二维码保存到相册,切换到微信,然后点击微信右上角扫一扫功能,选择支付二维码完成支付。

【本文对您有帮助就好】

您的支持是博主写作最大的动力,如果您喜欢我的文章,感觉我的文章对您有帮助,请用微信扫描上面二维码支持博主2元、5元、10元、自定义金额等您想捐的金额吧,站长会非常 感谢您的哦!!!

发表我的评论
最新评论 总共0条评论