2013-05-13 7 views
5

R carrello analisi utilizzando arules pacchetto con il numero d'ordine unico, ma duplicare combinazioni di ordineR Basket Analysis utilizzando arules pacchetto con il numero d'ordine unico, ma duplicare combinazioni di ordine

Basta imparare R. Sto cercando di fare un analisi del paniere utilizzando il pacchetto arules (ma sono totalmente aperto a qualsiasi altro suggerimento sui pacchetti!) per confrontare tutte le combinazioni possibili di 6 tipi di articoli diversi acquistati.

Il mio set di dati originale si presentava così:

OrderNo, ItemType, ItemCount 
111, Health, 1 
111, Leisure, 2 
111, Sports, 1 
222, Health, 3  
333, Food, 7 
333, Clothing, 1 
444, Clothing, 2 
444, Health, 1 
444, Accessories, 2 

. . .

la lista continua e ha circa 3.000 osservazioni.

crollai i dati in una matrice che contiene una riga per ogni ordine unico contenente i conteggi degli specifici ItemType:

OrderNo, Accessories, Clothing, Food, Health, Leisure, Sports 
111, 0, 0, 0, 1, 2, 1 
222, 0, 0, 0, 3, 0, 0 
333, 0, 1, 7, 0 , 0, 0 
444, 2, 2, 0, 1, 0, 0 
. . . 

Ogni volta che provo a leggere nelle transazioni utilizzando il seguente comando (e un milione tentato variazioni di esso):

tr <- read.transactions("dataset.csv", rm.duplicates=FALSE, format="basket", sep=",") 

ottengo il messaggio di errore: errore in asMethod (oggetto): non si può costringere la lista con le transazioni con gli elementi duplicati.

Suppongo che ciò sia dovuto al fatto che ho 3000 osservazioni e inevitabilmente certe combinazioni si presenteranno più di una volta (cioè più di una persona acquista solo un pezzo di abbigliamento e nient'altro: OrderNo, 0, 1 , 0, 0, 0, 0). So che potrei comprimere il set di dati sui conteggi di combinazioni uniche, ma sono preoccupato che, se lo faccio, non ci saranno pesi per mostrare le combinazioni più frequenti.

Ho pensato che l'uso di format = "basket" avrebbe tenuto conto di diversi ordini contenenti le stesse combinazioni di articoli, ma a quanto pare non è così. Sono così perso. Tutta la documentazione che ho letto implica che questo è possibile ma non riesco a trovare alcun esempio o consiglio su come affrontare il problema.

Qualsiasi consiglio sarebbe così apprezzato! La mia testa gira su questo.

Ulteriori informazioni: Per il mio risultato finale, sto cercando di ottenere le prime cinque combinazioni più significative di combinazioni di acquisto. Non so se questo aiuti.

+0

cura di fornire un piccolo, ad esempio autosufficiente? http://stackoverflow.com/questions/5963269/how-to-make-a-great-r-reproducible-example –

risposta

1

È necessario rimuovere i duplicati, se si utilizza il file CSV, eseguire Dati -> Remove Duplicate in Excel prima di elaborare questo file. arules genera un errore se viene trovato un duplicato ed è per questo che si sta verificando l'errore.

Un altro modo è usare duplicato() sul set di elementi e rimuovere il duplicato usando unique().

O un approccio più semplice sarebbe stata trovata in questo SO inviare

Association analysis with duplicate transactions using arules package in R

4

Ok, dopo ore di ricerca e la lettura di tutti i PDF che ho trovato, ho finalmente trovato la risposta (e più disponibile walkthrough di analisi a priori/cesta mai!) Nei DATA MINING Desktop Survival Guide by Graham Williams:

I read.transactions la funzione può anche leggere i dati da un file con ID transazione e un singolo elemento per riga (utilizzando l'opzione format = "single").

Quindi non c'era bisogno di fare tutte quelle trasformazioni dopo l'importazione. Avrei dovuto importare direttamente dal file csv originale specificando l'opzione di formato "single" invece di "basket". Inoltre, dovevo assicurarmi che il file contenesse nessun nome di colonna e che esistesse una rappresentazione univoca del tipo di articolo abbinato al numero dell'ordine (ad esempio, se una persona ordinava due articoli dalla categoria "Grocery", questo deve essere rappresentato su una riga). E l'opzione cols=c(2,1) indica che la colonna 1 contiene il numero dell'ordine e la colonna 2 è il resto dei dati (ItemType).

tr <- read.transactions(file='dataset.csv', format='single', sep=',', cols=c(2,1)) 
Problemi correlati