机器学习8——Seaborn


一、基本介绍

  • 与Matplotlib类似的画图库,能很好地与pandas交互
  • 常用于EDA(探索性数据分析)
  • import seaborn as sns
    image.png

二、自带数据库

  • 查看自带数据库:
    • sns.get_dataset_names()
  • 加载xxx数据库:
    • sns.load_dataset(‘xxx’)

三、查看变量分布

  • 主要看:
    • 数据取值范围,是否有异常值?
    • 是否近似正态分布?是否有偏移?是否双峰分布?
    • 如果依据类别划分,各子集上数据分布是否有很大差异?

1. 箱线图

  • 查看取值范围,异常值
    API:
  • sns.boxplot(data= , x=”xxx”)
    • 参数:
      • data=:数据集
      • x=:画的特征列的名称

或者:

  • sns.catplot(data= , x=”xxx”, kind=’box’)
    • 参数:
      • data=:数据集
      • x=:画的特征列的名称

在y轴方向绘制箱线图:x= 改成 y=,不指定x或y则画所有特征列的箱线图

2. 直方图

  • 查看分布
    API:
  • sns.displot(data= , x=”xxx” , bins= , hue= , shrink= )
    • 参数:
      • data=:数据集
      • x=:画的特征列的名称(可以数值特征,可以类别特征)
      • bins=:组数(调整组数来获取分布特征)
      • hue=:类别特征列的名称,对类别特征进行划分分析
      • shrink=:柱子大小比例

或者:

  • sns.countplot(data= , x=”xxx” , hue= )

3. KDE曲线

  • 对数据的直方图分布进行拟合
  • 可用于比较训练集和测试集分布是否一致
    API:
  • sns.kdeplot(data= , x=”xxx”)
    • 参数:
      • 参数:
      • data=:数据集
      • x=:画的特征列的名称

或者:

  • sns.displot(data= , x=”xxx”, kind=”kde”)
    • 参数:
      • data=:数据集
      • x=:画的特征列的名称(可以数值特征,可以类别特征)
      • hue=:类别特征分析,每一类分别画kde曲线

可以用 rug=True 来添加 rugplot
叠加到直方图上:sns.displot(…… , kde=True)
其他进阶绘图见代码文件!

4. ECDF曲线

  • 经验累积分布函数(ECDF)
  • 表示给定数据集中小于或等于给定值的观测值的累积百分比
    API:
  • sns.displot(data= , x=”xxx”, kind=’ecdf’)

四、数值变量关系分析

1. 散点图

API:

  • sns.relplot(data= , x= , y= )
    • 参数:
      • data=:数据集
      • x=:横轴
      • y=:纵轴
      • hue=:类别颜色标注(可以=数值型特征)
      • style=:改变图形
      • markers=:改变标注图形

2. 折线图

API:

  • sns.relplot(data= , x= , y= , kind=”line”)

3. 回归拟合

  • 画拟合直线:
    API:

    • sns.lmplot(data= , x=”xxx”, y=”yyy”)
      或者:
    • sns.regplot(data= , x=”xxx”, y=”yyy”)
  • 画残差:

    • sns.residplot(data= , x=”xxx”, y=”yyy”)

4. 联合分布

  • sns.displot(data= , x=’xxx’ , y=’yyy’)
    • kde曲线形式:加上参数kind=’kde’
    • 其他参数见代码文件

5. 联合分布+各自分布

(1)成对变量

  • sns.jointplot(data= ,x=”xxx”,y=”yyy”)
  • 升级版:JointGrid
    • g=sns.JointGrid(data= , x=”xxx”, y=”yyy”)
    • g.plot_joint(sns.111plot , ……)
    • g.plot_marginals(sns.222plot , ……)
      • 111plot:中间联合分布的图像形状
      • 222plot:边缘各自分布的图像形状

(2)所有变量

  • sns.pairplot(data= )
    • 参数:
      • data=:数据集
      • x_vars=[ ]:行展示的特征
      • y_vars=[ ]:列展示的特征
  • 升级版:PairGrid
    • g=sns.PairGrid(data= , x_vars=[ ], y_vars=[ ]
    • g.map_upper(sns.111plot)
      • 上三角的图像形状
    • g.map_diag(sns.222plot , kde=True)
      • 对角线的图像形状
    • g.map_lower(sns.333plot)
      • 下三角的图像形状

6. 相关系数

  • 热力图
  1. 求相关系数:xxx_cor=xxx_df.corr()
  2. 画热力图:sns.heatmap(xxx_cor, cmap=”coolwarm”)
    • 其他参数见代码文件

五、类别变量分析

1. 类别变量分布

  • sns.catplot(data= , x=”xxx”, kind=”count”)

2. 类别变量与数值变量的关系

  • 不同类别中数值变量的均值/中值估计:

    • 均值:sns.catplot(data= , x=”xxx”, y=”yyy”, kind=”bar”)
    • 中位数:sns.catplot(data= , x=”xxx”, y=”yyy”, kind=”bar”, estimator=np.median)
    • 点图:
      • sns.catplot(data= , x=”xxx”, y=”yyy”, kind=”point”)
  • 不同类别中数值变量的取值范围:

    • 箱线图:sns.catplot(data= , x=”xxx”, y=”yyy”, kind=”box”)
    • 更能展示异常值:sns.catplot(data= , x=”xxx”, y=”yyy”, kind=”boxen”)
  • 不同类别中数值变量的分布:

    • 带状图:sns.catplot(data= , x=”xxx”, y=”yyy”, kind=”strip”)
      • 设置jitter=0,带状绘制成直线,0~1越大越稀疏
    • 分簇散点图:sns.catplot(data= , x=”xxx”, y=”yyy”, kind=”swarm”)
    • 小提琴图:sns.catplot(data= , x=”xxx”, y=”yyy”, kind=”violin”)

六、自定义绘图函数

1. FacetGrid

  • 依据特征的不同类别划分子集,每个子集分析
  • g=sns.FacetGrid(data= , row=”rrr”, col=”ccc”)
    • 注意rrr与ccc都是类别特征
  • g.map(sns.111plot , “xxx”)
    • xxx为x轴特征
      • 可以数值特征
      • 可以两个(”xxx” , “yyy”):画联合分布,xxx为x轴特征,yyy为y轴特征

2. PairGrid

  • 全部数据集上所有数值变量成对分析
  • g = sns.PairGrid(data= )
    • 注意:只对数值型特征绘图,可以设定hue来加入类别
  • g.map(sns.111plot)
    • 对角线:g.map_diag()
    • 非对角线:g.map_offdiag()
    • 上三角区域:g.map_upper()
    • 下三角区域:g.map_lower()

文章作者: Nefelibata BIGR
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 Nefelibata BIGR !
  目录