【机器学习系列】“购物篮分析入门:使用Apyori库进行关联规则挖掘”

目录

一、关联分析介绍

关键概念:

1. 支持度(Support)

2. 置信度(Confidence)

3. 提升度(Lift)

4. 频繁项集

5. 关联规则

应用场景:

实现方法

二、导入数据集

额外介绍一下: 

三、根据单据号,分组统计每个购物篮中的商品列表

三、根据单据号,分组统计每个购物篮中的商品数量

四、将统计数据汇总为一个数据框并过滤出商品数量大于1的购物篮

四、使用Apyori库进行关联规则分析及统计指标提取

(一) 获取到购物篮中的商品列表,用于apriori函数的输入

 (二)得到关联规则和与之对应的统计指标

(三) 关联规则分析结果 DataFrame 构建

一、关联分析介绍

关联分析是一种数据挖掘方法,主要用于发现数据集中变量项之间有趣的关联或相关关系,特别是那些在商业、市场篮子分析、用户行为分析等领域中隐含的模式。这种分析的核心在于识别出哪些项目倾向于一起出现,基于这些发现,企业可以做出更加精准的营销策略、商品摆放决策或是个性化推荐等。

关键概念:

1. 支持度(Support)

指一个项集(一个或多个项目的组合)在所有交易数据中出现的频率。高支持度的项集表示这些项目经常被一起购买或出现。通常,只有满足最小支持度阈值的项集才会被认为是频繁项集。

2. 置信度(Confidence)

如之前解释,衡量的是如果一个项集A出现时,另一个项集B出现的条件概率。它用来量化关联规则的强度,比如规则“A→B”的置信度表示在包含A的所有事务中,同时包含B的事务所占的比例。

3. 提升度(Lift)

评估关联规则的实际效果相对于随机情况的提升程度,计算方式为置信度除以B的单独支持度。提升度大于1表示A和B的关联强于随机预期。

4. 频繁项集

支持度高于预定义阈值的所有项集。

5. 关联规则

形式上为X→Y,表示如果X发生,那么Y很可能也会发生。通常根据支持度和置信度来筛选有效的规则。

应用场景:

零售业:著名的“啤酒与尿布”案例,通过分析发现顾客购买尿布时常常会同时购买啤酒,促使超市调整商品布局,提高销售。
  
电子商务:个性化推荐系统,基于用户的购物历史推荐可能感兴趣的其他商品。
  
医疗健康:分析患者的病史记录,发现某些病症和治疗方案之间的关联,辅助临床决策。
  
市场营销:识别顾客的购买偏好,制定针对性的营销策略和促销活动。
  
Web使用模式分析:理解用户浏览行为,优化网站设计和内容推荐。

实现方法

Apriori算法:经典的关联规则挖掘算法,通过迭代减少候选项集的数量来高效发现频繁项集。
FP-growth算法:利用频繁模式树(FP-tree)结构进行优化,减少对数据库的扫描次数,适合处理大规模数据集。

关联分析是一个强大的工具,帮助企业从海量数据中提取有价值的信息,优化业务决策并提升用户体验。

二、导入数据集

import pandasdata = pandas.read_csv("超市销售数据.csv",encoding='utf8', engine='python')

额外介绍一下: 

如下图,查看一下单据号是否有重复值,发现有31198条重复行

如果添加上keep=False的参数的话,就有了45722条重复行。 

 原因:

在Pandas中,`duplicated()` 函数用来识别数据框中的重复行。这个函数接受几个参数,其中 `keep` 参数决定了如何标记重复行。`keep` 可以取三个值:`'first'`、`'last'` 或 `False`。

- 当 `keep='first'` 时,每组重复项中第一个出现的行被视为非重复,其余的视为重复。
- 当 `keep='last'` 时,每组重复项中最后一个出现的行被视为非重复,其余的视为重复。
- 当 `keep=False` 时,所有重复项都被视为重复,不管它们在数据框中的位置。

