机器学习 - Seaborn 练习, 常见功能查阅

news2024/11/14 4:17:09

机器学习记录

Seaborn

Seaborn 是一个基于 Matplotlib 的 Python 可视化库,提供了一些内置数据集以及进行统计数据可视化和模型现场的 API。

  • sns.get_dataset_names() 方法会返回一个字符串列表,包含所有内置数据集的名称

练习

Seaborn 依赖Matplotlib, NumPy, SciPy, Pandas 和 StatsModels等

conda install -y seaborn
conda install -y numpy
conda install -y pandas
conda install -y scipy
conda install -y statsmodel
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
import seaborn as sns

%matplotlib inline
%reload_ext autoreload
%autoreload 2

print(sns.__version__)
0.12.2
# 获取 Seaborn 中包含的所有数据集名称
print(sns.get_dataset_names())
['anagrams', 'anscombe', 'attention', 'brain_networks', 'car_crashes', 'diamonds', 'dots', 'dowjones', 'exercise', 'flights', 'fmri', 'geyser', 'glue', 'healthexp', 'iris', 'mpg', 'penguins', 'planets', 'seaice', 'taxis', 'tips', 'titanic']
# 加载数据
crash_df = sns.load_dataset('car_crashes')
print(type(crash_df))
print(crash_df.shape)
print(crash_df.head())
<class 'pandas.core.frame.DataFrame'>
(51, 8)
   total  speeding  alcohol  not_distracted  no_previous  ins_premium  \
0   18.8     7.332    5.640          18.048       15.040       784.55   
1   18.1     7.421    4.525          16.290       17.014      1053.48   
2   18.6     6.510    5.208          15.624       17.856       899.47   
3   22.4     4.032    5.824          21.056       21.280       827.34   
4   12.0     4.200    3.360          10.920       10.680       878.41   

   ins_losses abbrev  
0      145.08     AL  
1      133.93     AK  
2      110.35     AZ  
3      142.39     AR  
4      165.63     CA  

histplot

绘制单变量或双变量直方图以显示数据集的分布。

直方图是一种经典的可视化工具,它通过计算落在离散区间内的观测值的数量来表示一个或多个变量的分布。

此函数可以对每个区间内计算的统计数据进行归一化,以估计频率、密度或概率质量,并且可以添加使用核密度估计获得的平滑曲线,类似于 :func:kdeplot

sns.histplot(
    data=None,
    *,
    x=None,
    y=None,
    hue=None,
    weights=None,
    stat='count',
    bins='auto',
    binwidth=None,
    binrange=None,
    discrete=None,
    cumulative=False,
    common_bins=True,
    common_norm=True,
    multiple='layer',
    element='bars',
    fill=True,
    shrink=1,
    kde=False,
    kde_kws=None,
    line_kws=None,
    thresh=0,
    pthresh=None,
    pmax=None,
    cbar=False,
    cbar_ax=None,
    cbar_kws=None,
    palette=None,
    hue_order=None,
    hue_norm=None,
    color=None,
    log_scale=None,
    legend=True,
    ax=None,
    **kwargs,
)
  • bins : 制定bin的数目或bin边界,默认为10个bin
  • binwidth : 指定bin的宽度,代替bins参数
  • kde : 是否显示核密度估计曲线,默认False
  • color : 直方图颜色
  • edgecolor : 直方图边框色
  • linewidth : 边框宽度
  • alpha : 透明度
  • element: 直方图统计的可视化表示
    • bars
    • step
    • poly
  • stat - 聚合统计数据, y 轴
    • count : 统计频数,默认值。每个bin的原始频数
    • frequency : 统计频率。每个bin的相对频率(频数/总频数)
    • density : 统计密度。每个bin的频率密度(频数/bin宽度)
    • probability : 统计概率密度。每个bin的概率密度(频数/总频数 * bin宽度)
    • None : 不显示任何统计信息。仅显示直方图,无统计摘要
sns.histplot(
    crash_df['not_distracted'], 
    bins=20, 
    kde=True,
    element='bars',
    edgecolor='red',
    linewidth=2,
    alpha=0.8,
)
plt.show()

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-FDExPrRm-1682498725775)(../images/python-seaborn.001/output_5_0.png)]

# distplot过时方式, 将在 seaborn v0.14.0 删除
# sns.distplot(crash_df['not_distracted']), 以下等价
sns.histplot(crash_df['not_distracted'], kde=True, stat='density')
plt.show()

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-2KP1DCsw-1682498725776)(../images/python-seaborn.001/output_6_0.png)]

jointplot

用双变量图和单变量图绘制两个变量的图。

此函数为 JointGrid 类提供了一个方便的接口,具有多种固定绘图类型。

这是一个相当轻量级的包装器; 如果您需要更大的灵活性,您应该直接使用 :class:JointGrid

参数种类也比较丰富,可以调整图形的各个方面样式。所以掌握这个方法能让我们更轻松高效地做EDA数据探索。

sns.jointplot(
    data=None,
    *,
    x=None,
    y=None,
    hue=None,
    kind='scatter', # "scatter" | "kde" | "hist" | "hex" | "reg" | "resid" 
    height=6, # 图高
    ratio=5, # 长宽比例
    space=0.2, # 子图间隔
    dropna=False, # 是否删除NaN值
    xlim=None,
    ylim=None,
    color=None, # 颜色
    palette=None,
    hue_order=None,
    hue_norm=None,
    marginal_ticks=False, # y 对角轴刻度显示(柱状图的)
    joint_kws=None,
    marginal_kws=None,
    **kwargs,
)

