1. 程式人生 > >路徑分析

路徑分析

# 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);}')))