14天数据分析与机器学习实践之Day04(2)——数据可视化分析绘图总结

14天数据分析与机器学习实践之Day04(2)——数据可视化分析绘图总结

1. 单变量分析绘图

1.1 直方图(distplot)

直方图又称质量分布图,它是表示资料变化情况的一种主要工具。用直方图可以解析出资料的规则性,比较直观地看出产品质量特性的分布状态,对于资料分布状况一目了然,便于判断其总体质量分布情况。直方图表示通过沿数据范围形成分箱(好像是等距分箱?),然后绘制条以显示落入每个分箱的观测次数的数据分布。具体参数如下:

seaborn.distplot(a, bins=None, hist=True, kde=True, rug=False, fit=None, hist_kws=None, kde_kws=None, rug_kws=None, fit_kws=None, color=None, vertical=False, norm_hist=False, axlabel=None, label=None, ax=None)
  • bins:int或list,控制直方图的划分,设置矩形图(就是块儿的多少)数量,除特殊要求一般默认;切分为多少个小块
  • hist:是否显示方块;
  • kde:是否显示核密度估计曲线;
  • rug:控制是否生成观测数值的小细条(边际毛毯);
  • fit:控制拟合的参数分布图形,能够直观地评估它与观察数据的对应关系(黑色线条为确定的分布); {hist, kde, rug, fit}_kws :参数接收字典类型,可以自行定义更多高级的样式;
  • norm_hist:若为True, 则直方图高度显示密度而非计数(含有kde图像中默认为True);
  • vertical:放置的方向,如果为真,则观测值位于y-轴上(默认False,x轴上);
  • axlabel : string, False, or None, 设置标签。
1.2 散点图(jointplot)

生成一个二维数据

mean, cov = [0, 1], [(1, .5), (.5, 1)]
data = np.random.multivariate_normal(mean, cov, 200)
df = pd.DataFrame(data, columns=["x", "y"])
df

观测两个变量之间的分布关系最好用散点图

sns.jointplot(x="x", y="y", data=df);

在这里插入图片描述
绘制hex图
数据量较大时使用

x, y = np.random.multivariate_normal(mean, cov, 1000).T
with sns.axes_style("white"):
    sns.jointplot(x=x, y=y, kind="hex", color="k")

在这里插入图片描述
pairplot画出表格中的每个特征的两两关系

iris = sns.load_dataset("iris")
sns.pairplot(iris)

在这里插入图片描述在这里插入图片描述

2. 回归分析绘图

2.1 lmplot(回归图)

许多数据集都有着众多连续变量。数据分析的目的经常就是衡量变量之间的关系,lmplot() 是一个非常有用的方法,它会在绘制二维散点图时,自动完成回归拟合。具体参数如下:

	seaborn.lmplot(x, y, data, hue=None, col=None, row=None, palette=None, 
	col_wrap=None, height=5, aspect=1, markers='o', sharex=True, sharey=True, 
	hue_order=None, col_order=None, row_order=None, legend=True, legend_out=True, 
	x_estimator=None, x_bins=None, x_ci='ci', scatter=True, fit_reg=True, ci=95, 
	n_boot=1000, units=None, order=1, logistic=False, lowess=False, robust=False, 
	logx=False, x_partial=None, y_partial=None, truncate=False, x_jitter=None, 
	y_jitter=None, scatter_kws=None, line_kws=None, size=None)
  • col,row:和前面一样,根据所指定属性在列,行上分类;
  • col_wrap:指定每行的列数,最多等于col参数所对应的不同类别的数量;
  • aspect:控制图的长宽比;
  • x_jitter,y_jitter:给x,y轴随机增加噪音点,设置这两个参数不影响最后的回归直线;
  • order:多项式回归,控制进行回归的幂次,设定指数,可以用多项式拟合;
  • logistic:逻辑回归;
  • robust:如果是True,使用statsmodels来估计一个稳健的回归(鲁棒线性模型)。这将减少异常值。请注意 logistic回归和robust回归相较于简单线性回归需要更大的计算量,其置信区间的产生也依赖于bootstrap采样,你可以关掉置信区间估计来提高速度(ci=None);
  • lowess:如果是True,使用statsmodels来估计一个非参数的模型(局部加权线性回归)。这种方法具有最少的假设,尽管它是计算密集型的,但目前无法为这类模型绘制置信区间;
  • logx:转化为log(x)
  • truncate:默认情况下,绘制散点图后绘制回归线以填充x轴限制。如果为True,则它将被数据限制所限制;