kind 参数用于指定联合分布图的类型:

  • scatter : 散点图。默认值。显示x-y变量的散点图以及边缘直方图。
    • 显示原始关系
  • reg : 回归图。显示x-y变量的散点图,并且显示回归线及其方程。用于展示两个定量变量之间的线性相关关系。
    • 显示线性相关关系
  • resid : 残差图。显示x-y变量的散点图及残差与预测值的散点图。用于判断回归模型的合理性。
    • 判断线性模型的合理性
  • kde : 核密度估计图。使用2D的核密度估计方法显示变量之间的联合密度。
    • 显示全面的联合密度
  • hex : 分箱图。将x-y变量以网格状分箱,显示每个分箱中的观测数量。
    • 显示不同区域内的观测分布
# 速度, 酒精
# 回归图显示线性相关关系
sns.jointplot(
    x='speeding', 
    y='alcohol', 
    data=crash_df, 
    kind='reg', 
    marginal_ticks=True
)
plt.show()

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-1Owdqhcj-1682498725776)(../images/python-seaborn.001/output_8_0.png)]

# 核密度图显示全面的联合密度
sns.jointplot(
    x='speeding', 
    y='alcohol', 
    data=crash_df, 
    kind='kde', 
    marginal_ticks=True,
)
plt.show()

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-5NZqhJ1c-1682498725776)(../images/python-seaborn.001/output_9_0.png)]

# 散点图显示原始关系,直方图显示边缘分布
sns.jointplot(
    x='speeding', 
    y='alcohol', 
    data=crash_df, 
    kind='scatter', 
    marginal_ticks=True,
)
plt.show()

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-G2U6uO5N-1682498725777)(../images/python-seaborn.001/output_10_0.png)]

# 速度, 酒精
sns.jointplot(
    x='speeding', 
    y='alcohol', 
    data=crash_df, 
    kind='hist', 
    marginal_ticks=True,
)
plt.show()

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-famkJ1CW-1682498725777)(../images/python-seaborn.001/output_11_0.png)]

# 分箱图显示不同区域内的观测分布
sns.jointplot(
    x='speeding', 
    y='alcohol', 
    data=crash_df, 
    kind='hex', 
    marginal_ticks=True,
)
plt.show()

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-rPK0Gkta-1682498725777)(../images/python-seaborn.001/output_12_0.png)]

# 残差图判断线性模型的合理性
sns.jointplot(
    x='speeding', 
    y='alcohol', 
    data=crash_df, 
    kind='resid', 
    marginal_ticks=True,
)
plt.show()

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-z8Mbw72a-1682498725777)(../images/python-seaborn.001/output_13_0.png)]

kdeplot

绘制核密度估计图

sns.kdeplot(
    data=None,
    *,
    x=None, # 指定一维数据的变量名称
    y=None, # 指定一维数据的变量名称
    hue=None,
    weights=None,
    palette=None,
    hue_order=None,
    hue_norm=None,
    color=None,
    fill=None,
    multiple='layer',
    common_norm=True,
    common_grid=False,
    cumulative=False, # 是否绘制累积密度曲线
    bw_method='scott',
    bw_adjust=1,
    warn_singular=True,
    log_scale=None,
    levels=10,
    thresh=0.05,
    gridsize=200, # 网格大小
    cut=3, # 截断外围尾部的比例
    clip=None, # 默认截断区间 [-np.inf, np.inf],可以指定其他区间
    legend=True, # 是否显示图例 
    cbar=False, # 是否绘制颜色条 
    cbar_ax=None, # 颜色条轴
    cbar_kws=None, # 颜色条参数
    ax=None,
    **kwargs,
)
import scipy
sns.kdeplot(crash_df['alcohol'], cumulative=True)
plt.show()

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Qi2S4w65-1682498725778)(../images/python-seaborn.001/output_15_0.png)]

pairplot

绘制多个变量的散点矩阵图。它可以显示数据集中所有变量的二元散点图,便于我们直观地探索变量之间的关系。

在数据集中绘制成对关系。

默认情况下,此函数将创建一个坐标轴网格,这样“数据”中的每个数字变量将在单行的 y 轴和单列的 x 轴之间共享。

对角线图的处理方式不同:绘制单变量分布图以显示每列中数据的边际分布。

也可以显示变量的子集或在行和列上绘制不同的变量。

这是 :class:PairGrid 的高级接口,旨在使绘制一些常用样式变得容易。

如果需要更大的灵活性,直接使用 PairGrid。

sns.pairplot(
    data,
    *,
    hue=None, # 根据hue变量中的类别对图形进行着色,展示多重关系 
    hue_order=None,
    palette=None,
    vars=None, # 要绘制的变量,如果为空则绘制全部数值型变量
    x_vars=None,
    y_vars=None,
    kind='scatter', # 散点图类型,可以是'scatter'、'reg'、'kde'、'hex'等
    diag_kind='auto', # 对角线图类型,可以是'hist'、'kde'、None等 
    markers=None,
    height=2.5,
    aspect=1,
    corner=False,
    dropna=False, # 是否删除缺失值 
    plot_kws=None, # 散点图参数(颜色、大小等)
    diag_kws=None, # 对角线图参数
    grid_kws=None,
    size=None,
)
sns.pairplot(crash_df, diag_kind='kde', kind='reg')
plt.show()

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-X2jksi6A-1682498725778)(../images/python-seaborn.001/output_17_0.png)]

