数据科学
Seaborn Distplot已经被弃用,让我们探索它的替代方案
Seaborn是Python中著名的数据可视化库。
由于它是建立在matplotlib之上的,并且与pandas数据结构完美配合,所以在使用Python处理数据时非常方便,因为它将数据转换为有见地的可视化形式,有助于聚焦于所需信息并更快地掌握结果。
然而,每个库都会随着时间的推移而发展,Seaborn也是如此。
当我在项目中使用Seaborn创建分布图时,我遇到了以下函数弃用警告。
因此,我开始寻找替代方案,并在今天分享我的发现。
在这篇快速阅读中,您将了解为什么Seaborn弃用了令人惊叹的函数distplot()
,它的当前最佳替代方案以及如何使用它来创建与distplot()
相同的图形。
以下是内容的一瞥——
· Seaborn中的Distplot · 为什么Seaborn Distplot被弃用? · Seaborn Distplot()的替代方案是什么? ∘ Seaborn中的displot() · 使用Seaborn中的displot()的实例 ∘ 双变量分布 ∘ 使用子数据集的图形
我使用UCI机器学习存储库中的Dry Beans数据集,这个数据集在CC BY 4.0许可下可用,用了一些很棒的例子来使本文更有趣。
让我们开始吧!
在查看替代方案之前,让我们先了解函数distplot()
及其有用之处。
Seaborn中的Distplot
Distplot()
是Seaborn库中的多功能函数,广泛用于单变量数据分析。它可以帮助您在同一个可视化中创建直方图和核密度估计(KDE)图。
什么是单变量数据分析?
它用于探索单个变量的特征和分布,而不考虑数据集中其他变量之间的关系。
因此,回到distplot()
,它由直方图和KDE图组成。
distplot()
中的直方图显示落入不同桶即箱子的数据点的频率或计数。
整个数据点系列或列表被分成相同大小的不同桶。可视化通常是一个条形图,其中X轴通常是桶或箱子,Y轴表示桶中的数据点数量。
这样的图形可以帮助您了解数据如何分布在不同的值范围内。
而KDE图则可以帮助您通过分析潜在的概率分布函数来可视化变量的分布。简单地说,它可以帮助您了解在不同的桶或箱子中观察数据点的可能性。
使用KDE图,您可以了解数据分布的形状、峰值和传播情况。
例如,让我们在列“Perimeter”上使用distplot()
函数。
import pandas as pdimport seaborn as snsdf = pd.read_excel("Dry_Bean_Dataset.xlsx")sns.distplot(df["Perimeter"])
如上图所示,条形图表示直方图,而平滑线是KDE图。
如我所述,distplot()
在已创建的直方图上创建一个KDE图,这就是为什么在Y轴上可以看到概率密度值的原因。
不要将概率与概率密度混淆!
您需要将每个概率密度值乘以曲线下的面积,以从每个概率密度值获得概率。
这样的KDE值只能用于不同桶之间的相对比较。
现在,让我们了解为什么您不应该在未来使用它。
为什么Seaborn Distplot已被弃用?
Distplot()
是Seaborn库中添加的最早的几个函数之一,因此其函数定义与后期添加的其他函数明显不同。
以下是Seaborn官方文档中distplot()
函数的定义。
seaborn.distplot(a=None, bins=None, hist=True, kde=True, rug=False,fit=None, hist_kws=None, kde_kws=None, rug_kws=None, fit_kws=None,color=None, vertical=False, norm_hist=False, axlabel=None, label=None,ax=None, x=None)
Michael Waskom解释得非常准确-distplot()
API既没有选择DataFrame列的x,y参数,也没有条件hue
映射。
因此,当Seaborn开发人员在Seaborn v0.11.0中更新分布模块时,他们发现除了废弃distplot()
以更符合其他分布图函数的一致性外,没有更好的方法。
结果,Seaborn distplot()
在Seaborn v0.11.0中已被弃用。
调用此函数实际上不会阻止您创建图,但会发出我之前提到的弃用警告。
这就是我开始探索替代方案的原因。
Seaborn Distplot的替代方案是什么?
Seaborn文档建议两种替代方案-displot()
和histplot()
。但是,我个人认为displot()
是一个多才多艺的解决方案。
让我向您展示它与弃用的distplot()
相比如何相似或不同。
Seaborn中的displot()
这是所有类型(单变量和双变量)分布图的一站式解决方案。您所需要做的就是传递一个DataFrame和要查看其分布的列名。
因此,要获取与上面类似的分布图,对于列“Perimeter”,您可以使用以下代码。
sns.displot(df, x="Perimeter")
它只是创建了一个直方图,与已弃用的distplot()
函数创建的直方图相同。您可以使用函数histplot()
获取此类型的图,这是另一种弃用函数的替代方案。
但是关于KDE图呢?
您也可以使用displot()
函数来得到一个KDE图。这时kind
参数非常有用。您可以将kde
赋值给kind
参数,得到如下的核密度估计图。
sns.displot(df, x="Perimeter", kind='kde')
到目前为止,一切都很好!
但是,您可能会有一个问题——displot()
函数如何创建类似于使用distplot
创建的图形,在直方图顶部绘制KDE的图形?
答案是kde
参数。
正如您所看到的,默认情况下,displot()
创建直方图。因此,要在直方图的顶部创建KDE图,可以将kde
参数设置为True
,如下所示。
sns.displot(df, x="Perimeter", kde=True)
真正使displot
函数不同于distplot
的是上图的Y轴。
在弃用的distplot()
函数中,Y轴代表概率密度,而在displot()
函数中,Y轴代表计数,即每个bin中的数据点数。
Y轴上的计数可以立即有用,以了解哪个bin或值范围包含最多/最少的数据点,这在概率密度的情况下不是这种情况。
好的,displot()
函数的灵活性并不止于此。让我向您展示您可以使用此函数做些什么,这在使用distplot()
时不是一项容易的任务。
Seaborn中displot()的用例
displot()
函数有许多可调整的参数,可以创建各种图形。
seaborn.displot(data=None, *, x=None, y=None, hue=None, row=None, col=None, weights=None, kind='hist', rug=False, rug_kws=None, log_scale=None, legend=True, palette=None, hue_order=None, hue_norm=None, color=None, col_wrap=None, row_order=None, col_order=None, height=5, aspect=1, facet_kws=None, **kwargs)
您可以看到,在上述定义中,参数kind
默认设置为'hist'
,这解释了为什么在未指定kind
参数时,displot()
创建直方图。
我不会深入探讨每个参数,但我必须提到一些有趣的参数。
双变量分布
displot()
函数的能力可以让您从DataFrame和该DataFrame的X-Y轴变量中获得输入,因此在您想要获取两个变量的双变量分布(即两个变量的分布)时非常有用。
例如,假设您想要在考虑周长和圆度两个变量时获取数据点的分布。您只需在X和Y参数中简单地提到这些变量名,如下所示。
sns.displot(df, x="Perimeter", y="roundness")
上面的图表清楚地显示出数据点的最大数量位于周长在600到800之间、圆度大于0.85的黑暗区域。
因此,您可以为所有数字列获得这种二元分布。
但是对于分类列呢?
在数据集中,您可以看到有一个分类列——Class,它表示不同的豆类。您可以使用此变量创建数据的子集,然后使用displot
轻松绘制。
使用数据子集绘图
在使用函数displot()
时,您无需单独创建数据框的子集。您只需使用hue
参数即可为每个数据子集创建直方图或KDE图。
让我们看看它的效果——
sns.displot(df, x="Perimeter", hue='Class')
这就是您可以看到每个数据子集的不同直方图的方法。
如果您想在不同的子图上获得这些不同的直方图。在这种情况下,您应该使用col
参数,如下所示。
sns.displot(df, x="Perimeter", col='Class')
以这种方式,displot()
将创建与您拥有的不同子集一样多的子图。
您可以根据需要在项目中探索displot()
中的其余参数。
我希望您会发现这篇文章有用。每个数据分析库随着时间的推移都会发生变化。因此,有些函数会过时,并被具有更好和更易于使用体验的改进函数所取代。
尽管Seaborn中的distplot()
已过时,但它并未完全退出市场。您仍然可以使用它,但最好切换到更好的函数displot
以获得不同的分布图表。
想阅读更多小猪AI的故事吗?
💡考虑成为小猪AI会员,以访问小猪AI上的无限故事和每日有趣的小猪AI通讯。我将获得您的一小部分费用,您不需要支付额外费用。
💡一定要注册并加入100多名其他成员,以不错过有关数据科学指南、技巧和提示以及SQL和Python的最佳实践的文章。
谢谢阅读!
数据集:Dry Beans Dataset 引用:Dry Bean Dataset. (2020). UCI Machine Learning Repository. https://doi.org/10.24432/C50S4B . 许可证:CC BY 4.0