如何将订单数据转换为Orange3关联规则可识别的格式?
解决Orange3关联规则分析无结果及数据格式转换问题
一、用Orange3直接处理(无需手动转换格式)
Orange3的Associate Rules组件原生支持事务型数据(即同一OrderID对应多行ItemName的格式),不用手动转布尔矩阵,按以下步骤操作:
- 用
File组件加载你的Excel数据(仅保留OrderID和ItemName列即可;若有Quantity列,可通过Select Columns组件移除,或用Distinct组件去重OrderID+ItemName的组合,确保同一订单同一商品只留一行) - 连接
Associate Rules组件,在组件设置中:- 将
Transaction ID选择为OrderID(指定哪些行属于同一个订单事务) - 将
Items选择为ItemName(指定要分析的商品项)
- 将
- 降低规则阈值:默认的支持度、置信度阈值可能过高,导致无规则生成。尝试将
Minimum support设为0.01(1%)、Minimum confidence设为0.1(10%),根据数据量灵活调整(数据量越小,阈值需越低)
二、用Excel转换为布尔矩阵(无代码)
如果需要手动转成布尔矩阵格式,用Excel内置功能即可完成:
- 提取唯一行和列
- 复制原表的OrderID列到新工作表,选中列后点击
数据>删除重复值,得到所有唯一订单ID,作为矩阵的行 - 复制原表的ItemName列到新工作表,同样用
删除重复值得到所有唯一商品,作为矩阵的列
- 复制原表的OrderID列到新工作表,选中列后点击
- 生成布尔值
- 在矩阵的第一个交叉单元格(对应第一个订单和第一个商品)输入公式:
(说明:=IF(COUNTIFS(原表!$A:$A,$A2,原表!$B:$B,B$1)>=1,1,0)原表!$A:$A是原数据的OrderID列,原表!$B:$B是ItemName列,$A2是当前行的订单ID,B$1是当前列的商品名) - 选中该单元格,拖动填充柄覆盖所有行和列,即可生成1/0格式的布尔矩阵
- 在矩阵的第一个交叉单元格(对应第一个订单和第一个商品)输入公式:
- 将生成的布尔矩阵导入Orange3,直接连接
Associate Rules组件即可(无需指定Transaction ID,每行即为一个事务)
三、排查之前的问题
- 用Excel合并同一OrderID的商品为一行列表(如逗号分隔):这种格式Orange3无法识别为事务内的多个项,所以无法生成关联规则
- 导入含Quantity的数据时出现频繁项单独识别:这是因为未正确指定Transaction ID,组件将每一行(单个商品)当成了独立事务,需确保在
Associate Rules中设置Transaction ID为OrderID,让组件识别同一订单下的所有商品属于同一个事务
内容的提问来源于stack exchange,提问作者Kolnh Jiu
相关产品推荐
相关产品推荐

