如何进行帕累托分析

news2025/1/21 11:59:56

5e8922c8ae86a71f732a24b80780e344.jpeg

【面试题】有一张“学生成绩表”,包含3个字段:学号、课程、成绩。

1e47edf2bad20423edc7ee7bb9299e51.png

问题:找出每门课程A类和B类的学生,判断标准是累计占比,0~60%的记为A类,60%~85%记为B类

【解题思路】

什么是二八定律?

二八定律是说在任何一组东西中,最重要的只占一小部分,约20%。比如家店铺,卖的最多的商品数只占20%

什么是ABC分类法?

ABC分类方法是二八定律衍生出来的一种分类方法,由于它把对象分成A、B、C三类,所以叫做ABC分类法,也叫帕累托分析

ABC分类法计算步骤:

1)将分析对象由大到小排序

2)计算每一个对象及排在该对象之前的累计占比

3)将累计占比为0~60%的记为A类,60%~85%记为B类,85%以上记为C类

1. 解题思路

题目要求:找出每门课程A类和B类的学生,判断标准是累计占比,0~60%的记为A类,60%~85%记为B类;

所以,核心问题就是计算累计占比。

那么,什么是累计占比呢?

课程A的累计占比 = 课程A的累计成绩 / 课程A的总成绩

“课程总成绩”很好理解,也就是每门课程的所有学生的成绩总和。

“课程累计成绩”的定义是:

1)每门课程的学生成绩由大到小排序;

2)计算每一个学生及排在该学生之前的课程累计成绩。

举个例子,下表数学课程里按成绩从大到小排序是96、65、55。学号(S002)的数学课程累计成绩是96,学号(S001)的数学课程累计成绩是96+65=161,依此类推。

56f4634081bb1a85b26563de055796d1.png

2. 课程累计成绩

累计问题要想到用窗口函数来解决。

select *,
       sum(成绩) over (partition by 课程 
                       order by 成绩 desc 
                       rows between unbounded preceding and current row) as 课程累计成绩
from 学生成绩表;

查询结果:

fc30042b74a7aebe988a2573a4f868a1.png

把这个SQL查询查询结果命名为子查询t1。

这里使用了窗口函数的rows between … and …用法。含义是对“起始行”至“终止行”的字段1求和。

sum(字段1) over (partition by 字段2 
                 order by 字段3 
                 rows between 起始行and 终止行)

对于这道题要求得“每一个学生及排在该学生之前的课程累计成绩”,所以,“起始行”就是每个窗口的第一行(unbounded preceding),“终止行”是当前行(current row)。

3692082d43b181aaedf59b8123c23ec7.png

3. 课程总成绩

根据指标定义:课程A的累计占比 = 课程A的累计成绩 / 课程A的总成绩。

前面得到分子:每个课程的累计成绩。

还需要得到分母:每个课程的课程总成绩。

每个课程的课程总成绩,涉及到“每个”要想到用“汇总分析”,按课程分组(group by),汇总(求职成绩和sum)

select 课程,sum(成绩) as 课程总成绩
from 学生成绩表
group by 课程;

查询结果:

72925744c6f554b3e53e49f0fb4ae11c.png

把这个SQL查询查询结果命名为子查询t2。

3.累计占比

根据指标定义:课程A的累计占比 = 课程A的累计成绩 / 课程A的总成绩。

为了方便计算,需要将上面两步得到结果汇总到一个表里。

将第1步得到的每个课程的累计成绩查询结果记为表t1,第2步得到的每个课程的总成绩查询结果记为表t2,进行多表联结。

969ed051d6bcc1a15d2d5070a36d41db.png

select t1.学号,
       t1.课程,
       t1.成绩,
       t1.课程累计成绩,
       t2.课程总成绩,
       t1.课程累计成绩/2.课程总成绩 as 累计成绩占比
from  t1
left join t2 
on t1.课程 = t2.课程;

把第1、2步的子查询t1、t2代入上面的SQL语句,就得到了:

select t1.学号,
       t1.课程,
       t1.成绩,
       t1.课程累计成绩,
       t2.课程总成绩,
       t1.课程累计成绩/t2.课程总成绩 as 累计成绩占比
from (
select *,
       sum(成绩) over (partition by 课程 
                       order by 成绩 DESC 
                       rows between unbounded preceding and current row) as 课程累计成绩
from 学生成绩表
) as t1
left join (
select 课程,sum(成绩) as 课程总成绩
from 学生成绩表
group by 课程
) as t2 
on t1.课程 = t2.课程;

查询结果

a067e9cc87aa1c80cca9118e1dc97cc6.png

把这个SQL查询查询结果命名为子查询t3

4.分类

题目要求的是:找出每门课程A类和B类的学生,判断标准是累计占比,0~60%的记为A类,60%~85%记为B类

select t3.学号,
       t1.课程,
       t1.成绩,
       case when t3.累计成绩占比 > 0 and t3.累计成绩占比 <= 0.6 then 'A'
                 t3.累计成绩占比 > 0.6 and t3.累计成绩占比 <= 0.85 then 'B'
                 end as 类别
