数据可视化
复习:回顾学习完第一章,我们对泰坦尼克号数据有了基本的了解,也学到了一些基本的统计方法,第二章中我们学习了数据的清理和重构,使得数据更加的易于理解;今天我们要学习的是第二章第三节:数据可视化,主要给大家介绍一下Python数据可视化库Matplotlib,在本章学习中,你也许会觉得数据很有趣。在打比赛的过程中,数据可视化可以让我们更好的看到每一个关键步骤的结果如何,可以用来优化方案,是一个很有用的技巧。
1 常见可视化图形
数据的可视化能使数据的内在规律、信息更加直观地被展现,不同的可视化图形拥有不同的功能,首先,让我们来看一下常见的可视化图形有哪些。
散点图:用来判断两个变量之间是否有关联趋势,若有关联趋势,该趋势是线性的还是非线性的。
折线图:用来观察变量随着时间的变化趋势。
柱状图:用于观察离散数据的大小。
直方图:用于观察连续数据的分布情况。
饼图:用于观察不同类别的占比情况。
箱线图:反映原始数据的分布特征,它显示了一组数据的最大值、最小值、中位数及上下四分位数。
热力图:反映变量之间的相似程度。
2 Matplotlib库介绍
在python中,实现数据可视化的最常用库是matplotlib库,接下来介绍matplotlib中常见的用法。
2.1 库的载入
import matplotlib.pyplot as plt
2.2 图形大小的设置
plt.figure(num=None, figsize=None, dpi=None, facecolor=None, edgecolor=None, frameon=True, FigureClass=<class 'matplotlib.figure.Figure'>, clear=False, **kwargs)
num:图像编号或名称,数字为编号 ,字符串为名称。
figsize:图像大小,用来设定图像的长和宽。
dpi:图像的分辨率。
facecolor:背景颜色。
edgcolor:边框颜色。
frameon:是否显示边框。
2.3 x、y轴的设置
plt.xlabel(xlabel, fontdict=None, labelpad=None, *, loc=None, **kwargs)
plt.ylabel(ylabel, fontdict=None, labelpad=None, *, loc=None, **kwargs)
xlabel/ylabel:x或y轴的名称。
2.4 标题的设置
plt.title(label, fontdict=None, loc=None, pad=None, *, y=None, **kwargs)
#其中fontdict的默认值为:
{'fontsize': rcParams['axes.titlesize'], #字体大小
'fontweight': rcParams['axes.titleweight'], #字体粗细
'color': rcParams['axes.titlecolor'], #字体颜色
'verticalalignment': 'baseline', #水平对齐方式
'horizontalalignment': loc} #垂直对齐方式
label:标题名称。
loc:标题位置,包括center、left、right三个选项。
2.5 画图
plt.plot(x,y) #折线图
plt.scatter(x,y) #散点图
plt.bar(x,y) #条形图
plt.hist(x,y) #直方图
plt.show() #展示图片
plt.plot中常见的设置有:color(颜色)、linestyle(线型)、marker(点型)。
2.6 图片保存
plt.savefig('保存路径')
2.7 其他常见操作
#x、y轴刻度设置
plt.xticks(ticks=None, labels=None, **kwargs)
#标签设置
plt.legend(*args, **kwargs)
#网格设置
plt.grid(b=None, which='major', axis='both', **kwargs)
matplotlib的相关函数和操作可见:matplotlib.pyplot — Matplotlib 3.4.2 documentation
3 泰坦尼克号数据可视化
3.1 载入库和数据
#载入库
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
from pylab import mpl
mpl.rcParams['font.sans-serif'] = ['SimHei'] # 指定默认字体:解决plot不能显示中文问题
from IPython.core.interactiveshell import InteractiveShell #显示一个cell中的所有结果
InteractiveShell.ast_node_interactivity = "all"
#载入数据
result=pd.read_csv("result.csv")
result.head()
3.2 数据可视化
#任务一:可视化展示泰坦尼克号数据集中男女中生存人数分布情况。
#计算男女生存人数
sex_survived=result.Survived.groupby([result.Sex]).sum()
#结果:
#Sex
#female 233
#male 109
#Name: Survived, dtype: int64
#绘制柱状图
sex_survived.plot.bar()
plt.title('男女生存人数分布情况')
plt.ylabel('count')
#任务二:可视化展示泰坦尼克号数据集中男女中生存人与死亡人数的比例图
result.groupby(['Sex','Survived'])['Survived'].count().unstack().plot.bar(stacked='True')
plt.ylabel('count')
plt.title('男女生存和死亡人数分布情况')
从图中可以明显看出,女性的存活比率较高。
#任务三:可视化展示泰坦尼克号数据集中不同票价的人生存和死亡人数分布情况。
fare_survived=result.groupby(['Fare','Survived'])['Survived'].count().sort_values()
fare_survived.plot.line()
plt.ylabel('count')
plt.title('不同票价的生存和死亡人数')
#任务四:可视化展示泰坦尼克号数据集中不同仓位等级的人生存和死亡人员的分布情况。
pclass_survived=result.groupby(['Pclass','Survived'])['Survived'].count()
pclass_survived.unstack().plot.bar()
plt.xticks(rotation =0)
#任务五:可视化展示泰坦尼克号数据集中不同年龄的人生存与死亡人数分布情况
#将年龄分为五个部分:(0,5)、(5,15)、(15,30)、(30,50)、(50,80),分别统计五个部分的生存与死亡人数
result['Age_Band']=pd.cut(result.Age,[0,5,15,30,50,80],labels=[1,2,3,4,5],right=False)
result.groupby(['Age_Band','Survived'])['Survived'].count().unstack().plot.bar()
plt.xticks(rotation =0)
#任务六:可视化展示泰坦尼克号数据集中不同仓位等级的人年龄分布情况。
result.Age[result.Pclass == 1].plot(kind='kde')
result.Age[result.Pclass == 2].plot(kind='kde')
result.Age[result.Pclass == 3].plot(kind='kde')
plt.xlabel("age")
plt.legend((1,2,3),loc="best")
plt.ylabel('count')
plt.title('不同仓位等级的人年龄分布情况')