library(data.table)
library(tidyverse)
library(ggplot2)
library(fasttime)
library(arules)
library(arulesViz)
library(RColorBrewer)
options(digits = 3)
Preparing the data
Reading the transaction data and plotting the info.
order_trans_modal <- read.transactions(
file = "tall_transactions_exam.csv",
format = "basket",
skip = 1,
sep = ",")
options(width = 10000)
itemFrequencyPlot(order_trans_modal,topN=20,type="absolute",col=brewer.pal(8,'Pastel2'), main="Absolute Item Frequency Plot")

Analysis
Using the threshold of 0.01 for both, support and confidence with max 5 length of the relationship.
rules = apriori(order_trans_modal, parameter = list(supp=0.01, conf=0.01,maxlen=5))
Apriori
Parameter specification:
Algorithmic control:
Absolute minimum support count: 4927
set item appearances ...[0 item(s)] done [0.00s].
set transactions ...[14 item(s), 492764 transaction(s)] done [0.05s].
sorting and recoding items ... [11 item(s)] done [0.00s].
creating transaction tree ... done [0.11s].
checking subsets of size 1 2 3 done [0.00s].
writing ... [40 rule(s)] done [0.00s].
creating S4 object ... done [0.02s].
Creating the table that will be used to list the rules.
rules_table = data.table(lhs=labels(lhs(rules)), rhs=(labels(rhs(rules))), quality(rules))
rules_table[, c("support", "confidence"):= lapply(.SD, as.double), .SDcols = c("support", "confidence") ]
name.a = "Who bought (A)"
name.b = "Also bought (B)"
name.c = "It happens in % of time"
name.d = "Probability of the purchase of A can buy B"
name.e = "Lift"
name.f = "Times it happened"
setnames(rules_table, c("lhs", "rhs", "support", "confidence", "lift", "count"), c(name.a, name.b, name.c, name.d, name.e, name.f) )
Iterative graph to view the association rules.
plot(rules, method = "graph", engine = "htmlwidget")
Rendering the table for user.
DT::datatable(rules_table ,
extensions = c("Buttons" , "FixedColumns"),
filter = 'top',
options = list( autoWidth = TRUE ,
dom = 'Blftip',
pageLength = 25,
searchHighlight = TRUE,
buttons = c('copy', 'csv', 'print'),
scrollX = TRUE,
fixedColumns = list(leftColumns = 2)),
class = c('compact cell-border stripe hover') ,
rownames = FALSE) %>%
DT::formatRound(columns=c(name.c, name.d, name.e), digits=3)
LS0tDQp0aXRsZTogIkFzc29jaWF0aW9uIFJ1bGVzIGZvciBNZWRpY2FsIEltYWdpbmcgQnVzaW5lc3MiDQphdXRob3I6ICJGbGF2aW8gS2FtaW5pc2hpIg0KZGF0ZTogIjA2LzEyLzIwMTkiDQpvdXRwdXQ6IGh0bWxfbm90ZWJvb2sgICAgIA0KLS0tDQoNCmBgYHtyIGluc3RhbGwsIG1lc3NhZ2U9RkFMU0UsIHdhcm5pbmc9RkFMU0V9DQpsaWJyYXJ5KGRhdGEudGFibGUpDQpsaWJyYXJ5KHRpZHl2ZXJzZSkNCmxpYnJhcnkoZ2dwbG90MikNCmxpYnJhcnkoZmFzdHRpbWUpDQpsaWJyYXJ5KGFydWxlcykNCmxpYnJhcnkoYXJ1bGVzVml6KQ0KbGlicmFyeShSQ29sb3JCcmV3ZXIpDQpvcHRpb25zKGRpZ2l0cyA9IDMpDQpgYGANCg0KIyMgUHJlcGFyaW5nIHRoZSBkYXRhDQpSZWFkaW5nIHRoZSB0cmFuc2FjdGlvbiBkYXRhIGFuZCBwbG90dGluZyB0aGUgaW5mby4NCmBgYHtyLCBtZXNzYWdlPUZBTFNFLCB3YXJuaW5nPUZBTFNFfQ0Kb3JkZXJfdHJhbnNfbW9kYWwgPC0gcmVhZC50cmFuc2FjdGlvbnMoDQogIGZpbGUgPSAidGFsbF90cmFuc2FjdGlvbnNfZXhhbS5jc3YiLA0KICBmb3JtYXQgPSAiYmFza2V0IiwNCiAgc2tpcCA9IDEsDQogIHNlcCA9ICIsIikNCmBgYA0KDQpgYGB7ciwgbWVzc2FnZT1GQUxTRSwgd2FybmluZz1GQUxTRX0NCm9wdGlvbnMod2lkdGggPSAxMDAwMCkNCml0ZW1GcmVxdWVuY3lQbG90KG9yZGVyX3RyYW5zX21vZGFsLHRvcE49MjAsdHlwZT0iYWJzb2x1dGUiLGNvbD1icmV3ZXIucGFsKDgsJ1Bhc3RlbDInKSwgbWFpbj0iQWJzb2x1dGUgSXRlbSBGcmVxdWVuY3kgUGxvdCIpDQpgYGANCiMjIEFuYWx5c2lzDQpVc2luZyB0aGUgdGhyZXNob2xkIG9mIDAuMDEgZm9yIGJvdGgsIHN1cHBvcnQgYW5kIGNvbmZpZGVuY2Ugd2l0aCBtYXggNSBsZW5ndGggb2YgdGhlIHJlbGF0aW9uc2hpcC4gIA0KYGBge3IsIG1lc3NhZ2U9RkFMU0UsIHdhcm5pbmc9RkFMU0V9DQpydWxlcyA9IGFwcmlvcmkob3JkZXJfdHJhbnNfbW9kYWwsIHBhcmFtZXRlciA9IGxpc3Qoc3VwcD0wLjAxLCBjb25mPTAuMDEsbWF4bGVuPTUpKQ0KYGBgDQpDcmVhdGluZyB0aGUgdGFibGUgdGhhdCB3aWxsIGJlIHVzZWQgdG8gbGlzdCB0aGUgcnVsZXMuDQpgYGB7ciwgbWVzc2FnZT1GQUxTRSwgd2FybmluZz1GQUxTRX0NCnJ1bGVzX3RhYmxlID0gZGF0YS50YWJsZShsaHM9bGFiZWxzKGxocyhydWxlcykpLCByaHM9KGxhYmVscyhyaHMocnVsZXMpKSksIHF1YWxpdHkocnVsZXMpKQ0KDQpydWxlc190YWJsZVssIGMoInN1cHBvcnQiLCAiY29uZmlkZW5jZSIpOj0gbGFwcGx5KC5TRCwgYXMuZG91YmxlKSwgLlNEY29scyA9IGMoInN1cHBvcnQiLCAiY29uZmlkZW5jZSIpIF0NCg0KbmFtZS5hID0gIldobyBib3VnaHQgKEEpIg0KbmFtZS5iID0gIkFsc28gYm91Z2h0IChCKSINCm5hbWUuYyA9ICJJdCBoYXBwZW5zIGluICUgb2YgdGltZSINCm5hbWUuZCA9ICJQcm9iYWJpbGl0eSBvZiB0aGUgcHVyY2hhc2Ugb2YgQSBjYW4gYnV5IEIiDQpuYW1lLmUgPSAiTGlmdCINCm5hbWUuZiA9ICJUaW1lcyBpdCBoYXBwZW5lZCINCg0Kc2V0bmFtZXMocnVsZXNfdGFibGUsIGMoImxocyIsICJyaHMiLCAic3VwcG9ydCIsICJjb25maWRlbmNlIiwgImxpZnQiLCAiY291bnQiKSwgYyhuYW1lLmEsIG5hbWUuYiwgbmFtZS5jLCBuYW1lLmQsIG5hbWUuZSwgbmFtZS5mKSApDQpgYGANCkl0ZXJhdGl2ZSBncmFwaCB0byB2aWV3IHRoZSBhc3NvY2lhdGlvbiBydWxlcy4NCmBgYHtyLCBtZXNzYWdlPUZBTFNFLCB3YXJuaW5nPUZBTFNFfQ0KcGxvdChydWxlcywgbWV0aG9kID0gImdyYXBoIiwgIGVuZ2luZSA9ICJodG1sd2lkZ2V0IikNCmBgYA0KUmVuZGVyaW5nIHRoZSB0YWJsZSBmb3IgdXNlci4NCmBgYHtyLCBtZXNzYWdlPUZBTFNFLCB3YXJuaW5nPUZBTFNFfQ0KRFQ6OmRhdGF0YWJsZShydWxlc190YWJsZSAsDQogICAgICAgICAgIGV4dGVuc2lvbnMgPSBjKCJCdXR0b25zIiAsICJGaXhlZENvbHVtbnMiKSwNCiAgICAgICAgICAgZmlsdGVyID0gJ3RvcCcsDQogICAgICAgICAgIG9wdGlvbnMgPSBsaXN0KCBhdXRvV2lkdGggPSBUUlVFICwgDQogICAgICAgICAgICAgICAgICAgICAgICAgICBkb20gPSAnQmxmdGlwJywNCiAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhZ2VMZW5ndGggPSAyNSwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlYXJjaEhpZ2hsaWdodCA9IFRSVUUsDQogICAgICAgICAgICAgICAgICAgICAgICAgICBidXR0b25zID0gYygnY29weScsICdjc3YnLCAncHJpbnQnKSwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgIHNjcm9sbFggPSBUUlVFLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgZml4ZWRDb2x1bW5zID0gbGlzdChsZWZ0Q29sdW1ucyA9IDIpKSwNCiAgICAgICAgICAgY2xhc3MgPSBjKCdjb21wYWN0IGNlbGwtYm9yZGVyIHN0cmlwZSBob3ZlcicpICwNCiAgICAgICAgICAgcm93bmFtZXMgPSBGQUxTRSkgJT4lDQogIERUOjpmb3JtYXRSb3VuZChjb2x1bW5zPWMobmFtZS5jLCBuYW1lLmQsIG5hbWUuZSksIGRpZ2l0cz0zKQ0KYGBgDQo=