使用TransactionEncoder对长度不一致的交易列表进行One-hot-encoding的方法
实现逻辑说明
你使用的TransactionEncoder本身就是为处理不等长交易列表设计的,无需提前对齐子列表长度,直接按以下步骤实现即可:
1. 依赖安装
先确认安装所需依赖,缺失的话执行以下命令安装:
pip install mlxtend pandas
2. 完整实现代码
直接将你提供的交易数据赋值给trans变量即可,不需要做额外的预处理:
import pandas as pd from mlxtend.preprocessing import TransactionEncoder # 直接赋值不等长的交易列表即可 trans = [ ['Apple', 'Beer', 'Rice', 'Chicken'], ['Apple', 'Beer', 'Rice'], ['Apple', 'Beer'], ['Apple', 'Bananas'], ['Milk', 'Beer', 'Rice', 'Chicken'], ['Milk', 'Beer', 'Rice'], ['Milk', 'Beer'], ['Apple', 'Bananas'] ] te = TransactionEncoder() # fit_transform原生支持接收不等长列表组成的数组 data = te.fit_transform(trans) # 转换为DataFrame,列名为所有去重后的商品名称 data = pd.DataFrame(data, columns = te.columns_)
3. 结果说明
最终得到的data是布尔类型的DataFrame,每行对应一笔交易,每列对应一个商品,值为True代表该笔交易包含对应商品,False代表不包含,完全符合One-hot布尔数组的需求。如果需要转换为0/1的数值格式,可额外加一行代码:
data = data.astype(int)
内容的提问来源于stack exchange,提问作者user9532692
相关产品推荐
相关产品推荐

