Orange数据挖掘中如何按交易分组生成项集并运行关联规则
Orange超市交易数据转关联规则项集操作指南
完全可以在Orange中实现你描述的操作,和RapidMiner的Aggregate算子效果一致,甚至有更简便的原生组件可以直接生成关联规则所需的项集格式,不需要额外开发,以下是两种常用实现路径:
路径1:可视化组件拖拽实现(无代码)
- 第一步:导入数据集,确保数据包含
交易ID、商品名两个核心字段 - 第二步:选择
Pivot Table(透视表)组件完成格式转换- 行维度设置为交易ID字段
- 列维度设置为商品名字段
- 值统计规则选择
Count - 生成的结果会自动将每个商品转为单独列,单元格值为1代表对应交易包含该商品,0代表不包含,直接符合关联规则算法的项集输入要求
- 第三步:将透视表输出的数据集直接连接到
Association Rules组件,即可运行Apriori算法计算关联规则
如果你需要先得到同交易商品合并到同一列的中间结果,可以替换第二步为Aggregate组件操作:
- 分组字段选择交易ID
- 对商品名字段应用
Concatenate聚合规则,自定义分隔符(建议用不会出现在商品名中的特殊符号,比如|),即可得到和RapidMiner中Aggregate算子完全一致的输出结果,后续可搭配Split Column组件拆分多列后生成项集
路径2:Python脚本组件自定义实现(灵活处理复杂规则)
如果有特殊的分组、清洗逻辑,可以拖拽Python Script组件,写入以下示例代码实现:
import pandas as pd from Orange.data import Table, Domain, DiscreteVariable # 读取输入的Orange数据集转DataFrame input_data = in_data df = pd.DataFrame(input_data.X, columns=[var.name for var in input_data.domain.variables]) # 补全列名映射,替换为你实际的交易ID、商品列名 df = df.rename(columns={"transaction": "交易ID", "product": "商品名"}) # 按交易ID分组合并商品 group_df = df.groupby("交易ID")["商品名"].apply(",".join).reset_index() # 生成独热编码项集 item_dummies = group_df["商品名"].str.get_dummies(sep=",") output_df = pd.concat([group_df[["交易ID"]], item_dummies], axis=1) # 转换回Orange支持的Table格式输出 domain = Domain( [DiscreteVariable(name=col, values=["0", "1"]) for col in item_dummies.columns], metas=[DiscreteVariable(name="交易ID", values=output_df["交易ID"].astype(str).unique())] ) out_data = Table.from_numpy(domain, item_dummies.values, metas=output_df[["交易ID"]].values)
内容的提问来源于stack exchange,提问作者sepho
相关产品推荐
相关产品推荐