绘制一个第三个变量的条件,并绘制不同颜色的回归图:

2.2 regplot()

regplot()和lmplot()都可以绘制线性回归曲线。这两个函数非常相似,甚至共有一些核心功能。具体参数如下:

	seaborn.regplot(x, y, data=None, x_estimator=None, x_bins=None, x_ci='ci', 
	scatter=True, fit_reg=True, ci=95, n_boot=1000, units=None, order=1, logistic=False, 
	lowess=False, robust=False, logx=False, x_partial=None, y_partial=None, 
	truncate=False, dropna=True, x_jitter=None, y_jitter=None, label=None, color=None, 
	marker='o', scatter_kws=None, line_kws=None, ax=None)

regplot()和lmplot()都可以绘制回归关系,推荐regplot()

%matplotlib inline
import numpy as np
import pandas as pd
import matplotlib as mpl
import matplotlib.pyplot as plt

import seaborn as sns
sns.set(color_codes=True)

np.random.seed(sum(map(ord, "regression")))

tips = sns.load_dataset("tips")

tips.head()

查看total_bill和tip的回归关系

sns.regplot(x="total_bill", y="tip", data=tips)

在这里插入图片描述
x_jitter在原始点上添加浮动,便于回归运算

sns.regplot(x="size", y="tip", data=tips, x_jitter=.05)

在这里插入图片描述

3. 多变量分析绘图

3.1 分布散点图(stripplot)

stripplot(分布散点图)的意思就是按照不同类别对样本数据进行分布散点图绘制。stripplot(分布散点图)一般并不单独绘制,它常常与boxplot和violinplot联合起来绘制,作为这两种图的补充。

seaborn.stripplot(x=None, y=None, hue=None, data=None, order=None, 
hue_order=None, jitter=True, dodge=False, orient=None, color=None, 
palette=None, size=5, edgecolor='gray', linewidth=0, ax=None, **kwargs)
  • x,y,data:输入数据可以多种格式传递,在大多数情况下,使用Numpy或Python对象是可能的,但是更可取的是pandas对象,因为相关的名称将用于对轴进行注释。此外,还可以对分组变量使用分类类型来控制情节元素的顺序。
  • order:用order参数进行筛选分类类别,例如:order=[‘sun’,‘sat’];
  • jitter:抖动项,表示抖动程度,可以使float,或者True;
  • dodge:重叠区域是否分开,当使用hue时,将其设置为True,将沿着分类轴将不同色调级别的条带分开。
  • orient:“v” | “h”,vertical(垂直) 和 horizontal(水平)的意思;
%matplotlib inline
import numpy as np
import pandas as pd
import matplotlib as mpl
import matplotlib.pyplot as plt
import seaborn as sns
sns.set(style="whitegrid", color_codes=True)

np.random.seed(sum(map(ord, "categorical")))
titanic = sns.load_dataset("titanic")
tips = sns.load_dataset("tips")
iris = sns.load_dataset("iris")
sns.stripplot(x="day", y="total_bill", data=tips);

重叠是很常见的现象,但是重叠影响我观察数据的量了
在这里插入图片描述
使用jitter抖动

sns.stripplot(x="day", y="total_bill", data=tips, jitter=True)

在这里插入图片描述
hue="sex"添加sex两种
data=tips均匀抖动形成树状图

sns.swarmplot(x="day", y="total_bill", hue="sex",data=tips)

在这里插入图片描述

3.2 盒图(boxplot)
  • IQR即统计学概念四分位距,第一/四分位与第三/四分位之间的距离
  • N =1.5IQR 如果一个值>Q3+N或 < Q1-N,则为离群点

boxplot(箱线图,又称为盒须图、盒式图)便于在变量之间或跨类别变量级别比较的方式,显示定量数据的分布情况。框显示数据集的四分位数,线显示分布的其余部分,它能显示出一组数据的最大值、最小值、中位数及上下四分位数,使用四分位数范围函数的方法可以确定“离群值”的点。具体用法如下:

