使用arules在R中使用重复项目进行市场篮子分析

时间:2016-05-24 18:15:24

标签: r apriori arules

我目前正在使用arules包进行市场购物篮分析。我读到的数据看起来像这样(但有更多行):

>data
  transaction_id  item
1              1  beer
2              1  beer
3              1  soda
4              2  beer
5              3  beer
6              3  fries
7              3  candy
8              4  soda
9              4  fries

然后我使用dcast对其进行转换并删除事务ID列:

> Trans_Table <- dcast(data, transaction_id ~ item)
> Trans_Table$transaction_id <- NULL

它看起来像这样:

  beer candy fries soda
1    2     0     0    1
2    1     0     0    0
3    1     1     1    0
4    0     0     1    1

但是当我进入“交易”类时,我可以使用apriori功能,它将啤酒2转换为1

> Transactions <-  as(as.matrix(Trans_Table), "transactions")
Warning message:
In asMethod(object) :
  matrix contains values other than 0 and 1! Setting all entries != 0 to 1.

有没有办法进行市场购物篮分析并维持2?换句话说,我希望看到{beer} =&gt;的规则{beer},{啤酒,啤酒} =&gt; {soda}和{beer,soda} =&gt; {beer}但目前每次交易只计算一次啤酒,即使它是两次购买。

任何人都可以帮忙吗?

1 个答案:

答案 0 :(得分:2)

市场购物篮分析是查看一起购买的不同商品,而不是特定商品的频率。但是,如果您真的想要将相同的项目视为不同的项目,则可以使用以下方法生成新的项目名称。

使用库dplyr,你可以改变项目名称以附加它的时间ID,并在你的arules处理中使用它:

library(dplyr)
df <- df %>%
        group_by(transaction_id, item) %>%
        mutate(newitem = paste(item, row_number(), sep = ''))
as.matrix(table(df$transaction_id, df$newitem))

输出是:

    beer1 beer2 candy1 fries1 soda1
  1     1     1      0      0     1
  2     1     0      0      0     0
  3     1     0      1      1     0
  4     0     0      0      1     1

有两种方法可以调整输出以适应特定的格式样式。