from t3
where t3.累计成绩占比 <= 0.85;

把第3步的子查询t3代入上面的SQL语句,就得到了:

select t3.学号,
       t3.课程,
       t3.成绩,
       case when t3.累计成绩占比 > 0 and t3.累计成绩占比 <= 0.6 then 'A'
            when t3.累计成绩占比 > 0.6 and t3.累计成绩占比 <= 0.85 then 'B'
            end as 类别
from (
select t1.学号,
       t1.课程,
       t1.成绩,
       t1.课程累计成绩,
       t2.课程总成绩,
       t1.课程累计成绩/t2.课程总成绩 as 累计成绩占比
from (
select *,
       sum(成绩) over (partition by 课程 
                       order by 成绩 DESC 
                       rows between unbounded preceding and current row) as 课程累计成绩
from 学生成绩表
) as t1
left join (
select 课程,sum(成绩) as 课程总成绩
from 学生成绩表
group by 课程
) as t2 
on t1.课程 = t2.课程
) as t3
where t3.累计成绩占比 <= 0.85;

ff6286681abdc1902415344e755448ea.png【本题考点】

1.考查对帕累托分析思路的理解;

2.考查对窗口函数的了解,以及灵活使用来解决业务问题;

3.考查对多表联结的了解。

b31894a9e1cbb5e2a906fe6a79b2bc31.jpeg

 ⬇️点击「阅读原文」

 免费报名 数据分析训练营

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

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

相关文章

Java通过显示弹奏音乐的方式来实现继承的有关方法

目录 前言 一、Music.java类 1.1运行流程&#xff08;思想&#xff09; 1.2代码段 二、Brass.java类 1.1运行流程&#xff08;思想&#xff09; 1.2代码段 三、Wind.java类 1.1运行流程&#xff08;思想&#xff09; 1.2代码段 四、Instrument.java类 1.1运行流程&…

世界领先的电动汽车国际标准 一 ISO 15118全系列

世界领先的电动汽车国际标准 一 ISO 15118全系列 ISO 15118 的官方名称是“道路车辆——车辆到电网的通信接口”。我可能有点偏见&#xff0c;因为我是该国际标准的共同作者之一&#xff0c;但我坚信 ISO 15118 是当今可用的最重要和面向未来的标准之一。 ISO 15118 中内置的…

C语言学习分享(第三次)------了解C语言-下

了解C语言-下 前言知识列表1. 函数1.1认识函数1.2 自己实现函数1.3 注意事项以及函数的好处 2. 数组2.1 认识数组2.2 数组的下标 3. 操作符3.1 算数操作符3.2 移位操作符和位操作符3.3 赋值操作符3.4 单目操作符3.5 关系操作符3.6 条件操作符3.7 逗号表达式 4. 常见关键字4.1 关…

开源正当时,共赢新未来 OpenHarmony开发者大会成功召开

4月19日&#xff0c;以“开源正当时&#xff0c;共赢新未来”为主题的开放原子开源基金会OpenHarmony开发者大会2023&#xff08;以下简称“大会”&#xff09;成功举办。 本次大会由开放原子开源基金会指导&#xff0c;OpenHarmony项目群工作委员会主办&#xff0c;华为、开鸿…

Windows逆向安全(一)之基础知识(九)

汇编比较三种循环 众所周知&#xff0c;在C语言可以使用可以使用三种循环&#xff0c;分别是&#xff1a;while、do…while和for 本文从汇编的角度出发&#xff0c;观察这三种循环的差异 范例代码 先贴出三种循环的代码&#xff0c;分别用这三种循环计算 0123456789&#…

【PyTorch】第三节:反向传播算法

作者&#x1f575;️‍♂️&#xff1a;让机器理解语言か 专栏&#x1f387;&#xff1a;PyTorch 描述&#x1f3a8;&#xff1a;PyTorch 是一个基于 Torch 的 Python 开源机器学习库。 寄语&#x1f493;&#xff1a;&#x1f43e;没有白走的路&#xff0c;每一步都算数&#…

SpringBoot高校毕业生就业信息管理系统 附带详细运行指导视频

文章目录 一、项目演示二、项目介绍三、运行截图四、主要代码 一、项目演示 项目演示地址&#xff1a; 视频地址 二、项目介绍 项目描述&#xff1a;这是一个基于SpringBoot框架开发的高校毕业生就业信息管理系统项目。首先&#xff0c;这是一个响应式的项目&#xff0c;代码…

五:用户空间内存分配

目录 用户空间内存分配 mmap malloc 用户空间内存分配 mmap 将内核空间直接映射到用户空间&#xff0c;省去从内核到用户空间的内存拷贝。 mmap的缺点 mmap 使用时必须实现指定好内存映射的大小&#xff0c;因此 mmap 并不适合变长文件&#xff1b;mmap如果更新文件的操作…

【通过Cpython3.9源码看看python字符串的缓存机制】

