将物品信息添加到规则中的交易对象

Adding item information to transaction object in arules

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

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

  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))
    

规则回来的时候按Item_ID列出,对我没有帮助。我希望能够通过 ID and/or 描述来显示它们。另外,想利用 arules 包中内置的聚合功能。

您可以使用 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 找到更多信息。

希望这对您有所帮助, 迈克尔