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

Sop*_*aAP 6 r arules market-basket-analysis

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

刚刚学习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  
Run Code Online (Sandbox Code Playgroud)

...

该名单还有大约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  
 . . .
Run Code Online (Sandbox Code Playgroud)

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

tr <- read.transactions("dataset.csv", rm.duplicates=FALSE, format="basket", sep=",")
Run Code Online (Sandbox Code Playgroud)

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

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

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

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

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

Sop*_*aAP 5

好的,经过数小时的搜索和阅读,我终于找到了所有pdf文件,我终于在Graham Williams的《DATA MINING Desktop Survival Guide》中找到了答案(对apriori / basket分析来说是最有帮助的演练!)

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

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

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


San*_*Roy 2

您必须删除重复项,如果您使用 .CSV 文件,请在处理此文件之前在 Excel 中运行“数据”->“删除重复项”。如果发现重复,则 arules 会抛出错误,并且这是因为您收到错误。

另一种方法是在项目集上使用重复()并使用唯一()删除重复项。

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

使用 R 中的 arules 包进行重复交易的关联分析