seaborn.boxplot(x=None, y=None, hue=None, data=None, order=None, 
hue_order=None, orient=None, color=None, palette=None, saturation=0.75, 
width=0.8, dodge=True, fliersize=5, linewidth=None, whis=1.5, notch=False, ax=None, **kwargs)
  • saturation:饱和度,可设置为1;
  • width:float,控制箱型图的宽度大小;
  • fliersize:float,用于指示离群值观察的标记大小;
  • whis:可理解为异常值的上限IQR比例;
sns.boxplot(x="day", y="total_bill", hue="time", data=tips);

盒图

3.3 小提琴图(violinplot)

violinplot与boxplot扮演类似的角色,箱线图展示了分位数的位置,它显示了定量数据在一个(或多个)分类变量的多个层次上的分布,这些分布可以进行比较。不像箱形图中所有绘图组件都对应于实际数据点,小提琴绘图以基础分布的核密度估计为特征,通过小提琴图可以知道哪些位置的密度较高。在图中,白点是中位数,黑色盒型的范围是下四分位点到上四分位点,细黑线表示须。外部形状即为核密度估计。
这是一种可以同时显示多个数据分布的有效和有吸引力的方法,但请记住,估计过程受样本大小的影响,相对较小的样本的小提琴手看起来可能会显得非常平滑。具体用法如下:

seaborn.violinplot(x=None, y=None, hue=None, data=None, order=None, 
hue_order=None, bw='scott', cut=2, scale='area', scale_hue=True, gridsize=100, 
width=0.8, inner='box', split=False, dodge=True, orient=None, linewidth=None, 
color=None, palette=None, saturation=0.75, ax=None, **kwargs)
  • bw:‘scott’, ‘silverman’, float,控制拟合程度。在计算内核带宽时,可以引用规则的名称(‘scott’,‘silverman’)或者使用比例(float)。实际内核大小将通过将比例乘以每个bin内数据的标准差来确定;
  • cut:空值外壳的延伸超过极值点的密度,float;
  • scale:“area”, “count”, “width”,用来缩放每把小提琴的宽度的方法;
  • scale_hue:当使用hue分类后,设置为True时,此参数确定是否在主分组变量进行缩放;
  • gridsize:设置小提琴图的平滑度,越高越平滑;
  • inner:“box”, “quartile”, “point”, “stick”, None,小提琴内部数据点的表示。分别表示:箱子,四分位,点,数据线和不表示;
  • split:是否拆分,当设置为True时,绘制经hue分类的每个级别画出一半的小提琴;
sns.violinplot(x="total_bill", y="day", hue="time", data=tips);

在这里插入图片描述
使用split进行拆分

sns.violinplot(x="day", y="total_bill", hue="sex", data=tips, split=True);

在这里插入图片描述

4. 分类属性绘图

4.1 条形图(barplot)

条形图表示数值变量与每个矩形高度的中心趋势的估计值,用矩形条表示点估计和置信区间,并使用误差线提供关于该估计值附近的不确定性的一些指示。具体用法如下:

seaborn.barplot(x=None, y=None, hue=None, data=None, order=None, hue_order=None, 
estimator=<function mean>, ci=95, n_boot=1000, units=None, orient=None, 
color=None, palette=None, saturation=0.75, errcolor='.26', errwidth=None,
capsize=None, dodge=True, ax=None, **kwargs)
  • estimator:用于估计每个分类箱内的统计函数,默认为mean。当然你也可以设置estimator=np.median/np.std/np.var……
  • order:选择和空值顺序,例如:order=[‘Sat’,‘Sun’];
  • ci:允许的误差的范围(控制误差棒的百分比,在0-100之间),若填写"sd",则用标准误差(默认为95),也可设置ci=None;
  • capsize:设置误差棒帽条(上下两根横线)的宽度,float;
  • saturation:饱和度;
  • errcolor:表示置信区间的线条的颜色;
  • errwidth:float,设置误差条线(和帽)的厚度。

显示值的集中趋势可以用条形图

sns.barplot(x="sex", y="survived", hue="class", data=titanic);

在这里插入图片描述

4.2 点图(piontplot)

用散点图符号表示点估计和置信区间,点图代表散点图位置的数值变量的中心趋势估计,并使用误差线提供关于该估计的不确定性的一些指示。点图可能比条形图(barplot)更有用于聚焦一个或多个分类变量的不同级别之间的比较。他们尤其善于表现交互作用:一个分类变量的层次之间的关系如何在第二个分类变量的层次之间变化。连接来自相同色调等级的每个点的线允许交互作用通过斜率的差异进行判断,这比对几组点或条的高度比较容易。具体用法如下:

