使用 Python 在 Excel 中进行可视化数据分析:使用箱线图

Dave Langer

Dark blue background with a green gradient diagonal. In the top right corner 'Python in Excel' and the center has a green frame with the words 'Series: learning universal data analysis skills" inside.

这是教你使用 Microsoft Excel 中的 Python 代码以可视化方式分析数据的博客文章系列中的第二篇。

如果您不熟悉 Python 在 Excel 中的使用,您应该从我的 Python for Excel Analysts 博客系列开始,该系列涵盖了本博客系列中会假设的许多概念。

本系列将使用 Microsoft Excel Labs Python 编辑器 来编写代码。但是,Python 编辑器不是必需的。所有代码都可以使用公式栏和新的 PY() 函数 输入。

本系列中的每篇文章都附带一个 Microsoft Excel 工作簿供您下载使用,以培养您的技能。本篇文章的工作簿可供 下载

为了方便起见,以下是本系列中所有博客文章的链接

注意:要重现本篇文章中的示例,安装Python 在 Excel 中的试用版。如果您喜欢本博客系列,请查看我的自定进度的认证计划,Anaconda 认证:使用 Python 在 Excel 中进行数据分析

了解使用四分位数的分布

如本博客系列的第 1 部分所述,通过可视化检查原始数据来从一列数字中得出见解,随着列的增大,很快就会变得不可能。

第 1 部分演示了直方图如何直观地表示一列数字中的数字是如何分布的。使用直方图可以从包含数千个值的列中得出见解。以下是一个示例直方图,在第 1 部分中进行了讨论

图 01 - 本博客系列第 1 部分中的直方图

虽然直方图非常有用,但它们并不是唯一可以用来从数字列中得出见解的数据可视化方法。

箱线图 是另一种可视化数字列分布的方法。箱线图与直方图的不同之处在于它们使用四分位数来描述分布。

中位数

理解四分位数的最简单方法是考虑中位数。中位数定义为代表一列数字的第 50 个百分位的数值。换句话说,中位数是第 2 个四分位数。

从概念上讲,中位数代表给定一组数字(例如,数据帧中的数字列)的典型值。

考虑以下 10 个数字。这些数字是从本篇文章 Excel 工作簿中的 ResellerSales 表中提取的

图 02 - 从 ResellerSales 表中提取的十个数字

通过可视化检查数据,可以合理地推测这些 10 个数字的典型值为约 2,000 美元。这些 10 个数字的平均值(或均值)为 2,047 美元,证实了这一推测。

现在考虑一下:如果将最后一个值替换掉,这 10 个数字现在变为如下所示

图 03 - 一组新的 10 个数字

通过可视化检查图 03 中显示的数据,可以得出以下结论

  • 一半的值约为 2,000 美元。
  • 两个值低于 2,000 美元。
  • 三个值高于 2,000 美元。

可以认为,这 10 个数字的典型值的合理推测仍然是 2,000 美元。

但是,这 10 个值的平均值现在是 2,854 美元,比 2,000 美元更接近 3,000 美元!

我们可以将典型值的合理推测和平均值与使用中位数进行比较。

找到中位数的第一步是对图 03 中的数据进行排序

图 04 - 排序后的数据

接下来,中位数是排序后的数据中间的值

图 05 - 数据的中位数

如图 05 所示,当您有偶数个数字值(例如,本例中的 10 个)时,没有一个单一的中位数值。

在这种情况下,中位数的计算方法是排序后数据中间两个值的平均值。在本例中,这两个值相同,因此中位数为 2,039.994 美元。

此示例说明了为什么中位数作为数字列的典型值很有用。

与平均值相比,较小/较大的值对中位数的影响较小。

从中位数到四分位数

如上所述,中位数代表一组数字数据的第 50% 值,或第 2 个四分位数,并代表数据集合的典型值。

还可以使用额外的四分位数来帮助描述分布的范围。

例如,通过在图 05 中添加第 1 个和第 3 个四分位数,我们可以开始看到数据中的值是如何分布的

图 06 - 添加第 1 个和第 3 个四分位数

注意:图 06 是第 1 个和第 3 个四分位数的概念表示。精确的计算方式略有不同。

当然,图 06 并没有很好地演示使用四分位数来描述数字数据的分布的价值。

使用箱线图来描述大量数值的分布时,使用四分位数的强大之处就会变得很明显。

您的第一个箱线图

箱线图与直方图一样,是一种非常强大的可视化数字数据列分布的方法。箱线图利用四分位数来说明数字数据的分布。

箱线图的强大之处在于它们可以根据类别来可视化分布。

本篇文章将使用本篇文章 Excel 工作簿中包含的 ResellerSales 表中的数据。

ResellerSales 表包含基于 Microsoft 的 AdventureWorks 数据仓库 示例数据库的假设销售数据。

数据包含 60,855 行和 23 列数据。对于本篇文章,将使用以下三列:SalesTerritoryGroupSalesAmountOrderDate

编写箱线图代码

在本篇文章中,我们将使用箱线图来分析 ResellerSales 表的 SalesAmount 列的分布。

箱线图通常使用来自 Excel 表的两个列构建 - 一列数字和一列类别。

首先,以下 Python 代码使用 pandas 库 加载 ResellerSales Excel 表

图 07 - 用于加载 ResellerSales Excel 表的 Python 代码

注意:虽然上面的 Python 代码是使用 Excel Labs Python 编辑器编写的,但这并不是必需的。

单击 Python 编辑器中的磁盘图标执行 Python 代码

图 08 - Python 代码执行

将数据加载为数据帧后,以下 Python 代码使用 seaborn 库 使用 SalesAmountSalesTerritoryGroup 列创建箱线图

