杂货店商品数据集挖掘关联规则实验

一、实验目的

1. 掌握使用Apriori算法和FP-growth算法挖掘频繁项集。

2. 熟悉使用提升度等度量评估关联规则。

二、实验内容

1. 杂货店商品数据集挖掘关联规则实验

(1)了解Groceries_dataset.csv中事务集的属性信息,并将事务集转换为二元表示形式;

(1)了解Groceries_dataset.csv中事务集的属性信息,根据每个用户每天的购买记录构造事务(比如用户1000在2015年3月15日对应的事务为{‘sausage’,’whole milk’,’semi-finished bread’,’yogurt’}),然后按照用户ID递增,时间递增的方式对事务进行排序;

(2)选择事务集中前100条事务,选择合适的支持度阈值,使用Apriori算法和FP-growth算法挖掘频繁项集(推荐使用mlxtend包的apriori和fpgrowth函数),并对比apriori算法和fpgrowth算法的时间复杂度;

(3)重复步骤(3),依次选择前500条,前1000条事务,对比apriori算法和fpgrowth算法的时间复杂度;

(4)使用前100条事务时,选择合适的置信度阈值,利用挖掘到的频繁项集生成强关联规则(推荐使用mlxtend包的association_rules函数)。然后使用提升度、全置信度、最大置信度、Kluc度量和余弦度量评估这些强关联规则。

三、实验报告评分标准

1. 完成实验(1)(5分)

2. 完成实验(2)(30分)

3. 完成实验(3)(20分)

4. 完成实验(4)(15分)

5. 实验过程与实验结论的记录完整(10分)

6. 表述逻辑清晰(10分)

7. 排版工整自洽,图表标题准确(10分)

四、实验过程

4.1根据每个用户每天的购买记录构造事务

导入.csv文件,将日期解析为 datetime 类型,根据每个用户每天的购买记录构造事务(列表形式),并按照用户ID递增,时间递增的方式排序

  1. 读取 CSV 文件,假设 CSV 文件路径为 'Groceries_dataset.csv'  
  2. file_path = 'Groceries_dataset.csv'  
  3. df = pd.read_csv(file_path)  
  4.   
  5. 将日期解析为 datetime 类型  
  6. df['Date'] = pd.to_datetime(df['Date'], format='%d-%m-%Y')  
  7.   
  8. 根据每个用户每天的购买记录构造事务  
  9. transactions = df.groupby(['Member_number''Date'])['itemDescription'].apply(list).reset_index()  
  10.   
  11. 对事务进行排序,按照用户ID递增,时间递增的方式排序  
  12. data = transactions.sort_values(by=['Member_number''Date'])  

对数据进行one-hot编码,将事务集转换为二元表示形式

  1. # one_hot编码  
  2. df_enconded = pd.get_dummies(data['itemDescription'])  
  3. df_final = pd.concat([data[['Member_number','Date']],df_enconded],axis = 1)  
  4. print(df_final)  

4.2提取'itemDescription'列的前100条数据,并将每个事务集改成集合类型(set),方便后续查询的时候自动去重,并具有无序性。

  1. transactions = data['itemDescription']#.values.tolist()  
  2. # print(transactions)  
  3. transactions = transactions[:100]  
  4. result_list = transactions.apply(lambda x: {item for item in x}).tolist()  

4.3 转换事务集为适用于mlxtend的格式,方便后面使用mlxtend包中的两个算法

  1. 转换事务集为适用于mlxtend的格式  
  2. te = TransactionEncoder()  
  3. te_ary = te.fit_transform(data)  
  4. df = pd.DataFrame(te_ary, columns=te.columns_)  
  5. print(df)  

4.4 设置支持度阈值为0.05,调用库函数apriori算法和FP-growth算法,并进行时间复杂度计算

  1. # Apriori 算法  
  2. start_time = time.time()  
  3. apriori_result = apriori(df, min_support=0.05, use_colnames=True)  
  4. apriori_time = time.time() - start_time  
  5.   
  6. # FP-growth 算法  
  7. start_time = time.time()  
  8. fpgrowth_result = fpgrowth(df, min_support=0.05, use_colnames=True)  
  9. fpgrowth_time = time.time() - start_time  

