R - Apriori 函数错误

Posted

技术标签:

【中文标题】R - Apriori 函数错误【英文标题】:R - Apriori function error 【发布时间】:2016-06-23 20:51:57 【问题描述】:

我目前在使用 apriori 函数时遇到问题。问题是我有一个包含如下数据的 csv:

Desc,Cantidad,Valor,Fecha,Lugar,UUID
DESCUENTO,1,-3405,2014-10-04T14:02:57,53100,7F74AFC0-FC28-4105-89A5-CD99416B50C7
DESCUENTO,1,-3405,2014-10-04T14:02:57,53100,7F74AFC0-FC28-4105-89A5-CD99416B50C7
DESCUENTO,1,-170,2014-09-05T15:10:24,83000,7F0C7F0B-BCFC-4FCA-8740-B36AE9932869
Descuento de TYK Dia,1,-156,2014-06-19T16:52:27,86280,1E08E51E-213A-4EE0-8FE9-492E677FF0C9
Descuento de TYK Dia,1,-139,2014-04-25T10:52:44,86280,AB802E63-2D0D-4B47-AB70-DDE007929F9F
DESCUENTO,1,-63,2014-07-04T13:53:10,83000,5B1F12BB-71DE-4734-A774-8D377757A880
REDONDEO,1,-1,2014-03-29T10:50:59,0,5B241EFA-6654-46EA-B47A-3CB76C5EA923
DESCUENTO,1,-1,2014-10-04T14:02:57,53100,7F74AFC0-FC28-4105-89A5-CD99416B50C7
DESCUENTO,1,-1,2014-10-04T14:02:57,53100,7F74AFC0-FC28-4105-89A5-CD99416B50C7
LAVADO,1,0,2014-05-27T18:18:11,44500,e5d540d6-0f98-4993-ec09-56887cd4a27d
TUA,1,0,2014-09-29T10:20:31,6500,1d8ada06-a8a1-4bd8-9356-851b5da28108
Transportación Aerea,1,0,2014-10-03T10:41:09,6500,5fc3925a-d08a-4cdc-be7e-ca02bd488d5b
OBSEQUIO LAVADO DE CARROCERIA,1,0,2014-04-07T13:45:55,91800,8148ab07-5804-4b2b-b37c-5323b394907a
Arroz Al Azafran Combos A,1,0,2014-08-19T11:50:34,11520,f09c23e6-dc60-4aaf-a1b8-1506d38f3585
Frijoles Charros A,1,0,2014-08-19T11:50:34,11520,f09c23e6-dc60-4aaf-a1b8-1506d38f3585
Pepsi Ch A,1,0,2014-08-19T11:50:34,11520,f09c23e6-dc60-4aaf-a1b8-1506d38f3585
FECHA DE CONSUMO 18/07/2014,1,0,2014-07-19T18:01:45,6060,0f0465aa-a75b-4f95-8e3b-43c13452cafb
CAMBIO DE ACEITE DE MOTOR,1,0,2014-02-01T11:18:53,39890,5BDF0742-CDF5-4F6B-9937-DF1CB00274ED
CAMBIO DE FILTRO DE ACEITE,1,0,2014-02-01T11:18:53,39890,5BDF0742-CDF5-4F6B-9937-DF1CB00274ED

