路徑分析
阿新 • • 發佈:2018-12-23
# sunburst事件路徑圖
# 載入sunburstR包
require(sunburstR)
# 匯入sequences資料
sequences <- read.csv(
system.file("examples/visit-sequences.csv",package="sunburstR")
,header = FALSE
,stringsAsFactors = FALSE
)
# 檢視前六行
head(sequences)
# 繪製sunburst事件路徑圖
sunburst(sequences)
> # 計算某一路徑的佔比 > # 檢視選中路徑的點選次數 > (targetclick <- sequences[sequences$V1=="home-search-product-end","V2"]) integer(0) > # 統計所有路徑的點選次數 > (allclick <- sum(sequences$V2)) [1] 185099 > # 計算目標路徑的佔比 > paste0(round(targetclick/allclick,4)*100,"%") [1] "%"
使用者ID、事件、點選事件的ID
基於事件的關聯規則;序列中最小組成單位的集合稱為資料項(item),標識同一個序列內不同資料項之間的前後順序關係稱為事件(event),通常用時間戳表示。
# 提取有過11034點選行為的使用者資料
targetuserid <- unique(data_click[data_click$V3=="11034","V1"])
data_click_new <- data_click[data_click$V1 %in% targetuserid,]
# 將資料轉化成事務型 library(arulesSequences) tmp_data <- data.frame(click=data_click_new$V3) tmp_data$click <- as.factor(tmp_data$click) data_click_tran <- as(tmp_data,'transactions')
transactionInfo(data_click_tran)$sequenceID <- data_click_new$V1
transactionInfo(data_click_tran)$eventID<-data_click_new$V2
data_click_tran
summary(data_click_tran)
# 檢視事務型資料的前六行
inspect(data_click_tran[1:6])
head(as(data_click_tran,"data.frame"))
# 繪製商品的頻率圖 itemFrequencyPlot(data_click_tran, topN=20)
# 利用arulesSquences包中的cspade函式實現cSPADE演算法
myrules <- cspade(data_click_tran,parameter=list(support=0,maxlen=2),
control=list(verbose=TRUE))
myrules <- sort(myrules,by="support") # 按照support進行排序
targetclick <- paste0(".*click=11034","[^\\}]*\\}>") # 設定規則表示式
finalrules <-myrules[grep(targetclick ,as(myrules,"data.frame")$sequence)]
inspect(finalrules[1:3]); # 檢視序列的前三條
nrow(finalrules) # 計算序列個數
#轉換成資料框
finalrules.data.frame <- as(finalrules[-1],"data.frame")
# 檢視前三行資料
head(finalrules.data.frame)
# 計算支援度的佔比
finalrules.data.frame$percentage <- finalrules.data.frame$support/
sum(finalrules.data.frame$support)
# 計算支援度的累計百分比
finalrules.data.frame$sum.percentage <- cumsum(finalrules.data.frame$percentage)
# 篩選累計百分比小於75%的序列資料
finalrules.data.frame <- finalrules.data.frame[
finalrules.data.frame$sum.percentage <=0.75,]
# 檢視符合結果的序列個數
nrow(finalrules.data.frame)
# 檢視前六行資料
head(finalrules.data.frame)
# 提取關鍵點選按鈕的事件id
clickid <- substr(finalrules.data.frame$sequence,9,13)
# 檢視關鍵事件id
clickid
# 計算關鍵點選按鈕i的引導能力conf
conf <- rep(1,length(clickid))
for(i in 1:length(clickid)) {
n <- [email protected]$nsequences
nclickid_support <- finalrules.data.frame[i,"support"]
conf[i] <- nclickid_support*n/
nrow(data_click[data_click$V3==clickid[i],])
}
# 將關鍵事件id和支援度佔比組成新資料框result
result <- data.frame(click=clickid,
percentage=round(finalrules.data.frame$percentage,3),
conf=conf)
# 檢視前六行
head(result)
# 繪製支援度佔比的垂直金子塔圖
library(reshape)
md <- melt(result,id="click") # 對result資料進行重組
md$value[md$variable == "conf"] <- -md$value[md$variable == "conf"]
md <- md[order(md$variable,decreasing=T),] # 按照variable變數進行降序排序
# 繪製垂直金字塔圖
library(recharts)
echartr(md,click,value,variable,type="vbar",subtype="stack") %>%
setTitle("引導使用者進入開始打牌11034的重點事件id分析") %>%
setXAxis(axisLine=list(onZero=TRUE)) %>%
setYAxis(axisLabel=list(
formatter=JS('function (value) {return Math.abs(value);}')))