tips_df = sns.load_dataset('tips')
print(tips_df.head())
   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.pairplot(tips_df, hue='sex', palette='Blues')
plt.show()

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-V6J9Sbw2-1682498725778)(../images/python-seaborn.001/output_19_0.png)]

rugplot

在轴上绘制随机变量的每个观测值的小条形图。

它可以同时绘制一维或二维的数据,用于检查核密度估计或累积密度曲线的拟合效果,或直接显示数据分布的详细信息。

通过沿 x 轴和 y 轴绘制刻度来绘制边际分布。

此功能旨在通过以不显眼的方式显示单个观察的位置来补充其他图。

sns.rugplot(
    data=None,
    *,
    x=None,
    y=None,
    hue=None,
    height=0.025, # 条形图高度,默认为0.05
    expand_margins=True,
    palette=None,
    hue_order=None,
    hue_norm=None,
    legend=True,
    ax=None, # 绘图轴,默认使用当前轴
    **kwargs, # 其他可选参数(颜色、alpha等)
)
sns.rugplot(
    tips_df['tip']
)
plt.show()

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-SiaV0Mpk-1682498725778)(../images/python-seaborn.001/output_21_0.png)]

# sns.set_style('whitegrid')
# sns.set_style('darkgrid')
# sns.set_style('dark')
sns.set_style('ticks')

plt.figure(figsize=(8, 4))

# "paper", "talk", and "poster"
sns.set_context('paper', font_scale=1)

sns.jointplot(x='speeding', y='alcohol', data=crash_df, kind='reg')
plt.show()
<Figure size 800x400 with 0 Axes>

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-r2n06Z5Y-1682498725779)(../images/python-seaborn.001/output_22_1.png)]

barplot

将点估计和误差显示为矩形条。

黑色线,也称为误差线或置信区间

  • 条形的高度表示数值变量(y)在不同组别(x)中的测量值,通常表示均值或中位数。它直观地显示不同组之间的差异。
  • 黑色的线表示置信区间,用于衡量不同组别之间差异的统计显著性。
  • 条形的颜色表示第三个变量(hue)在不同的组别与数值变量的关系,用于展示三变量之间的联合分布或关联。

通过比较不同组别的误差线与其对应的条形是否重叠来判断这两个组别之间的差异是否显著:

  • 如果误差线与条形图重叠较小或没有重叠,说明条形图显示的差异大于误差线的范围,更有可能是真实的差异,属于显著差异。
  • 如果误差线与条形图重叠较大,则差异可能由于误差线本身的范围引起,难以判断是否为真实差异,因此属于不显著差异。

一般来说,

  • 重叠小了更好,说明取得的结果更有说服力,差异更显著。这更能支持我们的假设或证明我们想要研究的效应。
  • 重叠大了不太理想,说明结果的稳定性或精确性不足以明确判断差异是否真实存在。这时候需要进一步验证,以确定效应是否真实,或者哪些因素影响了结果。
sns.barplot(
    data=None,
    *,
    x=None,
    y=None,
    hue=None,
    order=None,
    hue_order=None,
    estimator='mean', # 定量变量的统计方法,默认为'mean',可以是'median', 'max','count'等
    errorbar=('ci', 95),
    n_boot=1000,
    units=None,
    seed=None,
    orient=None,
    color=None,
    palette=None,
    saturation=0.75,
    width=0.8,
    errcolor='.26',
    errwidth=None,
    capsize=None,
    dodge=True,
    ci='deprecated',
    ax=None,
    **kwargs,
)

以性别(x)和工资(y)为例来解释误差线与条形图重叠的意义:

import seaborn as sns

sns.barplot(x='sex', y='wage', data=df, ci=95)  # 显示95%置信区间

这会产生一个按性别分组的工资平均值条形图,带95%置信区间(误差线)。

  • 如果男性与女性工资的误差线与其条形图重叠较小或没有重叠,则两组之间的工资差异可能显著。这说明工资差异超出了误差线的范围,更有可能是真实的差异,可以支持性别歧视的假设。
  • 如果男性与女性工资的误差线与其条形图重叠较大,则工资差异可能不显著,可能部分或全部由误差线引起。这时候难以断定是否存在真实的工资差异,需要更大数据量来验证性别歧视的效应。

所以,简而言之:

  • 重叠小——工资差异可能显著,性别歧视假说更可信。
  • 重叠大——工资差异可能不显著,性别歧视的真实效应还需进一步验证。
sns.barplot(x='sex', y='total_bill', data=tips_df, hue='day')
plt.show()

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-RBKGRr05-1682498725779)(../images/python-seaborn.001/output_24_0.png)]

sns.barplot(x='sex', y='total_bill', data=tips_df, hue='day', errorbar=('ci', 68))
plt.show()

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Ff2gLunQ-1682498725779)(../images/python-seaborn.001/output_25_0.png)]

countplot

分类变量的计数条形图

sns.countplot(
    data=None,
    *,
    x=None,
    y=None,
    hue=None, # 用于制作按第三分类变量分组的条形图
    order=None,
    hue_order=None,
    orient=None,
    color=None,
    palette=None,
    saturation=0.75,
    width=0.8,
    dodge=True,
    ax=None,
    **kwargs,
)
sns.countplot(x='sex', hue='day', data=tips_df)
plt.show()

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-RMmgwuV7-1682498725779)(../images/python-seaborn.001/output_27_0.png)]

boxplot

箱线图

