- 访问作者github: https://github.com/NefelibataBIGR/Machine_Learning_Notes ,获取笔记代码
- 具体笔记代码见 Python>seaborn 文件中的 ==seaborn.ipynb== 文件
一、基本介绍
- 与Matplotlib类似的画图库,能很好地与pandas交互
- 常用于EDA(探索性数据分析)
- import seaborn as sns
二、自带数据库
- 查看自带数据库:
- 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.lmplot(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. 相关系数
- 热力图
- 求相关系数:xxx_cor=xxx_df.corr()
- 画热力图: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”)
- 带状图:sns.catplot(data= , x=”xxx”, y=”yyy”, kind=”strip”)
六、自定义绘图函数
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轴特征
- xxx为x轴特征
2. PairGrid
- 全部数据集上所有数值变量成对分析
- g = sns.PairGrid(data= )
- 注意:只对数值型特征绘图,可以设定hue来加入类别
- g.map(sns.111plot)
- 对角线:g.map_diag()
- 非对角线:g.map_offdiag()
- 上三角区域:g.map_upper()
- 下三角区域:g.map_lower()