我认为这是一个精心准备的数据集。我想在R中使用Apriori算法来寻找关联并提出一些规则。我有大约16,000行(唯一客户)和179列代表各种项目/类别。数据如下所示:
Cat1 Cat2 Cat3 Cat4 Cat5 ... Cat179
1, 0, 0, 0, 1, ... 0
0, 0, 0, 0, 0, ... 1
0, 1, 1, 0, 0, ... 0
...
我认为每个客户都有一个带有二进制值(1/0)的逗号分隔文件,类别可以解决这个问题,但在我使用以下数据读取数据之后:
data5 = read.csv(" Z:/CUST_DM/data_test.txt" ;, header = TRUE,sep =",")
然后运行此命令:
rules = apriori(data5,parameter = list(supp = .001,conf = 0.8))
我收到以下错误:
Error in asMethod(object):
column(s) 1, 2, 3, ...178 not logical or a factor. Discretize the columns first.
我理解Discretize但不是在这种情况下我猜。一切都是1或0.我甚至将数据从INT更改为CHAR并收到相同的错误。我也将客户ID(唯一)作为第1列,但据我所知,当数据采用这种形式时(平面文件),这是不必要的。我确信有一些显而易见的东西我不知道 - 我是R的新手。
我错过了什么?感谢您的输入。
答案 0 :(得分:0)
我用这种方式解决了问题:在将数据读入R之后,我使用lapply()将数据更改为因子(我认为它的作用是什么)。然后我获取了该数据集并从中创建了一个数据框。然后我成功地应用了apriori()。
答案 1 :(得分:0)
您的数据实际上已经是(密集)矩阵格式,但../
始终以read.csv
的形式读取数据。只需先将数据强制转换为data.frame
:
matrix
数据中的1s将被解释为项目的存在,而0s将被解释为缺席。有关如何创建交易的更多信息,请参见手册页dat <- as.matrix(data5)
rules <- apriori(dat, parameter = list(supp = .001,conf = 0.8))
。