三、一个简易的demo
Talk is cheap,show me the code.
虽然碍于条件限制,我们不可能提供给大家完整的项目表达,但是即使这样,我们还是可以通过部分核心、精简的系统功能代码,来实现的一个简易的demo,然后对这个demo不断完善,最终达到理想的使用效果。
对于一个简易的demo,我们可以将其抽简为以下三部分:
-数据获取
-数据处理与分析
-邮件发送
该demo应当可以实现以下功能,能够每日定时从GA API中获取前日某网页的页面浏览数,并在该页面浏览数大于特定阈值的时候,发送邮件预警,并在预警邮件中进行简单的分析。
此demo位于Linux环境下基于python3.7.3开发。
Step1.
1.1首先我们进入指定目录下创建项目文件夹ga_alert_demo,例如对于我而言就是:/home/zhangweisong/ga_alert_demo
(此处个人建议在该目录下通过例如python virtualenv创建一个配合该项目的python虚拟环境,例如(/home/zhangweisong/ga_alert_demo/env),当然不创建也没有关系。
1.2我们需要通过GA的API来获取我们想要的数据,为了调取API,我们需要先在GCP中启用API,并创建服务账号(将该服务账号添加到需要通过API访问的数据视图中,仅提供读取和分析权限即可),生成密钥,此密钥用于后续的身份认证,例如:client_secrets.json(该流程的细述,可以查看我们公众号之前的文章:工具丨如何使用GA API获取数据?)
例如: (创建服务账号&生成密钥)
(在账户中添加服务账号,并给予其阅读和分析权限)
1.3安装以下Python客户端库<google-api-python-client><oauth2client> 例如:
1.4将刚才1.2步骤中生成的密钥,放入当前执行路径下,例如:/home/zhangweisong/ga_alert_demo/client_secrets.json
Step2.
创建py执行脚本,ga_alert_demo.py,并在脚本内写入以下代码:
如上所示,这是一段非常简单的代码,仅由身份认证-数据获取-数据处理(检查/分析)-发送邮件几部分组成,写上述代码后,执行该脚本,如果检测到网站某网页(这里是account/login)昨日的网页浏览数相比于前日的网页浏览数,降低或提高了50%以上,则会发送一份邮件至指定的邮箱,并在邮箱中呈现(预警提示、降低或提高百分比、导致出现数据骤变的用户类型)。(注意这段代码的执行成功,依赖于外网环境&密钥文件,此外,上面的视图id,是我的个人测试视图,大家请换成自己拥有权限的视图。)
这里面使用python进行邮件发送与邮件内容的呈现不是本次分享的核心,且网上有大量丰富的资源,大家可以自主发挥。
我们重点来看一下数据获取这部分。
我们能够获取到的数据,决定了我们后面可以执行的分析,反过来,我们想要做什么样的分析,就得相应的获取什么样的数据(这是一句废话)。
首先看我们的预警目的,即看具体某个网页的<网页浏览量昨日数据>与<前日数据>的差异,并当数据差异较大时,分析是那种用户类型对浏览量的变化,产生了突出的贡献。
对应GA来说,相当于我们要拉取昨日和前日,<网页><用户类型>这两个维度,<网页浏览量>这个指标的对应数据,对应我们常看的自定义报告,则可能表现为下述形式:
设置的自定义报告大概如下所示:
看到这个报告,很容易就可以发现对于/account/login/这个页面来说,回访用户是产生数据波动的主要原因,而我们要做的工作就是简化设计报告、查看报告、比对的这一系列过程,而取代为在网页浏览数据波动较大的情况下,直接邮件告诉我是新访还是回访导致了数据波动的变化。
我们看一下自定义报告和API请求体的关系:
可以看到GA Reporting API的请求构建逻辑和自定义报告的构建逻辑是非常一致的,我们完全可以通过自定义报告的逻辑,来构建我们的API请求。
获取数据后,接下来我们就需要对数据进行处理,Reporting API的响应为一个dict格式文件,其形式如下所示:
在python中,该响应是一个dict格式数据,其中对我们分析来说最关键的是data部分,data内的我们主要关注rows、totals、rowCount、isDataGolden,rows是请求维度的唯一组合的集合,如下图所示:
可以理解为是包含了两个数据行,每个数据行又包含了对应的维度、指标,这块特别需要注意的是 metrics中有两个数据,这块其实是相对应日期的数据,此处大家可以对照上面自定义报告结果的截图,很好理解。
Totals是一个列表,代表了对应日期的查询指标值的总计;
rowCount代表了查询匹配行的总数;
isDataGolden表示这一响应结果是否是黄金响应(即以后的任何一个时间点发出完全相同的请求而不会产生任何新的结果),isDataGolden相对不常见(除非如我的示例一般数据稀少),我们平常更常见的是samplesReadCounts和samplingSpaceSizes这个两个和抽样相关的数据,samplesReadCounts比samplingSpaceSizes即我们通常所见的抽样率。
得到响应数据后,我们首先进行一步判断,判断昨天的数据和今天的数据相比,是否有较大的异常,这个我们直接拿totals中的总量数据进行比较即可,看看昨日和前日的数据比差异是否达到了一倍以上,如果达到了,我们再查看是那种用户类型对浏览量的变化,产生了突出的贡献,此处我们选择一个简单的方法,即选择在数据波动中占比最大的变量,举例来说,如果我昨天网页浏览量为100,今天为220,其中昨日的新访为50,回访50,今日的新访120,回访100,则虽然新访、回访都发生了波动,但是新访的波动幅度更大,则该数据的贡献更大。
此部分的代码都比较简单就不做赘述了,如果经过检查发现需要发送邮件,则进行邮件的发送,邮件的发送是python项目比较常规的内容,网上教程很多,大家参考实现即可。
四、如何将一个简易demo升级为”可靠的”预警系统
上节中,我们通过几段简单的代码,大致的说明了一个简易的预警系统搭建的过程,但是这样的demo,离我们预想中的高效、简易、功能强大的预警系统,肯定还有很大的差距。
除了完善附属功能如后台管理、日志记录、自动调度等等,其中更重要的是,如何扩大我们的预警系统核心功能,即数据的自动获取&处理分析能力。
固然我们可以如上面的demo那样,依照我们的业务逻辑,对需要实现的预警需求,进行业务抽象,然后进行代码实现,但是每次都这样做,并不会给我们的工作效率带来有效的提升,此处我个人的建议是对此处的数据获取、处理、分析模块以一个监测单元为单位进行封装,然后构建多个通用的监测单元,当出现监测需求时,拼接、实例相应监测单元,构建成一个完整的监测活动。
举例来说,对于大部分活动需求,我们通常都会执行一系列的监测,例如:页面浏览量监测、活动转化监测、重点事件触发监测等。
它们的逻辑是共通的,而区别可能就在于页面网址、事件名称、转化目标、监测指标方式的不同的而已,通过固化这些逻辑,我们可以在出现新的活动时,通过更换几个特定参数,形成一个新的监测活动。
如下图所示:
GA功能强大,不仅仅限于它丰富的维度指标、美观经典的报告图表,更在于其开放、丰富的系统生态,使用它就能让你的效率大大增高,而钻研它,它能给你更大的惊喜和回报。
综上所述,还不快快动起手来,搭建一个属于你的自动预警系统!