有趣!【9个月银行股数据】|可视化分析

浏览: 1480

这是菜鸟学Python的第107篇原创文章

阅读本文大概需要3分钟

        小白学数据可视化matplotlib篇我已经写了6篇了,讲了这么多,我一直觉得缺少一个综合实例来融合一下. 年初在一位高手的指点下,买了银行和白酒的股票, 时机非常不错, 收益还可以. 其实我个人比较偏爱银行股,稳中有进. 细水长流是我一贯投资的宗旨.所以我想写一篇关于银行股的数据可视化分析,分享给大家~~

前面学了很多图形:折线图,散点图,直方图,密度图还有箱体图,每一种都各有千秋.  当我们要数据可视化的时候,选择什么样的图去描述才能更好的反映数据内在的联系,这个问题值得我们反复的推敲.

1.数据的准备

数据的准备,银行股有几十个,这里我们挑选比较大的,典型的银行股来分析一下.数据选择的时候,我们主要是从股价,涨幅,成交量和成交金额,这几个维度去探索一下.

1).我挑选了我比较喜欢的5个银行:

工商银行(宇宙第一银行)

中国银行

招商银行

建设银行

兴业银行

数据获取非常简单,可以去很多财经网站爬取一下,这些网站爬取的步骤前面讲了很多,这里就不再重复描述.我们这篇文章的重点放在可视化数据分析上面

2).数据的格式

主要是分析2017从1月初到现在9月15号的成交数据,然后保存为csv文件,格式如下:比如 中国银行601998的数据

头部是:日期,收盘价,成交量,涨幅,成交金额(单位是十亿)

image.png

其他的几个银行股数据类似,让我赶快进入重头戏数据可视化部分,探索一下里面有什么有趣的发现

2.近9个月的累计涨幅和成交量

  • 我们要比较近9个月的5大银行的涨幅和成交量,涨幅肯定是百分之几十,最多翻倍.  而成交量这个维度虽然好,但是每个股票的股价不相同,所以选用成交金额更公平, 我们选用直方图来体现.


  • 为了让涨幅和成交金额更好的显示在一个y轴上,我们把成交金额改为十亿元,然后全部取累计值,这样好看出涨幅和成交额之间是不是有什么关系

image.png

  • 我们把前面准备好的5大银行股的csv文件,先放在一个字典里面

  • 然后用get_stock_total()函数去分别读取csv文件,主要是用pandas去读取csv文件保存为dataFrame,对于涨幅列我们求累计值,成交金额我们也求累计值

matplotlib有一个非常大的弊端就是对中文支持不够方便,我这里是mac电脑,我用的是FontProperties方法来重新载入ttc字体(win下可能要用其他方法)

image.png

  • 为了更直观的比较数据之间的关系,特别是涨幅情况,用直方图是最好的

  • 我5个银行处理之后的数据写入info字典里面,把info构建成一个pandas的df对象df_bank

  • 因为我们希望x轴是每个银行股的信息,所以还需要把df_bank反转一下

                  Range  Volume(billion)

工商银行  32.28           116.68

中国银行  21.75           112.02

招商银行  44.38           170.65

建设银行  27.87            88.14

兴业银行  11.77           205.29

  • 由于matplotlib中文字符的问题,我们需要对x轴,y轴,标题进行处理一下

看一下可视化图:

image.png

从图中可以看出:招商银行涨幅第一,兴业银行涨幅最小,

招行的累计成交金额是最大的1700多亿,排第二,涨幅是最大的有40+%

兴业银行虽然累计成交金额第一,但是涨幅却最小,说明卖盘也很多.但是我们似乎忽略了什么,不错就是二者之间的关系,那我们把图稍微改一下

image.png

原来图里面隐藏的比较深的是建设银行,成交额最少,但是涨幅也不小。不知道细心的小伙伴发现没有,就是建行的筹码都在大户,大机构手里,筹码非常集中,所以资金量不需要很大,就可以拉起来,而兴业银行则反之.

3.五大银行月累计涨幅

前面我们是从横截面去总体分析整个数据,现在我们要切入到更细的角度分析,从月累计幅度去分析一下,这里月幅度波动会很频繁,所以用折线图会比较好的体现数据

image.png

1).因为我们的数据是每个交易日的数据,所以先要对数据进行处理一下

2).为了更方便的提取数据,我们最好把index变成标准的pandas的datatime日期

