Py学习  »  Python

与数据对话:洞察数据变动/Python瀑布图解析(Waterfall plots)

新语数据故事汇 • 2 月前 • 143 次点击  

瀑布图(Waterfall plots)经常用来展示某个值随时间的累积变化。另外,它们也可以使用固定的类别(例如,特定事件)而不是时间。因此,这种类型的图表在向业务利益相关者展示演示文稿时非常有用,因为我们可以轻松地展示公司营收/客户群随时间的演变。

接下来,我们将使用三种不同的Python库创建瀑布图。首先,我们将虚构一些数据,以讲述一个完整的数据故事——描述一家移动互联网应用的用户发展情况,并提供一个展示我们应用在2022年用户基数的图表。我们需要假设2021年年末的数据:

df = pd.DataFrame(    data={        "time": ["2021 end", "Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec"],        "users": [100, 120, 110, 150, 160, 190, 240, 200, 230, 240, 250, 280, 300]    })

方法一:waterfall_ax

从最简单的方法(waterfall_ax)(pip install waterfall_ax)开始。我必须说我非常惊讶地发现,微软开发了一个基于matplotlib的小型库,用于创建瀑布图。该库称为waterfall_ax。要使用我们的数据集生成图表,我们需要运行以下代码:
import matplotlib.pyplot as pltfrom waterfall_ax import WaterfallChart
fig, ax = plt.subplots(1, 1, figsize=(16, 8))waterfall = WaterfallChart( df["users"].to_list(), step_names=df["time"].to_list(), metric_name="# users", last_step_label="now")wf_ax = waterfall.plot_waterfall(ax=ax, title="# of users in 2022")

方法二:waterfall

方法二是使用waterfall库(pip install waterfallcharts)。为了使用该库创建图表,我们需要添加一个包含增量的列,也就是各个步骤之间的差异。可以很容易地向数据框添加新列,并使用diff方法计算增量。我们将第一行的NA值填充为2021年底用户数量。
df_1 = df.copy()df_1["delta"] = df_1["users"].diff().fillna(100)df_1

使用waterfall 输出瀑布图

import waterfall_chartplt.rcParams["figure.figsize"] = (16, 8)waterfall_chart.plot(    df_1["time"],     df_1["delta"],     threshold=0.2,     net_label="now",     y_lab="# users",     Title="# of users in 2022")

方法三:plotly

虽然前两种方法使用了相当小众的特殊库,但最后一种方法将利用一个流行的库——plotly。首先需要对输入数据框进行一些处理,以使其与plotly方法兼容。
df_2 = df_1.copy()df_2["delta_text"] = df_2["delta"].astype(str)df_2["measure"] = ["absolute"] + (["relative"] * 12)


    
df_2

一个名为的新列delta_text,其中包含编码为字符串的更改。我们将使用它们作为绘图上的标签。然后,我们还定义了一个measure列,其中包含 所使用的度量plotly。图书馆接受的措施有以下三类:

  • relative— 表示顺序的变化,

  • absolute— 用于设置初始值或重置计算的总数,

  • total——用于计算总和。

import plotly.graph_objects as gofig = go.Figure(    go.Waterfall(        measure=df_2["measure"],        x=df_2["time"],        textposition="outside",        text=df_2["delta_text"],        y=df_2["delta"],    ))
fig.update_layout( title="# of users in 2022", showlegend=False)
fig.show()

使用以下代码片段创建瀑布图:

plotly是绘图是完全交互式的——我们可以放大、检查工具提示以获取附加信息(在本例中是查看累积和)等。

与之前的图的一个明显区别是我们没有看到最后一个块显示净值/总计。也可以使用 plotly来添加它。为此,我们必须向数据框添加一个新行。

total_row = pd.DataFrame(    data={        "time": "now",         "users": 0,         "delta":0,         "delta_text": "",         "measure": "total"    },     index=[0])df_3 = pd.concat([df_2, total_row], ignore_index=True)df_3

用于生成绘图的代码实际上没有改变,唯一的区别是我们使用带有附加行的数据框。

fig = go.Figure(    go.Waterfall(        measure=df_3["measure"],        x=df_3["time"],        textposition="outside",        text=df_3["delta_text"],        y=df_3["delta"],    ))
fig.update_layout( title="# of users in 2022", showlegend=False)
fig.show()

本文介绍了在Python中使用三种不同的库(waterfall_ax、waterfall和plotly)创建瀑布图的方法。这些库各有特点,可以根据需求选择合适的。从数据准备到绘图过程,每种方法都有详细的步骤说明。通过本文,读者可以轻松快速地创建展示数据变化的瀑布图,丰富了数据可视化的工具选择。

Python社区是高质量的Python/Django开发社区
本文地址:http://www.python88.com/topic/166800
 
143 次点击