使用redis位图的强大分析库
bitmapist4的Python项目详细描述
新!试用我们新的独立的bitmapist服务器,它可以将内存效率提高443倍,使您的设置更便宜、更可扩展。它与运行在redis上的bitmapist完全兼容。
bitmapist:一个强大的redis分析库
这个python库使实现实时、高度可伸缩的分析成为可能,这些分析可以回答以下问题:
- 用户123今天在线了吗?这个星期?这个月?
- 用户123是否执行了动作"x"?
- 这个月活跃了多少用户?这一小时?
- 本周有多少个独特的用户执行了动作"x"?
- 上周活跃的用户中有多少%仍然活跃?
- 上个月活跃的用户中有多少%在本月仍然活跃?
- 哪些用户执行了操作"x"?
这个库非常易于使用,使您能够轻松创建自己的报表。
使用redis位图,您可以在非常小的内存(兆字节)中存储数百万用户的事件。 您应该小心使用巨大的id,因为这可能需要更大的内存。ID应该在[0,2^32]范围内。
此外,bitmapist还可以生成队列图,可以执行以下操作:
- 超过用户保留的群组
- 上一次(日、周、月)处于活动状态的用户中有多少%仍处于活动状态?
- 执行action x的用户中有多少%也执行action y(而且随着时间的推移)
- 还有很多其他的事情!
如果您想了解有关位图的更多信息,请阅读以下内容:
- http://blog.getspool.com/2011/11/29/fast-easy-realtime metrics-using-redis-bitmaps/
- http://redis.io/commands/setbit
- http://en.wikipedia.org/wiki/bit_array
- http://www.slideshare.net/crashlytics/crashlytics on redis analytics
安装
可通过以下方式轻松安装:
$ pip install bitmapist4
端口
- php端口:https://github.com/jeremyfreeagent/bitter" rel="nofollow">https://github.com/jeremyfreeagent/bitter
示例
设置:
importbitmapist4b=bitmapist4.Bitmapist()
将用户123标记为活动并播放了一首歌曲:
b.mark_event('active',123)b.mark_event('song:played',123)
如果用户123本月处于活动状态,请回答:
assert123inb.MonthEvents('active')assert123inb.MonthEvents('song:played')
本周有多少用户处于活动状态?
len(b.WeekEvents('active'))
对本周活动的所有用户进行迭代:
foruidinb.WeekEvents('active'):print(uid)
要探索任何特定的日期、周、月或年,而不是当前的日期、周、月或年,
uou可以从任何datetime对象创建一个带有from_date
static的事件
方法:
specific_date=datetime.datetime(2018,1,1)ev=b.MonthEvents('active').from_date(specific_date)print(len(ev))
有返回"兄弟"事件和 让你不需要任何复杂的 迭代器。方法允许您向前或向后跳转 不止一步。统一api允许您使用所有类型的基本事件 (从一小时到一年)使用相同的代码。
current_month=b.MonthEvents('active')prev_month=current_month.prev()next_month=current_month.next()year_ago=current_month.delta(-12)
每个事件对象h作为period_start
和period_end
方法来查找
事件的时间跨度。这对于缓存值非常有用
"未来的事件"不可取:
ev=b.MonthEvent('active',dt)ifev.period_end()<datetime.datetime.utcnow():cache.set('active_users_<...>',len(ev))
禁用每小时跟踪(以节省内存!)你可以用 构造函数参数。
$ pip install bitmapist4
0
此外,您还可以为标记事件提供额外的参数以绕过默认值:
$ pip install bitmapist4
1
独特事件
有时事件的数据没有什么意义,你更感兴趣 如果用户一生中至少发生一次特定事件。
为此,有一个UniqueEvents
模型。模型只创建一个
redis键,不取决于日期。
您可以将独特的事件与其他类型的事件结合起来。
A/B测试示例:
$ pip install bitmapist4
2
您可以用b.mark_unique
标记这些用户,也可以自动
为所有标记的密钥填充额外的唯一队列
$ pip install bitmapist4
3
执行位操作
上个月活跃的用户有多少在这个月仍然活跃?
$ pip install bitmapist4
4
支持运算符&;和
、
、
^
和。
这适用于嵌套位操作(想象一下您可以用它做什么;-)!
删除事件
如果要在任何时间段内永久删除标记的事件,可以使用delete()
方法:
$ pip install bitmapist4
5
如果要删除所有位图列表事件,请使用:
$ pip install bitmapist4
6
默认情况下,位操作的结果被缓存。它们被缓存了60秒 对于操作,包含未完成时段,否则为24小时。
您可能需要显式重置缓存:
$ pip install bitmapist4
7
批量更新事务
如果您经常一次执行多个更新,那么可以从redis中获益。 管道,作为bitmapist中的事务包装。
$ pip install bitmapist4
8
从以前版本迁移
"bitmapist4.bitmapist"实例的api与 bitmapist以前版本的api(模块级)。概述的显著变化 下面,
- 删除了用于选择服务器的"system"属性。你应该 请改用不同的位图列表类实例。如果你用"系统"来 使用管道时,应切换到事务。
- bitmapist.track_hourly和bitmapist.track_unique模块级常量 已移动到BitMapist4。BitMapist属性,可以使用类设置 建造商。
- 在数据库级别,新的bitmapist4对redis密钥使用"bitmapist"前缀, 而老的位图专家出于历史原因使用"trackist"。如果你想要 继续使用旧数据库,或希望使用BitMapist和BitMapist4 对于同一个数据库,需要显式地设置密钥前缀 "追踪器手"
- 如果使用Bitmapist服务器,请确保使用1.2或更高版本。 此版本添加了对expire命令的支持,该命令用于expire 临时bitop键。
替换可能如下所示的旧代码:
$ pip install bitmapist4
9
像这样:
importbitmapist4b=bitmapist4.Bitmapist()0
位图组
队列是一组具有明确特征的受试者(通常 在选定的时间段内经历一个共同事件的受试者,例如 出生或毕业)。
您可以使用bitmapist4.courrent.get_courrent_table()
功能。
此表的每一行都回答了"队列的哪一部分" 随着时间的推移执行了活动,该行的第n个单元格表示 仍执行活动的用户数(绝对或百分比) n天后(或数周或数月)。
队列中的每一个新列都展示了不同相似的行为 随着时间的推移。最新一行显示队列的行为, 作为参数提供,上面的一个显示类似的 队列,但转移1天(或一周或一个月前等。
例如,考虑以下队列统计
importbitmapist4b=bitmapist4.Bitmapist()1
此表显示注册用户仍处于活动状态的速率 注册后同一周,然后一周,然后两周 注册后等。
默认情况下,表格显示20行。
第一行表示来自注册用户群的统计信息 20周前。第二行表示用户的相同统计信息, 19周前注册,以此类推,直到最后一行显示用户 本周注册。当然,最后一行只包含一个单元格, 本周注册并在此活动的用户数 还有一周。
然后您可以自己将其呈现为html,或者导出为pandas数据帧 使用df()方法。
来自http://www.gharchive.org/" rel="nofollow">http://www.gharchive.org/
上用户活动的示例importbitmapist4b=bitmapist4.Bitmapist()2
数据帧可以进一步着色(在jupyter笔记本中显示) 使用styleze()。
版权所有:2012-2018 DOIST LTD.
许可证:BSD