整个 CSV (https://github.com/antonio1695/BaseX/blob/master/facturas1.csv) 要下载文件,只需单击查找文件,然后您将看到该文件。 所以我所做的是:

> df1 <- read.csv("facturas1.csv")
> rules <- apriori(df1,parameter=list(support=0.01,confidence=0.5))
Error in asMethod(object) : 
column(s) 3 not logical or a factor. Discretize the columns first.

尽管如此,问题在于列已经是离散的,如果我更改数据以使其具有第 3 列代替第 2 列,反之亦然。它仍然说第 3 列是不合逻辑的,或者当它应该说第 2 列时不是一个因素。谢谢!

【问题讨论】:

看来apriori 只将因素或逻辑作为输入 是的,我明白了,问题是当我交换列时,非逻辑或非因素输入应该是第 2 列。然而,错误仍然说问题出在第 3 列。如果我在第 3 列不符合逻辑或因素输入下一个错误会说该错误在第 2 列中...@HubertL 我收到了column(s) 2, 3, 5 not logical or a factor 如果有帮助,这里是整个 csv:github.com/antonio1695/BaseX/blob/master/facturas1.csv 如果您有不同的错误,说 3 列不合逻辑或一个因素,您可以随时删除第 5 列并使用 excel 制作第 2 列和3离散。那应该让你看到和我一样的东西。 @HubertL 你希望apriori的结果是什么样的? 【参考方案1】:
 library(arules)
 df1 <- read.csv("https://raw.githubusercontent.com/antonio1695/BaseX/master/facturas1.csv")
 trans <- as(df1, "transactions")
  Error in asMethod(object) : 
  column(s) 3 not logical or a factor. Discretize the columns first. 

我们看一下数据框:

str(df1)
 'data.frame':  10510 obs. of  6 variables:
 $ Desc    : Factor w/ 3927 levels "0","00000215R0 - LIQUIDO DE FRENOS",..: 1490 1490 1490 1491 1491 1490 3209 1490 1490 2238 ...
 $ Cantidad: Factor w/ 85 levels "","1","-1","10",..: 2 2 2 2 2 2 2 2 2 2 ...
 $ Valor   : int  -3405 -3405 -170 -156 -139 -63 -1 -1 -1 0 ...
 $ Fecha   : Factor w/ 4054 levels "1294","2014-01-06T11:10:21",..: 4041 4041 3443 1794 596 2125 241 4041 4041 1215 ...
 $ Lugar   : Factor w/ 982 levels "","0","1000",..: 487 487 802 848 848 802 2 487 487 373 ...
 $ UUID    : Factor w/ 4056 levels "0019A60D-78F8-E341-8D3E-9786201FE017",..: 1988 1988 1979 456 2711 1423 1424 1988 1988 3658 ...

Valor 是一个数字 (int),需要离散化!例如discretize():

df1$Valor <- discretize(df1$Valor)
head(df1$Valor)
 [1] [-3405, 2400) [-3405, 2400) [-3405, 2400) [-3405, 2400) [-3405, 2400)
 [6] [-3405, 2400)
 Levels: [-3405, 2400) [ 2400, 8204) [ 8204,14009]

现在您可以创建交易并应用 APRIORI:

trans <- as(df1, "transactions")
rules <- apriori(trans,parameter=list(support=0.01,confidence=0.5))
rules
 set of 84 rules 

【讨论】:

对不起,我刚刚意识到它没有用,因为我这样做了,但是当我看到表格时,它会更改我的数据并使值成为一个间隔,您每个项目的值都设置为 [- 3405,2400] 使我的关联规则无用。不知道你有没有看到。 它给了我这样的规则:` Valor=[-3405, 2400) => Cantidad=[ -1,1627) 0.9923882 0.9996166 0.9999972 2 ` 这显然不是很有帮助。 是的!非常感谢,给你+1,我能得到答案!【参考方案2】:

经过一番研究,我发现apriori函数必须有间隔才能正常工作,所以在使用discretize时必须添加参数“categories”选择所需的间隔数。它不可能不采取间隔。我把代码贴在这里:

我决定采用 20 个间隔,这完全取决于间隔中的值重复的频率。

df$Valor <- discretize(df$Valor, method="frequency",categories = 20)

希望它对某人有所帮助。

【讨论】:

以上是关于R - Apriori 函数错误的主要内容,如果未能解决你的问题,请参考以下文章

R - arules apriori。长度错误(obj):类规则未实现方法长度

为啥我的 Apriori 函数返回的是字母而不是项目? (错误的输出)

Apriori 中 R 中的未知项目标签

r apriori算法结果怎么看

R - apriori() 支持与覆盖?

R apriori algorithm-如何将 ItemFrequency() 的顶部项分配给向量?