【问题标题】:How to prep transaction data into basket for arules如何为 arules 准备交易数据到购物篮
【发布时间】:2015-10-07 16:16:34
【问题描述】:

好的,所以我搜索了很多,想对销售数据运行规则。我只需要以正确的格式正确获取数据,并使用正确的“因素”或“变量”以及篮子形式进行设置。

现在我有订单号的销售数据,然后是里面的项目。每个订单都是唯一的(每个新订单都会创建一个新的#并包含零件#),但同样的商品显然可以出现在许多订单中。

目前,我的数据是这样设置的:

Order# Part# PartDescription
1个A部分 1 B B部分 1G G 部分 2 R PartR 3 A 部分A 3 B B部分 4 E 部分 5年派对 6 A部分A 6 B B部分 6 F PartF 6 V 部分

所以,R 不喜欢这种形式,我必须以 arules 和数据分析可以接受的形式获得它。

是的,我将其保存为文本文件并尝试了 .csv 文件,但如果我能获得有关如何在 RStudio 中准备或操作它的分步说明,那就太好了。

我读到它应该是一个篮子形式,例如..

1(A、B、G)
2(右)
3(A,B)
4 (E)
5 (Y)
6(A、B、F、V)

如果不准确,请纠正我。我明白了,但我只需要一步一步的说明,我似乎在任何地方都找不到。我试过使用 dplyr 和 tidyr。我对数据分析有很好的理解,但在 RStudio 上需要更直接的帮助,所以如果我能一步一步地了解这一点,我会进一步理解。

【问题讨论】:

  • 我还有 Excel 的数据挖掘插件,所以如果我可以在那里做任何准备,请告诉我。谢谢。
  • 我假设您至少将数据作为 data.frame 加载到 r 中?如果没有,请尝试data <- read.csv("myfile.csv", comment.char="")
  • 我只是单击了“导入数据集”,到目前为止,下面的响应是将我的数据放入正确的篮子格式中。我是否需要将其作为 data.frame 加载到 r 中以避免进一步的问题?我应该以什么确切的方式将其加载到 r 中?它是来自 Excel 的文本文件,应该是 .csv 吗?我爸爸出现在正确的列/行中。我应该选择哪些导入设置?谢谢!
  • 如果下面的代码正在运行,它是一个data.frame。当您使用 rstudio import 导入数据时,重做它的命令会出现在控制台中 - 它应该类似于我上面的内容。
  • 使用 rstudio import 导入时,显示的命令是.. > Sales

标签: r arules market-basket-analysis


【解决方案1】:

查看“事务”数据类型的帮助页面,了解如何获取数据的示例:

library(arules)
?transactions

对于您的类型,您希望按订单split,然后使用as 将其放入交易列表:

trans <- as(split(data[,"Part"], data[,"Order"]), "transactions")
inspect(trans)
  items     transactionID
1 {A,B,G}   1            
2 {R}       2            
3 {A,B}     3            
4 {E}       4            
5 {Y}       5            
6 {A,B,F,V} 6   

【讨论】:

  • 谢谢!它使用测试虚拟数据运行它。现在我在真实数据(282,292 个条目)上运行它。如果我在准备方面还有其他问题,如果我没有找到任何问题,我会查看并返回这里。但主要问题是从我能说的来回答的。现在让它在更大的数据集上运行。谢谢!我很惊讶我在任何地方都找不到。如此简单!
  • 所以,它适用于我在这个论坛上制作的测试虚拟数据。但是使用我的真实数据,以同样的方式,只使用真实数据,我得到这个错误“asMethod(object) 中的错误:不能用重复项目强制列表”我不明白为什么?虚拟数据中有重复项,它为我把它放在一个篮子里,那为什么它对我的数据不这样做呢?我认为它根据重复的 Order# 将它放在一起,并将 Part# 放入篮子中,就像我的虚拟数据一样。从字面上看,它的布局方式与虚拟数据相同。
  • 等等,我发现其中一个 Part# 是 Order# 之一,所以他们在那里复制。我在 Order# 和 PartDescription 上运行了 trans 命令,运行时间更长,但最终出现相同的错误。我在 Excel 中检查了 Part# 等于 Order# 的​​位置,并将 order# 更改为唯一值。我仍然收到我之前评论中所述的错误..
  • 事务不应该有两次列出相同的项目 - 即如果订单 1 中有两次“A”,你会得到一个错误。尝试先运行data &lt;- unique(data[ , 1:2 ] ) 以删除双打。如果这不能解决问题,请提出另一个问题 - cmets 不是解决另一个问题的好地方。
【解决方案2】:

我在强制转换方面遇到了很多麻烦(例如,'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 列中的项目名称)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多