web-dev-qa-db-fra.com

comment convertir data.frame en transactions pour arules

J'ai lu les données d'un fichier csv, les données ont 3 colonnes, l'une est l'ID de transaction, les deux autres sont des produits et des catégories de produits. J'ai besoin de convertir cela en transactions afin d'utiliser la fonction apriori dans arules . Il montre une erreur lorsque je convertis en transactions:

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 les données ne comportent que deux colonnes, cela peut fonctionner comme suit:

trans4 <- as(split(spssdat[,2], spssdat[,1]), "transactions")

Mais je ne sais pas comment convertir quand j'ai 3 colonnes. Il y a généralement les colonnes supplémentaires, comme les attributs de catégorie, les attributs de client. donc la colonne est généralement plus grande que 2 colonnes. besoin de trouver des règles entre plusieurs colonnes.

25
dennis ding

J'ai trouvé des informations qui ont fonctionné pour moi sur ce site web . Permettez-moi de copier le paragraphe pertinent:

La base de données peut être sous une forme normalisée (single) ou sous forme de fichier plat (basket).
Lorsque le fichier est au format basket, cela signifie que chaque enregistrement représente une transaction dans laquelle les éléments du panier sont représentés par des colonnes.
Lorsque l'ensemble de données est sous la forme single, cela signifie que chaque enregistrement représente un seul élément et que chaque élément contient un identifiant de transaction

Pour charger des transactions à partir d'un fichier, utilisez read.transactions. Votre dossier et mon dossier sont sous la forme single.
J'ai utilisé le code suivant pour charger le fichier .csv en tant que transactions:

trans = read.transactions("some_data.csv", format = "single", sep = ",", cols = c("transactionID", "productID"))

Pour bien comprendre la commande ci-dessus, consultez le manuel read.transactions, disponible après avoir tapé ?read.transactions dans la console R.

18
Michał Rybak

J'essayais de faire la même chose et après avoir pris en compte toutes mes colonnes dans le jeu data.fr avec lequel je travaillais, je ne pouvais toujours pas le contraindre en un itemMatrix de transactions. Puis j'ai réalisé que je n'avais jamais rechargé le paquet "arules" pour la session dans laquelle je travaillais. Erreur très stupide, mais je voulais juste le mentionner au cas où quelqu'un d'autre rencontrerait le même problème, essayez d'abord les choses simples:

library("arules")
4
Charlie

Vous devez d’abord convertir "Transaction_id" en une variable factorielle.

0
Farmer Bob