manipulate - market basket analysis in r
como convertir data.frame a transacciones para arules (3)
Leí datos de un archivo csv, los datos tienen 3 columnas, una es la identificación de la transacción, las otras dos son de categoría de producto y producto. Necesito convertir esto en transacciones para poder utilizar la función apriori
en reglas . Se muestra un error cuando convierto a transacciones:
dat <- read.csv("spss.csv",head=TRUE,sep="," , as.is = T)
dat[,2] <- factor(dat[,2])
dat[,3] <- factor(dat[,3])
spssdat <- dat[,c(1,2,3)]
str(spssdat)
''data.frame'': 108919 obs. of 3 variables:
$ Transaction_id: int 3000312 3000312 3001972 3003361 3003361 3003361 3003361 3003361 3003361 3004637 ...
$ product_catalog : Factor w/ 9 levels "AIM","BA","IM",..: 1 1 5 7 7 7 7 7 7 1 ...
$ product : Factor w/ 332 levels "ACM","ACTG/AIM",..: 7 7 159 61 61 61 61 61 61 7 ...
trans4 <- as(spssdat, "transactions")
Error in as(spssdat, "transactions") :
no method or default for coercing “data.frame” to “transactions”
Si los datos solo tienen dos columnas, puede trabajar por:
trans4 <- as(split(spssdat[,2], spssdat[,1]), "transactions")
Pero no sé cómo convertir cuando tengo 3 columnas. Por lo general, hay columnas adicionales como atributos de categoría, atributos de cliente. por lo que la columna suele ser mayor que 2 columnas. Necesito encontrar reglas entre varias columnas.
He encontrado información que funcionó para mí en este sitio web . Déjame copiar el párrafo relevante:
El marco de datos puede estar en forma normalizada ( única ) o en forma de archivo plano ( cesta ).
Cuando el archivo está en forma de cesta , significa que cada registro representa una transacción en la que los elementos de la cesta están representados por columnas.
Cuando el conjunto de datos está en una sola forma, significa que cada registro representa un solo elemento y cada elemento contiene un ID de transacción .
Para cargar transacciones desde un archivo, use read.transactions
. Tanto el archivo de su caso como el mío están en forma única .
He usado el siguiente código para cargar archivos .csv como transactions
:
trans = read.transactions("some_data.csv", format = "single", sep = ",", cols = c("transactionID", "productID"))
Para comprender completamente el comando anterior, eche un vistazo al manual de read.transactions
, disponible después de escribir ?read.transactions
en la consola R.
Intenté hacer lo mismo y después de tener en cuenta todas mis columnas en el data.frame con el que estaba trabajando, todavía no podía forzarlo en un elemento Matriz de transacciones. Luego me di cuenta de que nunca volví a cargar el paquete "arules" para la sesión en la que estaba trabajando. Muy estúpido error, pero solo quería mencionarlo en caso de que alguien más se encuentre con el mismo problema, primero intente lo simple:
library("arules")
Primero debe convertir "Transaction_id" en una variable de factor.