【问题标题】:Adding item information to transaction object in arules在规则中将项目信息添加到交易对象
【发布时间】:2015-03-09 18:47:05
【问题描述】:

我正在使用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 和/或描述来显示它们。此外,希望利用 arules 包中内置的聚合功能。

【问题讨论】:

    标签: r arules


    【解决方案1】:

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

    希望这会有所帮助, 迈克尔

    【讨论】:

    • 这很有帮助——谢谢。这似乎是一个基本问题,但我如何知道应用标签的顺序?我的数据集有数千个项目,所以我想确保我以正确的顺序列出标签?它只是按照数据集中第一次出现的顺序吗?
    • 看起来我可以使用trans@itemInfo从事务对象中的itemInfo槽中提取数据,然后按照那里显示的顺序分配标签。
    • 没错,你可以拿itemInfo,然后用match来获取标签的正确顺序。
    • 当我使用聚合规则并检查它时,它不显示支持/信心等,数据(“杂货”)##聚合规则规则的任何原因
    • @usct01:原因是聚合规则的 supp/conf/lift 无法从原始规则的度量中计算出来。您可以聚合数据,然后使用interestMeasures 计算聚合规则的度量。或者,您可以先聚合交易然后创建规则。这些都会有措施。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-11-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-03-28
    • 2021-07-25
    • 1970-01-01
    相关资源
    最近更新 更多