seaborn.pointplot(x=None, y=None, hue=None, data=None, order=None, 
hue_order=None, estimator=<function mean>, ci=95, n_boot=1000, 
units=None, markers='o', linestyles='-', dodge=False, join=True, 
scale=1, orient=None, color=None, palette=None, errwidth=None, 
capsize=None, ax=None, **kwargs)
  • join:默认两个均值点会相连接,若不想显示,可以通过join=False参数实现;
  • scale:float,均值点(默认)和连线的大小和粗细。

点图可以更好的描述变化差异

sns.pointplot(x="class", y="survived", hue="sex", data=titanic,
              palette={"male": "g", "female": "m"},
              markers=["^", "o"], linestyles=["-", "--"]);

在这里插入图片描述

4.3 宽形数据
sns.boxplot(data=iris,orient="h");

在这里插入图片描述

4.4 多层面板分类图
sns.factorplot(x="day", y="total_bill", hue="smoker", data=tips)

在这里插入图片描述

sns.factorplot(x="day", y="total_bill", hue="smoker", data=tips, kind="bar")

在这里插入图片描述
指定不同的kind,按照要求画图

sns.factorplot(x="day", y="total_bill", hue="smoker",
               col="time", data=tips, kind="swarm")

在这里插入图片描述

Parameters:
  • x,y,hue 数据集变量 变量名
  • date 数据集 数据集名
  • row,col 更多分类变量进行平铺显示 变量名
  • col_wrap 每行的最高平铺数 整数
  • estimator 在每个分类中进行矢量到标量的映射 矢量
  • ci 置信区间 浮点数或None
  • n_boot 计算置信区间时使用的引导迭代次数 整数
  • units 采样单元的标识符,用于执行多级引导和重复测量设计 数据变量或向量数据
  • order, hue_order 对应排序列表 字符串列表
  • row_order, col_order 对应排序列表 字符串列表
  • kind : 可选:point 默认, bar 柱形图, count 频次, box 箱体, violin 提琴, strip 散点,swarm 分散点 size 每个面的高度(英寸) 标量 aspect 纵横比 标量
  • orient 方向 “v”/“h” color 颜色 matplotlib颜色 palette 调色板 seaborn颜色色板或字典 legend hue的信息面板 True/False legend_out 是否扩展图形,并将信息框绘制在中心右边 True/False share{x,y} 共享轴线 True/False

5. Facetgrid使用方法及绘制多变量

在探索中多维数据时,一种有用的方法是在数据集的不同子集上绘制同一类型图的多个子图。该类将数据集映射到与数据集中变量级别相对应的行和列网格中排列的多个轴上。它生成的图形通常被称为“格子”或“格子”绘图,它可以使查看者快速观察到有关复杂数据的大量信息。

FacetGrid当您想要在数据集的子集中分别可视化变量的分布或多个变量之间的关系时,该类非常有用。一个FacetGrid可以与多达三个维度可以得出:row,col,和hue。前两个与得到的轴阵列有明显的对应关系; 将hue变量视为沿深度轴的第三个维度,其中不同的级别用不同的颜色绘制。通过使用FacetGrid数据框初始化对象以及将形成网格的行,列或hue维度的变量名称来使用该类。这些变量(hue)应该是分类的或离散的,然后变量的每个级别的数据将用于沿该轴的小平面。此外,每个的relplot(),catplot()以及lmplot()在内部使用这些对象。

参数参照上文各类函数参数

seaborn.FacetGrid(data, row=None, col=None, hue=None, col_wrap=None, 
sharex=True, sharey=True, height=3, aspect=1, palette=None, 
row_order=None, col_order=None, hue_order=None, hue_kws=None, 
dropna=True, legend_out=True, despine=True, margin_titles=False, 
xlim=None, ylim=None, subplot_kws=None, gridspec_kws=None, size=None)
g = sns.FacetGrid(tips, col="time")
g.map(plt.hist, "tip");

在这里插入图片描述

PairGrid()

