R-将csv数据转换为市场篮子数据(arules)

时间:2016-07-25 08:45:44

标签: r data-mining transpose arules

使用数据集复制问题 -
来源:https://archive.ics.uci.edu/ml/datasets/Online+Retail#
删除除InvoiceID&之外的所有列。说明

现在你还剩下这样的事情:

InvoiceNo Description

1 536365 CREAM CUPID HEARTS COAT HANGER
2 536365 GLASS STAR FROSTED T-LIGHT HOLDER
3 536365针织领带热水瓶
4 536365红色WOOLLY HOTTIE白色心脏。
5 536365 SET 7 BABUSHKA NESTING BOXES
6 536365白色悬挂式T型灯架
7 536365白色金属灯笼
8 536366手持红色POLKA DOT
9 536366 HAND WARMER UNION JACK
10 536367彩色鸟类饰品
11 536367 6盒装彩色蛋糕盒

现在,我想在此数据集上运行Apriori

但由于arules所需的数据必须为;

trnx。产品。
1 A B C D
2 D E F A

所以,我尝试使用df_trans:

  

df_trans< - as(split(uci_retail $ Description,uci_retail $ InvoiceNo)," transactions")

asMethod(object)出错:   不能用包含重复项目的交易强制列表

另外,我尝试使用qdap替代,但没有运气。

任何人都可以建议一种替代方法来转置数据,以便它可以用来执行市场预订数据,或者能够纠正我做错的任何事情。

的问候,
k.soni

1 个答案:

答案 0 :(得分:0)

使用arules包中的read.transactions格式="单":

txs <- "InvoiceNo;StockCode;Description;Quantity;InvoiceDate;UnitPrice;CustomerID;Country
536365;85123A;WHITE HANGING HEART T-LIGHT HOLDER;6;01/12/2010 08:26;2,55;17850;United Kingdom
536365;71053;WHITE METAL LANTERN;6;01/12/2010 08:26;3,39;17850;United Kingdom  ...........

txs是从作为输入

给出的文件中提取的一个字符串
newdat <- read.table(text=txs, stringsAsFactors=FALSE, sep = ";", header = T)
head(newdat)

trans <- newdat[,1:2]
write.table(trans, "txs.txt", row.names = F, sep = ";")

我选择了列InvoiceNo和StockCode(而不是描述)

trans = read.transactions("txs.txt", format = "single", sep=";",cols = c(1,2));
inspect(trans)

我们有一些重复,正如k所指出的那样。超声处理

例如

> InvoiceNo StockCode 
480962 C577330 S 
480963 C577330 S 
480964 C577330 S  

可能是在tx中多次购买的物品)

尝试:

df_trans = df_trans [!duplicated( df_trans ), ] 
sum(duplicated( df_trans )) == 0 
df_trans <- as(split( df_trans $StockCode, df_trans $InvoiceNo), "transactions")