【手把手教你】Python获取财经数据和可视化分析
金融学博士,专注于Python在金融领域的应用
微信公众号:Python金融量化(ID: tkfy920)作者前文传送门:
【Python金融量化】零基础如何开始学?
【手把手教你】玩转Python量化金融工具之NumPy
【手把手教你】玩转Python量化金融工具之Pandas
“巧妇难为无米之炊”,找不到数据,量化分析也就无从谈起。对于金融分析者来说,获取数据是量化分析的第一步。Python的一个强大功能之一就是数据获取(爬虫)。但是对于没时间学爬虫程序的小白来说,python丰富的开源包为我们节省了不少时间精力,只要会用前人的车轮(wheel),就可以造就自己的车(py)。
【tushare财经数据包安装】
Tushare是一个免费、开源的python财经数据接口包,可以获取新浪财经、腾讯财经、上交所和深交所提供的数据。如果安装了Anaconda(建议),可以使用Anaconda Prompt或者通过win+R输入cmd调出dos操作界面,输入pip install tushare进行安装。如果没有pip或pip3,可以先用conda install pip (或pip3)安装。
【获取宏观经济数据】
Tushare包可以获取宏观经济数据、股票交易数据、基本面数据(公司盈利能力、业绩报告等)、新闻事件、银行间同业拆放利率等,下面着重介绍使用tushare包获取宏观经济数据和可视化分析。
1、引入需要的包(模块module):import xxx
其中,pandas和matplotlib分别是数据处理和画图常用的包,%matplotlib inline表示在Jupyter Notebook上直接显示图形(%magic函数),如果使用spyder来运行程序则不需要,但要加上plt.show()。as意味着后面调用这些包将分别使用缩写ts、pd、plt。
2、获取所需数据
tushare获取数据的命令为get_xx,xx为相应指标名字,很直观。如获取存款利率命令为ts.get_deposit_rate(),贷款利率ts.get_loan_rate(),存款准备金率ts.get_rrr()。下面主要以CPI、GDP、M1、M2为例进行分析。
3、保存到本地文件夹
使用to_csv将数据保存到本地c:/zjy/data/cpi.csv。
4、读取数据和可视化
使用pandas读取刚刚保存的数据,注意pandas的缩写是pd,代码如下。
输出图形如下:
从上图中可以清晰地看出,93、94年出现超20%的高通货膨胀,当时还伴随着资产价格泡沫,“股票热”、“期货热”、“房地产热”。以史明鉴,可以知兴替。我们当时是怎么走过这一段风雨飘摇历程的,Very interesting!回顾历史,有很多值得我们反思和借鉴的地方。此处不详细展开分析,对当时经济金融形势和ZF如何治理宏观风险感兴趣的童鞋,可以翻阅这一时期的历史资料学习下。
再来看看货币供应量M1和M2的情况。首先了解下货币供应量的几个指标含义。根据货币金融学和央行实践,整个经济体系的货币供应大致可分为M0、M1、M2及M3。
M0:居民持有的货币(即市场上流通的货币)。
M1:居民持有的货币+银行客户的活期存款。M1又称为狭义货币供应量。
M2:M1+银行客户的储蓄及定期存款,以及由银行发行的可转让存款证(由非银行持有),又称为广义货币供应量。
M3:M1+M2+有限制牌照银行及接受存款公司的客户存款,及由上述机构发行的存款证(由非银行持有)。
从M1与M2的定义可见,两者的差异只在于M1不包括储蓄存款和定期存款,因此M1与M2增幅的差异,应由储蓄存款和定期存款变动所引起。M1反映居民和企业资金松紧变化,是经济周期波动的先行指标,流动性仅次于M0;M2流动性偏弱,但反映的是社会总需求的变化和未来通货膨胀的压力状况,通常所说的货币供应量,主要指M2。
其中:month :统计时间,m2 :货币和准货币(广义货币M2)(亿元),m2_yoy:货币和准货币(广义货币M2)同比增长(%) ,m1:货币(狭义货币M1)(亿元),m1_yoy:货币(狭义货币M1)同比增长(%),m0:流通中现金(M0)(亿元),m0_yoy:流通中现金(M0)同比增长(%),其他指标省略。
使用pandas读取数据并进行数据清洗。
输出结果如下:
对M1和M2数据进行可视化,并与重大经济金融事件联系起来,这里主要加入1997年的亚洲金融危机、2007年开始的美国次贷危机、2009年的四万亿刺激计划和2017年的金融去杠杆。代码如下(注意:数据存储在df变量上,画图包matplotlib.pyplot已经使用plt来代替):
得到如下结果:
从上图可以发现,我国ZF推行的“四万亿刺激计划”使M2和M1的增长率达到峰值,而2017年以来,随着金融去杠杆,M2增长率一直处于下滑中。很遗憾,由于数据缺失,不能与前面93、94年高通货膨胀时期联系起来看。
再来看下货币供应量和GDP年度变化情况。首先,获取M2、M1和GDP年度数据,并计算M2/GDP、M1/GDP数据。代码如下:
经过数据处理后进行可视化分析:
从上图不难看出,M2/GDP总体上是曲折上升的,从1990年的不到90%到2017年的接近220%。2017年以来,尽管经济增长一直处于下行空间,但在金融去杠杆的影响下,广义货币供应量持续下滑,导致M2/GDP出现下降趋势。
很多“专家”会经常使用M2/GDP指标来解读经济质量、通胀和危机,认为M2越高,货币发行量越大,所以通胀越严重;M2/GDP越高,GDP增长需要M2越高,货币供给不足,GDP增速会下降。特别是当2009年后中国M2绝对值超过美国,更为各界诟病,普遍认为中国存在巨大的货币隐患,它可能导致通胀失控、产生泡沫甚至经济危机。
那么到底中国M2/GDP高企的本质是什么?成因何在?是不是导致中国通胀的根本原因?它对经济和金融系统稳定究竟有多大危害?这些都是值得进一步探讨的问题。
从现有文献来看,M2/GDP并不存在所谓的最优比例,而且由于种种客观原因,不同经济体之间并不具备可比性。尽管M2/GDP指标通常反映了金融机构发展在市场中的重要程度或者对于个人储蓄的贡献,但作为传统的金融深化指标,两者只在成熟金融系统中呈正相关趋势,在一个借贷受限制的不成熟市场中,两者往往反而是负相关趋势。Elhiraika研究指出M2/GDP对于金融深化的衡量可能并不贴切,因为M2/GDP畸高可能是金融市场不发达的讯号,而高度成熟的金融市场这一比例反而较低,因为后者通常持有与之经济相适应的货币量。Shunsuke Bando(1998)的分析中还注意到,对M2/GDP的分析必须结合M1/GDP这一比例,在M1/GDP稳定增长下的M2/GDP的增长才反映了亚洲经济体市场下金融机构提供相对长期的资金,如从家庭储蓄向工业部门的转移,但也须注意到,资本的非完全有效给这一分析带来的偏差,如资产泡沫、银行不良贷款的积淀等。并且,只有在扣除通货膨胀因素之后才能得到Marshallian K的真实增长率。
最后再来看下消费、投资、净出口三大需求对GDP增速的贡献率情况。
这里发现一个有趣的现象,净出口贡献率大多时候是负的,但这并不意味着外贸在拖经济后退。实际上,净出口贡献率这一概念只有统计意义,没有经济意义。用这个指标来衡量,会低估外贸对经济增长的贡献度。根据经济学理论,一国国内生产总值(GDP)可分解为总投资、总消费和净出口(包括货物出口及服务出口)三个部分。净出口是指出口额与进口额之差,净出口对经济增长的贡献率是指净出口增量与GDP增量之比,即:净出口对GDP增长的贡献率=净出口增量/GDP增量×100%。
最后再分享一个获取实时电影票房的数据结束本次话题。
【结语】
本文主要介绍了如何使用Python的开源包tushare获取宏观经济数据,以及利用pandas和matplotlib包对数据进行清洗和可视化分析。对问题的深入分析,还得结合理论(逻辑)+历史(纵向比较)+统计(数据和计量分析)。Python是我们获取和分析数据的实用工具,为验证分析逻辑或理论的正确与否提供了一个重要维度,即用数据说话,透过数据看世界。
作者其它好文传送门:
【Python金融量化】零基础如何开始学?
【手把手教你】玩转Python量化金融工具之NumPy
【手把手教你】玩转Python金融量化利器之Pandas
Python的爱好者社区历史文章大合集:
Python的爱好者社区历史文章列表
关注后在公众号内回复“ 课程 ”即可获取:
小编的转行入职数据科学(数据分析挖掘/机器学习方向)【最新免费】
小编的Python的入门免费视频课程!
小编的Python的快速上手matplotlib可视化库!
崔老师爬虫实战案例免费学习视频。
陈老师数据分析报告扩展制作免费学习视频。
玩转大数据分析!Spark2.X + Python精华实战课程免费学习视频。