2020-12-09
数据分析
00

目录

线性关系可视化
添加散点分布的抖动
高阶关系拟合
去除异常值绘制趋势线
绘制多子图

title: 学习 seaborn [03]: 线性回归图 slug: lmplot date: 2020-12-9 tags:

  • seaborn
  • python category: 数据分析 link: description: type: text

线性关系可视化

此线性可视化并非统计关系中的折线图,而是excel做图中的趋势线概念,对x、y关系进行线性拟合得到关系式,对关系式的绘图。

seaborn的线性可视化不直接提供拟合关系式的各具体参数,只绘制出趋势线和置信区间,从而引导和帮助进行数据关系探索。

主要用到两个函数:

  • lmplot():FacetGrid级函数,可绘制多子图;将data作为必须参数,x和y变量必须被指定为字符串。
  • regplot():轴级函数。x和y可以是简单的 numpy 数组,pandas Series对象,或者作为对传递给data的 pandas DataFrame对象。
python
import seaborn as sns import pandas as pd import numpy as np %matplotlib inline sns.set() tips = pd.read_csv('seaborn-data-master/tips.csv') display(tips)
total_bill tip sex smoker day time size
0 16.99 1.01 Female No Sun Dinner 2
1 10.34 1.66 Male No Sun Dinner 3
2 21.01 3.50 Male No Sun Dinner 3
3 23.68 3.31 Male No Sun Dinner 2
4 24.59 3.61 Female No Sun Dinner 4
... ... ... ... ... ... ... ...
239 29.03 5.92 Male No Sat Dinner 3
240 27.18 2.00 Female Yes Sat Dinner 2
241 22.67 2.00 Male Yes Sat Dinner 2
242 17.82 1.75 Male No Sat Dinner 2
243 18.78 3.00 Female No Thur Dinner 2

244 rows × 7 columns

python
g = sns.lmplot(x="total_bill", y="tip", data=tips)


添加散点分布的抖动

当一个变量采用离散值,也可以拟合线性回归,但生成的简单散点图中点元素会互相重叠,视觉上类似直线。可以给离散量添加随机抖动,以使点分布更清晰。这种抖动只影响散点分布,不影响趋势线。

x_jitter控制x轴方向的随机抖动

python
g = sns.lmplot(x="size", y="tip", x_jitter=0.05, data=tips)


或者绘制每个离散组中的观测值。

x_estimator转递一个函数来控制选择哪种方法进行观测值的估计,可以用平均值、中位数等。

python
g = sns.lmplot(x="size", y="tip", x_estimator=np.mean, data=tips)

高阶关系拟合

有些数据的趋势线并非一次线性函数,可能是二次或多次函数,绘图时候需要指明趋势线的阶数。

order制定阶数

python
anscombe = pd.read_csv('seaborn-data-master/anscombe.csv') display(anscombe)
dataset x y
0 I 10.0 8.04
1 I 8.0 6.95
2 I 13.0 7.58
3 I 9.0 8.81
4 I 11.0 8.33
5 I 14.0 9.96
6 I 6.0 7.24
7 I 4.0 4.26
8 I 12.0 10.84
9 I 7.0 4.82
10 I 5.0 5.68
11 II 10.0 9.14
12 II 8.0 8.14
13 II 13.0 8.74
14 II 9.0 8.77
15 II 11.0 9.26
16 II 14.0 8.10
17 II 6.0 6.13
18 II 4.0 3.10
19 II 12.0 9.13
20 II 7.0 7.26
21 II 5.0 4.74
22 III 10.0 7.46
23 III 8.0 6.77
24 III 13.0 12.74
25 III 9.0 7.11
26 III 11.0 7.81
27 III 14.0 8.84
28 III 6.0 6.08
29 III 4.0 5.39
30 III 12.0 8.15
31 III 7.0 6.42
32 III 5.0 5.73
33 IV 8.0 6.58
34 IV 8.0 5.76
35 IV 8.0 7.71
36 IV 8.0 8.84
37 IV 8.0 8.47
38 IV 8.0 7.04
39 IV 8.0 5.25
40 IV 19.0 12.50
41 IV 8.0 5.56
42 IV 8.0 7.91
43 IV 8.0 6.89
python
g = sns.lmplot(x='x', y='y', data=anscombe.query("dataset == 'II'"), ci=None, order=2)

去除异常值绘制趋势线

数据集若存在异常值,使拟合的趋势线偏离数据的主要关系,绘图时候需要去除异常值的影响。

robust参数控制是否剔除异常值。如果取值True则采用稳健回归,剔除异常值。

python
g = sns.lmplot(x='x', y='y', data=anscombe.query("dataset == 'III'"), ci=None, robust=True)


绘制多子图

因为lmplot()是FacetGrid级别的函数,所以可以绘制多子图。

使用rowcol参数控制行列数。

使用hue控制不同子集的颜色。

python
g = sns.lmplot(x='total_bill', y='tip', hue='smoker', col='time', row='sex', data=tips)


本文作者:tsingk

本文链接:

版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!