图 09 - 用于创建箱线图的 Python 代码

单击 Python 编辑器中单元格的向下箭头,可以选中“转换为 Excel 值”选项。使用此选项会在工作表单元格内呈现箱线图

图 10 - 在工作表单元格内呈现箱线图

执行箱线图代码会呈现可视化

图 11 - 按 SalesTerritoryGroup 分组的 SalesAmount 箱线图

箱线图提供了对 SalesAmounts 的强大见解。但是,要获得这些见解,您必须知道如何解读箱线图。

解读箱线图

以下 Python 代码筛选 reseller_sales 数据帧并将其可视化为箱线图。筛选可以简化可视化效果

图 12 - 筛选 reseller_sales 数据帧并将其可视化为箱线图

注意:图 12 显示了配置为“转换为 Excel 值”选项的代码单元格。

执行上述代码会生成以下箱线图

图 13 - 按 SalesTerritoryGroup 分组的 SalesAmount 筛选后的箱线图

图 13 说明了如何解读箱线图中的箱体

  • 箱体的顶部表示数据的第 75 个百分位数(即,75% 的值小于这条线)。
  • 箱体的底部表示数据的第 25 个百分位数(即,25% 的值小于这条线)。
  • 箱体顶部和底部之间的线是数据的中位数(即,第 50 个百分位数)。

通过检查箱体,我们可以获得有关太平洋销售区域组销售额分布的许多见解(图 13)。

  • 箱体的顶部显示,75% 的销售额远低于 2000 美元。
  • 中位线显示,50% 的销售额约为 500 美元或更少。
  • 鉴于中位线位于箱体下三分之一的位置,销售额偏向较低的值。

从分析的角度来看,以上情况引发了以下需要深入数据挖掘的问题。

  • 哪些产品与销售额偏向较低的值有关?
  • 哪些客户与销售额偏向较低的值有关?
  • 是否有其他因素(例如折扣)导致销售额偏向较低的值?

使用箱线图分析数值数据的下一个方面是考虑“须”。

图 14 – 箱线图“须”

箱线图中的须以可视方式显示大于第 75 个百分位数和小于第 25 个百分位数的值的分布。

直观地说,须越长,数据中的值分布越分散。反之,须越短,数据中的值分布越集中。

检查图 14 可以得出以下示例见解。

  • 上须比下须长得多,表明销售额范围约为 1200 美元到 3000 美元。
  • 下须非常短,表明大多数较低的销售额范围为 0 美元到约 100 美元。

从分析的角度来看,检查这些须会引发以下额外问题。

  • 过去的销售额是否高于现在?
  • 随着时间的推移,是否引入了新的低成本产品,从而可能导致销售额出现偏差?
  • 随着时间的推移,促销折扣的使用是否发生了变化?

使用箱线图分析数值数据的最后一个方面是考虑“离群值”。

图 15 – 箱线图“离群值”

箱线图使用标准化计算来确定须的长度(有关详细信息,请参见下文)。位于须之外的任何值都被称为“离群值”。

检查图 15 可以获得有关销售额离群值的见解。

  • 存在许多离群的较大销售额
  • 不存在离群的较小销售额

需要进一步分析这些离群值,以了解与这些值相关的模式数据。例如,

  • 离群的销售额是否源自少数大型客户?
  • 离群的销售额是否一直保持一致?

虽然许多上述分析问题也可以通过检查直方图来生成,但正如我们将在本文档的后面部分看到的那样,箱线图提供了超出离群值的更多分析功能。

离群值的数学

虽然确定箱线图中须的长度有很多方法,但以下介绍了最常用的计算方法。

用于构建箱线图须的第一个计算是四分位距 (IQR)。在箱线图中,IQR 是第 3 个四分位数和第 1 个四分位数之间的差值(即箱体的高度)。

图 16 – 四分位距 (IQR)

要计算上须,使用以下逻辑。

  • 最大数据值或…
  • 第 75 个百分位数 + (1.5 * IQR)…
  • 较小者为准。

要计算下须,使用以下逻辑。

  • 最小数据值或…
  • 第 25 个百分位数 – (1.5 * IQR)…
  • 较大者为准。

随时间推移的箱线图

使用箱线图分析数据时,通常会生成与时间相关的分析问题。例如,销售额值的分布是否随着时间的推移而发生变化?

这是箱线图相对于直方图的一个优势所在 - 你可以将时间(例如年份)视为一个类别!

以下代码将一个订单年份列添加到经销商销售数据框中,然后使用新列按订单年份创建销售额的箱线图。

图 17 – 使用箱线图可视化销售额订单年份

注意:图 17 显示了配置为转换为 Excel 值选项的代码单元格。

执行图 17 中显示的代码会在工作表单元格内呈现箱线图。

图 18 –销售额订单年份的箱线图

检查图 18 中描绘的箱线图,可以获得一些有趣的见解。

  • 2012/2013 年箱体的高度低于 2010/2011 年箱体的高度。这表明销售额的分布在后期年份偏向更小的值。
  • 2012/2013 年的上须比相应的 2010/2011 年上须短。这进一步表明销售额在后期年份偏向更小的值。
  • 后期年份似乎有更多离群的较大销售额值。

图 18 中描绘的箱线图确认需要进行更多分析(例如,上面列出的问题)才能了解更多信息。

下一步是什么?

本文档介绍了如何使用箱线图分析数值数据,包括将类别和时间纳入分析。

本系列的下一篇文章将继续使用此分析场景,通过探索使用散点图的两个数字列之间的关系来进行探索。

下次再见,祝你数据侦查愉快!

与专家交谈

与我们的专家交谈,为您的 AI 之旅寻找解决方案。

与专家交谈