【小睿的ML之路】Seaborn-多变量分析绘制
%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)的概念解释:
-
四分位距(Interquartile Range - IQR):
- 四分位距是指统计学中的一个概念,表示数据集合中第三四分位数(Q3,上四分位数)与第一四分位数(Q1,下四分位数)之间的距离,用于衡量数据的变异程度。通常情况下,数据集的50%位于Q1和Q3之间。
- 具体计算方式:[ IQR = Q3 - Q1 ]
-
离群值的判定:
- 统计学中,常用箱线图(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'>