python数据可视化工具除了matplotlib底层绘图包,还有在matplotlib基础上分装的seaborn绘图包,此外,数据分析报pandas也在matplotlib基础上分装内置了绘图功能。以下将基于pandas自带的数据可视化功能,对gafata(谷歌、亚马逊、Facebook、苹果、腾讯和阿里巴巴)这六家公司的股票做数据可视化分析。
一、提出问题
了解gafata六家公司股票2017年的动态变化情况,并通过可视化图像直观进行展示。
二、获取数据
2.1、导入所需要的数据包
导入数据分析包:import pandas as pd。
导入互联网数据获取包:from pandas_datareader import data(pandasdatareader在终端promote中安装时,中间的连接符为破折号“-”:conda install pandas-datareader,在导入包时,中间的连接符为下划线“_”)。该数据包可以获取国内外的股票数据。导入所需要的数据包
2.2、获取数据
第一步,我们使用字典的映射关系,为股票定义名称,方便后续数据分析操作。字典键为我们分析时方便使用的名称,字典的值为股票名称,股票名称需要与获取数据的目标网站的名称一致,否则后续无法获取相应股票数据。股票键值对
第二步,自定义函数change(),计算股票涨跌幅。
股票涨跌幅=(现在股价-买入股价)/买入股价。
第三步,从网站上获取数据。使用函数get_data_yahoo()获取雅虎上目标股票数据。定义start_date为获取股票的起始时间,end_date为获取股票的结束时间。并通过head()函数查看获取的数据集情况。获取数据
2.3、数据清洗
通过head可以看出获取的数据中,open为开盘价,High为最高价,low为最低价,close为收盘价,volumn为成交量。获取的数据集为pandas二维数组的数据框类型。
交易日期这一列为数据集的索引,并按时间顺序从小到大排序完成,符合我们分析要求。索引为时间
我们使用info()函数查看数据集整体情况,发现获取的数据集非常完成,没有缺失值。没有缺失值
使用dtypes函数查看数据集中各列数据的数据类型,均为float类型,符合我们分析需求。各列数据类型
使用describe()函数查看数据集的描述统计信息。阿里巴巴2017年股票的描述统计信息。
使用我们自定义的函数change()函数,获得阿里巴巴近一年的股票涨幅为94.62%。阿里巴巴股票2017年涨幅
###重复使用2.2获取数据及2.3清洗数据的步骤,获取剩余五家企业的股票数据信息
**获取谷歌股票数据获取谷歌股票数据
计算谷歌2017年股票涨跌幅:计算涨跌幅
**获取亚马逊股票数据获取亚马逊股票数据
计算亚马逊2017年股票涨跌幅:计算涨跌幅
**获取Facebook股票数据获取Facebook股票数据
计算Facebook2017年股票涨跌幅:计算涨跌幅
**获取苹果股票数据获取苹果股票数据
计算苹果2017年股票涨跌幅:计算涨跌幅
**获取苹果股票数据获取腾讯股票数据
计算腾讯2017年股票涨跌幅:计算涨跌幅
2.4、数据可视化
为了直观了解这六家股票数据在2017年的变化走势情况,我们需要将这六家公司2017年的股票数据进行可视化。
2.4.1、观察六家股票数据对比的单位
只有各方的各项数据单位一致才具有对比的意义,因为腾讯为港股,股价单位为港元,因此需要对腾讯的股价根据汇率进行换算。保证六家股票股价单位的一致性。单位进行转换保持一致
2.4.2、导入matplotlib.pyplot函数导入可视化包matplotlib.pyplot
2.4.3、绘制一家公司股价可视化图形
使用pandas自带绘图功能绘制可视化图形,直接在数据框后加上plot()函数即可,数据顺序依次为x轴数据,y轴数据,图形其他参数如颜色、线性等。
并通过matplotlib为图形添加x周、y轴和图像标题title文本。参数grid()为图像网格,参数legend()为图像的图列位置(loc="best"表示根据图形自动寻找最合适的位置放置图例)。阿里巴巴2017年股票走势折线图
从图形中可以直观看出阿里巴巴的股票价格整体是上升的,是一家值得投资的公司。现在我们需要看看成交量与股价之间的关系。
同样使用pandas自带的绘图功能,直接在数据框后使用.plot()函数即可绘制我们所需要的图形,此处我们根据所需要了解的问题,我们试用散点图展示两者之间的关系。传入的参数顺序依次为x轴数据,y轴数据,kind表示图形的类型,这里kind="scatter",表示的是显示数据为散点图。成交量与成交价之间关系的散点图
通过图形我们可以看出,大部分的点都集中在图形左侧,且随着成交量的上升股价是上涨的趋势,整体来看成交量与股价成正相关关系。
我们使用corr()函数取出各列数据之间的相关性系数验证我们根据图形得出的结论,我们可以看出成交量与股价的相关性系数为0.416。
各列数据之间的相关性系数
kind的取值类型:kind取值类型
2.4.4、六家公司股价走势对比图
将6家企业的股价走势图合并在一张图上进行直观的对比。
我们首先将阿里巴巴这家企业的股票走势图绘制到画纸1(系统默认创建)上,并命名为ax1,其他五家股票的股价也绘制到画纸1(ax1)上,通过参数ax=ax1指定图形绘制的位置将五家公司股价的走势图绘制到画纸1(ax1)上。六家企业股票股价走势对比图
在上图中,我们发现图像中的图例是列名,而我们需要的是每条颜色的先代表的是哪家企业,因此我们上述代码中加入参数label,给label赋值我们需要的值即可。更改图例后的股票走势图
根据图形我们看出谷歌和亚马逊的股价比较高在图形的上方,其他四家企业的股价比较低,在图形的下方,两方股价差距太大,导致我们无法直观看出各家股票走势对比情况,因此我们根据股价高地将两方拆成两组数据进行对比。
我们将谷歌和亚马逊绘制到画纸2上,我们可以看出两家企业的股价在2017年的走势都是上涨的:谷歌亚马逊的股价走势
我们将其余四家企业的股票绘制到画纸3上,我们可以看出四家企业的股价在2017年的走势也都是上涨的:其他四家奇特的股价走势图
2.4.5、查看六家股票的描述统计指标
1、比较六家公司股票的平均股价
首先我们将六家公司的股票平均值放在一个列表中,其次我们用这个列表创建一个pandas的一位数组Series,并为一维数组指定索引值为六家公司的名称,最后我们使用pandas自带的绘图功能.plot()绘制图形,传输参数kind="bar"绘制柱状图。通过柱状图可以直观看出谷歌和亚马逊的股价远高于其他四家企业的股价,印证了上前面对比走势图两方差异较大的现象。六家企业股票2017年平均股价对比图
2、箱线图
平均值存在的缺陷是对异常值的低敏感性,因此我们使用四分位数查看六家企业股票的股价变化情况。
首先我们试用函数concat()方法将六家企业股票的收盘价按列合并在一个数据集中,其次我们为六列数据进行重命名,并通过head()函数查看最新的数据集是否符合我们数据处理的要求。抽取数据合并为一个数据集
最后我们使用pandas自带的绘图功能.plot()绘制图形,传入参数kind="box"表示绘制的是箱线图。六家公司股票的箱线图
四、小结
使用pandas自带绘图功能可以快速绘制图形,非常方便我们进行数据可视化处理工作。但实际操作过程中还是会需要结合matplotlib包或seaborn包进行绘图,多个工具相互配合,才能最终绘制得到我们想要的数据可视化图形。
数据可视化只是数据分析工作的一部分,我们工作仍要按提出问题,获取数据,数据清洗,特征工程获取数据之间的关系,数据可视化,数据分析报告(以前的表现,现在的问题以及未来的解决方案或建议)。