2017-04-01 2 views
1

ich in R arbeite und einen Datensatz haben, die wie folgtZeilen mit leeren Werten bei der Bewertung Eklat und apriori itemsets

[1, 2, 3, ""] 
[1, 2, "", 4] 
[1,"", "", ""] 

sieht ich diese Werte in einem Transaktionsobjekt lese und Leiten sie dann eclat oder apriori für häufige Itemset-Auswertung. Das Problem entsteht, wenn meine häufigen Itemsets wie folgt aussehen:

{1,""} 
{2,3,""} 

Ich möchte diese Zeilen aus der Berechnung entfernen, wie ich denke, es verlangsamt die Verarbeitung nach unten und auch von einer Vorhersage Sicht keinen Sinn nicht. Können Sie bitte helfen? Mein R-Code ist unten.

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

dataset1 <- as.vector(t(dataset1)) 

frequentItems <- eclat (tr, parameter = list(supp = 0.03, minlen=2, maxlen = 4)) 

inspect(frequentItems) 

Danke, Matt

+0

Die Struktur Ihres Datasets sieht sehr aus verwirrend für R-Leute. Können Sie uns etwas Code zur Verfügung stellen, den wir selbst ausprobieren können, und vielleicht das Paket hinzufügen, von dem Ihre Funktion kommt (das ist das Arules-Paket, richtig?) –

Antwort

1

Das Problem, das Sie haben, läuft darauf hinaus, arules nach unten zu denken, dass "" ein Artikel ist. Wenn Sie das nicht möchten, müssen Sie zuerst alle diese Werte aus Ihren Daten entfernen. Der wahrscheinlichste Täter ist die ursprüngliche CSV-Datei. Es enthält leere Felder und sie werden in einen "" Artikel übersetzt.

So der beste Weg, um loszuwerden, ist sicherzustellen, dass Ihre CSV-Datei tatsächlich ein korrektes Format hat. Es sollte wie folgt aussehen:

item1, item2 
item1 
item2, item3 

Und das nicht

"item1", "item2" 
"item1", "" 
"item2", "item3" 

Um das Problem in Code zu lösen, in eine Liste konvertieren zuerst:

thelist <- as(tr, "list") 

thelist <- lapply(thelist, function(i){ 
    i[i != ""] 
}) 

trnew <- as(thelist, "transactions") 

En Beispiel zeigt Ihnen, wie es funktioniert :

library(arules) 
# Example data 
a_list <- list(
    c("item1","item2"), 
    c("item1",""), 
    c("item2","item3"), 
    c("","item3") 
) 

tr <- as(a_list, "transactions") 

frequentItems <- eclat (tr, parameter = list(supp = 0.03, minlen=2, maxlen = 4)) 
inspect(frequentItems) 

#> items   support 
#>[1] {item2,item3} 0.25 
#>[2] {,item3}  0.25 
#>[3] {,item1}  0.25 
#>[4] {item1,item2} 0.25 

# Conversion 
thelist <- as(tr, "list") 
thelist <- lapply(thelist, function(i){ 
    i[i != ""] 
}) 
trnew <- as(thelist, "transactions") 

frequentItems <- eclat (trnew, parameter = list(supp = 0.03, minlen=2, maxlen = 4)) 
inspect(frequentItems) 

#> items   support 
#>[1] {item2,item3} 0.25 
#>[2] {item1,item2} 0.25 
+0

Sehr hilfreich, danke! –

Verwandte Themen