R arulesSequences 查找序列支持哪些模式
R arulesSequences Find which patterns are supported by a sequence
我在使用 R
中的 arulesSequences
库时遇到问题
我有一个包含时间信息的事务数据集(在这里,让我们使用默认的 zaki
数据集)。我使用 SPADE(cspade
函数)来查找数据集中的频繁子序列。
library(arulesSequences)
data(zaki)
frequent_sequences <- cspade(zaki, parameter=list(support=0.5))
现在,我想要的是为每个序列(即每个客户)找到它支持的频繁子序列。我尝试了 %in%
和 subset
的各种组合,但没有成功。
例如,对于第二个客户,初始交易 inspect(zaki[zaki@itemsetInfo$sequenceID==2])
是:
items sequenceID eventID SIZE
5 {A,B,F} 2 15 3
6 {E} 2 20 1
整个数据集inspect(frequent_sequences)
中的频繁序列是:
items support
1 <{A}> 1.00
2 <{B}> 1.00
3 <{D}> 0.50
4 <{F}> 1.00
5 <{A, F}> 0.75
6 <{B, F}> 1.00
7 <{D}, {F}> 0.50
8 <{D}, {B, F}> 0.50
9 <{A, B, F}> 0.75
10 <{A, B}> 0.75
11 <{D}, {B}> 0.50
12 <{B}, {A}> 0.50
13 <{D}, {A}> 0.50
14 <{F}, {A}> 0.50
15 <{D}, {F}, {A}> 0.50
16 <{B, F}, {A}> 0.50
17 <{D}, {B, F}, {A}> 0.50
18 <{D}, {B}, {A}> 0.50
我想看到客户2支持频繁序列1、2、4、5、6、9和10,但不支持其他。
我也可以满足于反向信息:哪些是支持给定频繁子序列的基本序列? R 以某种方式知道此信息,因为它使用它来计算频繁序列的支持度。
在我看来这应该很容易(而且可能很简单!)但我似乎无法弄明白...
有什么想法吗?
经过一番冷静的挖掘,我找到了一种方法,而且确实很简单...因为 support
函数可以完成这项工作!
ids <- unique(zaki@itemsetInfo$sequenceID)
encoding <- data.frame()
# Prepare the data.frame: as many columns as there are frequent sequences
for (seq_id in 1:length(frequent_sequences)){
encoding[,labels(frequent_sequences[seq_id])] <- logical(0)
}
# Fill the rows
for (id in ids){
transaction_subset <- zaki[zaki@itemsetInfo$sequenceID==id]
encoding[id, ] <- as.logical(
support(frequent_sequences, transaction_subset, type="absolute")
)
}
可能有更多美观的方式来达到结果,但这会产生预期的结果:
> encoding
<{A}> <{B}> <{D}> <{F}> <{A,F}> <{B,F}> <{D},{F}> <{D},{B,F}> <{A,B,F}>
1 TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE
2 TRUE TRUE FALSE TRUE TRUE TRUE FALSE FALSE TRUE
3 TRUE TRUE FALSE TRUE TRUE TRUE FALSE FALSE TRUE
4 TRUE TRUE TRUE TRUE FALSE TRUE TRUE TRUE FALSE
<{A,B}> <{D},{B}> <{B},{A}> <{D},{A}> <{F},{A}> <{D},{F},{A}> <{B,F},{A}>
1 TRUE TRUE TRUE TRUE TRUE TRUE TRUE
2 TRUE FALSE FALSE FALSE FALSE FALSE FALSE
3 TRUE FALSE FALSE FALSE FALSE FALSE FALSE
4 FALSE TRUE TRUE TRUE TRUE TRUE TRUE
<{D},{B,F},{A}> <{D},{B},{A}>
1 TRUE TRUE
2 FALSE FALSE
3 FALSE FALSE
4 TRUE TRUE
我在使用 R
中的arulesSequences
库时遇到问题
我有一个包含时间信息的事务数据集(在这里,让我们使用默认的 zaki
数据集)。我使用 SPADE(cspade
函数)来查找数据集中的频繁子序列。
library(arulesSequences)
data(zaki)
frequent_sequences <- cspade(zaki, parameter=list(support=0.5))
现在,我想要的是为每个序列(即每个客户)找到它支持的频繁子序列。我尝试了 %in%
和 subset
的各种组合,但没有成功。
例如,对于第二个客户,初始交易 inspect(zaki[zaki@itemsetInfo$sequenceID==2])
是:
items sequenceID eventID SIZE
5 {A,B,F} 2 15 3
6 {E} 2 20 1
整个数据集inspect(frequent_sequences)
中的频繁序列是:
items support
1 <{A}> 1.00
2 <{B}> 1.00
3 <{D}> 0.50
4 <{F}> 1.00
5 <{A, F}> 0.75
6 <{B, F}> 1.00
7 <{D}, {F}> 0.50
8 <{D}, {B, F}> 0.50
9 <{A, B, F}> 0.75
10 <{A, B}> 0.75
11 <{D}, {B}> 0.50
12 <{B}, {A}> 0.50
13 <{D}, {A}> 0.50
14 <{F}, {A}> 0.50
15 <{D}, {F}, {A}> 0.50
16 <{B, F}, {A}> 0.50
17 <{D}, {B, F}, {A}> 0.50
18 <{D}, {B}, {A}> 0.50
我想看到客户2支持频繁序列1、2、4、5、6、9和10,但不支持其他。
我也可以满足于反向信息:哪些是支持给定频繁子序列的基本序列? R 以某种方式知道此信息,因为它使用它来计算频繁序列的支持度。
在我看来这应该很容易(而且可能很简单!)但我似乎无法弄明白...
有什么想法吗?
经过一番冷静的挖掘,我找到了一种方法,而且确实很简单...因为 support
函数可以完成这项工作!
ids <- unique(zaki@itemsetInfo$sequenceID)
encoding <- data.frame()
# Prepare the data.frame: as many columns as there are frequent sequences
for (seq_id in 1:length(frequent_sequences)){
encoding[,labels(frequent_sequences[seq_id])] <- logical(0)
}
# Fill the rows
for (id in ids){
transaction_subset <- zaki[zaki@itemsetInfo$sequenceID==id]
encoding[id, ] <- as.logical(
support(frequent_sequences, transaction_subset, type="absolute")
)
}
可能有更多美观的方式来达到结果,但这会产生预期的结果:
> encoding
<{A}> <{B}> <{D}> <{F}> <{A,F}> <{B,F}> <{D},{F}> <{D},{B,F}> <{A,B,F}>
1 TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE
2 TRUE TRUE FALSE TRUE TRUE TRUE FALSE FALSE TRUE
3 TRUE TRUE FALSE TRUE TRUE TRUE FALSE FALSE TRUE
4 TRUE TRUE TRUE TRUE FALSE TRUE TRUE TRUE FALSE
<{A,B}> <{D},{B}> <{B},{A}> <{D},{A}> <{F},{A}> <{D},{F},{A}> <{B,F},{A}>
1 TRUE TRUE TRUE TRUE TRUE TRUE TRUE
2 TRUE FALSE FALSE FALSE FALSE FALSE FALSE
3 TRUE FALSE FALSE FALSE FALSE FALSE FALSE
4 FALSE TRUE TRUE TRUE TRUE TRUE TRUE
<{D},{B,F},{A}> <{D},{B},{A}>
1 TRUE TRUE
2 FALSE FALSE
3 FALSE FALSE
4 TRUE TRUE