我有一些历史订单信息,其中有两列作为数据框:OrderID和Item。它包含大约一百万条记录。我正在尝试对此数据框进行关联规则挖掘,并且为了利用arules包,我将不得不将大数据框转换为事务格式。但是,转换需要很长的时间,我尝试使用具有相同结构的较小数据帧(300K行),转换花费了几秒钟的时间,但是对于较大的数据帧,这将永远花费。由于我将使用更大的数据集进行关联规则挖掘,因此有没有更有效的方法来实现此目的?
我使用的是一台功能强大的机器,并成功处理了较小的数据帧。 下面是我用来进行转换的代码。
library(tidyverse)
library(arules)
OrderID<-c("0001","0001","0002","0002")
Item<-c("ProductA","ProductB","ProductB","ProductC")
df<-data.frame(OrderID,Item)
df$OrderID<-as.factor(df$OrderID)
df$Item<-as.factor(df$Item)
df_trans<-as(split(df[,"Item"],df[,"OrderID"]),"transactions")
答案 0 :(得分:0)
这是一个常见问题。这是手册页上?transactions
的解决方案:
## example 4: creating transactions from a data.frame with
## transaction IDs and items (by converting it into a list of transactions first)
a_df3 <- data.frame(
TID = c(1,1,2,2,2,3),
item=c("a","b","a","b","c", "b")
)
a_df3
trans4 <- as(split(a_df3[,"item"], a_df3[,"TID"]), "transactions")
trans4
inspect(trans4)
## Note: This is very slow for large datasets. It is much faster to
## read transactions using read.transactions() with format = "single".
## This can be done using an anonymous file.
write.table(a_df3, file = tmp <- file(), row.names = FALSE)
trans4 <- read.transactions(tmp, format = "single",
header = TRUE, cols = c("TID", "item"))
close(tmp)
inspect(trans4)