使用 Seaborn 和 Pandas 进行数据可视化
在《使用 Python 和 Pandas 进行数据清洗》系列的第七部分中,我们将探索可视化选项。
引言
本文是《使用 Python 和 Pandas 进行数据清洗》系列的一部分。其目标是帮助开发人员快速上手数据科学工具和技术。
如果您想查看该系列中的其他文章,可以在此处找到它们。
- 第一部分 - Jupyter 和 Pandas 入门
- 第二部分 - 将 CSV 和 SQL 数据加载到 Pandas 中
- 第三部分 - 在 Pandas 中更正缺失数据
- 第四部分 - 在 Pandas 中合并多个数据集
- 第五部分 - 在 Pandas DataFrame 中清理数据
- 第六部分 - 在 Pandas DataFrame 中重塑数据
- 第七部分 - 使用 Seaborn 和 Pandas 进行数据可视化
现在我们的数据似乎已经清洗干净,并且我们有了几种不同的查看方式,我们可以探索我们的可视化选项。可视化是数据清洗过程中的最后一个重要步骤,因为它提供了一种确保数据集有意义的有效方法。
请注意,我们已为本系列模块创建了一个完整的 Jupyter Notebook 和源代码文件,您可以下载并在本地安装。
比较 Python 中的可视化库
Python 中有很多用于可视化数据集的库。流行的库包括 Matplotlib、Seaborn、ggplt 和 Plotly。我们目前正在使用的 Pandas 库也有其自己的可视化功能。
那么,如何选择以及需要什么呢?这很大程度上取决于您的需求,以及您对可视化和 Python 的熟悉程度。
- Matplotlib 可能是使用最广泛的库,因为它是最早的可视化库之一,并且功能强大。然而,它很复杂,而且它的年代感在其可视化呈现方式中显而易见。
- ggplot 是一个从 R 编程语言移植过来的绘图系统,R 用于统计和数据挖掘。与 Matplotlib 相比,ggplot 使创建可视化更加简单,并且非常擅长绘制分层图。
- Plotly 在创建动态和交互式可视化方面表现出色,与同名在线平台类似。
- Seaborn 建立在 Matplotlib 之上,利用了该库的功能,同时简化了制图过程。它还有许多非常令人愉悦的默认样式,使得刚开始接触 Python 数据科学的开发者更容易创建出漂亮的可视化。
在我们的例子中,我们将展示 Seaborn 对我们数据集的一些可视化。
Seaborn 可视化类型
在基于数据集构建可视化时,您可以选择许多样式。有时,最简单的选项会提供最佳结果,但某些可视化适合不同的数据集。
以下是一些更常见可视化的示例:
- 条形图 - 最常见的数据可视化是条形图。当您想要比较不同数据元素时,此图表最有用。例如,在条形图中,您可以非常轻松地看到最大值、最小值或一个或多个值之间的差异。
- 面积图 - 面积图看起来与条形图相似,但更适用于显示值的增加和减少。
- 折线图 - 折线图通常用于表示随时间变化的少量观察结果,例如趋势分析,尤其是在这些随时间的变化很小时。
- 箱线图 - 有时您的数据集并非由简单值组成。箱线图允许您可视化由五数概括组成的数据:最小值;第一四分位数;中位数;第二四分位数;最大值。
- 散点图 - 散点图,通常用点表示值,用于可视化值的分布。
- 核密度图 - 最后,如果您需要可视化概率密度,核密度图效果相当好。
这只是 Seaborn 可以创建的一些更受欢迎的可视化。Seaborn 的文档网站还有一个大型的示例库。我们将使用我们的数据集查看两种不同的可视化:条形图和折线图。
虽然这两种可视化只是 Seaborn 功能的一小部分,但重要的是要理解 Seaborn API,并观察它如何轻松地直接从 Pandas DataFrame 中提取数据。一旦您理解了如何使用 Seaborn 创建简单图表,您就可以开始深入使用该库更高级的可视化功能了。
创建 Seaborn 条形图
我们将使用本系列早期文章中创建的 Pandas DataFrame 来获取数据。如果您想了解这些 DataFrame 是如何创建的,请随时回去阅读整个系列。阅读起来又快又有趣!
但是,如果您已经熟悉 Pandas DataFrame,则无需阅读该系列。您已经了解了理解下面代码示例所需的一切。
为了展示一个简单的条形图,让我们来看看我们在重塑数据步骤结束时创建的按州划分的总购买量 DataFrame 的可视化。我们在笔记本的开头已经使用以下代码导入并设置了 Seaborn。
import seaborn as sns
sns.set(style="darkgrid")
如果我们开始一个新的代码块并添加以下内容:
plt.figure(figsize=(20,10))
stateTotalsChart = sns.barplot(data=totalsData, x='state',y='amount')
stateTotalsChart.set_xticklabels(stateTotalsChart.get_xticklabels(), rotation=45, horizontalalignment='right')
生成的条形图如下所示:
这三行代码完成了三件事。首先,通过设置 figsize
使默认图表稍大一些。第二行使用 barplot
创建实际的条形图,并将数据设置为 totals 数据,以 state 为 x 轴,amount 为 y 轴。最后一行稍微改进了 x 轴标签,通过旋转它们。这使得可视化看起来非常好,而只用了三行代码。
创建 Seaborn 折线图
为了展示折线图,我们将创建一个新的汇总 DataFrame,按购买日期对数据进行分组。创建一个新的代码块并添加以下内容:
purchasesByDay = combinedData.groupby(by='purch_date').sum().reset_index()
purchasesByDay.drop(columns=['purchase_id','customer_id','product_id'], inplace=True)
print(purchasesByDay.head(10))
这将创建一个新的 DataFrame,其中按天汇总了销售商品数量、支付金额和零售成本。
现在我们可以开始另一个新的代码块并创建我们的折线图:
plt.figure(figsize=(20,10))
dailyTotalsChart = sns.lineplot(data=purchasesByDay, x='purch_date',y='amount')
这是图表:
这次我们只需要两行:第一行设置图表的大小,并且因为 x 轴是日期序列,Seaborn 会正确地汇总 x 轴;第二行创建了随时间变化的购买总量图表。这使我们能够用很少的代码行轻松创建有用的图表。
评估
我们仅仅触及了 Seaborn 功能的表面,因为要详细介绍它需要一整本书。好消息是 Seaborn 的 API 非常一致;您可以运用您在创建简单的折线图和条形图中学到的知识,并将其应用于 Seaborn 的更高级的可视化。
此外,Seaborn 拥有出色的文档。如果您点击 Seaborn 大型示例库中的任何示例,您将看到展示如何创建该可视化的代码。
我们查看了 Python 中可用的多种不同的可视化库,以及一系列不同的可视化类型。仅用几行代码,我们就为清理过的数据集添加了一些有用的可视化。随着我们数据的变化,我们可以继续重复运行此笔记本,以生成每周、每月甚至每年的数据可视化更新。我们甚至可以使用此数据集来训练机器学习模型。