You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Python中重构数据以适配Apriori算法?

交易数据转布尔矩阵(Apriori算法适用)

需求说明

将包含ID(交易ID)和Articles(商品,单个数字或数字列表)的数据集,转换为每行对应一个交易、每列对应一个商品的布尔矩阵,单元格值为True/False表示该交易是否包含对应商品,用于Apriori关联规则挖掘。

实现方案(Python)

以下提供两种常用实现方式,均基于pandas库:第一种借助专门的机器学习工具库更高效,第二种纯pandas实现更灵活。


方法1:使用mlxtend库(推荐)

mlxtend的TransactionEncoder专为交易数据编码设计,适合大规模数据集:

import pandas as pd
from mlxtend.preprocessing import TransactionEncoder

# 1. 构造示例数据集(替换为你的实际数据)
data = {
    "ID": ["ID1", "ID2", "ID3"],
    "Articles": [[1,2,3], [1,2], 4]
}
df = pd.DataFrame(data)

# 2. 统一格式:将单个商品转为列表
df["Articles"] = df["Articles"].apply(lambda x: [x] if isinstance(x, int) else x)

# 3. 编码生成布尔矩阵
te = TransactionEncoder()
# 拟合数据并转换
encoded_data = te.fit(df["Articles"]).transform(df["Articles"])
# 转为DataFrame,列名为商品编号
encoded_df = pd.DataFrame(encoded_data, columns=te.columns_)

# 4. 合并交易ID并设置为索引
result = pd.concat([df["ID"], encoded_df], axis=1).set_index("ID")
print(result)

输出结果:

1      2      3      4
ID                          
ID1  True   True   True  False
ID2  True   True  False  False
ID3 False  False  False   True

方法2:纯pandas实现

无需额外库,手动生成布尔矩阵:

import pandas as pd

# 1. 构造示例数据集
data = {
    "ID": ["ID1", "ID2", "ID3"],
    "Articles": [[1,2,3], [1,2], 4]
}
df = pd.DataFrame(data)

# 2. 统一格式:单个商品转列表
df["Articles"] = df["Articles"].apply(lambda x: [x] if isinstance(x, int) else x)

# 3. 提取所有唯一商品
all_articles = []
for items in df["Articles"]:
    all_articles.extend(items)
unique_articles = sorted(set(all_articles))

# 4. 为每个商品生成布尔列
for article in unique_articles:
    df[str(article)] = df["Articles"].apply(lambda x: article in x)

# 5. 整理结果:删除原Articles列,设置ID为索引
result = df.drop("Articles", axis=1).set_index("ID")
print(result)

输出结果与方法1一致。


内容的提问来源于stack exchange,提问作者imane

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.16 23:13:25