标签:数据 transactions 数据挖掘 r语言 算法
事件(event):通常使用时间戳来表示,用于标识同一个序列内不同数据项之间的前后顺序关系。
# (1)使用read.fwf函数读入文件
tmpp<-read.fwf("~\\anonymous-msweb.data",width=c(60))
train_list<-tmpp$V1
# (2) 解析有用的数据信息
# 得到字符型向量train_list后,使用字符串处理函数解析出有用信息,并最终存储于数据框data中。代码如下:
tmp_page<-c(0)
tmp_sequenceid<-c(0)
tmp_eventid<-c(0)
m<-0
sequenceid<-0
train_length<-length(train_list)
for(i in 302:train_length){
tmp<-unlist(strsplit(as.character(train_list[i]),","))
if(tmp[1]=="C") {
sequenceid<-sequenceid+1
eventid<-0
} else if(tmp[1]=="V") {
m<-m+1
eventid<-eventid+1
tmp_sequenceid[m]<-sequenceid #填充sequenceID
tmp_eventid[m]<-eventid #填充eventID
tmp_page[m]<-as.numeric(tmp[2])
}
}
tmp_page<-factor(tmp_page)
data<-data.frame(page=tmp_page,seqid=tmp_sequenceid,eventid=tmp_eventid)
# (3) 帅选浏览轨迹中包含目标页面1034的数据
# 因为本实例要寻找哪些页面会引导用户进入关键页面1034,以及其贡献度和能力。所有这里先要筛选出轨迹中与目标页面1034相关的数据# data.user.代码如下:
user.page=1034
user.sequenceid<-unique(data$seqid[which(data$page==user.page)])
i<-1;data.user<-data[1,]
for(seq.i in user.sequenceid){
data.user<-rbind(data.user,subset(data,seqid==seq.i))
i<-i+1
}
data.user<-data.user[-1,]
# (1) 数据准备
# 首先加载arulesSequences算法包,并把存有目标页面1034浏览轨迹信息(包括序列id和事件id以及数据项信息)的数据框data.user转化# 为cspade函数可用的数据对象data.tran。代码如下:
library(arulesSequences)
tmp_data<-data.frame(page=data.user$page)
data.tran<-as(tmp_data,"transactions")
transactionInfo(data.tran)$sequenceID<-data.user$seqid
transactionInfo(data.tran)$eventID<-data.user$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,以及序列<{page=i},{page=1034}>的支持度。代码如下:
result<-cspade(data.tran,parameter=list(support=0,maxlen=2),control=list(verbose=TRUE))
##
## 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<-sort(result,by="support")
page.2<-paste(".*page=",user.page,"[^\\}]*\\}>",sep="")
result.2<-result[grep(page.2,as(result,"data.frame")$sequence)]
# (inspect(result.2)
result.data.frame<-as(result.2[-1],"data.frame")
persent<-result.data.frame$support/sum(result.data.frame$support)
sum.persent<-cumsum(persent)
result.data.frame<-cbind(result.data.frame,persent,sum.persent)
max.persent=0.7
result.data.frame<-result.data.frame[result.data.frame$sum.persent<max.persent,]
# 最终数据框格式如下:
head(result.data.frame)
## sequence support persent sum.persent
## 6458 <{page=1008},{page=1034}> 0.55473 0.24290 0.2429
## 6467 <{page=1017},{page=1034}> 0.16082 0.07042 0.3133
## 6459 <{page=1009},{page=1034}> 0.10903 0.04774 0.3611
## 6454 <{page=1004},{page=1034}> 0.09592 0.04200 0.4031
## 6476 <{page=1026},{page=1034}> 0.09539 0.04177 0.4448
## 6451 <{page=1001},{page=1034}> 0.08249 0.03612 0.4809
tail(result.data.frame)
## sequence support persent sum.persent
## 6486 <{page=1038},{page=1034}> 0.03432 0.01503 0.6347
## 6481 <{page=1032},{page=1034}> 0.03378 0.01479 0.6495
## 6488 <{page=1040},{page=1034}> 0.03293 0.01442 0.6639
## 6485 <{page=1037},{page=1034}> 0.02792 0.01223 0.6761
## 6516 <{page=1070},{page=1034}> 0.02750 0.01204 0.6882
## 6479 <{page=1030},{page=1034}> 0.02568 0.01125 0.6994
page<-0;i<-1
for(i.seq in result.data.frame$sequence){
real_seq1<-regexpr("<\\{page=",i.seq)+7
real_seq2<-regexpr("\\}",i.seq)[1]-1
page[i]<-substr(i.seq,real_seq1,real_seq2)
i<-i+1
}
i<-1;uv<-0
for(i.page in page){
uv[i]<-length(unique(data$seqid[which(data$page==i.page)]))
i<-i+1
}
conf<-result.data.frame$support*result@info$nsequences/uv
result.data.frame<-cbind(result.data.frame,conf=conf,page=page)
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)
序列模式关联规则:使用arulesSequences包中的cspade函数
标签:数据 transactions 数据挖掘 r语言 算法
原文地址:http://blog.csdn.net/jiabiao1602/article/details/42169595