如何将csv数据转换为市场篮子格式?

时间:2015-07-17 05:38:19

标签: r apriori market-basket-analysis

我有以下格式的数据:

TxnId    Items
    1        a
    1        b
    1        c
    2        r 
    2        t

其中" TxnId"和"项目"是列。我在R中导入文件并运行以下命令:

df_fact <- data.frame(lapply(MyData,as.factor))
df_trans <- as(df_fact, 'transactions')

当我运行apriori命令时会抛出错误。

rules = apriori(df_trans, parameter=list(supp=0.95, conf=0.95, target=”rules”))
inspect(rules)
#NULL
inspect(rules[1:5])
Error in inspect(rules[1:5]) : 
  error in evaluating the argument 'x' in selecting a method for function 'inspect': Error in slot(x, s)[i] : subscript out of bounds

另请告诉我R接受数据的格式。

2 个答案:

答案 0 :(得分:2)

它应该像这样工作:

MyData <- read.table(header = TRUE, text = "
TxnId    Items
1        a
1        b
1        c
2        a 
2        b
")
library(arules)
df_trans <- as(split(MyData$Items, MyData$TxnId), "transactions")
rules <- apriori(df_trans, parameter=list(supp=0.95, conf=0.95, target="rules"))
inspect(rules)
#   lhs    rhs support confidence lift
# 1 {}  => {a}       1          1    1
# 2 {}  => {b}       1          1    1
# 3 {a} => {b}       1          1    1
# 4 {b} => {a}       1          1    1

您可能需要放宽supp和/或conf才能在数据集中查找规则。

答案 1 :(得分:0)

我在强制方面遇到了很多麻烦(例如'as(dataname,“transactions”......)。

我认为这是因为我有重复的记录(即,当数据采用'单一'格式时,在同一个转换中购买的同一项目不止一次)。

这最终对我有用:

Transactions<- read.transactions("Data with tx ids, item names, in
                      single format.csv", 
                      rm.duplicates= TRUE, sep=",",
                      format = "single", cols = c(7,9));

(第7列中的tx id,第9列中的项目名称)