相关概念
一、用法
比较两个定量变量用散点图
比较定量变量和定性变量用小提琴图,箱线图
比较两个定性变量用簇状柱形图(集群条形图)
二、定量变量和定性变量
定量变量也就是通常所说的连续量,如长度、重量、产量、人口、速度和温度等,它们是由测量或计数、统计所得到的量,这些变量具有数值特征,称为定量变量。
定性[变量]又名分类变量 ( categorical variable ): 观测的个体只能归属于几种互不相容类别中的一种时,一般是用非数字来表达其类别,这样的观测数据称为定性变量。定性变量 这些量并非真有数量上的变化,而只有性质上的差异。这些量还可以分为两种,一种是有序变量,它没有数量关系,只有次序关系,如某种产品分为一等品、二等品、三等品等,矿石的质量分为贫矿和富矿;另一种是名义变量,这种变量既无等级关系,也无数量关系,如天气(阴、晴)、性别(男、女)、职业(工人、农民、教师、干部)和产品的型号等。
三、皮尔逊相关系数
皮尔逊相关系数( Pearson correlation coefficient),又称皮尔逊积矩相关系数(Pearson product-moment correlation coefficient,简称 PPMCC或PCCs),是用于度量两个变量X和Y之间的相关线性相关),其值介于-1与1之间,并且只能表示线性关系。
两个变量之间的皮尔逊相关系数定义为两个变量之间的协方差和标准差的商,
上式定义了总体相关系数,常用希腊小写字母p作为代表符号。估算样本的协方差和标准差,可得到皮尔逊相关系数,常用英文小写字母r表示
等价于
散点图
plt.scatter
matplotlib.pyplot.scatter(x, y, s=None, c=None, marker=None,
cmap=None, norm=None, vmin=None, vmax=None, alpha=None,
linewidths=None, verts=None, edgecolors=None, hold=None,
data=None, **kwargs)
参数data:dataframe等等所有数据集
x:坐标轴x的数据
y:坐标轴y的数据
c:颜色,可以设置颜色列表
marker:形状,很多很好玩的,大家可以自己查一下
alpha:marker图片的透明度0.3就是30%透明度
s:图片缩放比例
cmap 可以用默认颜色库出来渐变色,很漂亮
其他参数参考文档
来个例子:
import matplotlib.pyplot as plt
import numpy as np
import matplotlib
# Fixing random state for reproducibility
np.random.seed(19680801)
x = np.arange(0.0, 50.0, 2.0)
y = x ** 1.3 + np.random.rand(*x.shape) * 30.0
s = 500
plt.scatter(x, y, s, c="g", alpha=0.3, marker=r'$\clubsuit$',
label="Luck")
plt.xlabel("Leprechauns")
plt.ylabel("Gold")
plt.legend(loc=2) #就是那个小窗体,并且设置了位置
plt.show()
seaborn.regplot
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)
跟之前一样,seaborn的散点图有高端了一点,包含了可以绘制拟合线和置信区间等额外功能。
data,x,y,marker同plt.scatter一样,颜色是color
fit_reg:是否绘制拟合线和执行区间,注意并非课程中的reg_fit哦。
scatter:是否显示散点
ci:执行区间大小 [0, 100]
x_jitter, y_jitter 图片的抖动范围(类似添加了噪声),不会影响回归拟合线
其他参数参考文档
matplotlib.pyplot.scatter
seaborn.regplot
热图
如果散点太离散,或者数据点的数据量太密集,透明度已经不足以使用的情况下,可以用热图。
热图
matplotlib.pyplot.hist2d
matplotlib.pyplot.hist2d(x, y, bins=10, range=None, normed=False, weights=None, cmin=None, cmax=None, hold=None, data=None, **kwargs)
整体用法跟hist很像啊,只是它是热图。
重点控制x,y, bins(设置方式也跟hist一致,只是是二维,因为要设置x和y的bins)
cmin:设置多少count以下记为空,那么就不会被填充颜色
同样cmax就是大于多少就会被记为空,不填充颜色
其他参数参考文档
matplotlib.pyplot.colorbar
matplotlib.pyplot.colorbar(mappable=None, cax=None, ax=None, **kw)
只对当前图表生效,所以要想多个生效就得每个图表下跟一个
参数不太用的,有兴趣可以看下
一个图例代码:
cm = plt.cm.get_cmap('RdYlBu')
xy = range(20)
z = xy
sc = plt.scatter(xy, xy, c=z, vmin=0, vmax=20, s=35, cmap=cm)
plt.colorbar()
plt.show()
看例子能看懂的对不对,我们要先得到颜色映射表,然后将颜色映射表赋值给图表中的cmap参数,最后调用colorbar,调用colorbar只是显示出旁边的小窗体,某某颜色是指哪个范围。
其中get_cmap中取值可为:Possible values are: Accent, Accent_r, Blues, Blues_r, BrBG, BrBG_r, BuGn, BuGn_r, BuPu, BuPu_r, CMRmap, CMRmap_r, Dark2, Dark2_r, GnBu, GnBu_r, Greens, Greens_r, Greys, Greys_r, OrRd, OrRd_r, Oranges, Oranges_r, PRGn, PRGn_r, Paired, Paired_r, Pastel1, Pastel1_r, Pastel2, Pastel2_r, PiYG, PiYG_r, PuBu, PuBuGn, PuBuGn_r, PuBu_r, PuOr, PuOr_r, PuRd, PuRd_r, Purples, Purples_r, RdBu, RdBu_r, RdGy, RdGy_r, RdPu, RdPu_r, RdYlBu, RdYlBu_r, RdYlGn, RdYlGn_r, Reds, Reds_r, Set1, Set1_r, Set2, Set2_r, Set3, Set3_r, Spectral, Spectral_r, Wistia, Wistia_r, YlGn, YlGnBu, YlGnBu_r, YlGn_r, YlOrBr, YlOrBr_r, YlOrRd, YlOrRd_r...其中末尾加r是颜色取反。
既然扯到颜色,就多提一句:
Seaborn 还增加了以下多个调色板:
定性(全部多达 6 种颜色):'deep’、’pastel’、’dark’、’muted’、’bright’、’colorblind'
有序:’rocket' (white-orange-red-purple-black)、’mako' (mint-green-blue-purple-black)
发散:’vlag' (blue-white-red)、’icefire' (blue-black-orange)
可以使用seaborn.palplot和seaborn.color_palette来显示一下seaborn图标的颜色
seaborn.palplot:将颜色调色板中的值绘制为水平数组
seaborn.color_palette:返回一个列表,表示颜色调色板
比如sb.palplot(sb.color_palette('viridis', 9))
使用在图表中的话只要c=sb.color_palette('Blues')[2]类似这种就可以了
matplotlib.pyplot.hist2d
matplotlib.pyplot.colorbar
颜色列表
seaborn.heatmap
seaborn.heatmap(data, vmin=None, vmax=None, cmap=None,
center=None, robust=False, annot=None, fmt='.2g', annot_kws=None,
linewidths=0, linecolor='white', cbar=True, cbar_kws=None,
cbar_ax=None, square=False, xticklabels='auto', yticklabels='auto',
mask=None, ax=None, **kwargs)
annot = True 显示统计标号
fmt 标号格式,比如"d"就是整数的形式
data:dataframe
vmin, vmax:界限,决定不被标注颜色的部分
cmap:老样子,选颜色映射表
centor:改变颜色映射的趋势
linewidths linecolor :格子的分割线的颜色和宽度
还有很多参数,请查看api文档
箱线图
箱形图于1977年由美国著名统计学家约翰·图基(John Tukey)发明。它能显示出一组数据的最大值、最小值、中位数、及上下四分位数,还有异常值。
箱线图是侧重于数据的摘要,主要报告每个分类级别数字值的一组描述统计学信息。
在箱线图中,方框的中间线条表示分布的中值,方框的顶部和底部分别表示数据的第三四分位数和第一四分位数。因此,方框的高度是四分位差 (IQR)。从方框的顶部和底部,须线表示从第一四分位数或第三四分位数到最低值或最大值的范围。通常,须线长度会设置最大范围;默认情况下,设为 1.5 乘以 IQR。对于 γ 级别,底部须线下方有数据,表示在第一四分位数下方有大于 1.5x IQR 的单个离群值(异常值)。
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)
x y hue是选定的数据列,x一般是定性变量,y一般是定量变量,hue一般是另外一个分割x的定性变量
比如,什么学历x大概赚多少钱y,那么想观察什么学历下,性别分类大概赚多少钱,Hue就是性别(是不是有点groupby的意思呀),当然,xy可以颠倒,那么图像就是横着的。
data老样子是dataframe
color是设置所有图案的颜色
palette是seaborn.color_palette得来的,有很多特定字符串,有兴趣可以查api哈,常用的“muted”,有点类似之前看到的map那个配色的方法。
linewidth:线的宽度
orient:也可以直接调整绘图方向。"h"和“v”
dodge:默认是True,设置为False的话,hue的图形就不会调整顺序和宽度跑到对比格子旁边去了。
order, hue_order 是决定小提琴图的输出顺序,一般是以一个列表作为排序
其余参数看文档测试学习
集群图
seaborn.swarmplot(x=None, y=None, hue=None,
data=None, order=None, hue_order=None,
dodge=False, orient=None, color=None,
palette=None, size=5, edgecolor='gray',
linewidth=0, ax=None, **kwargs)
可以用这个方法来显示所有数据点。
举个例子
>>> ax = sns.boxplot(x="day", y="total_bill", data=tips)
>>> ax = sns.swarmplot(x="day", y="total_bill", data=tips, color=".25")
seaborn.swarmplot
小提琴图
【小提琴图】其实是【箱线图】与【核密度图】的结合,【箱线图】展示了分位数的位置,【小提琴图】则展示了任意位置的密度,通过【小提琴图】可以知道哪些位置的密度较高。
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)
x y hue是选定的数据列,x一般是定性变量,y一般是定量变量,hue一般是另外一个分割x的定性变量
比如,什么学历x大概赚多少钱y,那么想观察什么学历下,性别分类大概赚多少钱,Hue就是性别(是不是有点groupby的意思呀),当然,xy可以颠倒,那么图像就是横着的。
data老样子是dataframe
color是设置所有图案的颜色
palette是seaborn.color_palette得来的,有很多特定字符串,有兴趣可以查api哈,常用的“muted”,有点类似之前看到的map那个配色的方法。
split如果设定为True,hue对比的那两个小提琴图就会合并成一个小提琴图,好做对比
order, hue_order 是决定小提琴图的输出顺序,一般是以一个列表作为排序
inner有以下几种选择 {“box”, “quartile”, “point”, “stick”, None}
小提琴内部数据点的表示。 如果是box,会画一个小型长方形。 如果quartile四分位数,绘制分布的四分位数。 如果point或stick,显示每个基础数据点。
剩下参数,不太讲了,大家可以自行看api文档测试学习哈。
分面
分面:把数据分成多个子集并用同一个图表分别绘制的技术
1、class seaborn.FacetGrid
class seaborn.FacetGrid(data, row=None,
col=None, hue=None, col_wrap=None,
sharex=True, sharey=True, size=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)
他是一个类,你创建facetgrid的时候,会初始化一个matplotlib对象和一个facetgrid对象。
而这个facetgrid对象,建立一个特殊的链接,连接了dataframe和matplotlib。你就当打了个组合拳吧。
创建分面数据有两个步骤
1、需要创建一个 FacetGrid 对象的实例,并指定要分面的特征
g = sns.FacetGrid()
2、对 FacetGrid 对象使用 map 方法,指定在每个子集中要绘制的图形类型和变量
g.map()
那么对应上面步骤的详细描述呢:
1、创建FacetGrid 常用参数的解释如下:
data:往常一样,dataframe
row, col, hue : 不是会建立几个小图表吗,row就是行拆分是拆分了什么分类,col就是列拆分拆分了什么,hue就是一个表内部的分类(常用不同颜色区分不同分类)
col_wrap:在每行的分类下,来决定一列放几个
size,aspect,又看到这两了,还是同样,每个子图表高度和宽高比,
col,row,hue_order 决定了图表输出中列,行,hue的顺序,所以一般是列表形式
palette:老样子,不想再解释了
其他还有很多啊,去api测试了解
2、使用g.map()方法
第一个参数就是plt下的图表方法,hist啊,scatter啊,plot啊等等等等,从第二个参数开始就是跟前面那个图表方法后面跟的参数规范一样了,比如以scatter为例,x,y是必需参数,那么第二个参数就是我们需要传进去的x的列的名字(定量数据),注意不需要写x=什么什么,直接写字符串,描述列名的那个(因为是必须参数),第三个就是我们需要传入的y,同样,也是一样,字符串,不用写y=什么
其他参数就是plt图表方法的参数内容了,都是可选了,那就需要***=***了。
如果描述的话,g.map就有点像实现了一个callback的映射函数。
当然,既然作为callback,那就不可能紧紧映射官方函数了,也可以自己写函数作为map第一个函数来进行调用。
选做3,可以调用add_legend,来标识每条曲线或颜色与那个级别相关。当然还有很多其他FacetGrid的方法,可以查阅官方文档来学习。
举个例子吧:
>>> import seaborn as sns; sns.set(style="ticks", color_codes=True)
>>> tips = sns.load_dataset("tips")
>>> g = sns.FacetGrid(tips, col="time", row="smoker")
>>> import matplotlib.pyplot as plt
>>> g = sns.FacetGrid(tips, col="time", row="smoker")
>>> g = g.map(plt.hist, "total_bill")
2、seaborn.factorplot
它是seaborn下的一个方法,有点类似FacetGrid,它合并了FacetGrid和定性-定量的图表(柱状,小提琴,箱线等),使用上,比FacetGrid方便点。
seaborn.factorplot(x=None, y=None, hue=None,
data=None, row=None, col=None,
col_wrap=None, estimator=<function mean>,
ci=95, n_boot=1000, units=None, order=None,
hue_order=None, row_order=None,
col_order=None, kind='point', size=4, aspect=1,
orient=None, color=None, palette=None,
legend=True, legend_out=True, sharex=True,
sharey=True, margin_titles=False,
facet_kws=None, **kwargs)
基于FacetGrid的,一种非常好用的能添加多分类的方法。
除了x,y,hue,这三个是每个表中都有的,另外会通过col,row来绘制第三或第四个分类(假设x和hue是前两种分类)。
kind:{point, bar, count, box, violin, strip}
能画点图。
size:决定高度,inch单位。
aspect 决定纵横比(其实就是跟size相乘决定宽度)。
order,color,orient,palette,dodge都跟上面实现的功能一致。
其余参数不讲了,自行学习。
举个例子
>>> g = sns.factorplot(x="sex", y="total_bill",
... hue="smoker", col="time",
... data=tips, kind="box",
... size=4, aspect=.7);
3、seaborn.lmplot
seaborn.lmplot(x, y, data, hue=None, col=None,
row=None, palette=None, col_wrap=None, size=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)
跟上面的factorplot很相似,不过组合的是FacetGrid和 seaborn.regplot散点图(定量-定量)。
参数都差不太多就不详细讲了,想研究就看文档吧
>>> import seaborn as sns; sns.set(color_codes=True)
>>> tips = sns.load_dataset("tips")
>>> g = sns.lmplot(x="total_bill", y="tip", col="smoker", data=tips)
带误差线的各种图
长条高度表示数字变量的均值,并绘制误差条,表示基于方差和样本大小的均值不确定性,又称潜在误差量。
简单的说,代表各组件数据的整齐度,也就是个体差异度,如果误差线很长,有的夸张的快赶上下面的柱子了,那说明一是数据量小,没几个样本,而是个体差异度大。
1、seaborn.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)
将点估计和置信区间显示为柱形。
参数中有很多我们讲过的
x=None, y=None, hue=None, data=None, order=None,
hue_order=None,orient=None, color=None, palette=None, saturation=0.75,dodge=True这些都讲过了,参数功能不再赘述
讲点没讲过的
ci: float 或者 “sd” or None,float就是设定置信区间,sd就是描绘标准误差,如果为none就不会绘制误差线
capsize:误差线上的横线的宽度
errcolor :误差线颜色
errwidth:误差线宽度
estimator:估计误差的方法,默认是平均数+方差,也可以设置为中位数+方差
其他不讲了。
2、 seaborn.pointplot
使用散点图显示点估计和置信区间,跟上面相比是将平均值绘制为点,而不是长条。
seaborn.pointplot擅长总结定量变量和定性变量之间的关系。
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:如果设为True,就会画那个点和点之间的估计线,设为False就不画
linestyles:设置线的格式,可以设置为虚线等等"- -",当然设置为" "空格的话就是没有线。
其他没啥了。
seaborn.pointplot
一些误差线的知识点
一些误差线的知识点
一些误差线的知识点
折线图
折线图用于描绘一个数字变量相对于第二个变量的值的变化趋势。在散点图中,所有数据点都会绘制出来,而在折线图中,每个唯一 x 值或 x 值的分箱仅绘制一个点(就像柱状图一样)。如果 x 分箱中有多个观测值,那么该点在折线图中绘制的 y 值将为该数据点在分箱中的摘要统计值(例如均值或中值)。绘制的点用线条连接起来,表示 x 值的序列或相连特性。
它跟柱状图相比主要关注两点
1、对相对变化更感兴趣,折线图的y轴不一定从0开始
2、折线图强调了x轴各值的联系
如果x 变量表示时间,则数据折线图通常称之为时间序列图,我们使用seaborn.tsplot可以表示时间序列数据
也可使用matplotlib.pyplot.errorbar来做折线图。
seaborn.tsplot
seaborn.tsplot(data, time=None, unit=None,
condition=None, value=None, err_style='ci_band',
ci=68, interpolate=True, color=None, estimator=
<function mean>, n_boot=5000, err_palette=None,
err_kws=None, legend=True, ax=None, **kwargs)
参数,常用不再介绍
err_style: {ci_band, ci_bars, boot_traces, boot_kde, unit_traces, unit_points}
err的图样,默认就是一个曲线,常用还有ci_bars表示误差线
ci: float or list of floats in [0, 100] or “sd” or None
跟上面的误差线很像,要么表示置信区间,要么表示标准差,None就是没有误差线
interpolate :True或者False
表示两点间是否画上插值的线
condition :大概就是说会根据不同条件来绘制不同的折线,具体可以测试看看
其他参数不讲了。
matplotlib.pyplot.errorbar
将y与x绘制成带有误差线的折线。
matplotlib.pyplot.errorbar(x, y, yerr=None, xerr=None, fmt='', ecolor=None, elinewidth=None, capsize=None, barsabove=False, lolims=False, uplims=False, xlolims=False, xuplims=False, errorevery=1, capthick=None, hold=None, data=None, **kwargs)
x, y定义数据位置
xerr, yerr定义了errorbar的size大小
fmt
uplims,lolims,xuplims,xlolims,决定了y轴方向上的误差线范围,和x轴上的误差线范围
可以直接设定为True彻底限死,也可以像xerr yerr那样设定大小
errorbar
pandas.DataFrame.rolling
pandas.cut
pandas.DataFrame.sort_values
jointGrid类
*class *`seaborn.``JointGrid`(*x*, *y*, *data=None*, *size=6*, *ratio=5*, *space=0.2*, *dropna=True*, *xlim=None*, *ylim=None*)[¶](https://seaborn.pydata.org/generated/seaborn.JointGrid.html#seaborn.JointGrid "Permalink to this definition")
用边缘单变量图绘制二元图的网格。
具体的参数,和类方法不详细讲了。
大概步骤如下:
第一步:
生成一个jointGrid对象g = sns.JointGrid()
第二步:
在生成的对象上添加一个图标类型
可以用g.plot_joint()设置主图是什么
可以用g = g.plot()直接设置主图和轴图的不同图表
也可以使用g = g.plot_marginals()方法来组合图表,课程中就是组合seaborn.rugplot轴须图来画图表的。
举例:
>>> import seaborn as sns; sns.set(style="ticks", color_codes=True)
>>> tips = sns.load_dataset("tips")
>>> g = sns.JointGrid(x="total_bill", y="tip", data=tips)
>>> g = g.plot(sns.regplot, sns.distplot)