开发者学堂课程【大数据分析之企业级网站流量运营分析系统开发实战(第四阶段): 网站流量日志分析--统计分析--新老访客需求剖析】学习笔记,与课程紧密联系,让用户快速学习知识。
课程地址:https://developer.aliyun.com/learning/course/696/detail/12239
网站流量日志分析--统计分析--新老访客需求剖析
需求:将每天的新访客统计出来。
实现思路:创建一个去重访客累积表,然后将每日访客对比累积表。
1、每天新老访客的统计,新访客老访客从业务上很好理解,只要来过一次,再来都是老访客,如果一次没有来过就是新访客,从业务上梳理该如何通过每天收集的数据进行比较判断识别出当天是新访客还是老访客。
2、为了更好理解进行画图,比如每天都会收集采集到当天的数据,网站的标识字,收到今天的网站访问数据。
3、根据今天的网站访问数据能够得到在数据中有访客的识别,以 ip 表示,因此可以根据当天收集到的访问数据得到当天的访客有哪些,所以第一步去重统计 ip,来了一次,来了多次,只算一次,去重ip统计得到今天的访客,比如今天有 ip1,有ip2,ip4,ip5,ip6 等。
4、五个访客中判断哪些是新访客,哪些是老访客,需要有判断比较的依据,所以应该设计一个表用来保存历史上是否有来过,是否有访问过,比如记录本,只要历史上来过一次都会在这里记录,进行判断,因此为了业务的持久进行,至少还需要历史累计访客表,因为是不断累加的过程。
5、比如表中有一种特殊的情况,今天是公司开业的第一天,今天来的所有的人都是新访客,有 ip1,ip3,ip5,ip7。
6、两份数据进行判断比较,口述很简单,在历史访客表中如果今天访客存在就是老访客,说明他来过,如果不存在就是新访客,问题在于口头描述都比较好理解,如何转化成 sql 呢?今天和历史就是两个表,两个表之间进行数据的操作应该会涉及表之间 join,表之间的关联,关联 join 涉及到内外左右,以今天的数据为准所以在左边,join 在 sql 层面是 left join。
left join on 后的表达式,能进行关联的条件就是 ip,今天的 ip 等于历史的 ip。
关联以左表为准,左边的数据全部显示出来,右边与之关联,关联上的显示,关联不上的显示为 null,ip1 显示为 ip1,ip2 没有,显示为 null,ip4 也没有,显示为 null,ip5 显示为 ip5,ip6 没有,显示为 null,有了结果之后,左边是今天 ip,右边是历史 ip。
写 where 条件,如果:where 历史. ip is null 没有关联上,关联上证明在历史表中没有,所以是新访客,where 历史. ip is not null 关联上证明在历史表中有,所以是老访客,需求转化为 sql 就是两个ip是否能关联上,今天的新访客永远是明天的老访客,今天来过之后,不管什么时候再来都是老访客,因此最后需要把今天的新访客追加到历史累积访客表中作为后续的新老访客判断识别的依据,这样更贴近于实战,把业务变得更加完整。