Правила ассоциации с правилами при выборке данных с SQL-сервера

Может быть, я просто глуп, но даже тогда я был бы признателен за некоторые полезные комментарии.

У меня есть набор данных, содержащий идентификаторы, статьи и атрибуты статей (т.е. группы). Используя RODBC, я извлекаю таблицу из базы данных SQL Server (с sqlFetch). Поэтому я не смог найти способ использовать read.transactions из arules-package. Формат построен таким образом, что каждая строка является идентификатором комбинации статьи+группировки. В таблице 22 миллиона строк с примерно 11 миллионами уникальных идентификаторов. Статейная база составляет около 500 000 статей. В целях иллюстрации я создал пример фрейма данных, подобный этому.

dat <- data.frame(id <- rep(paste0("id", 1:5),1, each=3),
                  article <- rep(paste0("A", sample(1051:1069,15,T))), 
                  groupA <- paste0(sample(LETTERS[1:3],15,TRUE), sample(1:3, 15,T))
)
colnames(dat) <- c("id", "article", "groupA")
dat$groupB[dat$groupA == "A1"|dat$groupA == "A2"|dat$groupA =="A3"] <- 1
dat$groupB[dat$groupA == "B1"|dat$groupA == "B2"|dat$groupA =="B3"] <- 2
dat$groupB[dat$groupA == "C1"|dat$groupA == "C2"|dat$groupA =="C3"] <- 3

в результате получается data.frame, подобный этому

    id article groupA groupB
1  id1   A1053     B3      2
2  id1   A1051     B1      2
3  id1   A1067     B2      2
4  id2   A1054     B1      2
5  id2   A1069     B1      2
6  id2   A1068     A3      1
7  id3   A1053     C3      3
8  id3   A1066     B3      2
9  id3   A1057     A2      1
10 id4   A1056     B1      2
11 id4   A1065     C1      3
12 id4   A1069     A3      1
13 id5   A1066     A3      1
14 id5   A1062     A3      1
15 id5   A1059     B2      2

Я хочу использовать пакет arules для анализа потребительской корзины. Однако, если я передам data.frame в объект транзакций с txn <- as(dat, "transactions"), каждая строка идентифицируется как одна корзина. Есть ли возможность указать arules на переменную id в качестве идентификатора? В основном, я ищу вариант "single" из функции read.transactions в преобразовании as. Второй, связанный с этим вопрос: могу ли я использовать атрибуты с пакетом arules? Я подумал, что нужно будет проводить анализ алгоритмом apriori не только на уровне статьи, но и на уровне группировки. Например. если я покупаю артикул A1053, я нахожу правило рекомендовать группу A B3. Это вообще возможно?


person Daniel Schultz    schedule 18.02.2015    source источник
comment
Тот же, точный вопрос здесь ...   -  person eflores89    schedule 23.02.2015
comment
@Dinesh Конечно, это работает, но потребляет много памяти, если я работаю с миллионами строк, и на самом деле занимает много времени. Таким образом, хотя это хорошо в теории и на небольших данных, его трудно реализовать в продуктивной среде.   -  person Daniel Schultz    schedule 09.07.2015
comment
По моему опыту, стоит потратить время на то, чтобы сначала сбросить данные в оптимальное представление для анализа, вместо того, чтобы пытаться запускать сложные алгоритмы через ODBC, SQL и т. д., потому что они добавляют очень толстый слой в самом неправильном месте. Однако вы можете захотеть использовать некоторые из более продвинутых методов, в зависимости от вашего распределения данных.   -  person Has QUIT--Anony-Mousse    schedule 09.07.2015


Ответы (1)


Краткий ответ: split. Я изучил код read.transactions (который находится в R, поэтому легко доступен для тех, кто знаком с R). Он делает несколько хороших проверок, но основные строки кода выглядят так:

entries <- split(entries[[cols[2]]], entries[[cols[1]]])
as(entries, "transactions")

В вашем примере:

dat <- split(dat$article, dat$id)
ts <- as(dat, "transactions")

Если вы предпочитаете, вы можете сделать вариант функции read.transactions, который читает из соединения RODBC, а не из плоского файла.

person Marleen    schedule 16.02.2016