【机器学习系列】“购物篮分析入门:使用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 pandas

data = 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个结果全部显示完全

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

C语言小例程6/100

题目:输入三个整数x,y,z,请把这三个数由小到大输出。 程序分析:我们想办法把最小的数放到x上,先将x与y进行比较,如果x>y则将x与y的值进行交换,然后再用x与z进行比较,如果x>z则将x与z的值…

信号:干扰类别及特征提取

目录 第一部分:干扰类别 1.压制干扰 1.1噪声调幅瞄准式干扰(单音干扰) 1.2噪声调频阻塞式干扰(宽带噪声干扰) 1.3噪声调频扫频式干扰(线性调频) 2.欺骗干扰 2.1距离欺骗干扰(幅度调制干扰&#xff0…

现代密码学-X.509认证业务

X.509的基础式公钥密码体制和数字签名。 证书 证书的格式 证书由可信的认证机构CA建立并由CA或者用户自己将其放入目录,以供其他用户方便访问。目录服务器本身并不负责为用户建立公钥证书,仅仅为用户访问公钥提供方便。 x.509证书格式 证书的获取 其…

详解 Flink 的运行架构

一、组件 1. JobManager 作业管理器是一个 Flink 集群中任务管理和调度的核心,是控制应用执行的主进程 1.1 JobMaster JobMaster 是 JobManager 中最核心的组件,负责处理单独的作业(Job)。JobMaster 和具体的 Job 是一一对应的&…

QT快速下载

去QT官网之后,如下图所示 比如要下载qt-opensource-windows-x86-5.14.2.exe,进入5.14对应的文件夹,找到对应的版本 点击Details, 下载对应的种子,然后通过迅雷下载 个人实测,家庭网络平均18M的速率

【云岚到家】-day01-项目熟悉-查询区域服务开发

文章目录 1 云岚家政项目概述1.1 简介1.2 项目业务流程1.3 项目业务模块1.4 项目架构及技术栈1.5 学习后掌握能力 2 熟悉项目2.1 熟悉需求2.2 熟悉设计2.2.1 表结构2.2.2 熟悉工程结构2.2.3 jzo2o-foundations2.2.3.1 工程结构2.2.3.2 接口测试 3 开发区域服务模块3.1 流程分析…

uinty游戏界面模糊的解决方法

1.把低分辨率关掉 2.调缩放,不要调长宽高 3.调整画布的分辨率 4.调整图片的像素点

令人沉醉的移动端 UI 风格

小程序 UI 风格,独具匠心

Vivado 设置关联使用第三方编辑器 Notepad++

目录 1.前言2.Vivado关联外部编辑器步骤3.Notepad的一些便捷操作 微信公众号获取更多FPGA相关源码: 1.前言 Vivado软件自带的编辑器超级难用,代码高亮对比不明显,而且白色背景看久了眼睛痛。为了写代码时有更加舒适的体验,可以…

达梦8 并行查询

达梦数据库可以通过在查询语句加/* parallel */ HINT并行执行。下面以一个排序语句为例 我们通过一条监控语句查询排序区的使用情况。 最初没有查询结果(no rows) 伴随着语句insert /* parallel(4) */ into d select * from a order by 2执行&#xff…

Android Bugreport分析工具:ChkBugReport教程

安装: 如果下载地址过期请看原仓库地址的wiki,或许会有更新:https://github.com/sonyxperiadev/ChkBugReport/wiki 提前下载好如下文件: ​​​​​​http://sonyxperiadev.github.io/ChkBugReport/download/chkbugreport (Lau…

SIMBA方法解读

目录 预处理scRNA-seqscATAC-seq 图构建(5种场景)scRNA-seq分析scATAC-seq分析多模态分析批次整合多模态整合 图学习SIMBA空间中查询实体识别TF-target genes 预处理 scRNA-seq 过滤掉在少于三个细胞中表达的基因。原始计数按文库大小标准化&#xff0…

三丰云免费虚拟主机及免费云服务器评测

三丰云是一家专业的云服务提供商,其免费虚拟主机和免费云服务器备受好评。三丰云提供稳定可靠的服务,完全免费的虚拟主机和云服务器让用户可以轻松搭建自己的网站或应用。自从开始使用三丰云的免费虚拟主机和免费云服务器后,我的网站访问速度…

谷歌账号的注册到使用GitHub

一、浏览器扩展 浏览器扩展谷歌学术 二、注册谷歌邮箱 https://support.google.com/accounts/answer/27441?hlzh-hans 1.打开无痕模式(ctrlshiftn) 2.输入网址 3.选择个人账号 4.填写信息(随便填就行) (以上步骤有时…

SAS:import进来的excel数据集中的空格无法去除

目的:如果去除ECGTPT中的空格? 尝试:用compress函数或者strip无法去除正解:kcompress(ecgtpt,0d’x);释疑: 中间空的地方不是空格,是换行符。因数据集是UTF-8编码,还需要用kcompress替换compres…

Oracle存储过程

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 前言一、前置准备1.创建表空间2.创建用户3.赋权 二、存储过程1.创建数据表2.创建存储过程3.执行存储过程4.带参执行5.控制语句 总结 前言 这段时间实习&#xff0c…

C语言中动态内存管理说明

C语言中为什么要有动态内存管理? 在我们如今的学习当中,学习过两种内存开辟的方式如下 int a0; int arr[10]{0}; 第一种直接定义一个变量,但是变量的大小由类型决定 …

关于计算机是如何工作的

计算机的发展历程 世界上的第一个计算机 冯诺依曼机构体系 1.存储器 (包括内存(存储空间小,访问速度快,成本高,掉电后数据丢失) 外存(硬盘,软盘,U盘,光盘)),存储空间小,访问速度慢,成本低,掉电后数据仍在 2.CPU(中央处理单元,计算机最核心的部分,用于算术运算和逻辑判断),…

苹果手机数据不见了怎么恢复?3个方法,搞定苹果手机数据恢复!

在许多错误的情况下,当你更新到最新的 iOS 版本或使用越狱来获得更多功能和权限、误删重要的手机文件时,苹果手机中的数据可能会丢失或被意外删除。一旦发现数据丢失,你就会查看 iTunes 备份或 iCloud 备份,并希望在其中恢复丢失的…

五个超实用的 ChatGPT-4o 提示词

GPT-4o 是 OpenAI 最近推出的最新人工智能模型,不仅具备大语言模型的能力,而且拥有多模态模型的看、读、说等能力,而且速度比 GPT-4 更快。下面我们就来介绍几个超实用的 GPT-4o 提示词,帮助大家更好地了解 GPT-4o 的功能和应用场…