4.5 生成强关联规则,因为association_rules函数只自带前件后件支持度,置信度,提升度,所以全置信度,最大置信度,kulc,余弦度量等等需要自己手动计算

  1.   生成强关联规则  
  2. rules = association_rules(apriori_result, metric="confidence", min_threshold=min_confidence)  
  3. rules['All Confidence'] = rules['support']/np.maximum(rules['antecedent support'], rules['consequent support'])  
  4. rules['Max Confidence'] = rules['support']/np.minimum(rules['antecedent support'], rules['consequent support'])  
  5. rules['Kulc'] = (rules['support']/rules['antecedent support'] + rules['support']/rules['consequent support'])/2  
  6. # rules['Cosine'] = rules['support']/(math.sqrt(rules['antecedent support']*rules['consequent support']))  
  7. rules['Cosine'] = rules.apply(lambda row: int(row['support'] / math.sqrt(row['antecedent support'] * row['consequent support'])),   

五、实验结论

5.1根据购买记录构造事务结果

图 1构造事务

图 2二元属性

5.2选择事务集中前100条事务,支持度阈值=0.05,使用Apriori算法和FP-growth算法挖掘频繁项集对比,FP-growth算法时间复杂度较低

图 3 FP-growth算法

                

图 2 Apriori算法  

5.3选择事务集中前500条事务,支持度阈值=0.05,Apriori算法时间复杂度低

          

图 5 FP-growth算法

图 4 Apriori算法  

5.4选择事务集中前1000条事务,支持度阈值=0.05,Apriori算法时间复杂度低

        

图 7 FP-growth算法

图6 Apriori算法

5.5生成强关联规则,使用提升度、全置信度、最大置信度、Kluc度量和余弦度量评估这些强关联规则

图 8强关联规则

图 10全置信度

图 9提升度

图 12 Kulc度量

图 11最大置信度

图12余弦度量

  • 17
    点赞
  • 27
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
1.关联规则 市场购物篮分析是大型零售商用来发现商品之间关联的关键技术之一, 广泛用于对购物篮或交易数据的分析。它通过查找在交易中经常出现的项目组合进行分析。换句话说,它允许零售商识别人们购买的商品之间存在的一些联系。 2.数据的详细信息 该数据集具有来自杂货店的人们的38765笔采购订单。可以使用Apriori等算法和Market Basket Analysis来分析这些订单并生成关联规则。 Apriori是一种用于频繁进行项目集挖掘和通过关系数据库进行关联规则学习的算法。它可以识别数据库中频繁出现的单个项目并将它们扩展到越来越大的项目集(只要这些项目集在数据库中足够频繁地出现)。由Apriori确定的频繁项目集可用于确定突出显示数据库总体趋势的关联规则:这在市场上述的篮子分析等领域中都有应用。 关联规则举例: 假设有100位客户,其中10位购买了牛奶,8位购买了黄油,6位两种商品都够买了。。 购买牛奶=>购买黄油 支持= P(牛奶和黄油)= 6/100 = 0.06 置信度=支持/ P(黄油)= 0.06 / 0.08 = 0.75 提升=置信度/ P(牛奶)= 0.75 / 0.10 = 7.5(支持:这表示项集的受欢迎程度,以项集出现的交易比例衡量。 支持:这表示项集的受欢迎程度,以项集出现的交易比例衡量。 置信度:这表示购买商品X时购买商品Y的可能性,表示为{X-> Y}。这是通过与X项(其中也出现Y项)的交易比例来衡量的。 提升度:表示购买商品X时购买商品Y的可能性,同时控制商品Y的受欢迎程度。) 注意:此示例数据非常小。在实践中,一条规则要有几百个数据,才能被认为具有统计意义,而数据集通常包含成千上万个数据。
好的,我了解了你的要求。首先,让我们来了解一下Apriori算法和Groceries数据集。 Apriori算法是一种常见的关联规则挖掘算法,它用于发现数据集中的频繁项集和关联规则。其基本思想是通过迭代的方式,从单个元素开始,逐步构建频繁项集。 Groceries数据集是一个包含德国一家杂货店超过一周的销售记录的数据集。它包含了9835个交易,其中每个交易包含了一组购买物品的清单。 下面是利用Apriori算法加载Groceries数据集的Python代码实现。首先,我们需要安装apyori库,它是一个用于实现Apriori算法的Python库。 ```python !pip install apyori ``` 然后,我们可以使用以下代码对Groceries数据集进行加载和处理: ```python import csv from apyori import apriori # 加载Groceries数据集 transactions = [] with open('groceries.csv', 'r') as f: reader = csv.reader(f) for row in reader: transactions.append(row) # 运行Apriori算法 results = list(apriori(transactions, min_support=0.002, min_confidence=0.2, min_lift=3, min_length=2)) # 输出结果 for rule in results: print(rule) ``` 在这段代码中,我们首先使用Python的csv库加载Groceries数据集。然后,我们使用apyori库中的apriori函数运行Apriori算法,并指定一些参数,如最小支持度、最小置信度、最小提升度和最小项集长度。最后,我们输出结果,即得到的关联规则。 需要注意的是,这段代码中的文件路径需要根据实际情况进行修改,以确保能够正确加载Groceries数据集

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值