在本教程中,您将学习所有关于 直方图密度图

设置笔记本

像往常一样,我们从设置编码环境开始。(这段代码是隐藏的,但是你可以通过点击右边紧挨着这段文字下面的“代码”按钮来解除隐藏。)

import pandas as pd
pd.plotting.register_matplotlib_converters()
import matplotlib.pyplot as plt
%matplotlib inline
import seaborn as sns
print("Setup Complete")
Setup Complete

选择数据集

我们将使用由150种不同的花组成的数据集,其中每种花分别来自三种不同的鸢尾属(Iris setosaIris versicolorIris virginica),每种50个。

image1.jpg

加载和检查数据

数据集中的每一行对应于不同的花。有四个测量值:花萼的长度和宽度,以及花瓣的长度和宽度。我们还跟踪相应的物种。

# Path of the file to read
iris_filepath = "../input/iris.csv"

# Read the file into a variable iris_data
iris_data = pd.read_csv(iris_filepath, index_col="Id")

# Print the first 5 rows of the data
iris_data.head()
Sepal Length (cm) Sepal Width (cm) Petal Length (cm) Petal Width (cm) Species
Id
1 5.1 3.5 1.4 0.2 Iris-setosa
2 4.9 3.0 1.4 0.2 Iris-setosa
3 4.7 3.2 1.3 0.2 Iris-setosa
4 4.6 3.1 1.5 0.2 Iris-setosa
5 5.0 3.6 1.4 0.2 Iris-setosa

直方图

假设我们想创建一个直方图来观察鸢尾花的花瓣长度是如何变化的。我们可以使用sns.histplot命令来完成这个操作。

# Histogram 
sns.histplot(iris_data['Petal Length (cm)'])

output51.png

在上面的代码单元格中,我们必须为命令提供想要绘制的列(在本例中,我们选择了'Petal Length (cm)')。

密度图

下一种类型的图是 核密度估计(KDE) 图。如果您不熟悉 KDE 图,您可以将其视为平滑的直方图。

要创建 KDE 绘图,我们使用sns.kdeplot命令。设置shade=True为曲线下面的区域着色(data= 选择我们想要绘制的列)。

# KDE plot 
sns.kdeplot(data=iris_data['Petal Length (cm)'], shade=True)

output71.png

2D KDE图

在创建 KDE 图时,我们不限于单列。我们可以使用 sns.jointplot 命令创建一个 二维(2D) KDE 图

在下面的图表中,颜色编码显示了我们看到不同的萼片宽度和花瓣长度组合的可能性,这些组合中较暗的部分更有可能出现。

# 2D KDE plot
sns.jointplot(x=iris_data['Petal Length (cm)'], y=iris_data['Sepal Width (cm)'], kind="kde")

output91.png

注意,除了中间的2D KDE 图,

  • 该图顶部的曲线是 x 轴上数据的 KDE 图(在本例中为iris_data['Petal Length (cm)']),以及
  • 该图右侧的曲线是 y 轴上数据的 KDE 图(在本例中为iris_data['Sepal Width (cm)'])。

颜色编码图表

在本教程的下一部分中,我们将创建图表以了解物种之间的差异。

我们可以使用 sns.histplot 命令( 如上所述 )创建三个不同的直方图(每个物种一个),来显示花瓣长度。

  • data= 提供了我们用于读取数据的变量名称
  • x= 设置我们要绘制的数据所在的列的名称
  • hue= 设置我们将使用的列以将数据拆分为不同的直方图
# Histograms for each species
sns.histplot(data=iris_data, x='Petal Length (cm)', hue='Species')

# Add title
plt.title("Histogram of Petal Lengths, by Species")

output121.png

我们还可以使用sns.kdeplot(as above)为每个物种创建 KDE 图。data, x, 和 hue的功能与上面使用 sns.histplot 时相同。另外,我们设置 shade=True 来给每条曲线下面的区域着色。

# KDE plots for each species
sns.kdeplot(data=iris_data, x='Petal Length (cm)', hue='Species', shade=True)

# Add title
plt.title("Distribution of Petal Lengths, by Species")

output141.png

在图中可以看到的一个有趣的模式是,这些植物似乎属于两个类别中的一个,在这两个类别中,Iris versicolorIris virginica 的花瓣长度似乎具有相似的值,而 Iris setosa 则完全属于一个类别。

事实上,根据这个数据集,我们甚至可以通过观察花瓣长度将任何鸢尾属植物分类为 Iris setosa (与 Iris versicolorIris virginica 相对应) : 如果一朵鸢尾花的花瓣长度小于2厘米,那么它最有可能是 Iris setosa


标题:Kaggle数据可视化(五)直方图与密度图
作者:Departure
地址:https://www.unreachablecity.club/articles/2023/04/20/1682051162300.html