【小睿的ML之路】Seaborn-多变量分析绘制

发布时间 2023-09-21 23:18:40作者: 郭小睿
%matplotlib inline 

import seaborn as sns # 导入 seaborn 库,用于绘制统计图形。
import numpy as np # 导入 numpy 库,用于处理数值计算。
import pandas as pd # 导入 pandas 库,用于处理数据。
import matplotlib as mpl # 导入 matplotlib 库,用于绘图。
import matplotlib.pyplot as plt # 导入 matplotlib 库中的 pyplot 模块,用于绘图。

sns.set(color_codes=True,style="whitegrid") # 设置 seaborn 的颜色风格,color_codes=True 表示使用颜色代码。

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

titanic = sns.load_dataset("titanic")

tips = sns.load_dataset("tips")

print(tips.head())

iris = sns.load_dataset("iris")

   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
sns.stripplot(x="day",y="total_bill",data=tips)
<Axes: xlabel='day', ylabel='total_bill'>

重叠是很常见的现象,但是重叠影响我观察数据的量了。所以增加 jitter 参数实现抖动

sns.stripplot(x="day",y="total_bill",data=tips,jitter=True)
<Axes: xlabel='day', ylabel='total_bill'>

也可以使用 swarmplot 进行绘制

sns.swarmplot(x="day",y="total_bill",data=tips)
<Axes: xlabel='day', ylabel='total_bill'>

这段代码使用 Seaborn 库的 swarmplot 函数绘制了 "day" 和 "total_bill" 之间的散点图,并根据 "sex" 进行了着色区分。

具体解释如下:

  • sns.swarmplot(x="day", y="total_bill", data=tips, hue="sex"):调用 Seaborn 库的 swarmplot 函数绘制散点图,并使用 "sex" 来对点进行着色区分。参数 x 指定 x 轴数据,这里是 "day",参数 y 指定 y 轴数据,这里是 "total_bill",参数 data 是所使用的数据集,这里是 "tips" 数据集。参数 hue 指定了着色的依据,这里是 "sex",表示根据性别进行区分。这段代码绘制了 "day" 和 "total_bill" 之间的散点图,通过不同性别的着色展示了 "total_bill" 在不同天数的分布情况。
sns.swarmplot(x="day",y="total_bill",data=tips,hue="sex")
<Axes: xlabel='day', ylabel='total_bill'>

sns.swarmplot(x="total_bill",y="day",data=tips,hue="time")
<Axes: xlabel='total_bill', ylabel='day'>

盒图

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

这是关于统计学中四分位数(Quartiles)和离群值(Outliers)的概念解释:

  1. 四分位距(Interquartile Range - IQR)

    • 四分位距是指统计学中的一个概念,表示数据集合中第三四分位数(Q3,上四分位数)与第一四分位数(Q1,下四分位数)之间的距离,用于衡量数据的变异程度。通常情况下,数据集的50%位于Q1和Q3之间。
    • 具体计算方式:[ IQR = Q3 - Q1 ]
  2. 离群值的判定

    • 统计学中,常用箱线图(Box Plot)来识别离群值。箱线图中,离群值一般被定义为超出箱体上下限的数据点。
    • 根据你提供的公式,离群值的判定方法是:如果一个数据点的值大于Q3加上1.5倍的IQR,或者小于Q1减去1.5倍的IQR,那么该数据点被视为离群值。

呜呜呜~我数学是真的菜,我得想半天!!!

sns.boxplot(x="day",y="total_bill",data=tips,hue="time")
<Axes: xlabel='day', ylabel='total_bill'>

比如 Thur 列,上面是最大值,下面是最小值,盒子上面是3/4位,盒子下面是1/4位,盒子中间是1/2位。上面的菱形是离群点。

sns.violinplot(x="total_bill",y="day",data=tips,hue="time")
<Axes: xlabel='total_bill', ylabel='day'>

小提琴图:越胖代表数据出现次数越多,反之越少。

sns.violinplot(x="day",y="total_bill",data=tips,hue="sex",split=True)
<Axes: xlabel='day', ylabel='total_bill'>