{"metadata":{"kernelspec":{"name":"ir","display_name":"R","language":"R"},"language_info":{"name":"R","codemirror_mode":"r","pygments_lexer":"r","mimetype":"text/x-r-source","file_extension":".r","version":"4.0.5"}},"nbformat_minor":4,"nbformat":4,"cells":[{"cell_type":"code","source":"# load the necessary libraries\nlibrary(tidyverse)\nlibrary(arules)","metadata":{"execution":{"iopub.status.busy":"2023-04-15T09:37:39.863587Z","iopub.execute_input":"2023-04-15T09:37:39.888607Z","iopub.status.idle":"2023-04-15T09:37:41.738018Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"#load the dataset\ndata = read.csv(\"/kaggle/input/h-and-m-personalized-fashion-recommendations/transactions_train.csv\")","metadata":{"execution":{"iopub.status.busy":"2023-04-15T09:37:41.740365Z","iopub.execute_input":"2023-04-15T09:37:41.741710Z","iopub.status.idle":"2023-04-15T09:39:47.853673Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"#taking only the first 20,000 observations because the dataset is too big for computation\n# Set seed for reproducibility\nset.seed(123)\n# Randomly select 20,000 observations\ndf <- data[sample(nrow(data), 20000), ]","metadata":{"execution":{"iopub.status.busy":"2023-04-15T09:39:47.857823Z","iopub.execute_input":"2023-04-15T09:39:47.859290Z","iopub.status.idle":"2023-04-15T09:39:47.881093Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"#check for missing values\nsum(is.na(df))\nhead(df)","metadata":{"execution":{"iopub.status.busy":"2023-04-15T09:39:47.884152Z","iopub.execute_input":"2023-04-15T09:39:47.885212Z","iopub.status.idle":"2023-04-15T09:39:47.916380Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"# group the data by customer and transaction, and collect article IDs\ntransactions <- df %>%\n  group_by(customer_id, t_dat) %>%\n  summarize(items = list(as.character(article_id)))","metadata":{"execution":{"iopub.status.busy":"2023-04-15T09:39:47.919301Z","iopub.execute_input":"2023-04-15T09:39:47.920359Z","iopub.status.idle":"2023-04-15T09:39:48.061437Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"# remove the transaction and customer columns, and unnest the items\ntransactions <- transactions %>%\n  select(items) %>%\n  unnest(cols = c(items))","metadata":{"execution":{"iopub.status.busy":"2023-04-15T09:39:48.064455Z","iopub.execute_input":"2023-04-15T09:39:48.065920Z","iopub.status.idle":"2023-04-15T09:39:48.158294Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"# convert the data into a transaction format\ntransactions <- transactions %>%\n  group_by(customer_id) %>%\n  summarize(transaction = list(sort(unique(items))))","metadata":{"execution":{"iopub.status.busy":"2023-04-15T09:39:48.161338Z","iopub.execute_input":"2023-04-15T09:39:48.162468Z","iopub.status.idle":"2023-04-15T09:39:50.522873Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"# Convert transactions to a matrix\ntransactions_mat <- as.matrix(transactions)","metadata":{"execution":{"iopub.status.busy":"2023-04-15T09:39:50.526007Z","iopub.execute_input":"2023-04-15T09:39:50.527085Z","iopub.status.idle":"2023-04-15T09:39:50.542192Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"# Convert data frame to transaction object\ntransactions <- as(df, \"transactions\")","metadata":{"execution":{"iopub.status.busy":"2023-04-15T09:39:50.545166Z","iopub.execute_input":"2023-04-15T09:39:50.546255Z","iopub.status.idle":"2023-04-15T09:39:50.820966Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"# Convert transaction object to sparse matrix\ntransactions_sparse <- as(transactions, \"ngCMatrix\")","metadata":{"execution":{"iopub.status.busy":"2023-04-15T09:39:50.824235Z","iopub.execute_input":"2023-04-15T09:39:50.825486Z","iopub.status.idle":"2023-04-15T09:39:50.838638Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"# Convert sparse matrix to binary matrix\ntransactions_bin <- as.data.frame(as.matrix(transactions_sparse > 0))","metadata":{"execution":{"iopub.status.busy":"2023-04-15T09:39:50.841774Z","iopub.execute_input":"2023-04-15T09:39:50.842864Z","iopub.status.idle":"2023-04-15T09:40:01.415669Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"#generate rules through eclat algorithm\nrules_eclat <- eclat(transactions, parameter = list(supp = 0.05, maxlen = 2))","metadata":{"execution":{"iopub.status.busy":"2023-04-15T09:40:58.739358Z","iopub.execute_input":"2023-04-15T09:40:58.740808Z","iopub.status.idle":"2023-04-15T09:40:58.833179Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"sort(rules_eclat, by = \"support\")","metadata":{"execution":{"iopub.status.busy":"2023-04-15T09:40:59.520745Z","iopub.execute_input":"2023-04-15T09:40:59.522661Z","iopub.status.idle":"2023-04-15T09:40:59.546810Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"output = cbind(labels = labels(rules_eclat),quality(rules_eclat))","metadata":{"execution":{"iopub.status.busy":"2023-04-15T09:41:01.692774Z","iopub.execute_input":"2023-04-15T09:41:01.694330Z","iopub.status.idle":"2023-04-15T09:41:01.704978Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"head(output)","metadata":{"execution":{"iopub.status.busy":"2023-04-15T09:41:03.390732Z","iopub.execute_input":"2023-04-15T09:41:03.392355Z","iopub.status.idle":"2023-04-15T09:41:03.414489Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"write.csv(output, file = \"submissions.csv\")","metadata":{"execution":{"iopub.status.busy":"2023-04-15T09:41:27.118758Z","iopub.execute_input":"2023-04-15T09:41:27.120316Z","iopub.status.idle":"2023-04-15T09:41:27.135298Z"},"trusted":true},"execution_count":null,"outputs":[]}]}