我想使用关联规则分析我的网上商店的客户数据。这些是我采取的步骤:
首先:我的数据框 raw_data 有三列 ["id_customer","id_product","product_quantity"],它包含 700,000 行。
第二:我重新排序数据框,得到一个包含 680,000 行和 366 列的数据框:
customer = (
raw_data.groupby(["id_customer", "product_id"])["product_quantity"]
.sum()
.unstack()
.reset_index()
.fillna(0)
.set_index("id_customer")
)
customer[customer != 0] = 1
最后:我想创建一个项目的频率:
from mlxtend.frequent_patterns import apriori
frequent_itemsets = apriori(customer, min_support=0.00001, use_colnames=True)
但是现在我遇到了错误
MemoryError: Unable to allocate 686. GiB for an array with shape (66795, 2, 689587) and data type float64
如何解决?或者如何在不使用
frequent_itemsets
函数的情况下计算 apriori
?
如果您的数据太大而无法放入内存,您可以传递一个返回
generator
而不是列表的函数。
from efficient_apriori import apriori as ap
def data_generator(df):
"""
Data generator, needs to return a generator to be called several times.
Use this approach if data is too large to fit in memory.
"""
def data_gen():
yield [tuple(row) for row in df.values.tolist()]
return data_gen
transactions = data_generator(df)
itemsets, rules = ap(transactions, min_support=0.9, min_confidence=0.6)
您能告诉我在使用 data_generator 并应用 apriori 之后如何打印 assocation_result 吗?抱歉我的英语不好