用 Python中 Matplotlib 对行为进行可视化的4条贴士,另附简易教程
为什么要对消费者行为进行可视化?
我目前正在Unbounce做数据分析师。Unbounce是一款基于订阅制的工具,旨在帮助营销人员们建立和优化登陆页面,以求得较高的转化率。和其它实行订阅制的公司一样,我们希望降低流失率,并吸引顾客尽量呆久一些。其中的一项重大任务就是去理解哪些行为与更长的顾客留存时间相关、为什么相关,以及我们该如何培养这些行为。
尽管我们有许多能检测消费者行为趋势的统计方法,我仍认为对一些顾客行为进行可视化(并与那些面向客户的团队进行讨论)有助于我们建立假说,以待后续验证。
关于数据
本教程中,我们要用到包含4个账户的事件和订阅信息的样本数据。安全起见,其中不包含任何个人信息,并且账户的唯一ID也被做了改动。
顾客行为数据往往包含了日期与时间事件,即顾客执行某个特定动作的时刻。再本教程中,我们将会研究账户的再发布(republished_df)和登录(login_df)事件。
我们也有各个客户的订阅信息(subscription_info_df)。一名顾客可以有多次订阅,但各次订阅之间都是互斥的。新的订阅只有在顾客流失(即停止付费)之后又重新订阅时才会开始。这样的顾客我们称之为轻佻者(Flapper)。
加载与转化
进行可视化之前,我们要先把日期列转化为‘日期-时间’的形式。目前,Python把它们当作了一堆字符串,致使日期不会按时间顺序排列。
下面让我们为本次教程获取一个账户的样本数据。
贴士1:该账户有在同一天内的轻佻行为吗?让我们混一点颜色吧
当我们需要对那些只发生过一次,但却可能发生在同一天的不同事件进行可视化时,本条贴士就很方便了。
就像所有订阅制公司一样,Unbounce也预期到了会有轻佻顾客——即先订阅,又流失,然后某个时刻又回来的订阅者。有些情况中流失和再订阅发生在相同的日期。为了区分同日内轻佻顾客,我们可以采用这个颜色混合技巧。
注意:我们假设了(同一账户)各次订阅之间是互相排斥的。
如果我们对订阅开始日期和订阅结束日期使用不同的颜色,并采用一定程度的不透明度的话,我们就会在同日内轻佻顾客上面看到另一种颜色。
例如,我在这里给订阅开始日期选用了蓝色,给订阅结束日期选了红色,然后更改不透明度为‘alpha = 0.5’(alpha取值范围为0到1)。这样同日内轻佻就会呈紫红色。
你可以通过该篇文章了解更多关于颜色混合的基本事项:https://mymodernmet.com/color-mixing-chart/。
这里还有一份Matplotlib中颜色代码的清单:https://matplotlib.org/examples/color/named_colors.html。
从上图中我们可以知道,该账户是一名有4次订阅的轻佻者。在最后一次订阅中,他/她是一名同日内轻佻者。最后一次订阅开始于第三次订阅结束的同一天,因此我们这里看到的是紫红而非蓝色或红色。
除了颜色和alpha,在axes.plot()函数中还有更多你能玩转的参数,这取决于你向怎样设计你的图表。标记(marker)类型和大小就是例子(我们会在下一条中探讨更多关于标记的细节)。
关于这些参数,可以参阅这里:https://matplotlib.org/3.1.1/api/_as_gen/matplotlib.axes.Axes.plot.html。
贴士2:各项动作的频率和强度如何?让我们用点不同的形状和不透明度吧
当我们需要可视化那些可能在同一天发生多次的各种不同事件时,本条贴士会很有用。
由于Unbounce是一项帮助营销人员发布和优化他们登录页面的工具,我们对再发布事件非常关心。我们想了解以下内容:
· 客户重发布他们页面以及登录该工具的频率比较起来如何?
· 他们每次登录时进行再发布的强度怎样?
为了回答这些问题,我们需要把登录和再发布事件点再同一张图里。这就有两个问题:
· 客户可以在同一天进行登录和再发布
· 客户同一天内可以执行很多次这些动作
为了解决这些问题,我们可以在axes.plot()函数中使用不同的形状(通过标记来实现)和不透明度(通过alpha来实现)。有很多标记类型可选,这里我用了圆圈来表示登录,用了三角形表示再发布。你可以在这里找到其它的类型:https://matplotlib.org/3.1.1/api/markers_api.html#module-matplotlib.markers。
通过上图,我们就可以回答上面的问题了:
· 客户重发布他们页面以及登录该工具的频率比较起来如何?
在第一次订阅中,该客户几乎每两周登录和重发布一次,但在后来的订阅中,该频率有所下降。其中也有他们登录之后并未进行任何再发布的情况。
· 他们每次登录时进行再发布的强度怎样?
再所有订阅里,该账户倾向于在登录时进行多次再发布,因此我们看到了颜色更深的三角形。这意味着他们每次进行改动时都会重新发布一遍,以进行预览。
贴士3:该账户与另一账户行为的比较如何?让我们确保在相同尺度下进行研究
如果只检视一名顾客,我们就无法知道其是否是一名高度活跃的客户,或者其行为是否是我们客户群中的常态。解决这个问题,我们可以从最简单的技巧入手:随机抽取一些顾客,然后手动比较他们的行为。
为了使对比合理,我们要保证各个图表采用的尺度相同。可能有些客户是从年初开始订阅的,然而也有其他的是年中或年末才开始。这中情况下,我得对图表进行限制,以显示从1月1号到12月31号的日期区间。我们能用axes.set_xlim()来做这个。
这里有更多关于该函数的内容:https://matplotlib.org/3.1.1/api/_as_gen/matplotlib.axes.Axes.set_xlim.html。
贴士4:要让它有可重复性
我推崇David Robinson的‘三之定理’:若你同一段代码要写3遍,你就该写个函数。(参阅:http://varianceexplained.org/r/ds-ml-ai/)
由于我们要对数据集中的4名(显然大于3了)客户的行为作可视化,我希望能写一个函数。我喜欢函数,因为我们可以对可视化过程进行系统性修改,以节约把那些更改复制粘贴到每张图上所花的的大量时间。
我们的第一个函数去是获取某一账户的数据。
我们第二个函数是去对该账户的行为作可视化。注意我把一号函数用在了二号函数之内。
我们来试一下吧!
这里有本文中所涉及全部内容的完整代码:https://github.com/hadinh1306/blog-posts/blob/master/tutorials/Visualize_Customer_Behavior.ipynb。
作者:Ha Blogging
翻译:Siyu Hao