five

赛题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
搜集汇总
数据集介绍
main_image_url
背景与挑战
背景概述
该数据集为产品关联分析竞赛提供的数据,包含订单、产品、客户和日期等数据文件,用于通过apriori算法挖掘产品间的频繁项集和关联规则,并进行可视化展示。
以上内容由遇见数据集搜集并总结生成
二维码
社区交流群
二维码
科研交流群
商业服务