传送门:用 Seaborn 做数据可视化(0)总章
目录:可视化线性关系
- 1. 绘制线性回归模型的函数
-
- 1.1 regplot()
- 1.2 lmplot()
- 2. 不同情况下的使用
-
- 2.1 变量 x 是离散值
- 2.2 解决非简单线性关系的拟合(拟合不同的模型)
- 2.3 离群点的问题(“outlier” observations)
- 2.4 变量 y 是离散的(二元)
- 3. regplot() 和 lmplot() 真正的区别:三元及以上变量的分析
- 4. 控制图像的大小
- 5. 在其它情况下绘制回归图
这章篇介绍的是针对回归类型的散点数据的可视化。
seaborn 中的回归曲线图主要是用来增加一个视觉指南,有助于在探索性数据分析以强调在数据集中的模式。
这是说,seaborn本身并不进行统计分析软件包。为了获得有关回归模型的拟合定量测量,可以使用statsmodels。
1. 绘制线性回归模型的函数
可视化线性关系有两个函数可以完成:regplot()
和 implot()
返回回归曲线和 95% 置信区间(confidence interval)
1.1 regplot()
-
输入数据: 以各种格式接受x和y变量,包括numpy数组、Pandas的Series列或DataFrame对象的变量引用;
import numpy as np import seaborn as sns import matplotlib.pyplot as pltsns.set(color_codes=True)tips = sns.load_dataset("tips")
sns.regplot(x="total_bill", y="tip", data=tips);
1.2 lmplot()
-
输入数据:将数据集作为一个必需的参数,而x和y变量必须指定为字符串。这种形式的数据格式叫做“长型”或者“整洁”数据( “long-form” or “tidy” data)。
(regplot()可以看做是拥有lmplot()特征的子集,下面 part3有详细讲)sns.lmplot(x="total_bill", y="tip", data=tips);
注:regplot() 和 lmplot()在输入格式上的差别:一句话,regplot()传入参数 x 和 y 即可;lmplot() 除了
x 和 y 还必须传入 data。
2. 不同情况下的使用
2.1 变量 x 是离散值
即使对于其中一个变量是离散值,也是可以正常运行。
sns.lmplot(x="size", y="tip", data=tips);
解决办法 1:一种方法是增加一些随机噪声的“抖动”(“jitter”),让这些值的分布更加明晰。
值得注意的是,抖动仅适用于散点图数据,且不会影响拟合的回归线本身。
sns.lmplot(x="size", y="tip", data=tips, x_jitter=.05);
解决办法 2:对观察结果进行折叠,绘制中心趋势的估计(取中点进行拟合)
sns.lmplot(x="size", y="tip", data=tips, x_estimator=np.mean);
2.2 解决非简单线性关系的拟合(拟合不同的模型)
anscombe = sns.load_dataset("anscombe")
# 这个表现很好
sns.lmplot(x="x", y="y", data=anscombe.query("dataset == 'I'"),ci=None, scatter_kws={
"s": 80});
问题:无法拟合多次项回归模型
# 使用相同的曲线就没法拟合这个数据了
sns.lmplot(x="x", y="y", data=anscombe.query("dataset == 'II'"),ci=None, scatter_kws={
"s": 80});
解决:传入参数 order=2
# 解决:参数 order=2
sns.lmplot(x="x", y="y", data=anscombe.query("dataset == 'II'"),order=2, ci=None, scatter_kws={
"s": 80});
2.3 离群点的问题(“outlier” observations)
sns.lmplot(x="x", y="y", data=anscombe.query("dataset == 'III'"),ci=None, scatter_kws={
"s": 80});
解决:传入参数 robust=True
sns.lmplot(x="x", y="y", data=anscombe.query("dataset == 'III'"),robust=True, ci=None, scatter_kws={
"s": 80});
2.4 变量 y 是离散的(二元)
tips["big_tip"] = (tips.tip / tips.total_bill) > .15
sns.lmplot(x="total_bill", y="big_tip", data=tips,y_jitter=.03);
解决:
sns.lmplot(x="total_bill", y="big_tip", data=tips,logistic=True, y_jitter=.03);
3. regplot() 和 lmplot() 真正的区别:三元及以上变量的分析
regplot() 和 lmplot() 真正的区别在于,想要加入第三个或者更多的变量的时候,只能使用后者;因为 lmplot()实际上结合了regplot() and FacetGrid。
The regplot() and lmplot() functions are closely related, but the former is an axes-level function while the latter is a figure-level function that combines regplot() and FacetGrid.
当然,方法也和之前的思路一致,使用增加 hue(增加变量/维度)、col(多图) 等参数可以做许多其他的事情。
sns.lmplot(x="total_bill", y="tip", hue="smoker", data=tips);
sns.lmplot(x="total_bill", y="tip", hue="smoker", data=tips,markers=["o", "x"], palette="Set1");
sns.lmplot(x="total_bill", y="tip", hue="smoker", col="time", data=tips);
sns.lmplot(x="total_bill", y="tip", hue="smoker",col="time", row="sex", data=tips);
4. 控制图像的大小
5. 在其它情况下绘制回归图
参考:
- Seaborn(sns)官方文档学习笔记(第四章 线性关系的可视化)