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

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 代码分析数据的博客文章系列中的第四篇。

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

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

本系列中的每篇文章都附带一个可供下载和使用的 Microsoft Excel 工作簿,以帮助您提升技能。本篇文章的工作簿可供 从此处下载

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

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

分析场景

本博客文章将继续在 第三部分 中开始的假设场景 - 分析促销策略的影响。

以下经销商销售数据表包含在本博客文章的工作簿中

图 01 - 经销商销售数据

图 01 中的表说明了商业分析中非常常见的一种情况 - 大量使用类别数据,如地理位置和产品。

分析类别数据的首选可视化方法是条形图。您可能在 Microsoft Excel 中将这些可视化方法称为柱形图。

介绍条形图

Python 的 seaborn 使创建条形图变得非常容易。只需要几行代码。

要制作分析数据所需的seaborn 条形图,图 01 中显示的 Excel 表必须被加载为pandas DataFrame

图 02 - 加载数据的 Python 代码

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

单击磁盘图标会告诉 Python 代码编辑器执行 Python 代码

图 03 - 执行 Python 代码

您的第一个条形图

一个合理的起点是了解SalesAmountsSalesTerritoryCountry 的分布。以下 Python 代码使用seaborn barplot() 函数 来创建条形图

图 04 - 条形图的 Python 代码

图 04 中显示的代码如下配置条形图

  • reseller_sales DataFrame 是可视化的数据源。
  • SalesTerritoryCountry 列被映射到 x 轴。
  • SalesAmount 列被映射到 y 轴。

使用转换为 Excel 值选项配置代码单元格将在工作表单元格中直接呈现条形图

图 05 - 在工作表单元格内呈现条形图

单击 Python 代码编辑器中的磁盘图标将执行代码并生成以下条形图

图 06 - 您的第一个条形图

关于图 06 中描绘的条形图,需要注意以下几点

  • barplot() 函数默认情况下会计算数值列的平均值(或均值)。
  • 每个条形顶部黑色的垂直线代表平均值的 置信区间。将其视为可能的平均值范围。
  • 国家名称难以阅读。

大多数情况下,默认的barplot() 计算平均值的默认行为并非您想要的行为。

修复条形图

以下 Python 代码解决了上述条形图中的问题

图 07 - 更新后的 Python 代码

与图 04 中的代码相比,图 07 中的代码有以下更新

  • estimator 被更改为使用SalesAmount 列的总和,而不是平均值。
  • 使用 tight_layout() 函数 使图表文本更易于阅读。
  • 默认情况下,barplot() 函数将对大数字使用科学计数法。使用 ticklabel_format() 函数 强制使用普通数字。

使用转换为 Excel 值选项执行代码单元格将更新条形图

图 08 - 更新后的条形图

检查图 08 中的条形图表明,大部分销售额来自加拿大和美国。

类别条形图

seaborn barplot() 函数专为创建使用数值列(例如SalesAmount)按类别列(例如SalesTerritoryCountry)创建条形图的情况而设计。

当您想要计算类别值时,seaborn countplot() 函数 是您的选择。以下代码创建了一个统计各种SalesTerritoryCountry 值的条形图

图 09 - 仅类别条形图的 Python 代码

使用转换为 Excel 值选项执行上面的代码单元格将生成以下内容

图 10 - SalesTerritoryCountry 值的条形图

检查图 10 中的图表没有带来任何意外 - 计数最高的是加拿大和美国。

促销分析

商业分析中常见的策略是将数值列转换为类别表示。

例如,以下 Python 代码在reseller_sales DataFrame 上创建了一个Profitable 列。

图 11 - 创建 Profitable 类别列的 Python 代码

注意:上面的代码单元格使用Python 对象输出选项配置。

执行图 11 中的代码单元格将创建一个布尔值(即真/假)列,可以使用它来简化促销分析。

按促销类型划分的盈利能力

创建了Profitable 列后,以下代码创建了按PromotionType 划分盈利能力行的计数的条形图

图 12 - 按 PromotionType 划分 Profitable 的条形图的 Python 代码

图 12 中的代码如下配置条形图

  • reseller_sales DataFrame 是可视化的数据源。
  • PromotionType 列被映射到 y 轴。
  • Profitable 列被映射到hue

