在進行頻繁序列挖掘時,通常需要執行以下任務:
1.查找序列模式(頻繁序列)。
2.找出哪些順序模式適用於交易。 I.e .:在一個交易中,所有發現的頻繁序列中哪一個存在?R arulesSequences - 交易中存在哪些頻繁序列?
我很難做後者。
使用R,我從arulesSequences包上的以下玩具數據集施加cspade算法:
data_for_fseq_mining <- str_split(string = data$transaction, pattern = " ")
:
data <- data.frame(id = 1:10,
transaction = c("A B B A",
"A B C B D C B B B F A",
"A A B",
"B A B A",
"A B B B B",
"A A A B",
"A B B A B B",
"E F F A C B D A B C D E",
"A B B A B",
"A B"))
然後我使用str_split功能從包stringr分割數據
使用標識符來唯一命名'data_for_fseq_mining'中的列表元素。這是使用函數'as.transactions'的先決條件,如下所示。
names(data_for_fseq_mining) <- data$id
爲了這種數據轉換爲類「交易」我用下面的函數「as.transactions」從https://github.com/cran/clickstream/blob/master/R/Clickstream.r的數據集。
data_for_fseq_mining_trans <- as.transactions(clickstreamList = data_for_fseq_mining)
現在的數據被以正確的格式,我運行cspade算法與某些參數:
sequences <- cspade(data = data_for_fseq_mining_trans,
parameter = list(support = 0.3, maxsize = 10, maxlen = 10, mingap = 1, maxgap = 10),
control = list(tidList = TRUE, verbose = TRUE))
總結的結果(序列和相對支持):
sequences_df <- cbind(sequence = labels(sequences), support = [email protected])
sequence support
1 <{A}> 1.0
2 <{B}> 1.0
3 <{A},{B}> 1.0
4 <{B},{B}> 0.7
5 <{A},{B},{B}> 0.6
6 <{B},{B},{B}> 0.4
7 <{A},{B},{B},{B}> 0.4
8 <{B},{B},{B},{B}> 0.3
9 <{A},{B},{B},{B},{B}> 0.3
10 <{A},{A},{B}> 0.5
11 <{B},{A},{B}> 0.4
12 <{A},{B},{A},{B}> 0.3
13 <{A},{A}> 0.8
14 <{B},{A}> 0.6
15 <{A},{B},{A}> 0.6
16 <{B},{B},{A}> 0.5
17 <{A},{B},{B},{A}> 0.4
這很好,但是現在我想知道,對於每個交易,每個序列是否存在(TRUE/FALSE)。要做到這一點,我試圖用tidList:
sequences_score <- as.matrix([email protected]@data)
[,1] [,2] [,3] [,4] [,5] [,6] [,7] [,8] [,9] [,10] [,11] [,12] [,13] [,14] [,15] [,16] [,17]
[1,] TRUE TRUE TRUE TRUE TRUE FALSE FALSE FALSE FALSE FALSE FALSE FALSE TRUE TRUE TRUE TRUE TRUE
[2,] TRUE TRUE TRUE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
[3,] TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE FALSE FALSE FALSE TRUE TRUE TRUE TRUE TRUE
[4,] TRUE TRUE TRUE FALSE FALSE FALSE FALSE FALSE FALSE TRUE FALSE FALSE TRUE FALSE FALSE FALSE FALSE
[5,] TRUE TRUE TRUE TRUE FALSE FALSE FALSE FALSE FALSE FALSE TRUE FALSE TRUE TRUE TRUE TRUE FALSE
[6,] TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
[7,] TRUE TRUE TRUE FALSE FALSE FALSE FALSE FALSE FALSE TRUE FALSE FALSE TRUE FALSE FALSE FALSE FALSE
[8,] TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE
[9,] TRUE TRUE TRUE TRUE TRUE FALSE FALSE FALSE FALSE TRUE TRUE TRUE TRUE TRUE TRUE FALSE FALSE
[10,] TRUE TRUE TRUE TRUE TRUE TRUE TRUE FALSE FALSE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE
從這個結果,我認爲每一行對應一個交易,每列的序列。但在查看第4列時,它表示模式'
< {B},{B}>'在事務2,4和7中不存在。儘管這些事務顯然都包含此模式。我對輸出的假設是否錯誤?
的另一種方法是使用這一段代碼由juliesls提供:R arulesSequences Find which patterns are supported by a sequence
當應用的代碼的以下各行,則發生錯誤。
ids <- unique([email protected]$sequenceID)
sequences_score <- data.frame()
for (seq_id in 1:length(sequences)){
sequences_score[,labels(sequences[seq_id])] <- logical(0)
}
for (id in ids){
transaction_subset <- data_for_fseq_mining_trans[[email protected]$sequenceID==id]
sequences_score[id, ] <- as.logical(support(x = sequences, transactions =
transaction_subset, type="absolute"))
}
任何線索?