将项目信息添加到arules中的事务对象

时间:2015-03-09 18:47:06

标签: r arules

我正在使用arules包来查找销售点零售数据中的关联规则。我从数据库中提取事务详细信息,然后放入transaction对象。我是arules的新用户,正在尝试弄清楚如何在事务对象中填充itemInfo数据框。现在,我只是引入transactionitem ID s(都是数字),它们提供的上下文很少。我希望能够添加项目描述以及产品层次结构级别。

以下是我今天使用的流程:

  1. 数据来自数据库,格式如下:

    Transaction_ID     Item_ID
    --------------     ----------- 
    100                1
    100                2
    100                3
    101                2
    101                3
    102                1
    102                2
    
  2. 要创建transaction对象,请使用以下命令,如arules文档中所述:

    txdata <- as(split(txdata[, "Item_ID"], txdata[, "Transaction_ID"]), "transactions")
    

    注意:我发现我需要为Item_ID设置一个数值,否则我会遇到使用字符串的主要性能问题(由于使用因子字符串时分割效果不佳)。

  3. 创建并查看关联规则

    rules <- apriori(txdata, parameter = list(support=0.00015, confidence=0.5))
    inspect(head((sort(rules, by="confidence")), n=5))
    
  4. 当规则返回时,它们会被Item_ID列出,这对我没有帮助。我希望能够通过ID和/或说明来显示它们。此外,还希望利用arules包中内置的聚合功能。

1 个答案:

答案 0 :(得分:2)

您可以使用itemInfo更改项目的名称。这是一个例子:

R> df <- data.frame(
   TID = c(1,1,2,2,2,3), 
   item=c("a","b","a","b","c", "b")
 )
R> trans <- as(split(df[,"item"], df[,"TID"]), "transactions")

### this is how you replace item labels and set a hierachy (here level1)
R> myLabels <- c("milk", "butter", "beer")
R> myLevel1 <- c("dairy", "dairy", "beverage")
R> itemInfo(trans) <- data.frame(labels = myLabels, level1 = myLevel1)

R> inspect(trans)
     items    transactionID
  1 {milk,                
     butter}             1
  2 {milk,                
     butter,              
     beer}               2
  3 {butter}             3

 ### now you can use aggregate()
 R> inspect(aggregate(trans, itemInfo(trans)[["level1"]]))
     items      transactionID
  1 {dairy}                1
  2 {beverage,              
     dairy}                2
  3 {dairy}                3

您可以使用class? transactions? aggregate找到更多信息。

希望这有帮助, 迈克尔