上面的最后一点需要一些额外的解释。hue 参数允许将第二个类别列添加到可视化中。

以图 12 中的代码为例,将Profitable 用于 hue 将为每个唯一的PromotionType 值关联一个真值和一个假值条。这些真值/假值条的长度将是按PromotionType 划分的计数。

这有点抽象,因此执行图 12 中的代码单元格将生成一个非常直观的可视化效果

图 13 - 按 PromotionType 划分 Profitable 的条形图

检查图 13 中的条形图显示以下内容

  • 从数量上看,无折扣销售占主导地位。但是,其中将近 50% 的销售没有盈利。
  • 新产品停产产品销售似乎总是无利可图。
  • 数量折扣销售通常无利可图。
  • 季节性折扣销售似乎总是盈利的。
  • 库存过剩销售量太小,无法在可视化中呈现。

图 13 提供了有关促销盈利能力行为的许多信息,并展示了可视化数据分析中的一个常见做法 - 同时可视化多个列。

分面条形图

如图 13 所示,数据可视化的能力随着可视化中使用的列数的增加而增加。

seaborn 库支持通过称为分面的技术使用许多列同时创建可视化效果。将分面视为为多个不同类别值的交集创建的小型可视化效果。

例如,以下代码创建了一个按ProductCategoryNamePromotionType 的组合分面的Profitability 条形图:

图 14 - 分面条形图的 Python 代码

图 14 中的代码使用seaborn catplot() 函数 来创建分面条形图。代码如下配置条形图

  • reseller_sales DataFrame 是可视化的数据源。
  • kind 被设置为计数图(即仅类别数据的条形图)。
  • 可视化效果将使用网格创建,网格中将为每个唯一的Profitable 值包含一列。
  • 网格的每一行将对应一个唯一的ProductCategoryName值。
  • 网格中的每个单元格将是一个水平条形图,通过y参数显示PromotionType的值。

执行图14中的代码单元格将生成以下可视化。

图15 – 分面条形图

图15中描述的可视化非常大。为了更好地说明分面工作原理,这里只显示可视化的第一行。

图16 – 分面条形图的第一行

以下是解读图16的方法。

  • 左侧的条形图显示了Bikes产品类别的PromotionType各种值的计数,其中销售盈利。
  • 右侧的条形图显示了Bikes产品类别的PromotionType各种值的计数,其中销售盈利。

图16显示,以销售数量衡量,Bikes类别并不盈利。但这只是对数据的单一视角,可能无法讲述最准确的故事。


以下代码创建了一个分面条形图,使用利润的总和来获取数据的不同视角。

图17 – 更新后的分面条形图的 Python 代码

与图14中的代码相比,图17中的代码做了以下更新。

  • kind被更改为条形图(即,数值列按类别列)。
  • estimator设置为数值列的总和。
  • 数值列通过x参数设置为Profit列。

以下是更新后的分面条形图的第一行。

图18 – 更新后的分面条形图的第一行

检查图18中的分面可以传达更详细的故事。当考虑Bike类别中所有PromotionType值的损失时,Bikes类别总体上是不盈利的!

以下是完整的更新后的分面条形图。

图19 – 完整的更新后的分面条形图

检查图19中的分面条形图讲述了一个有力的故事。

  • Bikes类别在利润/亏损方面是最大的。不幸的是,总体而言,Bikes类别是不盈利的。
  • ComponentsClothing类别存在亏损。幸运的是,总体而言,这些类别是盈利的。
  • Accessories类别似乎只有盈利的销售。

使用本文中介绍的技术,您现在具备了更深入地挖掘数据以揭示促销活动背后“为什么”的技能。

例如,深入挖掘有关Bikes类别的更多细节,以揭示非盈利性销售的潜在驱动因素和模式。

下一步是什么?

这篇文章展示了条形图应该是您的数据分析工具之一。毫不奇怪,条形图是最常用的数据可视化之一(例如,高管仪表盘)。

特别是,分面条形图对于为决策者制作引人入胜的数据故事非常有用。

本系列的下一篇文章也是最后一篇文章将向您介绍分析业务数据的最佳可视化工具——强大的折线图。

下次再见,祝您数据侦探之旅健康快乐!

与专家交谈

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

与专家交谈