如何进行帕累托分析

news/2024/4/24 9:52:28/

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.ppmy.cn/news/48035.html

相关文章

Java接口自动化测试框架系列:提升测试效率的自动化测试框架

目录&#xff1a;导读 一、什么是自动化测试 二、自动化测试的缺点 三、自动化测试框架选型 原则 对比 四、框架构建 【自动化测试工程师学习路线】 一、什么是自动化测试 自动化测试是把以人为驱动的测试行为转化为机器执行的一种过程。 通常&#xff0c;在设计了测试…

5.java程序员必知必会类库之excel读写库

前言 Excel在数据处理中的重要性自不必说&#xff0c;我们经常会有需求&#xff0c;将数据库中的数据&#xff0c;做过一些处理后&#xff0c;导出一个Excel给运营人员分析。也有需求是将批量的商品数据等&#xff0c;批量录入到我们系统中。直观上可以理解为Excel是客户和系统…

前端学习:HTML JavaScript

目录 一、JavaScript 使HTML页面更具有动态性和交互性 浏览器中的 JavaScript 能做什么&#xff1f; 二、 HTML 三、HTML标签 ​编辑 四、JavaScript 的功能示例 1. JavaScript 能够更改内容&#xff1a; 2. JavaScript能够更改样式&#xff1a; 3.JavaScript能够更改属性…

【Ruby 2D】【unity learn】抬头显示血条

说起游戏开发&#xff0c;大家一般会觉得控制角色移动和制作血条哪个难呢&#xff1f; 或许都会觉得血条比较难吧。 是的&#xff0c;正是如此。 那么我们让我们来看看血条该怎么做吧 这是效果图 受伤后是这样的 首先是创建一张Canvas画布 这个画布会很大 相比之下我们的小…

Spring AOP: 多切面的顺序,性能及异常监控

目录标题 一、Sprig的AOP操作JDK动态代理CGLib动态代理基于xml开发Spring AOP基于注解开发Spring AOP 二、多切面的顺序基于注解的配置基于Ordered接口配置基于XML配置 三、性能及异常监控性能监控异常监控 四、工程目录及运行结果图 一、Sprig的AOP操作 JDK动态代理 //接口 …

【STL】map容器

1、map容 map中所有元素都是pair组成pair中第一个元素为key&#xff08;键值&#xff09;&#xff0c;起到索引作用&#xff0c;第二个元素为value&#xff08;实值&#xff09;所有元素都会根据元素的键值自动 排序 map/multimap属于关联式容器&#xff0c;底层结构由二叉树…

8万字智慧旅游景区信息化建设方案word

本资料来源公开网络&#xff0c;仅供个人学习&#xff0c;请勿商用&#xff0c;如有侵权请联系删除。 1.1. 整体建设框架 XXXXXX智慧景区旅游建设对于全面整合景区旅游资源&#xff0c;提升景区旅游产业发展能级&#xff0c;进一步增强景区旅游业的核心竞争力具有十分重要的支…

《Vue3实战》 第五章 计算、监听属性

《Vue3实战》篇章整体栏目 ————————————————————————————— 【第一章】node.js/npm安装、配置 【第二章】创建项目和目录结构 【第三章】基础语法 【第四章】条件语句、循环语句 【第五章】计算、监听属性 【第六章】样式绑定和事件处理 【第七章】…

Ae:摄像机设置

Ae菜单&#xff1a;图层/摄像机设置 Camera Settings 快捷键&#xff1a;Ctrl Shift Y 新建摄像机图层时&#xff0c;首先会弹出摄像机设置 Camera Settings对话框。 经典 3D 渲染器时的摄像机设置 Cinema 4D 渲染器时的摄像机设置 类型 Type 有两种类型的摄像机供选择。 提…

【计算机视觉 | 图像分割】Segment Anything论文讲解

文章目录 一、前言二、论文出发点三、创新思路四、方法4.1 Segment Anything Task4.2 Segment Anything Model4.3 Segment Anything Data Engine4.4 Segment Anything Dataset 五、结果 一、前言 论文&#xff1a;https://arxiv.org/pdf/2304.02643.pdf 项目&#xff1a;https…

