一.实战之前,先介绍一个概念bitmap
这个bitmap有啥用?
看这副图片,假如更精简的话,只有2个颜色,黄色和透明,1代表黄色,0代表没有颜色,是不是,只要你找到哪个点,看一下是1还是0就知道颜色了呢
二.bitmap在统计中的应用
下面,我将讲解如何用bitmap原理来存储日活数据
思路:把每一天,当做一个图,谁访问了,就在哪个点上,设置1
-
记录日活
需求:记录每天,某个userid 为 22的用户访问了某个网页,网页名为 pagehelloword
这样通过pagehelloword::Ymd 可以记录每一天的数据图
下面我计算了 22这个userid在 20160502 访问了pagehelloword
setbit pagehelloword::20160502 22 1
我们可以多生成几个测试数据
setbit pagehelloword::20160502 23 1
setbit pagehelloword::20160502 24 1
setbit pagehelloword::20160502 25 1
setbit pagehelloword::20160502 26 1
那么次数,我们假如想看一下,今天日活多少了,就是有多少人访问了
怎么得到这些日活数据呢?
bitcount 命令可以计算某个bitmap有多少的1
bitcount pagehelloword::20160502
(integer) 5
非常好,我们有5个人访问了,数据准确吗,我们查看一下,之前我们确实记录了5个数据,yes,数据非常准
2.记录留存,留存率
日期走到了5月3号,那么这一天假如有这些userid访问了pagehelloword,我们同样记录一下
setbit pagehelloword::20160503 25 1
setbit pagehelloword::20160503 22 1
setbit pagehelloword::20160503 24 1
setbit pagehelloword::20160503 26 1
setbit pagehelloword::20160503 27 1
setbit pagehelloword::20160503 28 1
setbit pagehelloword::20160503 29 1
我们同样可以上面的方法,计算一天5月3号的日活
bitcount pagehelloword::20160503
(integer) 7
日活为7,比昨天提高了ye
那么留存有多少呢,就是昨天访问的,今天又访问了的人,占比为多少呢
bitop 可以对多个bitmap进行与或运算
我们取得 5月2号,和5月3号访问人的交集,即重复访问的人
BITOP AND pagehelloword::20160502and20160503 pagehelloword::20160502 pagehelloword::20160503
我们用 pagehelloword::20160502and20160503 记录了 2号和3号的并集
现在我们查看一下,有多少人第二天又重复访问了,同样是bitcount命令
bitcount pagehelloword::20160502and20160503
(integer) 4
结果是 4个人
那么我们就可以计算出 次日留存 即为4
次日留存率为 4/5*100% = 80%
3.统计次日老用户比例
还是上面的表格,我们得到老用户为 4 今天的所有用户为7
比例为 4/7*100%
4.统计周活,月活跃用户
BITOP or 并集
我们这里简化一下,统计连续2天的活跃用户
BITOP or pagehelloword::20160502or20160503 pagehelloword::20160502 pagehelloword::20160503
----
pagehelloword::20160502or20160503就是 5月2号,3号连续2天的总的活跃用户
我们用 bitcount pagehelloword::20160502or20160503
(integer) 8
得出活跃用户为8人
如果周活,就是连续7天,月活就是本月的所有数据图的并集