其他分享
首页 > 其他分享> > 天池案例-产品关联分析

天池案例-产品关联分析

作者:互联网

1 案例描述

        赛题以购物篮分析为背景,要求选手对品牌的历史订单数据,挖掘频繁项集与关联规则。通过这道赛题,鼓励学习者利用订单数据,为企业提供销售策略,产品关联组合,为企业提升销量的同时,也为消费者提供更适合的商品推荐。

说明:
1)频繁项集、关联规则的计算会用到支持度、置信度、提升度等指标,
2)频繁项集:即大于最小支持度的商品或商品组合
3)关联规则:在频繁项集中,满足最小置信度,或最小提升度的推荐规则

效果:

2 代码详情

# %load  赛题2.py
import pandas as pd
import time
import matplotlib.pyplot as plt
from matplotlib import font_manager

# font_manager.fontManager.addfont('./SimHei.ttf')
plt.rcParams['font.sans-serif'] = ['SimHei']  # 设置汉字字体,优先使用黑体
plt.rcParams['font.size'] = 12  # 设置字体大小
plt.rcParams['axes.unicode_minus'] = False  # 设置正常显示负号

# Step1 数据加载
df_order = pd.read_csv('./order.csv', encoding='gbk')

# Step2 数据探索
df_order['订单日期'] = pd.to_datetime(df_order['订单日期'])  # 将原表内订单日期转化为pandas日期格式

# Step3 合并该天内该客户购买的所有产品
df_order = df_order.groupby(['客户ID', '订单日期'])['产品名称'].unique()  # 探索是否存在同一订单日期且客户ID也相同的情况,若存在则合并该天内该客户购买的所有产品

# Step4 将所有交易追加到同一个交易列表中
transactions = []  # 将所有交易追加到同一个交易列表中,每一个交易是同一个客户同一天购买的所有产品的集合
for value in df_order:
    transactions.append(list(value))

# Step 5 采用efficient_apriori算法挖掘频繁项集和频繁规则,单个transaction定义为同一天内同一客户ID购买的所有产品
from efficient_apriori import apriori

start = time.time()
itemsets, rules = apriori(transactions, min_support=0.03, min_confidence=0.05)
print('频繁项集:', itemsets)
print('关联规则:', rules)
end = time.time()
print("用时:", end - start)

# Step 6 绘制频繁项集的条形图,横坐标为apriori算法输出的频繁项集,纵坐标为相应的频数
itemsets_产品 = []  # 获取横坐标,频繁项集产品名称的列表
itemsets_频数 = []  # 获取纵坐标,频繁项集产品名称出现的频数的列表
for key in itemsets.keys():
    df1 = itemsets[key]
    for key in df1:
        itemsets_产品.append(key)
        itemsets_频数.append(df1[key])
# Step 7 将横坐标转化为字符串形式
itemsets_产品str = []  # 将横坐标转化为字符串形式
for i in itemsets_产品:
    itemsets_产品str.append(','.join(list(i)))

# Step 8 做出频繁项集频数分布柱状图
plt.bar(itemsets_产品str, itemsets_频数)
plt.xlabel('频繁项集_产品名称', fontsize=14)  # 设置X轴标签
plt.ylabel('频繁项集_出现频数', fontsize=14)  # 设置Y轴标签
plt.title('频繁项集频数分布柱状图', fontsize=18)  # 为柱状图添加标题
plt.xticks(rotation=90, fontsize=10)  # 设置X轴内容竖排显示
for a, b in zip(itemsets_产品str, itemsets_频数):  # 设置数据标签可见
    plt.text(a, b + 0.005, str(b), ha='center', va='bottom', fontsize=8)
plt.show()

3 归纳总结

标签:频数,plt,关联,频繁,案例,天池,项集,order,itemsets
来源: https://blog.csdn.net/weixin_41175904/article/details/118677802