通过显示数值变量的五数概括(最小值、第一四分位数、中位数、第三四分位数、最大值)来可视化变量的分布。

箱线图用以展示一个或多个分类变量下的数值变量的分布情况。它通过显示五数概括,提供了数值变量分布的整体轮廓和变异性,是判断变量是否正常分布的重要手段之一。

sns.boxplot(
    data=None,
    *,
    x=None,
    y=None,
    hue=None, # 用于按分类变量对箱线图进行着色,制作分组箱线图。
    order=None,
    hue_order=None,
    orient=None,
    color=None,
    palette=None,
    saturation=0.75,
    width=0.8,
    dodge=True,
    fliersize=5,
    linewidth=None,
    whis=1.5,
    ax=None,
    **kwargs,
)
sns.boxplot(x='day', y='total_bill', hue='sex', data=tips_df)
plt.show()

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-pc49ST8h-1682498725780)(../images/python-seaborn.001/output_29_0.png)]

violinplot

小提琴图

通过显示数值变量的核密度估计来展示变量的分布。

小提琴图用以展示一个或多个分类变量下的数值变量的分布情况。它通过显示核密度估计,提供了更丰富和平滑的分布信息,这比箱线图的五数概括能提供更加详细的数值变量分布的整体情况。

sns.violinplot(
    data=None,
    *,
    x=None,
    y=None,
    hue=None,
    order=None,
    hue_order=None,
    bw='scott',
    cut=2,
    scale='area',
    scale_hue=True,
    gridsize=100,
    width=0.8,
    inner='box',
    split=False,
    dodge=True,
    orient=None,
    linewidth=None,
    color=None,
    palette=None,
    saturation=0.75,
    ax=None,
    **kwargs,
)
sns.violinplot(x='day', y='total_bill', data=tips_df, hue='sex', split=True)
plt.show()

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-aEpneOSA-1682498725780)(../images/python-seaborn.001/output_31_0.png)]

stripplot

条形图

通过显示每个观测值来展示分类变量下的分布。

用于以点的形式显示分类变量下的每个观测值,它提供了变量分布的最详细信息,可以清楚展现出异常值和聚类。但是当观测值较多时,条形图会显得很杂乱。这时候,jitter参数可以添加随机抖动,使得分布更加均匀,便于观察。

sns.stripplot(
    data=None,
    *,
    x=None,
    y=None,
    hue=None,
    order=None,
    hue_order=None,
    jitter=True,
    dodge=False,
    orient=None,
    color=None,
    palette=None,
    size=5,
    edgecolor='gray',
    linewidth=0,
    hue_norm=None,
    native_scale=False,
    formatter=None,
    legend='auto',
    ax=None,
    **kwargs,
)
plt.figure(figsize=(8, 5))

sns.stripplot(x='day', y='total_bill', data=tips_df, jitter=True, hue='sex')
plt.show()

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-COWdGOvh-1682498725780)(../images/python-seaborn.001/output_33_0.png)]

plt.figure(figsize=(8, 5))

sns.stripplot(x='day', y='total_bill', data=tips_df, jitter=True, hue='sex', dodge=True)
plt.show()

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-XAZHuv7o-1682498725780)(../images/python-seaborn.001/output_34_0.png)]

swarmplot

条形图

与 stripplot() 类似,同样通过显示每个观测值来展示分类变量下的分布。但是它在绘制时会对重叠的点进行偏移,使得分布更加均匀,便于观察。

可以把 violinplot + swarmplot 结合起来使用.

sns.swarmplot(
    data=None,
    *,
    x=None,
    y=None,
    hue=None,
    order=None,
    hue_order=None,
    dodge=False,
    orient=None,
    color=None,
    palette=None,
    size=5,
    edgecolor='gray',
    linewidth=0,
    hue_norm=None,
    native_scale=False,
    formatter=None,
    legend='auto',
    warn_thresh=0.05,
    ax=None,
    **kwargs,
)
sns.swarmplot(x='day', y='total_bill', data=tips_df)
plt.show()

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-4w5v4HSz-1682498725780)(../images/python-seaborn.001/output_36_0.png)]

# violinplot + swarmplot
sns.violinplot(x='day', y='total_bill', data=tips_df)
sns.swarmplot(x='day', y='total_bill', data=tips_df, color='white')
plt.show()

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-MeOmht58-1682498725781)(../images/python-seaborn.001/output_37_0.png)]

pandas corr()

计算相关系数矩阵

计算变量之间的pearson相关系数、spearman相关系数或kendall相关系数矩阵。

相关系数矩阵为分析变量之间相关性提供了重要依据。我们可以据此选择相关性高的变量进行模型搭建,或者识别冗余变量等。

参数:

  • method - 相关系数方法,可选’pearson’,‘spearman’,‘kendall’,默认为’pearson’
  • min_periods - 计算相关系数所需的最小观测数,默认为1

heatmap

热力图

通过显示数据矩阵的颜色映射来展示数据的分布和聚集情况。

热力图用于将数据矩阵的值通过颜色映射的方式直观地展示出来。它将数据聚集和分布情况从数值为主的表格形式转变为能从视觉上直接识别的色块形式。

热力图常用于展示相关系数矩阵、Confusion Matrix等数据,它提供一个从宏观上判断矩阵数据分布和聚集的快速方式。但热力图难以精确识别每个值,这时添加annot参数可以在每个色块上方标注值,达到详细而直观展示数据的目的。

