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

news2024/9/20 9:34:24

目录

一、关联分析介绍

关键概念:

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

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

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

相关文章

动态IP与静态IP的优缺点

在网络连接中,使用动态和静态 IP 地址取决于连接的性质和要求。静态 IP 地址通常更适合企业相关服务,而动态 IP 地址更适合家庭网络。让我们来看看动态 IP 与静态 IP 的优缺点。 1.静态IP的优点: 更好的 DNS 支持:静态 IP 地址在…

⾃动化批量管理-Ansible

目录 一、ansible 简介 自动化工具选择 (了解)​编辑 1、ansible 是什么? 2、ansible 特点 3、ansible 架构图 二、ansible 任务执行 1、ansible 任务执行模式 2、ansible 执行流程 3、ansible 命令执行过程 三、ansible 配置详解 …

6、架构-服务端缓存

为系统引入缓存之前,第一件事情是确认系统是否真的需要缓 存。从开发角度来说,引入缓存会提 高系统复杂度,因为你要考虑缓存的失效、更新、一致性等问题;从运维角度来说,缓存会掩盖一些缺 陷,让问题在更久的…

Nginx企业级负载均衡:技术详解系列(18)—— 作为上传服务器

你好,我是赵兴晨,97年文科程序员。 在上一期的技术分享中,我们探讨了如何高效搭建Nginx下载服务器,并讨论了长连接优化策略。那么今天,咱们进一步了解Nginx的另一面——作为上传服务器的配置技巧。 作为上传服务器&a…

RPC 框架

RPC 全称 Remote Procedure Call——远程过程调用。 RPC技术简单说就是为了解决远程调用服务的一种技术,使得调用者像调用本地服务一样方便透明。RPC是一种通过网络从远程计算机程序上请求服务,不需要了解底层网络技术的协议。 集群和分布式 集群&…

【matlab】绘图插入并放大/缩小子图

参考链接 代码分为两个:绘图代码与magnify.m 绘图代码就是普通的绘图代码,以下为例 %https://zhuanlan.zhihu.com/p/655767542 clc clear close all x 0:pi/100:2*pi; y1 sin(x); plot(x,y1,r-o); hold on y2sin(x)-0.05; y3sin(x)0.05; xlim([0 2*…

企业在现代市场中的战略:通过数据可视化提升财务决策

新时代,财务规划团队不仅仅是企业内部的一个部门,更是帮助企业做出明智决策和设定战略目标的中坚力量。在当今瞬息万变的商业环境中,财务专业人士需要具备应对挑战并引导企业走向成功的角色职能。企业领导者时常面临着数据压力,需…

混剪素材哪里找?分享几个热门混剪素材下载网站

在短视频和新媒体的世界里,高质量的混剪素材是吸引观众的关键。今天,我将为大家详细介绍几个优秀的素材网站,它们不仅资源丰富,而且完全满足新媒体创作者的需求。这篇文章将帮助你理解如何有效利用这些平台提升你的视频创作。 蛙…

小型企业网络组网与配置仿真实验

实验要求如下: 我这里以学号46为例 一、IP 地址规划表 (一)主类网络 (二)子网划分 需要自己计算有效ip范围 在C类主网络192.168.46.0/24中,我们需要先了解这个网络的子网掩码为255.255.255.0,其二进制…

DDMA信号处理以及数据处理的流程---DDMA原理介绍

Hello,大家好,我是Xiaojie,好久不见,欢迎大家能够和Xiaojie一起学习毫米波雷达知识,Xiaojie准备连载一个系列的文章—DDMA信号处理以及数据处理的流程,本系列文章将从目标生成、信号仿真、测距、测速、cfar…

Vitis HLS 学习笔记--接口聚合与解聚-AXI主接口

目录 1. 简介 2. 用法及语法 3. 详细解读 4. 总结 1. 简介 在使用 Vitis HLS 工具进行硬件设计时,如果你在接口上使用了结构体,工具会自动把结构体里的所有元素组合成一个整体。就像把一堆零件组装成一个玩具一样。这样做的好处是,数据可…

【System Verilog and UVM基础入门4】程序和接口

目录 方法task和函数function 接口 [System Verilog特性] 方法task和函数function 首先要明白一个事情!Task任务,是消耗时间的,函数function是不消耗时间的! 这样写看着是不是很高大上呢?此外,如果我们想修改时钟周期怎么办呢?这时我们可以在task clk_gen(int period…

从报名到领证:软考高级【系统分析师】报名考试全攻略

本文共计13156字,预计阅读39分钟。包括七个篇章:报名、准考证打印、备考、考试、成绩查询、证书领取及常见问题。 不想看全文的可以点击目录,找到自己想看的篇章进行阅读。 一、报名篇 报名条件要求: 1.凡遵守中华人民共和国宪…

盛夏之约,即将启程,2024中国北京消防展将于6月26举行

盛夏之约,即将启程,2024中国北京消防展将于6月26举行 盛夏之约,即将启程!备受瞩目的2024中国(北京)消防技术与设备展览会将于6月26-28 日在北京.首钢会展中心盛大召开。作为消防安全和应急救援的年度盛会&…

Camtasia Studio2024永久免费版及最新版本功能讲解

在当前数字化时代,视频内容的制作与编辑变得愈发重要。无论是企业宣传、在线教育还是个人Vlog制作,一款功能强大且易于上手的视频编辑软件成为了刚需。Camtasia Studio作为市场上备受欢迎的视频编辑与屏幕录像工具,凭借其强大的功能与用户友好…

Golang——gRPC与ProtoBuf介绍

一. 安装 1.1 gRPC简介 gRPC由google开发,是一款语言中立,平台中立,开源的远程过程调用系统。gRPC客户端和服务器可以在多种环境中运行和交互,例如用java写一个服务器端,可以用go语言写客户端调用。 1.2 gRPC与Protob…

android睡眠分期图

一、效果图 做医疗类项目&#xff0c;经常会遇到做各种图表&#xff0c;本文做的睡眠分期图。 二、代码 引入用到的库 api joda-time:joda-time:2.10.1 调用代码 /*** 睡眠* 分期*/private SleepChartAdapter mAdapter;private SleepChartAttrs mAttrs;private List<SleepI…

day26-单元测试

1. 单元测试Junit 1.1 什么是单元测试&#xff1f;&#xff08;掌握&#xff09; 1.2 Junit的特点&#xff1f;&#xff08;掌握&#xff09; 1.3 基本用法&#xff1a;&#xff08;掌握&#xff09; 实际开发中单元测试的使用方式&#xff08;掌握&#xff09; public class …

安徽京准NTP时钟系统:GPS北斗卫星授时下的生活重塑

安徽京准NTP时钟系统&#xff1a;GPS北斗卫星授时下的生活重塑 安徽京准NTP时钟系统&#xff1a;GPS北斗卫星授时下的生活重塑 时间的流逝自古以来时钟都是人类生活与活动的基础。然而&#xff0c;随着科技的进步&#xff0c;我们对时间管理和测量的方法已经发生了翻天覆地的变…

【UML用户指南】-09-对基本结构建模-类图

目录 1、概述 2、引入 3、过程 4、常用建模技术 4.1、对简单协作建模 4.2、对逻辑数据库模式建模 4.3、正向工程 1、概述 类图是面向对象系统建模中最常见的图。 类图显示一组类、接口、协作以及它们之间的关系 类图用于对系统静态设计视图建模。其大多数涉及到对系统的…