开发者学堂课程【大数据分析之企业级网站流量运营分析系统开发实战(第二阶段):网站流量日志分析--数据预处理--点击流模型之 pageviews 模型】学习笔记,与课程紧密联系,让用户快速学习知识。
课程地址:https://developer.aliyun.com/learning/course/694/detail/12191
网站流量日志分析--数据预处理--点击流模型之 pageviews 模型
内容介绍
一、 模型概述
二、 模型剖析
三、 模型实现
四、 模型小结
一、 模型概述
接下来学习点击流模型当中的第一个模型 pageviews 模型,通过这一个节学习来了解 pageviews 模型主要侧重于哪些方面,以及如何通过原始数据一步步生成这个模型。
pageviews 模型侧重于用户每次会话的识别,就是首先要找到他到底属于几个会话,然后每次绘画内访问了几步和每一步的停留时间,一次会话内可能打开一步,也可能打开100步,每一步的停留时间。指标看上去比较多,到底怎么去实现pageviews 模型,为了更好的理解,通过去画图的方式进行梳理。
1. 大致步骤:
(1) 在所有访问日志中找出该用户的所有记录;
(2) 把该用户的所有访问记录按照时间正常排序;
(3) 计算前后两条记录时间差是否为30分钟。如果小于30分钟,则是同一会话session 的延续;如果大于30分钟,则是下一会话 session 的开始;
(4) 用前后两条记录时间差算出上一步停留的时间;
(5) 最后一步和只有一步的,业务默认指定页面停留时间60s。
首先打开画图板,首先来模拟一下原始的访问日志数据,原始访问的数据是一个散点状的数据,站在时间的角度上不断追加就可以了。举个例子,比如说有一个用户叫做192.168.1.100用户,他在早上8点30分25秒,访问网站的a页面,这是第一条记录,写这三个简单的属性;过了十秒钟,在8:30:35的时候,又访问了c页面;又过了一会儿,8:31:05,又访问了d页面,只要这个用户不断的访问下去,这个日志就按照时间属性不断追加,但是有一点要注意,在100用户访问的同时,其他的用户也会来访问。
接下来比如说有一个叫做200的用户他也来访问了,他的访问的时间会不会比上一个的时间小,会不会在日志当中出现一个下一个的时间比上一个小,一定不会,因为日志是按照时间属性不断追加的,那么两条记录要么是相等,要么下面的大,不可能时间上面大,下面小,那就变成乱序了,所以说下一个时间肯定是比上一个的时间大或和它相等的不可能比它小。比如在8:31:35的时候访问了e页面,同时100用户接着来访问,在8:31:25访问了w页面,这时候要注意,在8:31:45,还是这两个用户,100用户上午不来访问了,然后下午再来访问。比如在下午,他在18:31:05又过来访问了,访问了k页面,然后继续来访问;在18:31:30的时候访问了m页面,不断下去,这就是原始的访问日志,叫做按照访问的时间追加,是散点状的数据满43点到的数据,接下来看如何通过原始的数据梳理成点击流模型的第一个模型pageviews模型。
二、 模型剖析
看一下模型的侧重点,来剖析一下这个模型叫做点击流模型之 pageviews 模型数据,非常重视以下几个概念。
(1) 会话识别。原始的日志当中并没有会话的概念,前面讲到以前
后两条记录的时间差是否在30分钟以内来判断会话。
(2) 会话内访问了几步,涉及到步骤的概念。属于同一个绘画的,
按照时间排序。
(3) 每一步的停留时间。比如说现在访问一个网站需要四步,那么
第一步停留了多长时间呢,要想客观的知道用户停留多长时间,暂时是不知道的。
但是通过日志可以去反推一下,比如说进入第一步的时间是8:00,进入第二步的时间是8:01,那么进入下一步的时间直接减去进入上一步的时间,就是停留时间。这样就可以算出来了,但是这么计算的问题是最后一步没有判断依据了。进入时间是知道的,但是不知道多长时间离开了,这时候就需要默认值来指定。
再比如说有的用户,今天只打开一个页面,那么这时候停留时间就无法计算。这时候遇到的问题叫做针对计算不出指标,通常采用业务默认指定。停留时间根据公司实际情况,默认事件是60s。从这一点同样可以感受到点击流模型是业务模型,而不是客观存在的模型。这是点击流模型pageviews的相关约束,接下来研究怎么实现。
三、 模型实现
左边是原始数据,右边是点击流模型pageviews数据。要想去生成数据是必须通过原始的日志的,生成它的步骤如下:
1. 找出属于同一个用户的所有访问日志记录。
(1) 因为点击流模型数据的会话是跟人相关的,不可能把张三的记
录和李四的记录放在一起来算一下他们到底属于几个规划。
(2) 怎么做:
在数据当中是用IP来表示用户,如果以m码编程来处理的话,如何把相同用户的记录聚集到一起:在m码中把IP作为k,而且作为k之后,相同的k按照m码的默认属性会分到同一个reduce当中来进行调用。在这里先找到100用户的记录和200用户的记录,第一步操作完成,即找出同一个用户的所有记录。
2. 把该用户的所有访问记录按照时间排序
要判断该用户今天产生了多少个会话,如果直接以时间差相减来判断,但是发现比如8点-18点会出现负数,所以不能直接以时间差相减。这里应该先排序,在判断之前,把该用户的所有记录按照时间的正序进行排序。比如排完完之后是这样子的,8:00的应该在前面。
3. 判断时间差是否在30分钟以内
以100用户为例,另外一个一样,排序之后就可以用下一条的记录减去上一条的记录判断时间差是否在30分钟以内。通过这个数据来看一下,这个属于两次会话,这是属于一个会话,叫做会话一,写个标识;下面这个属于另外一个会话,这样就可以判断出来几个规划了,打个标识,上面这个叫session1,下面的叫session2。
这样就是两个 session 会话,有了会话之后,只完成了 pageviews 模型的第一步。
4. 在每个会话内进行步骤号的标识,并且计算每一步的页面停留时
间。
如果有些步骤号计算不出来,就需要默认指定。这时候就可以在这里达标,使用一个字段叫step步骤号,在这当中进行了三步,那么下面就应该重新开始打,这样就符合规定了。有了步骤号之后还需要停留时间,停留时间叫做stayTime,写一个伪代码time(i)-time(i-1),就是当前这一条记录的时间减去上一条的时间就是页面停留时间。如果计算不出来就要默认指定,第一步停留时间是我们8:30:35-8:30:25,就是十秒钟,在stepTime写十秒;下面这个8:31:05-8:30:35,是30秒。
最后一步的停留时间就不能直接相减了,直接默认时间60秒,叫做业务默认指定。下面是18:31:30-18:30:05是多25秒;最后一个还是默认值60秒,这样就计算出来了每一步的停留时间。
四、 模型小结
上述步骤就产生了点击流模型的 pageviews 模型,其中 IP表示用户;sessionid 表示属于哪个会话;page 表示页面;time 表示时间;step 表示步骤号;staytime 表示停留时间。有了这几个字段之后,接下来填充模型。
比如说首先是会话一,就是会话一相对应的几条记录,都是100用户;页面就是把对应的几个页面拿过来;访问时间也一样就是把对应的时间填充过来;接下来就是绘画,这三条数据都属于同一个会话,就是说它们都是同一个session叫session1;步骤号也同样把对应的数据填充即可;停留时间就是刚才计算的停留时间,填充后再进行简单规划,就变成一个表的模型了,每一个字段,每一个属性都具备了,这一个表的结构模型就是点击流模型中的 pageviews 模型,这个模型所专注的就是会话的识别,步骤号以及每一步的停留时间,正好与它的专注的特点相对应,通过以上步骤就可以生成 pageviews 模型。