sns.heatmap(
    data,
    *,
    vmin=None,
    vmax=None,
    cmap=None,
    center=None,
    robust=False,
    annot=None,
    fmt='.2g',
    annot_kws=None,
    linewidths=0,
    linecolor='white',
    cbar=True,
    cbar_kws=None,
    cbar_ax=None,
    square=False,
    xticklabels='auto',
    yticklabels='auto',
    mask=None,
    ax=None,
    **kwargs,
)
plt.figure(figsize=(8, 5))
sns.set_context('paper', font_scale=1.4)

crash_mx = crash_df.corr(numeric_only=True)

print(crash_mx)

# sns.heatmap(crash_mx, annot=True)
sns.heatmap(crash_mx, annot=True, cmap='Blues')

plt.show()
                   total  speeding   alcohol  not_distracted  no_previous  \
total           1.000000  0.611548  0.852613        0.827560     0.956179   
speeding        0.611548  1.000000  0.669719        0.588010     0.571976   
alcohol         0.852613  0.669719  1.000000        0.732816     0.783520   
not_distracted  0.827560  0.588010  0.732816        1.000000     0.747307   
no_previous     0.956179  0.571976  0.783520        0.747307     1.000000   
ins_premium    -0.199702 -0.077675 -0.170612       -0.174856    -0.156895   
ins_losses     -0.036011 -0.065928 -0.112547       -0.075970    -0.006359   

                ins_premium  ins_losses  
total             -0.199702   -0.036011  
speeding          -0.077675   -0.065928  
alcohol           -0.170612   -0.112547  
not_distracted    -0.174856   -0.075970  
no_previous       -0.156895   -0.006359  
ins_premium        1.000000    0.623116  
ins_losses         0.623116    1.000000  

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-V9hj5V9F-1682498725781)(../images/python-seaborn.001/output_39_1.png)]

pivot_table

用于进行数据透视表操作。它可以将数据进行重塑和汇总,得到表格化的统计结果。

用于将数据进行重塑和汇总,可以得到分类汇总,频数和交叉表格的统计结果。它通过指定行标签、列标签和汇总方法,可以将数据聚合在一起,得到直观的表格化输出,这比直接查看原始数据更加清晰。

透视表为分析不同分类下的数据情况和总体统计提供了很好的工具。可以通过它发现某分类的异常值或有趣的分布,为后续建模或分析提供参考。

pd.pivot_table(
    data: 'DataFrame',
    values=None,
    index=None,
    columns=None,
    aggfunc: 'AggFuncType' = 'mean', # 汇总函数,默认为求平均值mean,可以是sum、count、std等
    fill_value=None,
    margins: 'bool' = False,
    dropna: 'bool' = True,
    margins_name: 'str' = 'All',
    observed: 'bool' = False,
    sort: 'bool' = True,
) -> 'DataFrame'
flights = sns.load_dataset('flights')
print(flights.head())
flights = flights.pivot_table(index='month', columns='year', values='passengers')

sns.heatmap(flights, cmap='Blues', linecolor='white', linewidth=1)

plt.show()
   year month  passengers
0  1949   Jan         112
1  1949   Feb         118
2  1949   Mar         132
3  1949   Apr         129
4  1949   May         121

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-gbVzbMTY-1682498725781)(../images/python-seaborn.001/output_41_1.png)]

clustermap

聚类热力图

通过层次聚类和热力图相结合的方式展示数据的聚集情况。

聚类热力图将层次聚类与热力图相结合,它既展示了数据矩阵的值与变量之间的相关性,也展示了变量之间的聚集情况。通过观察树图和热力图,我们可以清晰看出哪些变量相关性较高、聚集较紧密。

聚类热力图常用于展示相关系数矩阵,它提供了判断变量相关性和聚类的重要依据。我们可以通过它选择相关较高的变量构建模型,或识别变量之间的冗余等。相比热力图,它可以更清晰展示变量之间的内在关联。

在聚类热力图中,线条表示变量之间的聚类关系。具体来说:

  • 树枝长度表示变量之间的聚类程度,长度越短表示聚类越紧密。
  • 树枝连接的变量表示它们之间的相似性较高,聚类较近。
  • 位于同一树枝上的变量,表示它们与其他变量的相似性均较高,聚类较紧密。
  • 位于不同树枝但树枝较近的变量,表示它们之间的相似性也较高,相对而言聚类也较近。
  • 位于完全不同树枝的变量,表示它们之间的相似性较低,聚类较远。

通过观察线条,我们可以清晰判断变量之间的相似性和聚类情况:

  • 连接在一起或位于同一树枝上的变量,相关性和聚类程度较高。这些变量之间可能存在一定的冗余,可以考虑在建模时剔除某些。
  • 树枝长度较短的变量,无论是否直接连接,它们之间的相似性和聚类都较紧密。这提示这些变量之间可能具有较强的相关性,可以考虑一起使用。
  • 位于完全不同树枝的变量,相关性和聚类程度较低。这些变量提供的信息可能不同,可以考虑同时使用,以获得更全面的模型。
  • 位于较近树枝的变量,相关性和聚类程度一般。这需要根据实际情况具体判断这些变量的相关性是否适度,以决定在建模时是否同时使用。

聚类热力图中的线条提供了判断变量之间相似性和聚类的重要信息。通过对线条的观察和理解,我们可以更好地选择变量,构建出相关性适度的模型。这比直接观察相关系数矩阵更加直观和准确。

