序列筛选C语言,序列方式关联规则:使用arulesSequences包中的cspade函数

序列模式关联规则:使用arulesSequences包中的cspade函数

数据抽象

序列(sequence):表示一个完整的信息流.

数据项(item):序列中最小组成单位的集合

事件(event):通常使用时间戳来表示,用于标识同一个序列内不同数据项之间的前后顺序关系。

在网站分析中,可以使用序列模式的关联分析来研究用户的点击行为流,并衡量页面的体验以及易用性效果。

(该实例来自 李明 《R语言与网站分析》中例子)

读取数据

# (1)使用read.fwf函数读入文件

tmpp

train_list

# (2) 解析有用的数据信息

# 得到字符型向量train_list后,使用字符串处理函数解析出有用信息,并最终存储于数据框data中。代码如下:

tmp_page

tmp_sequenceid

tmp_eventid

m

sequenceid

train_length

for(i in 302:train_length){

tmp

if(tmp[1]=="C") {

sequenceid

eventid

} else if(tmp[1]=="V") {

m

eventid

tmp_sequenceid[m]

tmp_eventid[m]

tmp_page[m]

}

}

tmp_page

data

# (3) 帅选浏览轨迹中包含目标页面1034的数据

# 因为本实例要寻找哪些页面会引导用户进入关键页面1034,以及其贡献度和能力。所有这里先要筛选出轨迹中与目标页面1034相关的数据# data.user.代码如下:

user.page=1034

user.sequenceid

i

for(seq.i in user.sequenceid){

data.user

i

}

data.user

使用cspade函数进行序列模式关联分析

# (1) 数据准备

# 首先加载arulesSequences算法包,并把存有目标页面1034浏览轨迹信息(包括序列id和事件id以及数据项信息)的数据框data.user转化# 为cspade函数可用的数据对象data.tran。代码如下:

library(arulesSequences)

tmp_data

data.tran

transactionInfo(data.tran)$sequenceID

transactionInfo(data.tran)$eventID

# 利用transactionInfo函数查看前六数据

head(transactionInfo(data.tran))

## transactionID sequenceID eventID

## 1 1 20 1

## 2 2 20 2

## 3 3 20 3

## 4 4 20 4

## 5 5 21 1

## 6 6 21 2

# (2) 使用cspade函数进行分析

# 找出用户进行1034页面前浏览过的页面i,以及序列的支持度。代码如下:

result

##

## parameter specification:

## support : 0

## maxsize : 10

## maxlen : 2

##

## algorithmic control:

## bfstype : FALSE

## verbose : TRUE

## summary : FALSE

## tidLists : FALSE

##

## preprocessing ... 1 partition(s), 0.78 MB [0.34s]

## mining transactions ... 0.17 MB [0.33s]

## reading sequences ... [0.81s]

##

## total elapsed time: 1.48s

result

page.2",sep="")

result.2

# (inspect(result.2)

筛选重点页面并衡量其引导能力

(1) 重点页面

1)计算各页面支持度的百分比,并把比例累计达到70%的页面作为引导用户进入1034页面的重点页面。

result.data.frame

2)计算支持度support的百分比。代码如下:

persent

3)使用累加函数cumsum()计算支持度support的累计百分比,并把百分比数据persent和sum.persent并入数据框result.data.frame中。代码如下

sum.persent

result.data.frame

4)使用subset函数筛选出累计百分比sum.persent小于70%(max.persent)的序列数据。代码如下:

max.persent=0.7

result.data.frame

# 最终数据框格式如下:

head(result.data.frame)

## sequence support persent sum.persent

## 6458 0.55473 0.24290 0.2429

## 6467 0.16082 0.07042 0.3133

## 6459 0.10903 0.04774 0.3611

## 6454 0.09592 0.04200 0.4031

## 6476 0.09539 0.04177 0.4448

## 6451 0.08249 0.03612 0.4809

tail(result.data.frame)

## sequence support persent sum.persent

## 6486 0.03432 0.01503 0.6347

## 6481 0.03378 0.01479 0.6495

## 6488 0.03293 0.01442 0.6639

## 6485 0.02792 0.01223 0.6761

## 6516 0.02750 0.01204 0.6882

## 6479 0.02568 0.01125 0.6994

(2) 解析重点页面编号

列数据result.data.frame$sequence是形式的序列信息,下面解析出其中的页面编号i,并存放于page向量

page

for(i.seq in result.data.frame$sequence){

real_seq1

real_seq2

page[i]

i

}

(3) 重点页面的引导能力

conf(i=>1034)=页面i引导用户进入关键页面1034的次数/页面i的浏览次数来衡量页面i引导用户进入页面1034的能力,由于其含义类似于信任度,因此这里记为conf。

得到重点页面编号page后,可以通过原始数据data来计算页面i的浏览次数。代码如下:

i

for(i.page in page){

uv[i]

i

}

页面i引导用户进入关键页面1034的次数就是序列的支持度乘以其序列数result@info$nsequences,最后得到:

conf

把page和conf也并入数据框result.data.frame中。代码如下:

result.data.frame

绘制结果图表

首先使用柱状图barplot函数绘制序列支持度的百分比result.data.frame$persent,然后使用红色曲线(lines函数)绘制衡量重要页面i引导用户能力的conf,接着使用text函数在曲线上绘制conf的数值,最后使用axis函数把重要页面的编号信息填x轴处。代码如下:

barplot(as.matrix(result.data.frame$persent,nrow=1),ylim=c(0,1),beside=TRUE,xlab="页面名称",

main="引导用户进入关键页面1034的重点页面分析")

lines(0.5+c(1:nrow(result.data.frame)),result.data.frame$conf,type="b",col="red")

text(0.5+c(1:nrow(result.data.frame)),result.data.frame$conf,

labels=paste(round(result.data.frame$conf*100,2),"%",sep=""))

axis(1,at=0.5+c(1:nrow(result.data.frame)),labels=result.data.frame$page,tick=FALSE)

152647319.png

结论:页面1008是为页面1034的访问贡献最大的页面,其次是1007、1009等。而在引导能力上,页面1004和1018较低,鉴于页面1004为关键页面1034的访问贡献较大(非排名第4),但引导能力较低,因此要重点优化该页面。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值