用于绘制数据集中成对关系的子图网格。该类将数据集中的每个变量映射到多轴网格中的列和行。不同的轴级绘图函数可用于绘制上、下三角形的二元图解,并可在对角线上显示每个变量的边缘分布。

其实PairGrid和pairplot从原理来说是一样的,但是前面我们可以发现pairplot绘制的图像上、下三角形是关于主对角线对称的,而PairGrid则可修改上、下三角形和主对角线的图像形状。具体事例如下:

iris = sns.load_dataset("iris")
g = sns.PairGrid(iris,hue="species")
g = g.map_upper(sns.scatterplot)#在上对角线子图上用二元函数绘制的图
g = g.map_lower(sns.kdeplot,color='r')#在下对角线子图上用二元函数绘制的图
g = g.map_diag(sns.kdeplot)#对角线单变量子图

6. 热度图绘制

seaborn.heatmap(data, vmin=None, vmax=None, cmap=None, center=None, 
robust=False, annot=None, fmt=’.2g’, annotkws=None, linewidths=0,
 linecolor=‘white’, cbar=True, cbarkws=None, cbar_ax=None, 
 square=False, ax=None, xticklabels=True, yticklabels=True, 
 mask=None, **kwargs)

参数设置

  • vmin,vmax:用于指定图例中最小值与最大值的显示值
  • cmap:指定一个colormap对象,用于热力图的填充色
  • center:指定颜色中心值,通过该参数可以调整热力图的颜色深浅
  • annot:指定一个bool类型的值或与data参数形状一样的数组,如果为True,就在热力图的每个单元上显示数值
  • fmt:指定单元格中数据的显示格式
  • annot_kws:有关单元格中数值标签的其他属性描述,如颜色、大小等
  • linewidths :指定每个单元格的边框宽度
  • linecolor:指定每个单元格的边框颜色
  • cbar:bool类型参数,是否用颜色条作为图例,默认为True
  • square:bool类型参数,是否使热力图的每个单元格为正方形,默认为False
  • cbar_kws:有关颜色条的其他属性描述
  • xticklabels,yticklabels:指定热力图x轴和y轴的刻度标签,如果为True,则分别以数据框的变量名和行名称作为刻度标签
  • mask:用于突出显示某些数据
  • ax:用于指定子图的位置
%matplotlib inline
import matplotlib.pyplot as plt
import numpy as np; 
np.random.seed(0)
import seaborn as sns;
sns.set()
uniform_data = np.random.rand(3, 3)
print (uniform_data)
heatmap = sns.heatmap(uniform_data)

在这里插入图片描述

ax = sns.heatmap(uniform_data, vmin=0.2, vmax=0.5)

在这里插入图片描述

normal_data = np.random.randn(3, 3)
print (normal_data)
ax = sns.heatmap(normal_data, center=0)

在这里插入图片描述

flights = sns.load_dataset("flights")
flights.head()
flights = flights.pivot("month", "year", "passengers")
print (flights)
ax = sns.heatmap(flights)
year       1949  1950  1951  1952  1953  1954  1955  1956  1957  1958  1959  \
month                                                                         
January     112   115   145   171   196   204   242   284   315   340   360   
February    118   126   150   180   196   188   233   277   301   318   342   
March       132   141   178   193   236   235   267   317   356   362   406   
April       129   135   163   181   235   227   269   313   348   348   396   
May         121   125   172   183   229   234   270   318   355   363   420   
June        135   149   178   218   243   264   315   374   422   435   472   
July        148   170   199   230   264   302   364   413   465   491   548   
August      148   170   199   242   272   293   347   405   467   505   559   
September   136   158   184   209   237   259   312   355   404   404   463   
October     119   133   162   191   211   229   274   306   347   359   407   
November    104   114   146   172   180   203   237   271   305   310   362   
December    118   140   166   194   201   229   278   306   336   337   405   

year       1960  
month            
January     417  
February    391  
March       419  
April       461  
May         472  
June        535  
July        622  
August      606  
September   508  
October     461  
November    390  
December    432  

在这里插入图片描述

ax = sns.heatmap(flights, annot=True,fmt="d")

在这里插入图片描述

ax = sns.heatmap(flights, linewidths=.5)

在这里插入图片描述

ax = sns.heatmap(flights, cmap="YlGnBu")

在这里插入图片描述

ax = sns.heatmap(flights, cbar=False)

在这里插入图片描述

  • 2
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值