sns.clustermap(
    data,
    *,
    pivot_kws=None,
    method='average',
    metric='euclidean',
    z_score=None,
    standard_scale=None,
    figsize=(10, 10),
    cbar_kws=None,
    row_cluster=True,
    col_cluster=True,
    row_linkage=None,
    col_linkage=None,
    row_colors=None,
    col_colors=None,
    mask=None,
    dendrogram_ratio=0.2,
    colors_ratio=0.03,
    cbar_pos=(0.02, 0.8, 0.05, 0.18),
    tree_kws=None,
    **kwargs,
)
sns.clustermap(flights, cmap='Blues', standard_scale=1)

plt.show()

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-AeiZg33N-1682498725781)(../images/python-seaborn.001/output_43_0.png)]

pairgrid

散点矩阵图

通过显示数据中所有变量之间的散点图矩阵来展示变量之间的相关性。

PairGrid可以绘制数据中所有变量或指定变量之间的散点矩阵图。它通过散点图的分布和形状展示了变量之间的相关性,这比直接观察数据更加直观。

散点矩阵图常用于探索变量之间的关系,选择相关性较高的变量构建模型。它提供了判断变量之间相关性强弱和相关类型的重要依据。与相关系数矩阵相比,散点矩阵图通过可视化的方式更加直观地展示了变量之间的内在依赖。

g = sns.PairGrid(
    data,
    *,
    hue=None,
    vars=None,
    x_vars=None,
    y_vars=None,
    hue_order=None,
    palette=None,
    hue_kws=None,
    corner=False,
    diag_sharey=True,
    height=2.5,
    aspect=1,
    layout_pad=0.5,
    despine=True,
    dropna=False,
)

所有图

g.map(sns.regplot)

对角线图

g.map_diag(sns.kdeplot) 

非对角线图

g.map_offdiag(sns.scatterplot)

上三角

g.map_upper(sns.histplot)

下三角

g.map_lower(sns.kdeplot)

如果都设置, 都会生效

iris = sns.load_dataset('iris')
print(iris.head())

iris_g = sns.PairGrid(iris, hue='species')
# iris_g = sns.PairGrid(iris, vars=['sepal_length', 'sepal_width'], hue='species')
# 所有图
# iris_g.map(sns.regplot)
# 对角线图
iris_g.map_diag(sns.kdeplot) 
# 非对角线图
# iris_g.map_offdiag(sns.scatterplot)
# 上三角
iris_g.map_upper(sns.histplot)
# 下三角
iris_g.map_lower(sns.kdeplot)

plt.show()
   sepal_length  sepal_width  petal_length  petal_width species
0           5.1          3.5           1.4          0.2  setosa
1           4.9          3.0           1.4          0.2  setosa
2           4.7          3.2           1.3          0.2  setosa
3           4.6          3.1           1.5          0.2  setosa
4           5.0          3.6           1.4          0.2  setosa

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-USMXF7ma-1682498725781)(../images/python-seaborn.001/output_45_1.png)]

FacetGrid

分面网格图。它通过将数据按照行或列的方式进行拆分,并在每个面板中绘制相同的图形来展示数据的分布。

FacetGrid可以将数据中的分类变量用于行分面或列分面,在每个面板中绘制相同类型的图形。它通过将数据分类后在不同的面板中显示,让我们可以更清晰地观察每个分类下的数据分布。

分面网格图常用于探索分类变量对数据分布的影响。我们可以通过它找到某分类下的异常值或有趣变化,为进一步分析提供思路。与绘制全部数据的图形相比,它可以避免图像过于复杂,更清晰直观地显示每个分类的信息。

sns.FacetGrid(
    data,
    *,
    row=None,
    col=None,
    hue=None,
    col_wrap=None,
    sharex=True,
    sharey=True,
    height=3,
    aspect=1,
    palette=None,
    row_order=None,
    col_order=None,
    hue_order=None,
    hue_kws=None,
    dropna=False,
    legend_out=True,
    despine=True,
    margin_titles=False,
    xlim=None,
    ylim=None,
    subplot_kws=None,
    gridspec_kws=None,
)
tips_fg = sns.FacetGrid(tips_df, col='time', row='smoker')
tips_fg.map(plt.hist, 'total_bill', bins=8)

plt.show()

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-kJWeEVFW-1682498725782)(../images/python-seaborn.001/output_47_0.png)]

tips_fg = sns.FacetGrid(tips_df, col='time', row='smoker', height=4, aspect=1.3)
tips_fg.map(plt.hist, 'total_bill', bins=8)

plt.show()

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-emTMNbhF-1682498725782)(../images/python-seaborn.001/output_48_0.png)]

tips_fg = sns.FacetGrid(
    tips_df, 
    col='time', 
    row='smoker', 
    height=4,
    aspect=1.3,
    col_order=['Dinner', 'Lunch'],
    palette='Setl'
)
tips_fg.map(plt.scatter, 'total_bill', 'tip')

plt.show()

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-shDereNb-1682498725782)(../images/python-seaborn.001/output_49_0.png)]

kws = dict(s=50, linewidth=.5, edgecolor='w')
tips_fg = sns.FacetGrid(
    tips_df, 
    col='sex', 
    hue='smoker',
    height=4,
    aspect=1.3,
    hue_order=['Yes', 'No'],
    hue_kws=dict(marker=['^', 'v'])
)
tips_fg.map(plt.scatter, 'total_bill', 'tip', **kws)

plt.show()

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-m2b0H75D-1682498725782)(../images/python-seaborn.001/output_50_0.png)]

