您将如何可视化分段漏斗?(你能用 Python 做吗?)

机器算法验证 数据可视化 Python 漏斗图
2022-03-26 05:22:06

我在 Moz 上看到了这篇文章,它展示了一个细分的营销渠道:在此处输入图像描述

这种事情在我的工作中会有相当大的价值。我不知道如何可视化原始数据以显示像这样的分段漏斗。这个想法是,销售线索来自不同的来源(我们用来分割数据),并在他们转化为交易时经历了几个阶段。从每个阶段到另一个阶段都有一些下降。每个切片的宽度由每个切片的绝对导联数决定。[编辑:请注意此处用作参考的图像在涉及每个切片右侧指定的数字时具有误导性。切片的宽度和数量之间似乎没有关系。该图像应仅作为分段漏斗设计的参考]。

无论如何,任何想法如何可视化它?如果可能的话,我很想有办法在 Python 中做到这一点。

如果有人需要,这里有一个带有一些虚拟数据的Google Doc ...

期待您的见解。谢谢!

2个回答

该图显示了一个双向列联表,其数据大致如下:

                      Branded Unbranded Social Referring Direct   RSS
First-time...          177276    472737  88638    265915 472737 59092
Return Visits...       236002    629339 118001    354003 629339 78667
4+ Visits in ...       166514    444037  83257    249771 444037 55505
10+ Visit in ...        28782     76751  14391     43172  76751  9594
At Least One Visit...    6707     17886   3354     10061  17886  2236
Last Touch...             660      1759    330       989   1759   220

有无数种方法可以构建这个情节。 例如,您可以计算每个矩形色块的位置,并单独绘制每个色块。不过,总的来说,它有助于找到关于绘图如何表示数据的简洁描述。

作为出发点,我们可以将其视为堆叠条形图的变体。

图 1:堆积条形图。

这个情节几乎不需要描述:通过熟悉我们知道每一行矩形对应于列联表的每一行;矩形的长度与它们的数量成正比;它们不重叠;并且颜色对应于表格的列。

如果我们把这张表转换成“数据框”或“数据表”X每个计数有一行,字段指示行名、列名和计数,然后绘制它通常相当于调用合适的函数并规定在哪里可以找到行名、列名和计数。使用图形实现语法ggplot2(包R)这看起来像

ggplot(X, aes(Outcome, Count, fill=Referral)) + geom_col() 

图形的细节,例如一排条的宽度和使用什么颜色,通常需要明确规定。如何做到这一点取决于绘图环境(因此兴趣相对较小:您只需查找它)。

图形语法的这种特殊实现在定位条形方面几乎没有灵活性。 以最小的努力产生所需外观的一种方法是在每个条的底部插入一个不可见的类别,以使条居中。 稍微思考一下,将每个条居中所需的假计数必须是条的总长度和最长条的平均值。对于此示例,这将是一个包含值的初始列

 254478.0       0.0  301115.0  897955.0  993610.5 1019817.0 

这是生成的堆积条形图,以浅灰色显示虚假数据:

图 2

通过使假列的图形不可见来创建所需的图形:

图 3

该图的图形语法描述不需要更改:我们只是提供了一个不同的列联表以根据相同的描述进行渲染(并覆盖了假列的默认颜色分配)。

评论

这些图形是真实的:每个色块的水平范围与基础数据成正比,没有失真。将它们与原版(在问题中)进行比较,可以看出它的失真有多极端(Tufte 的谎言因子)。

如果希望在“漏斗”底部显示详细信息,请考虑按面积而不是长度表示计数。您可以使条的长度与总长度的平方根成正比,它们的宽度(在垂直方向上)也与平方根成正比。现在“漏斗”的底部大约是最长长度的二十分之一,而不是它的四十分之一,从而可以显示一些细节。不幸的是,该ggplot2实现不允许将变量映射到条形宽度,因此需要更复杂的解决方法(确实单独描述每个矩形的解决方法)。也许有一个更灵活的 Python 实现。

参考

Edward Tufte,定量信息的视觉显示柴郡出版社 1984 年。

Leland Wilkinson,图形的语法。 斯普林格 2005.

您可以尝试在 python 中使用 plotly 分段漏斗来构建它。这是一个教程: https ://moderndata.plot.ly/segmented-funnel-charts-in-python-using-plotly/

希望这可以帮助。