R篮子分析使用具有唯一订单号但重复订单组合的arules包

时间:2013-05-13 05:26:20

标签: r arules market-basket-analysis

使用具有唯一订单号但重复订单组合的arules包进行R篮分析

刚刚学习R.我正在尝试使用arules包进行篮子分析(但我完全接受任何其他包装建议!)来比较所购买的6种不同商品类型的所有可能组合。

我的原始数据集如下所示:

OrderNo, ItemType, ItemCount  
111, Health, 1  
111, Leisure, 2  
111, Sports, 1  
222, Health, 3      
333, Food, 7  
333, Clothing, 1  
444, Clothing, 2  
444, Health, 1  
444, Accessories, 2  

。 。 。

该列表继续进行并且有大约3,000个观察结果。

我将数据折叠为一个矩阵,每个唯一的订单包含一行,其中包含特定ItemType的计数:

 OrderNo, Accessories, Clothing, Food, Health, Leisure, Sports  
 111, 0, 0, 0, 1, 2, 1  
 222, 0, 0, 0, 3, 0, 0  
 333, 0, 1, 7, 0 , 0, 0  
 444, 2, 2, 0, 1, 0, 0  
 . . .

每当我尝试使用以下命令读取事务时(以及一百万次尝试的变体):

tr <- read.transactions("dataset.csv", rm.duplicates=FALSE, format="basket", sep=",")

我收到错误消息:     asMethod(object)中的错误:无法使用重复项的事务强制列表。

我假设这是因为我有3000次观察,并且不可避免地某些组合会出现不止一次(即,不止一个人只购买一件衣服而没有别的:OrderNo,0,1, 0,0,0,0)。我知道我可以根据独特组合的数量来折叠数据集,但是我担心如果我这样做,就没有权重来显示最常见的组合。

我认为使用format =“basket”会考虑包含相同项目组合的不同订单,但显然情况并非如此。我迷路了。我读过的所有文档都暗示这是可能的,但我找不到任何关于如何解决问题的例子或建议。

任何建议都会非常感激!我的头在旋转。

额外信息:对于我的最终结果,我希望获得购买组合的前五大最重要组合。我不知道这是否有帮助。

2 个答案:

答案 0 :(得分:5)

好的,经过几个小时的搜索和阅读我能找到的所有PDF文件后,我终于在DATA MINING Desktop Survival Guide by Graham Williams:

中找到了答案(以及最先进的apriori / basket分析演练!)
  

read.transactions函数还可以从具有事务ID和每行单个项目的文件中读取数据(使用format =“single”选项)。

因此导入后无需进行所有转换。我应该直接从原始csv文件导入,指定“单一”格式选项而不是“篮子”。我还必须确保文件包含无列名,并且项目类型的唯一表示与订单号配对(例如,如果某人从“Grocery”类别中订购了两个项目,这需要在一行中表示)。 cols=c(2,1)选项表示第1列包含订单号,第2列是数据的其余部分(ItemType)。

tr <- read.transactions(file='dataset.csv', format='single', sep=',', cols=c(2,1))

答案 1 :(得分:1)

如果您使用.CSV文件,则必须删除重复项,请运行数据 - &gt;在处理此文件之前删除Excel中的重复项。如果找到重复,则arules抛出错误,这是因为您收到错误。

另一种方法是在itemset上使用duplicated()并使用unique()删除副本。

或者在这篇SO帖子中找到一种更简单的方法

Association analysis with duplicate transactions using arules package in R