att_df = sns.load_dataset('attention')
att_fg = sns.FacetGrid(att_df, col='subject', col_wrap=5, height=5)
att_fg.map(plt.plot, 'solutions', 'score', marker='.')

plt.show()

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-lVrnWWRV-1682498725782)(../images/python-seaborn.001/output_51_0.png)]

lmplot

线性回归模型的散点图和回归线

通过在散点图上显示线性回归模型的拟合结果直观展示两个变量之间的线性关系。

lmplot可以绘制两变量间的散点图和线性回归模型,它通过可视化的方式直观展示了变量之间的线性相关性。我们可以通过观察散点图的分布和回归线的拟合程度判断两变量是否存在线性关系及其强弱。

线性回归模型的可视化分析为判断变量之间的线性依赖提供了重要依据。与相关系数相比,它通过图形化显示了变量之间线性相关的详细信息,这更加直观和准确。我们可以据此选择线性相关较强的变量进行线性回归模型的构建。

sns.lmplot(
    data=None,
    *,
    x=None,
    y=None,
    hue=None,
    col=None,
    row=None,
    palette=None,
    col_wrap=None,
    height=5,
    aspect=1,
    markers='o',
    sharex=None,
    sharey=None,
    hue_order=None,
    col_order=None,
    row_order=None,
    legend=True,
    legend_out=None,
    x_estimator=None,
    x_bins=None,
    x_ci='ci',
    scatter=True,
    fit_reg=True,
    ci=95,
    n_boot=1000,
    units=None,
    seed=None,
    order=1,
    logistic=False,
    lowess=False,
    robust=False,
    logx=False,
    x_partial=None,
    y_partial=None,
    truncate=True,
    x_jitter=None,
    y_jitter=None,
    scatter_kws=None,
    line_kws=None,
    facet_kws=None,
)
plt.figure(figsize=(8,6 ))

sns.set_context('paper', font_scale=1.4)
sns.lmplot(
    x='total_bill', 
    y='tip',
    hue='sex',
    data=tips_df,
    markers=['o', '^'],
    scatter_kws={'s': 100, 'linewidth': 0.5, 'edgecolor': 'w'}
)

plt.show()
<Figure size 800x600 with 0 Axes>

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-qOnAZhPJ-1682498725783)(../images/python-seaborn.001/output_53_1.png)]

sns.lmplot(
    x='total_bill',
    y='tip',
    col='sex',
    row='time',
    data=tips_df,
    height=5,
    aspect=0.7
)
plt.show()

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-bAouKm6T-1682498725783)(../images/python-seaborn.001/output_54_0.png)]

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/464581.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

python装不上库的心得

如果在相同的环境下别人能安装上&#xff0c;但你安装不上&#xff0c;可以考虑下面几点 目录 1 升级pip 2 有的包不用刻意装&#xff0c;它跟着别的就一起装了 3 缺少外部依赖 4 有的库用conda安装要方便一点 5 导入名不一定是包名 6 编译安装 7 安装包时&…

西门子S7-1500与FANUC机器人进行EtherNetIP通信的具体方法示例

西门子S7-1500与FANUC机器人进行EtherNetIP通信的具体方法示例 具体方法可参考以下内容: 以下示例中TIA博途的版本为V17,本例中PLC做主站,机器人做从站 一、 西门子PLC一侧的组态设置和编程 首先,我们需要到下载所需的EtherNetIP通信库文件,大家可自行百度获取或者从以下链…

Kafka的核心概念

一、消息&#xff08;Record&#xff09; 消息是 Kafka 中最基本的数据单元。消息由一串字节构成&#xff0c;其中主要由 key 和 value 构成&#xff0c;key 和 value 也都是 byte 数组。消息的真正有效负载是 value 部分的数据。为了提高网络和存储的利用率&#xff0c;生产者…

TCP流量控制与拥塞控制

什么是流量控制 一条TCP连接的每一侧主机都为该连接设置了接收缓存。当该TCP连接接收到正确的、有序的报文段&#xff0c;就会将数据放入接收缓存。相关联的应用会从缓存中读取数据。 如果发送者发送数据过快、过多&#xff0c;而接收方的应用程序从缓冲区读取的速度较慢&…

【C++】二叉搜索树经典OJ题目

文章目录 根据二叉树创建字符串二叉树的层序遍历二叉树的层序遍历II二叉树的最近公共祖先二叉搜索树与双向链表从前序与中序遍历序列构造二叉树从中序与后序遍历序列构造二叉树二叉树的前序遍历(非递归)二叉树的中序遍历(非递归)二叉树的后序遍历(非递归) 根据二叉树创建字符串…

捷报连连丨小匠物联SILA第六届“智光杯”荣获两项跨界大奖

2023年4月26日&#xff0c;SILA第六届“智光杯”跨界奖项名单公布。 喜讯传来&#xff0c;小匠物联荣获SILA第六届“智光杯”跨界奖项-全屋智能及商用系统优秀新供应链奖、智能照明新锐优秀新供应链奖。 “智光杯”“智光杯”由上海浦东智能照明联合会&#xff08;SILA&#xf…

【校招VIP】简历上项目名称看起来不重复,是安全相关项目,但是为什么简历通过率还是低?

在简历指导的直播里面&#xff0c;我看了一个新的项目。 这是个信息安全方向的一个项目&#xff0c;之前倒是没有看过。 所以项目的介绍本身是看不出它的重复度的。 但是一往下看 12345的要点&#xff0c;就发现这又是一个烂大街的。 项目本身的逻辑是没有写的。 然后又是所…