3).提取月累计的涨幅

4).构造成一个dataframe对象months_df返回

  中国银行  兴业银行  工商银行  建设银行   招商银行

0   4.02  5.65  4.24  5.56   7.73

1   2.79 -1.85  1.97  2.99   2.34

2   0.58 -3.26  3.18  0.37  -1.32

3  -3.00 -4.67  0.88  0.75  -0.15

4   3.87  6.92  7.43  6.41  16.33

5  -0.77  5.68  0.13  1.00  10.34

6  10.47  5.28  9.48  9.34   7.15

7   7.85 -0.46  7.13  3.83   4.86

8  -4.06 -1.52 -2.16 -2.38  -2.90

image.png

1).x轴是月份,但是默认的月份是从0-8,所以我们把index变成1-9月份

2).累计的跌幅最大是-5%,而涨幅最大近有20%,所以我们y轴的取[-5,20)

3).中文字符的话x轴,y轴,图例和标题处理一下

看一下可视化图:

image.png

不知道大家有么有发现什么奥秘,1,5,7三个月份都是上涨期,而且5月份5大银行行动一致集体上涨.2,4,6,9月份处于下跌通道,4月和9月份5大银行又集体下跌到最低价. 很明显兴业银行非常活跃,难怪成交金额这么大.

4.五大银行股涨幅波动情况

刚才我们通过折线图已经发现了一些端倪,有一些股票特别活跃,有一些股票相对稳定一些,现在我们分析一下波动情况,看一下他们的密度图

image.png

  • 我们分别取5大银行的周线累计涨幅,月线累计涨幅,通存过关键字type来控制周线还是月线

  • 把处理好的周线数据/月线数据 存入一个字典,并且保存为pd1

  • 生成pd1的kde密度图,并且调整好x轴的刻度数

我们看一下可视化图:

image.png

周线的波动上:兴业银行稳定性最差,波动的范围很大[-15,20],其他4大银行波动的核心区域很接近[-3.5,4],而且招行很明显更优秀,上涨的幅度优于其他4个银行

image.png

月线就看的更明显了,兴业银行还是不稳定,建行相对其他银行来说稳定性更高.

中行出现了2次M头,这说明什么,说明中行在今年有两次比较规则的波动,一波集中的涨,一波集中的跌,那为什么其他的银行没有出现双头呢,有兴趣的同学可以去研究一下"一带一路".

5.五大银行股数据分布情况

经过前面的各种分析,我们基本已经挖掘出一些银行股的一些信息,最后我们用一个非常有名的箱体图来综合分析一下.箱体图其实在在统计学里面经常用到,能显示数据里面的最大值,上四分位数,中位数,下四分位和最小值.可以帮助我们分析数据里面的内在分布情况和异常数据.

image.png

数据处理和前面几步没有差别,区别在于我们用pandas的boxplot()来呈现箱体图,比较关键的是刻度一定要精确一点,方便我们后面分析箱体图上的数据

看一下可视化图:

image.png

1).从箱体的长度来看,我们发现中行和建行的箱体长度最短,招行和兴业的长度最长,说明中行和建行比较稳定,招行和兴业波动比较大一些

2).从箱体的中位数(绿线)看,建行的数据比较均匀

3).5个股票里面,招行是5个银行里面最高的,但是箱体长度同时又比较长,这样的股票要注意,赶上了时机会让你大赚一笔,建行的下四分位明显高于中行.而兴业银行很明显最差的

建议:激进投资者买招行,稳健买建行

结论:


好了,数据可视化matplotlib综合实战案例,就讲道这里了.上面的数据可视化分析只是沧海一粟,皮毛而已.因为我们的维度只是1-2个,对于几十个维度的复杂的数据集探索和分析,我更喜欢用R语言去探索挖掘.而这过程也是相当好玩.



推荐 0
本文由 菜鸟学Python 创作,采用 知识共享署名-相同方式共享 3.0 中国大陆许可协议 进行许可。
转载、引用前需联系作者,并署名作者且注明文章出处。
本站文章版权归原作者及原出处所有 。内容为作者个人观点, 并不代表本站赞同其观点和对其真实性负责。本站是一个个人学习交流的平台,并不用于任何商业目的,如果有任何问题,请及时联系我们,我们将根据著作权人的要求,立即更正或者删除有关内容。本站拥有对此声明的最终解释权。

0 个评论

要回复文章请先登录注册