数据库基础篇 《2. MySQL环境搭建》

目录 1. MySQL的卸载 步骤1&#xff1a;停止MySQL服务 步骤2&#xff1a;软件的卸载 步骤3&#xff1a;残余文件的清理 ​编辑2. MySQL的下载、安装、配置 2.1 MySQL的4大版本 2.2 软件的下载 2.3 MySQL8.0 版本的安装 2.4 配置MySQL8.0 2.5 配置MySQL8.0 环境变量 …

Python办公自动化之PostgreSQL篇2——利用Python连接PostgreSQL并读取一张表

在上一篇我们已经安装好了最新的PostgreSQL&#xff0c;以及最方便的可视化工具&#xff0c;Navicat 如果错过的小伙伴&#xff0c;可以去上一篇查看&#xff1a;点我查看 今天我们来用Python连接一下PostgreSQL&#xff0c;然后准备一张测试表&#xff0c;导入PostgreSQL&am…

数据爬虫爬数据时常遇到的问题

第一&#xff0c;可能不能直接通过pyppeteer简单的直接page.querySelectorAll()获取所有元素然后直接 str(await (await element_songer_name.getProperty("title")).jsonValue()) 得到数据值&#xff0c;主要原因可能是#document问题&#xff0c; 所以遇到这个问题…

4.13~4.17(PE文件结构预习+hook+进程hellow)

常见PE文件结构 常见的PE文件&#xff1a;exe、dll、sys Ag&#xff1a; exe就不用多说&#xff0c;就是可执行文件 dll动态链接库 对于 Windows 操作系统&#xff0c;操作系统的大部分功能都由 DLL 提供 &#xff08;https://learn.microsoft.com/zh-cn/troubleshoot/window…

第一讲 初识Python

Python简介 Python&#xff08;英式发音&#xff1a;/ˈpaɪθən/&#xff1b;美式发音&#xff1a;/ˈpaɪθɑːn/&#xff09;是由荷兰人吉多范罗苏姆&#xff08;Guido von Rossum&#xff09;发明的一种编程语言&#xff0c;是目前世界上最受欢迎和拥有最多用户群体的编…

第二十二章 案例TodoList之鼠标事件

本小节&#xff0c;我们需要使用鼠标事件&#xff0c;给Item组件添加背景颜色&#xff0c;并显示删除按钮。 添加鼠标移入和移出事件 import React, { Component } from react import "./index.css" export default class Item extends Component {// 初始化状态数…

.Net中的标识框架Identity

中间件&#xff1a; 1、Authentication对访问者的用户身份进行验证&#xff0c;“用户是否登录成功”。 2、Authorization验证访问者的用户身份是否有对资源访问的访问权限&#xff0c;“用户是否有权限访问这个地址”。 简单描述 1、标识&#xff08;Identity&#xff09;框架…

轻松掌握K8S使用kubectl操作配置文件挂载ConfigMap和密钥Secret知识点05

1、挂载应用配置文件配置集ConfigMap 当有许多应用如redis、mysql&#xff0c;希望将它的配置文件挂载出去&#xff0c;以便随时修改&#xff0c;可以用ConfigMap配置集 具体用法查看使用命令行操作里的 3、ConfigMap配置集实战 2、挂载应用配置文件的敏感信息Secret Secre…

Linux 系统调用深思:从原理到实战

Linux 系统调用揭秘&#xff1a;从原理到实战&#xff08;Demystifying Linux System Calls: From Principles to Practice&#xff09; 引言&#xff08;Introduction&#xff09;系统调用的概念&#xff08;Concept of System Calls&#xff09;Linux操作系统与系统调用的关系…

使用element-plus组件,修改date-picker默认样式

使用深度选择器来修改子组件的样式&#xff0c;今天遇到一个需求&#xff0c;在el-drawer中嵌入的el-date-picker&#xff0c;再一次总结一下深度选择器的用法&#xff0c;需求如下&#xff1a; template内容&#xff1a; <el-drawer size"70%" v-model"dr…