Удалять строки с пустыми значениями при оценке наборов элементов eclat и apriori

Я работаю в R и у меня есть набор данных, который выглядит следующим образом

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

Я читаю эти значения в объект транзакции, а затем передаю их в eclat или apriori для частой оценки набора элементов. Проблема возникает, когда мои частые наборы элементов выглядят следующим образом:

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

Я хотел бы удалить эти строки из расчета, поскольку считаю, что это замедляет обработку, а также не имеет никакого смысла с точки зрения прогнозирования. Можете ли вы помочь? Мой код R ниже.

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)

Спасибо Мэтт

1 ответ

Проблема у вас сводится к arules думая, что "" это элемент. Поэтому, если вы этого не хотите, вам сначала нужно удалить все эти значения из ваших данных. Вероятным виновником является оригинальный файл CSV. Он содержит пустые поля, и они переводятся в "" вещь.

Поэтому лучший способ избавиться от этого - убедиться, что ваш CSV-файл действительно имеет правильный формат. Это должно выглядеть так:

item1, item2
item1
item2, item3

А не это

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

Чтобы решить проблему в коде, сначала преобразуйте в список:

thelist <- as(tr, "list")

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

trnew <- as(thelist, "transactions")

Пример, показывающий, как это работает:

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  
Другие вопросы по тегам