用马尔可夫链建模clickstream数据的包
markovclick的Python项目详细描述
标记单击
r包clickstream的python实现,该包将网站clickstreams建模为markov链。
markovclick
允许您将来自网站的clickstream数据建模为markov链,然后根据用户的历史和当前状态,可以使用markov链预测下一次可能的网站点击。
要求
- python 3.x
- 努比
- matplotlib
- Seaborn(推荐)
- 熊猫
安装
python setup.py install
或
pip install markovclick
测试
可以使用根目录中的pytest
或tox
命令运行测试。
文档
要构建文档,请运行make build_docs
。然后可以使用make serve_docs
通过web服务器查看文档。
用法
快速启动
要开始使用没有任何数据的包,markovclick
可以生成虚拟数据,供您使用:
frommarkovclickimportdummyclickstream=dummy.gen_random_clickstream(nOfStreams=100,nOfPages=12)
术语
在这个包的上下文中,流指的是属于给定用户的一系列单击。用户在组装这些流时定义单击之间的时间差,但在行业中通常需要30分钟。
页面指的是用户的单独点击,也就是他们访问的页面。与其存储用户访问的页面的整个url,不如使用诸如PXX
这样的简单代码对页面进行编码,其中X
可以是任意数字。此策略可用于在同一代码下对相似页进行分组,因为将它们建模为单独的页有时并不有用,这会导致概率矩阵过大。
建立马尔可夫链
从虚拟数据建立马尔可夫链:
frommarkovclick.modelsimportMarkovClickstreamm=MarkovClickstream(clickstream)
类的实例m
提供访问类的属性,例如用于建模马尔可夫链的概率矩阵(m.prob_matrix
),以及clickstream中的唯一页列表(m.pages
)。
可视化
可视化为热图
概率矩阵可视为热图,如下所示:
sns.heatmap(m.prob_matrix,xticklabels=m.pages,yticklabels=m.pages)
可视化马尔可夫链
马尔可夫链可以看作是一个节点和边的图,边代表每个状态的转换。markovclick
在graphviz
包周围提供一个包装函数,以这种方式可视化markov链。
frommarkovclick.vizimoportvisualise_markov_chaingraph=visualise_markov_chain(m)
函数visualise_markov_chain()
返回一个Digraph
对象,只需调用对返回对象的引用,就可以在jupyter笔记本中直接查看该对象。也可以通过调用对象上的render()
函数将其输出到pdf文件。
在生成的图形中,代表各个页面的节点显示为绿色,每个节点最多呈现3条边。第一条边是一个很粗的蓝色箭头,表示从这个页面/状态到下一个页面/状态的最有可能的过渡。由较薄的蓝色箭头描绘的第二条边,描绘了从该状态开始的第二个最有可能的过渡。最后,显示了第三条边,该边描述了从该页/状态到自身的转换(浅灰色)。仅当两个最有可能的转换尚未到自身时,才会显示此边。对于所有转换,概率显示在边的旁边(箭头)。
使用markovclick.preprocessing
单击流处理
markovclick
提供处理clickstream数据(如服务器日志)的功能,这些数据包含唯一的标识符,如与每次单击关联的cookie id。这允许点击被聚集成组,由此来自相同浏览器(由唯一标识符标识)的点击被分组,使得各个点击之间的差异不超过最大会话超时(通常被认为是30分钟)。
会话使用clickstream数据
Sessionise
要会话clickstream数据,请执行以下代码可用于需要pandas
数据帧对象的。
frommarkovclic.preprocessingimportSessionisesessioniser=Sessionise(df,unique_id_col='cookie_id',datetime_col='timestamp',session_timeout=30)
参数
Argument | Type | Description |
---|---|---|
^{ | DataFrame | ^{ |
^{ | String | Column name of unique identifier, e.g. ^{ |
^{ | String | Column name of timestamp column. |
^{ | Integer | Maximum time in minutes after which a session is broken. |
Sessionise.assign_sessions()
实例化Sessionise
对象后,就可以调用assign_sessions()
函数。此函数支持多处理,使您能够将作业拆分为多个进程以利用多核CPU。
sessioniser.assign_sessions(n_jobs=2)
参数
Argument | Type | Description |
---|---|---|
^{ | Integer | Number of processes to spawn to enable parallel processing. If set to ^{ |
assign_sessions()
函数返回dataframe,并添加一个额外的列来存储会话的唯一标识符。然后可以使用此列对数据帧的行进行分组。