目录
- 1 了解matplotlib
- 2 可视化图案
- 3 matplotlib用法
- 4 了解Seaborn
1 了解matplotlib
Matplotlib
: 是 Python 的绘图库, 它可与NumPy
一起使用,提供了一种有效的 MatLab 开源替代方案。
2 可视化图案
- 基本可视化团及场景使用
- 柱状图
- 场景:展示多个分类的数据变化和同类别各变量之间的比较情况。
- 适用:对比分类数据
- 局限:分类过多则无法展示数据特点
- 条形图
- 场景:类似柱状图,只不过两根轴对调一下
- 适用:类别名称过长,将有大量空白位置标示每个类别的名称
- 局限:分类过多则无法展示数据特点
- 折线图
- 场景:展示数据随时间或有序类别的波动情况的趋势变化
- 适用:有序的类别,比如时间
- 局限:无序的类别无法展示数据特点
- 柱线图
- 场景:结合柱状图和折线图在同一个图表展现数据
- 适用:要同时展现两个项目数据的特点
- 局限:有柱状图和折线图两者的缺陷
- 散点图
- 场景:用于发现各变量之间的关系
- 适用:存在大量数据点,结果更精准,比如回归分析
- 局限:数据量小的时候会比较混乱
- 饼图
- 场景:用来展示各类别占比,比如男女比例
- 适用:了解数据的分布情况
- 局限:分类过多,则扇形越小,无法展现图表
- 雷达图
- 场景:将多个分类的数据量映射到坐标轴上,对比某项目不同属性的特点
- 适用:了解同类别的不同属性的综合情况,以及比较不同类别的相同属性差异
- 局限:分类过多或变量过多,会比较混乱
- 漏斗图
- 场景:用梯形面积表示某个环节业务量与上一个环节之间的差异
- 适用:有固定流程并且环节较多的分析,可以直观地显示转化率和流失率
- 局限:无序的类别或者没有流程关系的变量
- 瀑布图
- 场景:采用绝对值与相对值结合的方式,展示各成分分布构成情况,比如各项生活开支的占比情况
- 适用:展示数据的累计变化过程
- 局限:各类别数据差别太大则难以比较
- 柱状图
3 matplotlib用法
plt.figure()
函数:生成一个画布- 格式:
figure(num=None, figsize=None, dpi=None, facecolor=None, edgecolor=None, frameon=True)
num
:图像编号或名称,数字为编号,字符串为名称figsize
:指定figure
的宽和高,单位为英寸dpi
:指定绘图对象的分辨率facecolor
:背景颜色edgecolor
:边框颜色frameon
:是否显示边框
- 格式:
plt.plot()
函数:用于画图kind
:图形种类,可以使’line’,'bar’等grid
:显示轴网格线
- 添加轴坐标标签、表头
plt.xlabel
:添加x轴坐标标签plt.ylabel
:添加y轴坐标标签。可以设置字体大小(fontsize=)
plt.title
:添加表头,有很多参数可以设置fontsize
:字体大小backgroudcoloe
:背景颜色fontweight
:字体粗细,[‘light’,‘normal’,‘bold’]color
:字体颜色verticalalignment
:对齐方式, ‘center’ , ‘top’ , ‘bottom’ ,‘baseline’
plt.legend()
:给绘图加上图例plt.show()
:显示绘图- 【任务二:可视化展示泰坦尼克号数据集中男女中生存人数分布情况】
import numpy as np import pandas as pd import matplotlib.pyplot as plt text = pd.read_csv(r'result.csv') sex = text.groupby('Sex')['Survived'].sum() sex.plot.bar() plt.title('survived_count') plt.show()
- 【任务三:可视化展示泰坦尼克号数据集中男女中生存人与死亡人数的比例图】
# 提示:计算男女中死亡人数 1表示生存,0表示死亡 text.groupby(['Sex','Survived'])['Survived'].count().unstack().plot(kind='bar',stacked='True') plt.title('survived_count') plt.ylabel('count')
- 【任务四:可视化展示泰坦尼克号数据集中不同票价的人生存和死亡人数分布情况。】(横轴是不同票价,纵轴是存活人数)
# 计算不同票价中生存与死亡人数 1表示生存,0表示死亡 fare_sur = text.groupby(['Fare'])['Survived'].value_counts().sort_values(ascending=False) # 降序排列 fare_sur
# 排序后绘折线图 fig = plt.figure(figsize=(20, 18)) fare_sur.plot(grid=True) # 显示网格线 plt.legend() # 给图像加上图例 plt.show()
# 排序前绘折线图 fare_sur1 = text.groupby(['Fare'])['Survived'].value_counts() fare_sur1
fig = plt.figure(figsize=(20, 18)) fare_sur1.plot(grid=True) plt.legend() plt.show()
4 了解Seaborn
- 什么是seaborn:
- Seaborn是基于matplotlib的图形可视化python包,在matplotlib的基础上进行了更高级的API封装,从而使得作图更加容易
- 应该把Seaborn视为matplotlib的补充
sns.countplot
函数- 作用:
countplot
是seaborn
库中分类图的一种,作用是使用条形显示每个分箱器中的观察计数 x
:x轴名称y
:y轴名称hue
:分组绘图参数data
:原始数据df对象
- 作用:
- 【任务五:可视化展示泰坦尼克号数据集中不同仓位等级的人生存和死亡人员的分布情况】
# 1表示生存,0表示死亡 pclass_sur = text.groupby(['Pclass'])['Survived'].value_counts() pclass_sur
import seaborn as sns sns.countplot(x="Pclass", hue="Survived", data=text)
FaceGrid
函数:- 作用:当想要在数据集的子集中分别可视化变量的分布或多个变量之间的关系时,该类非常有用
- 维度关系:一个
FacetGrid
可以与多达三个维度可以得出:row,col,和hue。前两个与得到的轴阵列有明显的对应关系; 将色调变量视为沿深度轴的第三个维度 - 工作流程:
- 首先,
FacetGrid
使用数据集和用于构造网格的变量初始化对象 - 然后,可以通过调用
FacetGrid.map()
或将一个或多个绘图函数应用于每个子集FacetGrid.map_dataframe()
- 最后,可以使用其他方法调整绘图,以执行更改轴标签,使用不同刻度或添加图例等操作
- 首先,
kdeplot
:可用于对单变量和双变量进行核密度估计并可视化- 参数
kde
:是否绘制核密度图 - 【任务六:可视化展示泰坦尼克号数据集中不同年龄的人生存与死亡人数分布情况】
facet = sns.FacetGrid(text, hue="Survived",aspect=3) facet.map(sns.kdeplot,'Age',shade= True) facet.set(xlim=(0, text['Age'].max())) facet.add_legend()
- 【任务七:可视化展示泰坦尼克号数据集中不同仓位等级的人年龄分布情况】
text.Age[text.Pclass == 1].plot(kind='kde') text.Age[text.Pclass == 2].plot(kind='kde') text.Age[text.Pclass == 3].plot(kind='kde') plt.xlabel("age") plt.legend((1,2,3),loc="best")