【Linux脚本篇】shell变量的使用

目录 &#x1f341;shell变量替换 &#x1f341;定义变量 &#x1f341;shell变量运算 &#x1f342;整数运算 &#x1f342;小数运算 &#x1f990;博客主页&#xff1a;大虾好吃吗的博客 &#x1f990;专栏地址&#xff1a;Linux从入门到精通 shell变量替换 ${变量#匹配规则}…

设计模式 -- 访问者模式

前言 月是一轮明镜,晶莹剔透,代表着一张白纸(啥也不懂) 央是一片海洋,海乃百川,代表着一块海绵(吸纳万物) 泽是一柄利剑,千锤百炼,代表着千百锤炼(输入输出) 月央泽,学习的一种过程,从白纸->吸收各种知识->不断输入输出变成自己的内容 希望大家一起坚持这个过程,也同…

SpringCloud入门实战(七)-Hystrix服务降级

&#x1f4dd; 学技术、更要掌握学习的方法&#xff0c;一起学习&#xff0c;让进步发生 &#x1f469;&#x1f3fb; 作者&#xff1a;一只IT攻城狮 。 &#x1f490;学习建议&#xff1a;1、养成习惯&#xff0c;学习java的任何一个技术&#xff0c;都可以先去官网先看看&…

三翼鸟:传统品牌只盯局部,智慧品牌谋划全局

“当今企业之间的竞争&#xff0c;不是产品之间的竞争&#xff0c;而是商业模式之间的竞争。”很多人都听过现代管理学之父德鲁克的这句话&#xff0c;但又有多少人真正理解了它&#xff1f; 以当下的语境去看&#xff0c;这里其实就是“自利”和“共荣”的区别。前者&#xf…

多臂老虎机问题

1.问题简介 多臂老虎机问题可以被看作简化版的强化学习问题&#xff0c;算是最简单的“和环境交互中的学习”的一种形式&#xff0c;不存在状态信息&#xff0c;只有动作和奖励。多臂老虎机中的探索与利用&#xff08;exploration vs. exploitation&#xff09;问题一直以来都…

Zabbix“专家坐诊”第189期问答汇总

问题一 Q&#xff1a;您好&#xff0c;为什么在shell脚本中&#xff0c;不写mysql命令的绝对路径&#xff0c;zabbix获取不到输出的值&#xff1f; A&#xff1a;mysql默认命令是针对root等有权限才能直接使用的&#xff0c;其他用户要使用要指定命令路径。 Q&#xff1a;zab…

SLB负载均衡haproxy的安装及使用

1.介绍 HAProxy是什么 HAProxy是一个免费的负载均衡软件&#xff0c;可以运行于大部分主流的Linux操作系统上。 HAProxy提供了L4(TCP)和L7(HTTP)两种负载均衡能力&#xff0c;具备丰富的功能。HAProxy的社区非常活跃&#xff0c;版本更新快速&#xff08;最新稳定版1.7.2于2…

【剧前爆米花--爪哇岛寻宝】网络互连,网络通信和网络分层

作者&#xff1a;困了电视剧 专栏&#xff1a;《JavaEE初阶》 文章分布&#xff1a;这是一篇关于网络初识的文章&#xff0c;在这篇文章中讲解了局域网广域网&#xff0c;IP地址&#xff0c;端口以及网络分层等相关内容&#xff0c;希望对你有所帮助&#xff01; 目录 网络互连…

无线通信网 - 无线局域网 WLAN(802.11 标准)

文章目录 1 概述2 WLAN2.1 802.11 标准2.2 网络分类2.3 通信技术 3 扩展3.1 移动通信3.2 网工软考真题 1 概述 #mermaid-svg-UcgosJsdJfSTEm0Y {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-UcgosJsdJfSTEm0Y .err…

PMO和PM必备六大复盘方法工具汇总

无论是对于企业还是个人来说&#xff0c;复盘都是一个能让我们快速成长的方法&#xff0c;尤其是项目经理和PMO&#xff0c;你是带领项目团队的&#xff0c;每一次项目的完成&#xff0c;都有很多经验&#xff0c;俗话说&#xff0c;最大的浪费是经验的浪费&#xff01; 复盘的…

如何解决国外主机托管中遇到的常见问题?

在国际化发展的今天&#xff0c;越来越多的企业和个人选择将网站托管在国外主机上。这样做的好处是显而易见的&#xff0c;如更好的网站访问速度、更多的服务器资源、更优质的服务和更灵活的管理权限等。但同时&#xff0c;使用国外主机也会带来一些问题。本文将讨论国外主机托…

浪潮信息龙蜥联合实验室领衔成立 Serverless SIG 打造标准化开源解决方案

近日&#xff0c;浪潮信息龙蜥联合实验室在龙蜥社区领衔成立 Serverless SIG&#xff08;服务器无感知计算 SIG&#xff09;&#xff0c;并举行了首届 Serverless SIG MeetUp&#xff0c;活动由浪潮信息龙蜥联合实验室主办&#xff0c;来自浪潮信息、天津大学、阿里云、Intel、…

面板数据熵权topsis法分析流程

面板数据熵权topsis法分析流程 一、案例背景 当前有9家公司连续5年&#xff08;2018-2022年&#xff09;的财务指标数据&#xff0c;想要通过这份数据&#xff0c;确定9家公司的财务排名情况。因为各项财务指标的权重有所不同&#xff0c;所以选择使用熵权topsis法进行研究。 …