用马尔可夫链建模clickstream数据的包

markovclick的Python项目详细描述


标记单击

CircleCIAURDocumentation Status

r包clickstream的python实现,该包将网站clickstreams建模为markov链。


markovclick允许您将来自网站的clickstream数据建模为markov链,然后根据用户的历史和当前状态,可以使用markov链预测下一次可能的网站点击。

要求

  • python 3.x
  • 努比
  • matplotlib
  • Seaborn(推荐)
  • 熊猫

安装

python setup.py install

pip install markovclick

测试

可以使用根目录中的pytesttox命令运行测试。

文档

要构建文档,请运行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)

可视化马尔可夫链

马尔可夫链可以看作是一个节点和边的图,边代表每个状态的转换。markovclickgraphviz包周围提供一个包装函数,以这种方式可视化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)
参数
ArgumentTypeDescription
^{}DataFrame^{} DataFrame object containing clickstream data. Must contain atleast a timestamp column, unique identifier column such as cookie ID.
^{}StringColumn name of unique identifier, e.g. ^{}
^{}StringColumn name of timestamp column.
^{}IntegerMaximum time in minutes after which a session is broken.
Sessionise.assign_sessions()

实例化Sessionise对象后,就可以调用assign_sessions()函数。此函数支持多处理,使您能够将作业拆分为多个进程以利用多核CPU。

sessioniser.assign_sessions(n_jobs=2)
参数
ArgumentTypeDescription
^{}IntegerNumber of processes to spawn to enable parallel processing. If set to ^{}, no splitting occurs.

assign_sessions()函数返回dataframe,并添加一个额外的列来存储会话的唯一标识符。然后可以使用此列对数据帧的行进行分组。

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
java如何修改打印板?   java Spring批处理JdbcCursorItemReader还是RepositoryItemReader?   java如何在JTable Swing中增加标题列的字体?   java在数组方面遇到问题,导致表达式非法启动   java如何为maven pom的某些部分关闭Eclipse代码格式化程序。xml   java Dropwizard登录代码   java Jersey 2.22:客户端的默认连接超时是多少?   java无法自动连接字段:javax。sql。数据来源   如何从java中的行列表中获取单词列表?   java JDBC批量更新和处理异常?   计算大根:bigdecimal/java   java如何在JavaCC语法中提到trycatch块   javasocket。getInetAddress()不返回任何内容   oracle SQL开发人员错误无法找到Java虚拟机   java我如何计算和显示未来5年每一年的投资价值   java如何关闭浏览器选项卡?   java如何在showMessageDialog中打印双2D数组?   java从站点抓取播放列表URL?   selenium中的java点击css按钮