【算法竞赛学习】数据分析达人赛2:产品关联分析

赛题背景

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

赛题数据

数据源:order.csv,product.csv,customer.csv,date.csv ,分别为订单表,产品表,客户表,日期表,使用天池实验室打比赛即可直接在notebook中挂载数据源https://tianchi.aliyun.com/competition/entrance/531891/information

赛题任务

现在需要你使用关联分析(比如Apriori算法) 挖掘订单中的频繁项集及关联规则
说明:
1)频繁项集、关联规则的计算会用到支持度、置信度、提升度等指标,
2)频繁项集:即大于最小支持度的商品或商品组合
3)关联规则:在频繁项集中,满足最小置信度,或最小提升度的推荐规则
(这里最小支持度、最小置信度或最小提升度,选手可以根据数据集的特点自己设定)

import pandas as pd
import time
import matplotlib.pyplot as plt
from matplotlib import font_manager
import matplotlib
#将pyplot字体转化成中文
matplotlib.rcParams['font.family'] = 'Microsoft YaHei'

df_product = pd.read_csv("./product.csv", encoding='gbk')
df_date = pd.read_csv("./date.csv", encoding='gbk')
df_customer = pd.read_csv('./customer.csv', encoding='gbk')
df_order = pd.read_csv('./order.csv', encoding='gbk')

df_order['订单日期'] = pd.to_datetime(df_order['订单日期'])
df_order
# 合并该天内该客户购买的所有产品
df_order = df_order.groupby(['客户ID', '订单日期'])['产品名称'].unique() 
df_order
# 将所有交易追加到同一个交易列表中
transactions = []  
for value in df_order:
    transactions.append(list(value))
# 采用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_pro = []
Itemsets_num = []
for key in Itemsets.keys():
    df1 = Itemsets[key]
    for key in df1:
        Itemsets_pro.append(key)
        Itemsets_num.append(df1[key])
# Step 7 将横坐标转化为字符串形式
Itemsets_pro_str = []
for i in Itemsets_pro:
    Itemsets_pro_str.append(','.join(list(i)))
# Step 8 做出频繁项集频数分布柱状图
plt.figure(figsize=(12,9),dpi=100)
plt.bar(Itemsets_pro_str, Itemsets_num)
plt.xlabel('频繁项集_产品名称', fontsize=10)
plt.ylabel('频繁项集_出现频数', fontsize=10)
plt.title('频繁项集频数分布柱状图', fontsize=16)
plt.xticks(rotation=90, fontsize=10)
for a, b in zip(Itemsets_pro_str, Itemsets_num): 
    plt.text(a, b + 0.005, str(b), ha='center', va='bottom', fontsize=7)
plt.show()

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值