赛题2:数据分析达人赛2:产品关联分析
收藏阿里云天池2026-06-09 更新2024-03-07 收录
下载链接:
https://tianchi.aliyun.com/dataset/133086
下载链接
链接失效反馈官方服务:
资源简介:
# %load 赛题2.py
!pip install efficient_apriori --user
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')
df_product = pd.read_csv('./product.csv',encoding='gbk')
df_customer = pd.read_csv('./customer.csv',encoding='gbk')
daf_date = pd.read_csv('./date.csv',encoding='gbk')
# Step2 数据探索
df_order['订单日期']=pd.to_datetime(df_order['订单日期']) #将原表内订单日期转化为pandas日期格式
print(df_order.head())
print(df_order.info())
print(df_order['客户ID'].value_counts()) #探索重复客户ID数量
print(df_order['产品名称'].value_counts()) #探索重复产品名称数量
df_order=df_order.groupby(['客户ID','订单日期'])['产品名称'].unique() # 探索是否存在同一订单日期且客户ID也相同的情况,若存在则合并该天内该客户购买的所有产品
print(df_order)
transactions=[] #将所有交易追加到同一个交易列表中,每一个交易是同一个客户同一天购买的所有产品的集合
for value in df_order:
transactions.append(list(value))
# print(transactions)
# Step 3 采用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 4 绘制频繁项集的条形图,横坐标为apriori算法输出的频繁项集,纵坐标为相应的频数
itemsets_产品=[] #获取横坐标,频繁项集产品名称的列表
itemsets_频数=[] #获取纵坐标,频繁项集产品名称出现的频数的列表
for key in itemsets.keys():
df1=itemsets[key]
for key in df1:
itemsets_产品.append(key)
itemsets_频数.append(df1[key])
itemsets_产品str=[] #将横坐标转化为字符串形式
for i in itemsets_产品:
itemsets_产品str.append(','.join(list(i)))
# print(itemsets_产品str)
# print(itemsets_频数)
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()
# %load 赛题2.py
!pip install efficient_apriori --user
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 # 配置负号正常显示
# 步骤1 数据加载
df_order = pd.read_csv('./order.csv',encoding='gbk')
df_product = pd.read_csv('./product.csv',encoding='gbk')
df_customer = pd.read_csv('./customer.csv',encoding='gbk')
daf_date = pd.read_csv('./date.csv',encoding='gbk')
# 步骤2 数据探索
df_order['订单日期'] = pd.to_datetime(df_order['订单日期']) # 将原表中的订单日期转换为pandas日期格式
print(df_order.head())
print(df_order.info())
print(df_order['客户ID'].value_counts()) # 统计重复客户ID的出现次数
print(df_order['产品名称'].value_counts()) # 统计重复产品名称的出现次数
df_order = df_order.groupby(['客户ID', '订单日期'])['产品名称'].unique() # 探究是否存在同一客户ID与同一订单日期的重复记录,若存在则合并该客户当日购买的全部产品
print(df_order)
transactions = [] # 将所有交易追加至同一交易列表中,每个交易对应同一客户在单日购买的全部产品集合
for value in df_order:
transactions.append(list(value))
# print(transactions)
# 步骤3 采用efficient_apriori算法挖掘频繁项集与关联规则,其中单个交易定义为同一客户在单日购买的全部产品
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)
# 步骤4 绘制频繁项集的条形图,横轴为apriori算法输出的频繁项集,纵轴为对应频数
itemsets_产品 = [] # 存储横轴数据,即频繁项集对应的产品名称列表
itemsets_频数 = [] # 存储纵轴数据,即各频繁项集的出现频数列表
for key in itemsets.keys():
df1 = itemsets[key]
for key in df1:
itemsets_产品.append(key)
itemsets_频数.append(df1[key])
itemsets_产品str = [] # 将横轴数据转换为字符串格式
for i in itemsets_产品:
itemsets_产品str.append(','.join(list(i)))
# print(itemsets_产品str)
# print(itemsets_频数)
plt.bar(itemsets_产品str, itemsets_频数)
plt.xlabel('频繁项集_产品名称', fontsize=14) # 设置横轴标签
plt.ylabel('频繁项集_出现频数', fontsize=14) # 设置纵轴标签
plt.title('频繁项集频数分布条形图', fontsize=18) # 为条形图添加标题
plt.xticks(rotation=90, fontsize=10) # 设置横轴内容垂直排列
for a, b in zip(itemsets_产品str, itemsets_频数): # 开启数据标签显示
plt.text(a, b + 0.005, str(b), ha='center', va='bottom', fontsize=8)
plt.show()
提供机构:
阿里云天池
创建时间:
2022-06-21
搜集汇总
数据集介绍

背景与挑战
背景概述
该数据集为产品关联分析竞赛提供的数据,包含订单、产品、客户和日期等数据文件,用于通过apriori算法挖掘产品间的频繁项集和关联规则,并进行可视化展示。
以上内容由遇见数据集搜集并总结生成



