Анализ потребительской корзины с повторяющимися товарами в R с использованием правил

В настоящее время я использую пакет arules для анализа потребительской корзины. Мои данные, которые я прочитал, выглядят так (но с большим количеством строк):

>data
  transaction_id  item
1              1  beer
2              1  beer
3              1  soda
4              2  beer
5              3  beer
6              3  fries
7              3  candy
8              4  soda
9              4  fries

Затем я преобразую его с помощью dcast и удаляю столбец идентификатора транзакции:

> Trans_Table <- dcast(data, transaction_id ~ item)
> Trans_Table$transaction_id <- NULL

и это выглядит так:

  beer candy fries soda
1    2     0     0    1
2    1     0     0    0
3    1     1     1    0
4    0     0     1    1

но затем, когда я делаю это в классе «транзакций», чтобы я мог использовать априорную функцию, она преобразует 2 под пивом в 1

> Transactions <-  as(as.matrix(Trans_Table), "transactions")
Warning message:
In asMethod(object) :
  matrix contains values other than 0 and 1! Setting all entries != 0 to 1.

Есть ли способ выполнить анализ потребительской корзины и сохранить эти 2? Другими словами, я хотел бы увидеть правила для {пиво} => {пиво}, {пиво, пиво} => {газировка} и {пиво, газировка} => {пиво}, но в настоящее время пиво подсчитывается только один раз. за каждую транзакцию, даже если она была куплена дважды.

Кто-нибудь может помочь с этим?


person Megan Hewitt    schedule 24.05.2016    source источник


Ответы (1)


Анализ потребительской корзины — это просмотр отдельных товаров, приобретаемых вместе, а не частоты данного товара. Но если вы действительно хотите рассматривать один и тот же элемент, как если бы он был отдельным, вы можете использовать следующий подход для создания новых имен элементов.

Используя библиотеку dplyr, вы можете изменить имя элемента, чтобы оно добавлялось к идентификатору, когда оно встречается, и использовать его при обработке ваших правил:

library(dplyr)
df <- df %>%
        group_by(transaction_id, item) %>%
        mutate(newitem = paste(item, row_number(), sep = ''))
as.matrix(table(df$transaction_id, df$newitem))

Выход:

    beer1 beer2 candy1 fries1 soda1
  1     1     1      0      0     1
  2     1     0      0      0     0
  3     1     0      1      1     0
  4     0     0      0      1     1

Есть несколько способов настроить вывод, чтобы он соответствовал определенному стилю формата.

person Gopala    schedule 24.05.2016