2013-05-13 3 views
5

R Basket-Analyse unter Verwendung arules Paket mit einzigartiger Bestellnummer aber doppelte Kombinationen umR Korbanalyse mit arules Paket mit einzigartiger Bestellnummer aber duplizieren, um Kombinationen

ich lerne R. Ich versuche, eine Korbanalyse zu tun der Verwendung von arules-Paket (aber ich bin offen für alle anderen Paketvorschläge!), um alle möglichen Kombinationen von 6 verschiedenen gekauften Artikeln zu vergleichen.

Meine ursprünglichen Datensatz sah wie folgt aus:

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 

. . .

Die Liste geht weiter und hat etwa 3000 Beobachtungen.

brach ich die Daten in eine Matrix, die eine Zeile für jede eindeutige Reihenfolge enthält Zählungen bestimmten ItemType enthält:

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 
. . . 

Jedes Mal, wenn ich versuche, in den Transaktionen lesen Sie den folgenden Befehl (und eine Million versucht Variationen davon):

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

erhalte ich die Fehlermeldung: Fehler in asMethod (Objekt): kann keine Liste mit Transaktionen mit duplizierten Elementen zwingen.

Ich nehme an, dies liegt daran, dass ich 3.000 Beobachtungen habe und zwangsläufig bestimmte Kombinationen mehr als einmal auftauchen werden (dh mehr als eine Person kauft nur ein Kleidungsstück und nichts anderes: OrderNo, 0, 1 , 0, 0, 0, 0). Ich weiß, dass ich den Datensatz auf Grund von eindeutigen Kombinationen reduzieren könnte, aber ich bin besorgt, dass, wenn ich das tue, es keine Gewichte geben wird, um die häufigsten Kombinationen anzuzeigen.

Ich dachte, dass die Verwendung von format = "basket" verschiedene Aufträge mit den gleichen Elementkombinationen berücksichtigen würde, aber das ist offensichtlich nicht der Fall. Ich bin so verloren. Die gesamte Dokumentation, die ich gelesen habe, deutet an, dass dies möglich ist, aber ich kann keine Beispiele oder Ratschläge finden, wie ich das Problem angehen könnte.

Jeder Rat würde so geschätzt werden! Mein Kopf dreht sich auf diesem.

Zusätzliche Informationen: Für mein Endergebnis suche ich nach den fünf wichtigsten Kombinationen von Kaufkombinationen. Ich weiß nicht, ob das hilft.

+0

Pflege Post gefunden werden, um eine kleine, in sich geschlossene bereitzustellen Beispiel? http://stackoverflow.com/questions/5963269/how-to-make-a-great-r-reproducible-example –

Antwort

1

Sie müssen Duplikate entfernen, wenn Sie CSV-Datei verwenden, bitte Daten laufen -> Remove Duplicate in Excel diese Datei zu verarbeiten. arules gibt einen Fehler aus, wenn Duplikate gefunden werden und deshalb erhalten Sie den Fehler.

Eine andere Möglichkeit besteht darin, duplicated() auf Ihrem Itemset zu verwenden und das Duplikat mit unique() zu entfernen.

Oder ein einfacher Ansatz wäre in dieser SO

Association analysis with duplicate transactions using arules package in R

4

Ok, nach Stunden des Suchens und alle PDF-Dateien zu lesen was ich finden konnte, fand ich endlich die Antwort (und die meisten hilfreich Marsch durch apriori/Korbanalyse überhaupt!) In den DATA MINING Desktop Survival Guide by Graham Williams:

Die read.transactions Funktion kann auch Daten aus einer Datei mit Transaktions-ID und einem einzelnen Element pro Zeile lesen (mit der Option format = "single").

So war es nicht notwendig, alle diese Transformationen nach dem Import zu tun. Ich hätte direkt aus der ursprünglichen CSV-Datei importiert werden sollen, die die Option "single" anstelle von "basket" angibt. Ich musste auch sicherstellen, dass die Datei keine Spaltennamen enthielt und dass es eine eindeutige Darstellung des Elementtyps gepaart mit Bestellnummer gab (zum Beispiel, wenn eine Person zwei Artikel aus der Kategorie "Lebensmittelgeschäft" bestellt hat, muss dies dargestellt werden) in einer Reihe). Und die Option cols=c(2,1) zeigt an, dass Spalte 1 die Bestellnummer und Spalte 2 den Rest der Daten (ItemType) enthält.

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