因此,`data[data['单据号'].duplicated(keep=False)]` 和 `data[data['单据号'].duplicated()]` 的区别在于如何处理重复的 `'单据号'`:

- `data[data['单据号'].duplicated(keep=False)]`:这会返回所有具有重复 `'单据号'` 的行,不论它们在数据集中的重复次数或位置。这意味着,如果有多个行的 `'单据号'` 相同,所有这些行都会被包含在这个结果中。

- `data[data['单据号'].duplicated()]`:默认情况下,`keep` 参数的值是 `'first'`。因此,这个表达式会返回除了每个 `'单据号'` 的第一个出现之外的所有重复行。也就是说,如果有重复的 `'单据号'`,只有第一次出现之后的那些重复行会被标记并返回。

总结来说,前者会包括所有重复的行,而后者只会包括除首个重复外的其他重复行。

三、根据单据号,分组统计每个购物篮中的商品列表

#根据单据号,分组统计每个购物篮中的商品列表
itemSetList = data.groupby(by='单据号').apply(lambda x: list(x.商品名称))

三、根据单据号,分组统计每个购物篮中的商品数量

#根据单据号,分组统计每个购物篮中的商品数量
itemSetCount = itemSet = data.groupby(by='单据号').apply(lambda x: len(x.商品名称))

四、将统计数据汇总为一个数据框并过滤出商品数量大于1的购物篮

#将统计数据汇总为一个数据框
itemSet = pandas.DataFrame({'商品列表': itemSetList, '商品数量': itemSetCount
})
#过滤出商品数量大于1的购物篮
itemSet = itemSet[itemSet.商品数量>1]

四、使用Apyori库进行关联规则分析及统计指标提取

(一) 获取到购物篮中的商品列表,用于apriori函数的输入

#获取到购物篮中的商品列表,用于apriori函数的输入
transactions = itemSet['商品列表'].values
#提取名为 '商品列表' 的列,并获取该列的所有值。
transactions

 (二)得到关联规则和与之对应的统计指标

from apyori import apriori
#调用apriori算法进行计算,
#得到关联规则和与之对应的统计指标
results = list(apriori(transactions, min_support=0.001, #最小支持度min_confidence=0.001, #最小置信度min_lift=1.001#最小提升度
)
)#支持度(support)
supports = []#置信度(confidence)
confidences = []#提升度(lift)
lifts = []#基于项items_base
bases = []
#推导项items_add
adds = []
#results[0].ordered_statistics

(三) 关联规则分析结果 DataFrame 构建

首先,迭代Apriori算法的结果results,将每个结果中的关键信息(支持度、置信度、提升度、基于项、推荐项)分别存储在对应的列表中。

接着,使用Pandas库创建一个名为result的数据框,包含5个列:

基于(bases):存储每个频繁项集中的基于项,即频繁项集中的第一个项。
推荐(adds):存储每个频繁项集中的推荐项,即频繁项集中的第二个项。
支持度(supports):存储每个频繁项集的支持度。
置信度(confidences):存储每个频繁项集的置信度。
提升度(lifts):存储每个频繁项集的提升度。

#把apriori函数计算的结果,
#保存成为一个数据框,方便数据分析
for r in results:size = len(r.ordered_statistics)for j in range(size):supports.append(r.support)confidences.append(r.ordered_statistics[j].confidence)lifts.append(r.ordered_statistics[j].lift)bases.append(list(r.ordered_statistics[j].items_base))adds.append(list(r.ordered_statistics[j].items_add))
#保存成为一个数据框
result = pandas.DataFrame({'基于': bases,'推荐': adds,'支持度': supports,'置信度': confidences,'提升度': lifts
})
result

若要显示全部结果,如下操作:

pandas.options.display.max_rows = None

在Python的Pandas库中,pandas.options.display.max_rows 是一个用于控制DataFrame显示最大行数的选项。默认情况下,当DataFrame的行数超过一定数量时(通常是30行),Pandas会只显示一个省略号(...),表示有更多行数据未显示。
# 当你设置 pandas.options.display.max_rows = None 时,你是在告诉Pandas不要限制DataFrame的显示行数,即显示所有的行。这样,无论DataFrame有多少行,都会完全显示出来,而不会出现省略号。

 70个结果全部显示完全

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/diannao/23708.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

