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

Python使用efficient_apriori处理1200万电商数据的提速方案咨询

关联规则计算加速可行方案
  • 预处理阶段优化,降低数据规模
    读csv时指定数据类型减少内存占用,加快读写速度;提前过滤掉出现次数小于最小支持度阈值(你场景中是100)的商品,这部分商品不可能出现在符合要求的频繁项集里,直接删除能大幅减少后续计算量;聚合环节可以先按id_customer排序后用itertools.groupby生成交易元组,比pandas的groupby在超大数据量下效率更高。
    优化后预处理代码示例:
    import pandas as pd
    from itertools import groupby
    
    # 读数据时指定dtype减少内存开销
    orders = pd.read_csv(
        "orders.csv", 
        sep=";",
        dtype={"id_customer": "int32", "name": "category"}
    )
    # 过滤出现次数小于100的低频商品
    item_counts = orders["name"].value_counts()
    valid_items = item_counts[item_counts >= 100].index
    orders = orders[orders["name"].isin(valid_items)]
    # 按用户id排序后聚合
    orders = orders.sort_values("id_customer")
    customer = [tuple(g[1]) for g in groupby(orders["name"], orders["id_customer"])]
    # 可提前把处理好的交易数据存下来,后续不用重复处理
    import pickle
    with open("transactions.pkl", "wb") as f:
        pickle.dump(customer, f)
    
  • 替换更高效的算法实现
    Apriori算法本身需要多次扫描全量数据集,天然不适合超大数据量,建议替换为FP-Growth算法,仅需扫描2次数据集,计算效率提升可达1-2个量级,可直接使用fpgrowth-py等优化过的库实现,示例代码:
    from fpgrowth import fpgrowth
    import pickle
    
    with open("transactions.pkl", "rb") as f:
        customer = pickle.load(f)
    itemsets = fpgrowth(customer, min_support=100/len(customer))
    # 后续生成关联规则可自行实现或用配套工具
    
    如果需要保留Apriori逻辑,也可替换为C扩展实现的版本,比纯Python实现的efficient_apriori快5-10倍。
  • 运行环境拆分优化
    你提到PyPy不支持pandas,可将任务拆分为两个独立步骤:用CPython完成pandas相关的预处理工作,把生成的交易列表序列化存储后,用PyPy单独加载数据运行关联规则计算部分,这部分逻辑不依赖pandas,可完全享受PyPy的执行速度提升。
  • 分布式算力扩展
    若单机性能仍不满足要求,可使用Spark MLlib中的FPGrowth实现,单机local模式即可自动利用多核CPU并行计算,集群模式下可轻松处理千万级甚至亿级数据量。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.27 22:36:03