基本说明 在CPython中&#xff0c;字符串intern机制是一种字符串对象缓存机制&#xff0c;用于避免创建多个相同内容的字符串对象&#xff0c;以减少内存使用。具体来说&#xff0c;如果两个字符串对象的内容相同&#xff0c;那么这两个字符串对象实际上会共享同一块内存空间。…

【Vue基础】前端工程化Vue项目

一、创建Vue项目步骤 1、新建一个文件夹&#xff0c;起名为vue_project01 2、在该文件夹中打开cmd&#xff0c;输入指令vue ui&#xff0c;打开图形化界面 3、此时跳转到网页&#xff0c;根据以下步骤配置vue项目 1&#xff09;项目名命名为test01&#xff1b;选择包管理器为…

使用R语言进行方差分析(ANOVA、ANCOVA)(一)

方差分析&#xff08;一&#xff09; 1. ANOVA模型拟合1.1 aov()函数1.2 表达式中各项的顺序 2. 单因素方差分析&#xff08;One-Way ANOVA&#xff09;2.1 绘制各组均值及其置信区间的图形2.2 多重比较-TukeyHSD2.2.1 成对比较图2.2.2 多重均值比较-TukeyHSD&#xff08;更易理…

图的存储(邻接矩阵邻接表)

图的存储 文章目录 图的存储1 邻接矩阵1.1 邻接矩阵存储结构定义1.2 完整代码应用 2 邻接表2.1 邻接表存储结构定义2.2 完整代码应用 1 邻接矩阵 A [ i ] [ j ] 1 A[i][j]1 A[i][j]1 表示顶点i与顶点j邻接&#xff0c;即i与j之间存在边或者弧。 A [ i ] [ j ] 0 A[i][j]0 A…

使用jdk17 搭建Hadoop3.3.5和Spark3.3.2 on Yarn集群模式

搭建Hadoop3.3.5和Spark3.3.2 on Yarn集群模式&#xff0c;使用jdk17 搭建Hadoop3.3.5和Spark3.3.2 on Yarn集群模式1. 创建一台虚拟机2. 安装jdk17&#xff08;1&#xff09;下载jdk17&#xff08;2&#xff09;安装jdk17&#xff08;3&#xff09;配置环境变量 3. 虚拟机之间…

【音视频第15天】webRTC协议(2)

目录 协议ICESTUNNATTURNSDPSDP结构 Signaling and ConnectingSignaling: How peers find each other in WebRTCConnecting and NAT Traversal with STUN/TURN Signalingsdp协议WebRTC如何使用sdpWebRTC会话示例 Connecting为什么WebRTC需要一个专用的子系统来连接?现实世界的…

Day949.遗留系统之殇:为什么要对遗留系统进行现代化? -遗留系统现代化实战

遗留系统之殇&#xff1a;为什么要对遗留系统进行现代化&#xff1f; Hi&#xff0c;我是阿昌&#xff0c;今天学习记录是关于遗留系统之殇&#xff1a;为什么要对遗留系统进行现代化&#xff1f;的内容。 不知道你是否跟曾经一样&#xff0c;身处一个遗留系统的漩涡之中&…

数据结构-基数排序

基数排序是和其他的各类排序方式都不同的方式&#xff0c;之前的各类排序&#xff0c;如快速排序&#xff0c;堆排序&#xff0c;冒泡排序等等&#xff0c;都是通过关键字之间的比较和移动记录这两种操作来实现的&#xff0c;而基数排序不需要记录关键字之间的比较。所谓基数排…

ubuntu 安装vmware tool

1在虚拟机种站到安装vmware-tools 然后重启虚拟机 2在磁盘中可以看到如下文件&#xff0c;将zip文件移动到桌面解压备用 3关闭虚拟机 找到编辑虚拟机设置 4点击左侧 CD/dvd(SATA) 如果是使用镜像文件&#xff0c;改成使用物理驱动器. 5 打开命令行 cd 桌面 &#xff08;如…

CSS基础——盒子模型的一些属性概念

目录 display visibility overflow 文档流 元素在文档流中的特点 块元素 内联元素 浮动 float 浮动元素特点 清除浮动 clear 小练习 效果图 具体实现 高度塌陷问题 BFC 特点 如何开启BFC 解决方案 本篇的最终练习 效果图如下&#xff1a; 具体实现 disp…

ChatGPT原理解释

写了一本介绍ChatGPT原理的课程 结构如下 01、介绍ChatGPT及其原理 1.1 ChatGPT的概述 1.2 什么是自然语言处理&#xff08;NLP&#xff09; 1.3 深度学习与NLP的关系 1.4 GPT模型的介绍 02、GPT原理探讨 2.1 GPT模型的输入与输出 2.2 GPT模型的结构 2.3 GPT模型的预训练方法…

flv怎么无损转换成mp4格式,3大超级方法分享

flv格式是目前在视频分享媒体播放网站上广泛使用的一种视频文件格式&#xff0c;可以在网站窗口中直接播放&#xff0c;这类视频文件还能够有效保护版权。但是有些时候我们可能需要将flv格式的视频转换为其他格式&#xff0c;比如mp4。但是该怎么操作呢&#xff1f; 其实有很多…