实用商务口语:“企业文化”用英语怎么说?柯桥学英语去银泰

企业文化是指企业员工共有的一套观念、信念、价值和价值行为准则,以及由此导致的行为模式。 英文可以说:enterprise / company / corporate culture。 情景对话练习01 A:Your company made a lot of achievements last year; how do you make it? 你们…

开源Mamba-2性能狂飙8倍!多个Mamba超强进化体拿下顶会

MambaOut的热度刚过去没多久,Mamba-2就带着它狂飙8倍的性能炸场了。 Mamba-2的核心层是对Mamba的选择性SSM的改进,同等性能下,模型更小,消耗更低,速度更快。与Mamba不同,新一代的Mamba-2再战顶会&#xff…

【AI大模型】Transformers大模型库(二):AutoModelForCausalLM

目录​​​​​​​ 一、引言 二、AutoModelForCausalLM 2.1 概述 2.2 主要功能 2.3 代码示例 三、总结 一、引言 这里的Transformers指的是huggingface开发的大模型库,为huggingface上数以万计的预训练大模型提供预测、训练等服务。 🤗 Transfo…

【Python机器学习】预处理对监督学习的作用

还是用cancer数据集,观察使用MinMaxScaler对学习SVC的作用。 首先,在原始数据上拟合SVC: cancerload_breast_cancer() X_train,X_test,y_train,y_testtrain_test_split(cancer.data,cancer.target,random_state0 ) svmSVC(C100) svm.fit(X_t…

推荐个 Edge/Chrome/Firefox 都支持的 IP 定位查询扩展

作为一个博客站长,对 IP 地址应该都不陌生,可以说是跟站长的工作是息息相关的,反正明月几乎每天都会面临 IP 查询、定位的需要,今天让明月给找到了一个叫”IP 定位查询“的浏览器扩展,在 Edge 和 Firefox 下体验后感觉…

多卡聚合智能融合通信设备在无人机无线视频传输应用

无人驾驶飞机简称“无人机”,是利用(无线电)遥控设备和自备的程序控制装置操纵的不载人飞行器,现今无人机在航拍、农业、快递运输、测绘、新闻报道多个领域中都有深度的应用。 无人机无线视频传输保证地面人员利用承载的高灵敏度照相机可以进行不间断的画…

【蓝桥杯2025备赛】分巧克力

【蓝桥杯2025备赛】分巧克力 [蓝桥杯 2017 省 AB] 分巧克力 题目描述 儿童节那天有 K K K 位小朋友到小明家做客。小明拿出了珍藏的巧克力招待小朋友们。 小明一共有 N N N 块巧克力,其中第 i i i 块是 H i W i H_i \times W_i Hi​Wi​ 的方格组成的长方形…

自动化执行任务的脚本代码分享!

在当今信息化社会,自动化执行任务的脚本代码已经成为提高工作效率、减少人工错误的重要工具。 无论是数据处理、文件操作,还是网络请求、系统监控,脚本代码都能帮助我们实现自动化操作,从而释放人力,让我们有更多时间…

LeetCode-103. 二叉树的锯齿形层序遍历【树 广度优先搜索 二叉树】

LeetCode-103. 二叉树的锯齿形层序遍历【树 广度优先搜索 二叉树】 题目描述:解题思路一:层序遍历,唯一区别就是ans.append(level[::-1] if len(ans) % 2 else level)背诵版:解题思路三:0 题目描述: 给你二…

网络层-IP协议 二

一、网段划分 为了进行组网,把一个IP地址,分成了两个部分: 网络号 主机号 例如:192.168.2.100 这个IP地址中,前面一部分 : 192.168.2就是我们的网络号 后面一部分 100就是我们的主机号. 家用宽带来说,一般默认就是前面三个字节是网络号,主机号的范围就表示局域网中可以有…

避免使用for循环操作高维数组:numpy.apply_along_axis用法

文章目录 场景实际操作编写相关函数np.apply_along_axis 场景 设想我有一列高维向量,读取之后的数据都是字符串变量,我需要把这些字符串数据转换为复数之后求绝对值 实际操作 在使用pd.read_csv()读取数据之后,将这一列数据转换为numpy数…

信息系统项目管理师0145:敏捷与适应方法(9项目范围管理—9.2项目范围管理过程—9.2.3敏捷与适应方法)

点击查看专栏目录 文章目录 9.2.3 敏捷与适应方法9.2.3 敏捷与适应方法 对于需求不断变化、风险大或不确定性高的项目,在项目开始时通常无法明确项目的范围,而需要在项目期间逐渐明确。敏捷或适应型方法特意在项目早期缩短定义和协商范围的时间,为后续细化范围、明确范围争取…

打响G7国家降息第一枪!加拿大央行宣布降息

KlipC报道:6月5日,加拿大央行宣布降息25个基点至4.75%,与市场预期一致。加拿大央行是G7国家中第一个降息的央行。其还表示有持续证据表明核心通胀正在缓解,货币政策不再需要那么限制性。 KlipC分析师表示,在2023年7月&…

打破信息孤岛,U-Mail邮件系统轻松集成各类业务系统

随着国家大力推动企业数字化转型,企业内部数字化建设需要各种业务系统来提高企业生产力,然而,随着在业务数据量逐步增大的情形下,如何更加高效地整合、协同各个系统之间的信息交互,并且更好地融合企业邮件系统&#xf…

【C++ | 类】类和对象

😁博客主页😁:🚀https://blog.csdn.net/wkd_007🚀 🤑博客内容🤑:🍭嵌入式开发、Linux、C语言、C、数据结构、音视频🍭 ⏰发布时间⏰:2024-05-30 本…

重学java 57.哈希表结构存储过程

别焦虑,生活无非见招拆招 —— 24.6.3 哈希表存储数据去重复的过程: a.先比较元素的哈希值(重写hashCode),再比较内容(重写equals) b.如果哈希值不一样,证明内容不一样,存 c.如果哈希值一样,再比较内容 如果哈希值一样,内容不一样(哈希碰撞,哈希冲突),存 如果哈希值…

(文章复现)基于共享储能服务的智能楼宇双层优化配置

参考文献: [1]张浩鹏,李泽宁,薛屹洵,等.基于共享储能服务的智能楼宇双层优化配置[J/OL].中国电机工程学报,1-12[2024-05-22]. 1.摘要 为降低城市化进程中楼宇储能投资成本,提出一种基于共享储能服务的智能楼宇(Intelligent Buildings&#…

mysql启动出现Error: 2 (No such file or directory)

查看mydql状态 systemctl status mysqlThe designated data directory /var/lib/mysql/ is unusable 查看mysql日志 tail -f /var/log/mysql/error.logtail: cannot open ‘/var/log/mysql/error.log’ for reading: No such file or directory tail: no files remaining 第…

【数智化CIO展】吉家宠物CIO张志伟:深度挖掘数据价值是数字化发展趋势,才能实现企业精细化运营...

张志伟 本文由吉家宠物CIO张志伟投递并参与由数据猿联合上海大数据联盟共同推出的《2024中国数智化转型升级优秀CIO》榜单/奖项评选。丨推荐企业:观远数据 大数据产业创新服务媒体 ——聚焦数据 改变商业 中国“宠物经济”热潮不断攀升,国内宠物市场的竞…

【牛客面试必刷TOP101】Day28.BM49 表达式求值和BM52 数组中只出现一次的两个数字

文章目录 前言一、BM49 表达式求值题目描述题目解析二、BM52 数组中只出现一次的两个数字题目描述题目解析总结 前言 一、BM49 表达式求值 题目描述 描述: 请写一个整数计算器,支持加减乘三种运算和括号。 数据范围:0∣s∣≤100,…