使用具有唯一订单号但重复订单组合的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”会考虑包含相同项目组合的不同订单,但显然情况并非如此。我迷路了。我读过的所有文档都暗示这是可能的,但我找不到任何关于如何解决问题的例子或建议。
任何建议都会非常感激!我的头在旋转。
额外信息:对于我的最终结果,我希望获得购买组合的前五大最重要组合。我不知道这是否有帮助。
答案 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