如何使用Seaborn进行数据可视化

420 阅读6分钟

如何使用Seaborn进行数据可视化

数据可视化是一门以图表形式表现数据的艺术。对于从事数据工作的专业人士来说,它是一种有用的工具,即金融分析师、商业分析师、数据分析师、数据科学家,仅举几个例子。

在本教程中,我们将使用Seaborn,一个Python库。

绪论

Seaborn是一个建立在matplotlib之上的开源Python库。它被用于数据可视化和探索性数据分析。Seaborn很容易与数据框架和Pandas库一起工作。创建的图表也可以很容易地进行定制。以下是数据可视化的一些好处。

图形可以帮助我们找到在任何机器学习或预测项目中有用的数据趋势。

  • 图形使我们更容易向非技术人员解释你的数据。

  • 视觉上有吸引力的图表可以使演讲和报告对读者更有吸引力。

本教程可分为三个主要部分。第一部分将谈论安装seaborn和加载我们的数据集。在第二部分,我们将讨论Seaborn中一些常见的图形。最后,我们将使用seaborn和这个口袋妖怪数据来创建一些很酷的图形。

先决条件

  • 对Python有良好的理解。

  • 有使用Pandas库的经验。

  • 有使用Matplotlib库的经验。

  • 对数据分析有基本的了解。

安装Seaborn

如果你是在Google Colab上工作,你可以跳过安装步骤。但是,如果你是在你的本地机器上工作,你将需要安装Seaborn。我强烈建议创建一个虚拟环境以更好地管理你的软件包。

python -m venv venv
venv/Scripts/activate
pip install pandas, matplotlib, seaborn

导入Seaborn和加载数据集

import seaborn as sns
import pandas
import matplotlib.pyplot as plt

Seaborn有18个内置的数据集,可以用以下命令找到。

sns.get_dataset_names()

我们将在本教程中使用Titanic数据集。

df = sns.load_dataset('titanic')
df.head()

不同类型的图表

计数图

计数图在处理分类值时很有帮助。它是用来绘制不同类别的频率的。在泰坦尼克号的数据中,性别这一栏包含了分类数据,即男性和女性。

sns.countplot(x='sex',data=df)

image title

  • data- 数据框架。

  • x- 列的名称。

我们可以从图中观察到,男性乘客的数量明显高于女性乘客的数量。

我们可以根据另一个分类变量来进一步分解计数图中的条形。该图的调色板也可以自定义。

sns.countplot(x='sex', hue = 'survived', data = df,
palette = 'Set1')

image title

  • hue- 用于分割条形图的分类列的名称。

  • palette- 要使用的调色板。关于调色板的列表,请查看matplotlib的文档

KDE图

核心密度估计(KDE)图用于绘制连续数据的分布。

sns.kdeplot(x = 'age' , data = df , color = 'black')

image title

  • data- 数据框架。

  • x- 列的名称。

  • color- 图形的颜色。

上图的峰值在20和40之间,所以我们可以得出结论,大多数乘客的年龄在20和40之间。

分布图

分布图类似于KDE图。它用于绘制连续数据的分布。

sns.displot(x = 'age',kde=True,bins = 5 , data =df)

image title

  • kde- 默认情况下,它被设置为False。然而,如果你希望在条形图上绘制KDE图,你可以把它设置为True。

  • bins- 分区/条数的数量。数字越小,条形就越宽,间隔就越宽。

上面的图告诉我们,泰坦尼克号上的大多数人都在20岁左右。

sns.displot(x ='age',kde=True,bins = 5 ,
hue = df['survived'] , palette = 'Set3', data=df)

image title

你也可以把色调调色板作为参数来定制图表。

大多数幸存的乘客都在二十多岁。

散点图

对于这个图和下面的图,我们将使用虹膜数据集。虹膜数据集包含与花的花瓣大小(花瓣长度和花瓣宽度)和萼片大小(萼片长度和萼片宽度)有关的数据。

这些特征被用来对鸢尾花的类型进行分类(Setosa, Versicolour, 和Virginica)。下面我们将尝试研究这些特征之间的关系。

首先,我们需要加载虹膜数据集。

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

散点图有助于了解数据之间的共同关系。

sns.scatterplot(x='sepal_length', y ='petal_length' ,
data = df , hue = 'species')

image title

散点图需要X轴Y轴的数据。我们还可以为色调参数传递一个值,以便根据一个分类列为点着色。

在上面的图中,我们可以观察到,萼片长度<6厘米、花瓣长度>2厘米的鸢尾花最有可能是setosa型。虽然在花色点和处女花点之间没有明显的界限,但花瓣长度在2厘米和5厘米之间的鸢尾花很可能是花色类型,而花瓣长度>5厘米的鸢尾花很可能是处女花类型。

联合地块

联合图也用于绘制数据之间的相关关系。

sns.jointplot(x='sepal_length' , y ='petal_length',
data = df , kind = 'reg')

image title

  • kind- 要绘制的图的种类。它可以是以下的一种。

'scatter', 'hist', 'hex', 'kde', 'reg', 'resid'

对子图

Seaborn让我们绘制多个散点图。当你想快速了解你的数据时,这是一个不错的选择。

sns.pairplot(df)

image title

它对所有的连续数据进行配对,并绘制出它们的相关关系。它还绘制了数据的分布。

如果你不希望配对所有的列,你可以再传入两个参数x_varsy_vars。

热力图

热力图可以用来可视化混淆、矩阵和相关性。

corr = df.corr()
sns.heatmap(corr)

image title

我们可以自定义颜色方案、最小/最大值和注释。

根据热图,我们可以得出结论,萼片长度与花瓣长度和花瓣宽度具有高度的正相关,而萼片宽度与花瓣长度和花瓣宽度具有负相关。

sns.heatmap(corr, cmap=['red','green','blue'],
vmin = -.5 , vmax = 0.6,annot = True)

image title

口袋妖怪数据集的可视化

你可以从这里下载口袋妖怪数据集。

要把文件上传到google drive。

from google.colab import files
files.upload()

如果你在你的本地机器上工作,你可以跳过上面的步骤。确保你的下载文件与你的Python文件在同一个文件夹里。

pokemon_df = pd.read_csv('pokemon.csv')
pokemon_df.head()

口袋妖怪类型分布

plt.figure(figsize=(15,8))
sns.countplot(x = 'type1' , data = pokemon_df,
hue = 'is_legendary')

image title

由于Seaborn是建立在matplotlib之上的,我们可以使用matplotlib的函数来增加我们图形的大小。观察该图,我们可以得出结论,水和普通是主要的小精灵类型。我们还可以得出结论,传奇小精灵的主导类型是通灵。

攻击和防御之间的关系

sns.pairplot(x_vars=['attack' , 'defense','sp_attack','sp_defense'] ,
y_vars=['attack' , 'defense','sp_attack','sp_defense'] ,
data = pokemon_df)

image title

你也可以选择通过色调参数来获得更多的洞察力。

身高和体重之间的关系

sns.jointplot(x = 'weight_kg', y = 'height_m',
data = pokemon_df,hue = 'is_legendary')

image title

根据上面的图表,我们可以得出结论,小精灵的身高和体重没有任何关联。

你可以尝试其他一些图。

  • 身高/体重的分布。

  • 传说中的小精灵与非传说中的小精灵的数量。

  • 特殊攻击和特殊防御的回归图。

  • 显示特征之间相关性的热图。

结论

数据可视化是展示数据的好方法,Seaborn是你工具箱中的一个有用工具。由于它是建立在matplotlib之上的,你可以像定制使用matplotlib制作的图一样定制你的图。