这是本系列教学博客文章的第五篇也是最后一篇,它将教你如何使用 Microsoft Excel 中的 Python 代码以可视化方式分析数据。
如果您是 Python 在 Excel 中的新手,您应该从我的 Python for Excel Analysts 博客系列开始,该系列涵盖了本系列博客文章中假设的许多概念。
本系列将使用 Microsoft Excel Labs Python 编辑器 来编写代码。但是,Python 编辑器不是必需的。所有代码都可以使用公式栏和新的 PY() 函数 键入。
本系列中的每篇文章都附带一个可供下载和使用的 Microsoft Excel 工作簿,以帮助您提升技能。本篇文章的工作簿可供 在此处下载。
为了方便起见,以下是本系列中所有博客文章的链接:
注意:要重现本篇文章中的示例,安装 Python in Excel 试用版。如果您喜欢本系列博客文章,请查看我的自定进度的认证课程,Anaconda 认证:使用 Python 在 Excel 中进行数据分析。
分析场景
本博客文章将继续本系列第 3 部分和第 4 部分中介绍的假设场景 - 分析促销策略的影响。
本博客文章的工作簿中包含以下月度销售数据表:
图 01 - 月度销售数据
图 01 中的表格展示了业务分析中非常常见的场景 - 分析业务流程随时间推移的表现(即时间序列分析)。
用于时间序列分析的首选可视化图表是折线图。
介绍折线图
时间序列分析查看测量值随时间的变化行为。在进行时间序列分析时,五个模式可以为您提供重要的见解:
- 趋势 - 一系列值在一段时间内总体上呈上升、下降或保持相对稳定的趋势。
- 可变性 - 随着时间推移,后续数据点之间典型的变化。
- 周期 - 定期重复的模式(例如,每小时、每周、每月)
- 变化率 - 时间序列中后续数据点之间的百分比差异。
- 异常值 - 落在给定时间序列的典型范围之外的值。
Python seaborn 库 使创建折线图变得非常容易。只需要几行代码。
要制作分析数据所需的 seaborn 折线图,必须将图 01 中所示的 Excel 表加载为 pandas DataFrame。
图 02 - 加载数据的 Python 代码
注意:虽然上面的 Python 代码使用 Excel Labs Python 编辑器编写,但这并不是必需的。
单击磁盘图标会告诉 Python 代码编辑器执行 Python 代码。
图 03 - 执行 Python 代码
您的第一个折线图
一个合理的起点是了解 SalesAmounts 随时间的变化。以下 Python 代码使用 seaborn 库来创建折线图。
图 04 - 折线图的 Python 代码
以下是图 04 中所示代码的说明:
- 由于折线图的宽度大于高度,因此代码的第 2 行利用了 pyplot 库的 figure() 函数 来将折线图的大小设置为 10 x 4 英寸。
- 第 5 行使用 seaborn 的 lineplot() 函数 来创建折线图。折线图的配置如下:
- monthly_sales DataFrame 用作数据源。
- x 轴配置为使用 MonthYear 列。
- y 轴配置为使用 SalesAmount 列。
- marker 参数设置为在折线图上添加每个 SalesAmount 值的点。
- 默认情况下,seaborn 将对较大的值使用科学计数法。代码的第 9 行使用 ticklabel_format() 函数 来强制在图表中使用普通数字。
使用 转换为 Excel 值 选项配置代码单元格将直接在工作表单元格中呈现折线图。
图 05 - 在工作表单元格内呈现折线图
单击 Python 代码编辑器中的磁盘图标会执行代码并生成以下折线图:
图 06 - 您的第一个折线图
让我们将上述五个时间序列分析模式应用于图 06:
- 趋势 - 总体而言,在三年期间,销售一直在呈上升趋势。
- 可变性 - 时间序列中表现出相当大的可变性(即,有许多起伏)。
- 周期 - 数据中存在一个周期,表明 2011 年和 2012 年 12 月的销售额下降,随后 1 月份出现大幅增长。
- 变化率 - 数据点之间的百分比差异差异很大,可变性表明销售额大幅波动。
- 异常值 - 查看数据,2013 年 2 月/3 月的销售额可能异常高。
注意:关于时间序列中可能存在的异常值,过程行为图 提供了一种可靠的方法来确定时间序列中的任何值是否确实是基于历史性能的异常值。
随时间推移的折扣金额
monthly_sales 的 DiscountAmount 列代表一个月内给出的总促销折扣。以下代码创建了一个 DiscountAmounts 折线图。
图 07 - DiscountAmount 折线图的 Python 代码
使用 转换为 Excel 值 选项执行图 07 中所示的代码单元格将生成以下折线图:
图 08 - DiscountAmount 折线图
再次,让我们将五个时间序列分析模式应用于图 08:
- 趋势 - 总体而言,在三年期间,折扣没有强烈的趋势。
- 可变性 - 时间序列中存在一些极端可变性区域(例如,两个高峰值)。
- 周期 - 时间序列中没有明显的周期。
- 变化率 - 除两个峰值外,总体变化率很小。
- 异常值 - 存在四个异常数据点,分别对应于 2012 年 12 月和 2013 年的前三个月。
分析图 08 中所示的折线图提供了一条有关促销行为随时间推移的强大信息。即,在图 08 中描绘的三年期间,似乎没有一致的促销策略。
多时间序列分析
正如上面的折线图所示,时间序列分析是一种非常有用的技术,但折线图还可以做更多的事情!
在同一图表上可视化多个时间序列通常会导致识别数据中的分层模式。幸运的是,使用 pandas,创建多系列折线图非常简单。
准备数据
第一步是将现有的 monthly_sales DataFrame 从“宽”格式转换为“长”格式。当存在用于每个时间序列的列时,格式为宽格式,正如 monthly_sales 的卡片所展示的。
图 09 - reseller_sales DataFrame 的卡片
长格式的 DataFrame 包含以下三列:
- 所有时间序列共享的日期值列(例如,图 09 中的 MonthYear 列)。
- 一列包含表示行所属时间序列的值(例如,‘SalesAmount’ 与 ‘TotalProductCost’)。
- 一列包含时间序列值(例如,17033.436)。
将 DataFrame 从宽格式转换为长格式的最简单方法是使用 DataFrame 的 melt() 方法。以下代码从 monthly_sales 创建一个 sales_melted DataFrame
图 10 – 融化月度销售数据
注意: 图 10 中所示的代码单元格使用 Python 对象 输出选项执行。
以下是图 10 中显示的代码的解释
- 第 2 行创建一个 Python 列表,其中包含要融化的时序值的列名(例如,不包含 TotalProductCost 列)。
- 第 6 行通过对 monthly_sales 调用 melt() 来创建 sales_melted DataFrame
- id_vars 参数指定 MonthYear 列应用于提供所有时间序列共享的日期。
- value_vars 参数指定应融化的哪些时间序列列。
- var_name 参数指定用于保存时间序列名称的列的自定义名称。
执行图 10 中的代码后,查看 Excel 中的 sales_melted 卡片使以上代码变得清晰
图 11 – sales_melted DataFrame 的卡片
查看图 11 时,请注意 sales_melted DataFrame 中有 108 行。将此与图 09 中显示的 monthly_sales DataFrame 进行比较,后者有 36 行。
行数的差异是由于 sales_melted 有 3 个时间序列,每个时间序列有 36 个值;3 乘以 36 等于 108。
创建了 sales_melted DataFrame 后,就可以绘制折线图了。
多系列折线图
以下代码创建了一个多系列折线图
图 12 – 多系列折线图的 Python 代码
虽然图 12 中显示的代码类似于之前的代码,但有一些需要注意的地方
- 第 5 行使用 sales_melted DataFrame 作为数据源并配置折线图,如下所示
- y 轴映射到由 melt() 调用创建的 value 列。
- hue 参数映射到由 melt() 调用创建的 Metric 列。这将在图表中为 Metric 的每个唯一值创建一个线。
- 第 10、11 和 12 行通过 set_title()、set_xlabel() 和 set_ylabel() 函数将折线图的标题和轴标签设置为自定义值。
使用 转换为 Excel 值 选项执行代码单元格将生成以下折线图
图 13 – 多系列折线图
除了将五个时间序列模式应用于图 13 之外,检查图表还揭示了以下内容
- 有趣的是,虽然 SalesAmount 显示出上升趋势,但 GrossProfit 似乎相对平稳。
- 图表清楚地表明,在 DiscountAmounts 较高的月份,GrossProfit 为负。这是一个非常有趣的关联,需要进一步分析才能了解折扣是否导致了损失。
- 总体而言,销售似乎与任何促销策略无关。
- 2013 年 2 月/3 月的 SalesAmounts 较高,这与 DiscountAmounts 也较高的时期有关。同样,这种关联需要进一步分析才能了解数字的驱动因素。
如图 13 所示的折线图通常是商业分析中的早期预警系统。
例如,折线图是执行仪表板中常用的可视化。一个常见的情况是领导者在折线图中看到“糟糕”的事情,并要求进行分析以解释正在观察到的现象。
本博客系列中介绍的分析技术通常用于构建这些解释。
接下来是什么?
本文演示了折线图如何提供商业分析中最基本技能之一——识别业务指标随时间的变化趋势。
折线图在分析关键绩效指标 (KPI) 方面特别有效。如果您想使用数据对领导者产生更大的影响,KPI 分析 是您工具箱中的一项强大工具。
如果您 有兴趣了解更多 关于使用 seaborn 库可视化数据的信息,请务必查看“seaborn 入门”。
下次再见,祝您数据侦察愉快!