如何从apriori R中提取信息(关联规则)

时间:2015-07-31 02:18:03

标签: r s4 apriori

我正在R中进行一些关联规则挖掘,并希望提取我的结果,以便我可以构建报告 我的结果如下:

> inspect(rules[1:3])
  lhs          rhs                         support confidence lift
1 {apples} => {oranges}                    0.00029       0.24  4.4
2 {apples} => {pears}                      0.00022       0.18 45.6
3 {apples} => {pineapples} 0.00014         0.12  1.8

我如何提取" rhs"这里是橙子,梨和菠萝的载体

此外,我如何从摘要中提取信息,即

> summary(rules)

数据类型是" s4"当输出在列表等中时提取没有问题。你如何做equivelant?     一套3条规则

rule length distribution (lhs + rhs):sizes
2 
3 

   Min. 1st Qu.  Median    Mean 3rd Qu.    Max. 
      2       2       2       2       2       2 

我想提取" 3"来自"一套3条规则"

我已经使用" @" What does the @ symbol mean in R?

但是一旦我使用它,我如何将我的结果变成一个矢量,即

inspect(rules@rhs)
1 {oranges}
2 {pears}
3 {pineapples}

成为长度为3的字符向量

4 个答案:

答案 0 :(得分:3)

回答第二个问题:length(rules)

现在谈谈你的第一个问题:

library("arules")
data("Adult")
## Mine association rules.
rules <- apriori(Adult,parameter = list(supp = 0.5, conf = 0.9, target = "rules"))
summary(rules)

l = length(rules)

everything = labels(rules)
#print(everything)

cut = unlist(strsplit(everything,"=> "))[seq(2,2*l,by=2)]
print(cut)
如果你有疑问,请不要犹豫,这可能有点密集: - )

答案 1 :(得分:2)

inspect不会返回任何内容,只是打印输出。发生这种情况时,如果要将输出保存为字符串,则可以使用函数capture.output。例如,获取rhs

data(Adult)
rules <- apriori(Adult, parameter = list(support = 0.4))
inspect(rules[1:3])
#   lhs    rhs                              support confidence lift
# 1 {}  => {race=White}                   0.8550428  0.8550428    1
# 2 {}  => {native-country=United-States} 0.8974243  0.8974243    1
# 3 {}  => {capital-gain=None}            0.9173867  0.9173867    1

## Capture it, and extract rhs
out <- capture.output(inspect(rules[1:3]))
gsub("[^{]+\\{([^}]*)\\}[^{]+\\{([^}]*)\\}.*", "\\2", out)[-1]
# [1] "race=White"                   "native-country=United-States"
# [3] "capital-gain=None"           

但是,您似乎只能使用rules

功能从rhs访问此信息
str(rhs(rules)@itemInfo)
# 'data.frame': 115 obs. of  3 variables:
#  $ labels   :Class 'AsIs'  chr [1:115] "age=Young" "age=Middle-aged" "age=Senior" "age=Old" ...
#  $ variables: Factor w/ 13 levels "age","capital-gain",..: 1 1 1 1 13 13 13 13 13 13 ...
#  $ levels   : Factor w/ 112 levels "10th","11th",..: 111 63 92 69 30 54 65 82 90 91 ...

通常,使用str查看构成的对象,以便您可以决定如何提取组件。

答案 2 :(得分:0)

您可以将RHS提取为项目名称的字符向量(不包括“=&gt;”或大括号等无关文本),如下所示:

rules@rhs@itemInfo$labels[rules@rhs@data@i+1]

存储在rules@rhs@data@i中的索引值的范围是0到1,小于唯一标签的数量。因此,索引标签需要添加“1”以避免尝试访问rules@rhs@itemInfo$labels的第0个元素。

答案 3 :(得分:0)

也许在问这个问题时这不是一个选择,但是有一个DATAFRAME()函数可以将rules对象转换为data.frame,从中可以提取您想要的东西会更容易。您甚至可以排除花括号,并在项目集中的项目之间设置所需的分隔符。

从已接受的答案中借用示例,

data(Adult)
rules <- apriori(Adult, parameter = list(support = 0.4))

我们现在可以将其变成data.frame并做一些有用的事情:

rule_data <- DATAFRAME(rules, 
                       separate = TRUE, 
                       setStart = '', 
                       itemSep = ',', 
                       setEnd = '')

> str(rule_data)
'data.frame':   169 obs. of  6 variables:
 $ LHS       : Factor w/ 76 levels "","relationship=Husband",..: 1 1 1 1 2 3 2 3 3 3 ...
 $ RHS       : Factor w/ 7 levels "race=White","native-country=United-States",..: 1 2 3 4 5 6 7 7 1 2 ...
 $ support   : num  0.855 0.897 0.917 0.953 0.403 ...
 $ confidence: num  0.855 0.897 0.917 0.953 0.999 ...
 $ lift      : num  1 1 1 1 2.18 ...
 $ count     : int  41762 43832 44807 46560 19704 19704 19715 19899 20054 20003 ...

> rule_data$RHS[1:5]
[1] race=White                       
[2] native-country=United-States     
[3] capital-gain=None                
[4] capital-loss=None                
[5] marital-status=Married-civ-spouse