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

这是菜鸟学Python的第107篇原创文章
阅读本文大概需要3分钟

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

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

1.数据的准备

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

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

工商银行(宇宙第一银行)
中国银行
招商银行
建设银行
兴业银行
数据获取非常简单,可以去很多财经网站爬取一下,这些网站爬取的步骤前面讲了很多,这里就不再重复描述.我们这篇文章的重点放在可视化数据分析上面

2).数据的格式

主要是分析2017从1月初到现在9月15号的成交数据,然后保存为csv文件,格式如下:比如 中国银行601998的数据
头部是:日期,收盘价,成交量,涨幅,成交金额(单位是十亿)


有趣!【9个月银行股数据】|可视化分析_第1张图片

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

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

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

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


    有趣!【9个月银行股数据】|可视化分析_第2张图片
  • 我们把前面准备好的5大银行股的csv文件,先放在一个字典里面

  • 然后用get_stock_total()函数去分别读取csv文件,主要是用pandas去读取csv文件保存为dataFrame,对于涨幅列我们求累计值,成交金额我们也求累计值
    matplotlib有一个非常大的弊端就是对中文支持不够方便,我这里是mac电脑,我用的是FontProperties方法来重新载入ttc字体(win下可能要用其他方法)

    有趣!【9个月银行股数据】|可视化分析_第3张图片

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

  • 我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轴,标题进行处理一下

看一下可视化图:

有趣!【9个月银行股数据】|可视化分析_第4张图片

从图中可以看出:招商银行涨幅第一,兴业银行涨幅最小,
- 招行的累计成交金额是最大的1700多亿,排第二,涨幅是最大的有40+%
- 兴业银行虽然累计成交金额第一,但是涨幅却最小,说明卖盘也很多.但是我们似乎忽略了什么,不错就是二者之间的关系,那我们把图稍微改一下
有趣!【9个月银行股数据】|可视化分析_第5张图片

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

3.五大银行月累计涨幅

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

有趣!【9个月银行股数据】|可视化分析_第6张图片

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
有趣!【9个月银行股数据】|可视化分析_第7张图片

1).x轴是月份,但是默认的月份是从0-8,所以我们把index变成1-9月份
2).累计的跌幅最大是-5%,而涨幅最大近有20%,所以我们y轴的取[-5,20)
3).中文字符的话x轴,y轴,图例和标题处理一下

看一下可视化图:

有趣!【9个月银行股数据】|可视化分析_第8张图片

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

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

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


有趣!【9个月银行股数据】|可视化分析_第9张图片
  • 我们分别取5大银行的周线累计涨幅,月线累计涨幅,通存过关键字type来控制周线还是月线
  • 把处理好的周线数据/月线数据 存入一个字典,并且保存为pd1
  • 生成pd1的kde密度图,并且调整好x轴的刻度数

我们看一下可视化图:

有趣!【9个月银行股数据】|可视化分析_第10张图片

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

月线波动

有趣!【9个月银行股数据】|可视化分析_第11张图片

月线就看的更明显了,兴业银行还是不稳定,建行相对其他银行来说稳定性更高.
中行出现了2次M头,这说明什么,说明中行在今年有两次比较规则的波动,一波集中的涨,一波集中的跌,那为什么其他的银行没有出现双头呢,有兴趣的同学可以去研究一下"一带一路".

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

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

有趣!【9个月银行股数据】|可视化分析_第12张图片

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

看一下可视化图:


有趣!【9个月银行股数据】|可视化分析_第13张图片

1).从箱体的长度来看,我们发现中行和建行的箱体长度最短,招行和兴业的长度最长,说明中行和建行比较稳定,招行和兴业波动比较大一些
2).从箱体的中位数(绿线)看,建行的数据比较均匀
3).5个股票里面,招行是5个银行里面最高的,但是箱体长度同时又比较长,这样的股票要注意,赶上了时机会让你大赚一笔,建行的下四分位明显高于中行.而兴业银行很明显最差的

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

结论:

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

关注微信公众号“菜鸟学Python”,留言获得更多干货源码!

你可能感兴趣的:(有趣!【9个月银行股数据】|可视化分析)