Как преобразовать фрейм данных в объект транзакции arules - PullRequest
1 голос
/ 13 февраля 2020

Я пытаюсь создать правила связывания для набора данных, используя библиотеку arules в R. В наборе данных есть столбец транзакции и столбцы из 5 элементов - я пытаюсь превратить данные в список, чтобы затем использовать arules, но поскольку больше, чем один столбец элементов Я не уверен, как go об этом.

мой набор данных выглядит следующим образом:

Transaction     Item1        Item2         Item3    

12/09/2001     lipstick      Bronzer        Mascara
2/09/2001     Eyeshadow     lipstick
13/09/2002     Powder        Remover
14/09/2003     Nail varnish  Lip gloss      Eyeliner 

Код, который я обычно использовал бы для одного столбец транзакции и один элемент столбцы ниже.

library(arules)
Transactions <- split(data$item, data$transaction)

basketanalysis <- as(Transactions, "transactions")

Любая помощь будет принята с благодарностью.

1 Ответ

1 голос
/ 13 февраля 2020

Вот что я попробовал. Я думаю, что вам нужно манипулировать своими данными и создавать списки. Сначала я создал идентификатор транзакции на всякий случай. Затем я преобразовал данные в длинный формат данных. К этому времени все продукты остаются в одной колонке. Я удалил все строки, которые имеют NA. Затем я преобразовал продукты в фактор. Для каждой группы (идентификатор транзакции) я создал список, содержащий все продукты. x имеет столбец с именем whatever. Это список, который вы хотите использовать для создания объекта транзакции.

library(tidyverse)
library(arules)

mutate(mydata, transaction_id = 1:n()) %>% 
pivot_longer(cols = contains("Item"), names_to = "item", values_to = "product") %>% 
filter(complete.cases(product)) %>% 
mutate(product = factor(product)) %>% 
group_by(transaction_id) %>% 
summarize(whatever = list(product)) -> x

# Assign transaction ID as name to whatever
names(x$whatever) <- x$transaction_id

$`1`
[1] lipstick Bronzer  Mascara 
Levels: Bronzer Eyeliner Eyeshadow Lip gloss lipstick Mascara Nail varnish Powder Remover

$`2`
[1] Eyeshadow lipstick 
Levels: Bronzer Eyeliner Eyeshadow Lip gloss lipstick Mascara Nail varnish Powder Remover

$`3`
[1] Powder  Remover
Levels: Bronzer Eyeliner Eyeshadow Lip gloss lipstick Mascara Nail varnish Powder Remover

$`4`
[1] Nail varnish Lip gloss    Eyeliner    
Levels: Bronzer Eyeliner Eyeshadow Lip gloss lipstick Mascara Nail varnish Powder Remover

Наконец, я создал объект класса транзакции.

mybasket <- as(x$whatever, "transactions")

> summary(mybasket)
transactions as itemMatrix in sparse format with
 4 rows (elements/itemsets/transactions) and
 9 columns (items) and a density of 0.2777778 

most frequent items:
 lipstick   Bronzer  Eyeliner Eyeshadow Lip gloss   (Other) 
        2         1         1         1         1         4 

element (itemset/transaction) length distribution:
sizes
2 3 
2 2 

   Min. 1st Qu.  Median    Mean 3rd Qu.    Max. 
   2.0     2.0     2.5     2.5     3.0     3.0 

includes extended item information - examples:
     labels
1   Bronzer
2  Eyeliner
3 Eyeshadow

includes extended transaction information - examples:
  transactionID
1             1
2             2
3             3

DATA

mydata <- structure(list(Transaction = c("12/09/2001", "2/09/2001", "13/09/2002", 
"14/09/2003"), Item1 = c("lipstick", "Eyeshadow", "Powder", "Nail varnish"
), Item2 = c("Bronzer", "lipstick", "Remover", "Lip gloss"), 
Item3 = c("Mascara", NA, NA, "Eyeliner")), row.names = c(NA, 
-4L), class = c("tbl_df", "tbl", "data.frame"))
...