【问题标题】:Association analysis with duplicate transactions using arules package in R使用 R 中的 arules 包进行重复交易的关联分析
【发布时间】:2013-06-13 12:43:39
【问题描述】:

我想创建一个篮子格式的交易对象,我可以随时调用它进行分析。数据包含 1001 个事务的逗号分隔项。前 10 笔交易如下所示:

hering,corned_b,olives,ham,turkey,bourbon,ice_crea
baguette,soda,hering,cracker,heineken,olives,corned_b
avocado,cracker,artichok,heineken,ham,turkey,sardines
olives,bourbon,coke,turkey,ice_crea,ham,peppers
hering,corned_b,apples,olives,steak,avocado,turkey
sardines,heineken,chicken,coke,ice_crea,peppers,ham
olives,bourbon,coke,turkey,ice_crea,heineken,apples
corned_b,peppers,bourbon,cracker,chicken,ice_crea,baguette
soda,olives,bourbon,cracker,heineken,peppers,baguette
corned_b,peppers,bourbon,cracker,chicken,bordeaux,hering
...

我观察到数据中有重复的事务并将它们删除,但每次我尝试读取事务时,我都会得到:

asMethod(object) 中的错误: 无法强制列表包含重复项目的交易

这是我的代码:

data <- read.csv("AssociationsItemList.txt",header=F)
data <-  data[!duplicated(data),]
pop <- NULL
for(i in 1:length(data)){
pop <- paste(pop, data[i],sep="\n")
}
write(pop, file = "Trans", sep = ",")
transdata <- read.transactions("Trans", format = "basket", sep=",")

我确定我错过了一些小而重要的事情。请提供您的帮助。

【问题讨论】:

  • 对不起,你写的是 csv 它看起来像(或类似的东西)你最后尝试了 read.csv 或 read.table 吗?
  • 上面的事务文件是如何创建没有头列的

标签: r arules market-basket-analysis


【解决方案1】:

问题不在于重复事务(同一行出现两次) 但重复的项目(相同的项目出现两次,在同一个交易中—— 例如,第 4 行的“橄榄”)。

read.transactions 有一个 rm.duplicates 参数来删除这些重复项。

read.transactions("Trans", format = "basket", sep=",", rm.duplicates=TRUE)

【讨论】:

  • 您介意解释一下为什么不允许在同一交易中重复项目吗?例如,如果您想表明您购买的橄榄数量是正常数量的两倍怎么办?例如,在我的交易数据中有一个数量列,我不知道如何解释它
  • 我认为这种信息不是APRIORI处理的。
【解决方案2】:

Vincent Zoonekynd 是对的,问题是由交易中的重复项目引起的。在这里我可以解释为什么arules 要求事务没有重复项。

  • transactions 的数据在内部存储为ngCMatrix 对象。相关源码:

    setClass("itemMatrix",
      representation(
        data        = "ngCMatrix", 
    ...
    setClass("transactions",
      contains = "itemMatrix",
    ...
    
  • ngCMatrix 是在Matrix 包中定义的稀疏矩阵。官方文档中的描述:

    nsparseMatrix 类是稀疏“模式”矩阵的虚拟类,即概念上具有 TRUE/FALSE 条目的二进制矩阵。仅存储为 TRUE 的元素的位置

似乎ngCMatirx 通过二进制指示符 存储了元素的状态。也就是说arules中的transactions对象只能存储一个交易对象的存在/不存在,不能记录数量。所以...

【讨论】:

    【解决方案3】:

    我只是使用了“唯一”功能来删除重复项。我的数据有点不同,因为我有一个数据框(数据对于 CSV 来说太大了)并且我有 2 列:product_id 和 transaction_id。我知道这不是您的具体问题,但我必须这样做才能创建交易数据集并应用关联规则。

    data # > 1 Million Transactions 
    data <- unique(data[ , 1:2 ] )
    trans <- as(split(data[,"product_id"], data[,"trans_id"]),"transactions")
    rules <- apriori(trans, parameter = list(supp = 0.001, conf = 0.2))
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-05-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-06-25
      相关资源
      最近更新 更多