SQL进阶技巧:数据预处理如何对数据进行分桶【分箱】?

news2024/9/26 1:23:36

目录

 0 引言

1 数据准备

2 数据分桶SQL实现

2 1.基于规则的分桶

2.2 等距分桶

2.3等频分桶

 3 小结


 0 引言

数据分桶(Bucket)作为数据预处理的一部分,是进行数据模型建设的前提,是构建特征工程的重要手段。也被称为离散分箱或数据分段,本质上就是把数据特定的规则进行分组,是实现数据的离散化、增强数据稳定性、减少过拟合风险的一种重要方法。本文针对数据分析领域中常见数据分桶问题进行总结,采用SQL的方式对分桶问题进行求解。

1 数据准备

构建10个随机数

with bucket as
        
(select pos + 1 as id, rand() as val
         
from (select split(space(10), '') as a) t
                  
lateral view posexplode(a) tt as pos, val)
select *
from bucket

2 数据分桶SQL实现

2 1.基于规则的分桶

基于规则的分桶,它根据预先定义的规则或标准将数据点分配到不同的桶中(或区间)中。这种方法通常涉及到对数据的业务理解和特定领域的知识。以下是基于规则分桶的一些关键特点和步骤:

特点:

1.自定义规则:分桶的规则是根据业务需求、数据分析目标或领域专家的建议来定义的。这些规则可以是简单的阈值,也可以是复杂的逻辑表达式。

2.灵活性:基于规则的分桶允许用户根据实际情况灵活地设计分桶逻辑,这在处理具有特定业务含义的数据时非常有用。

3.可解释性:由于分桶规则是明确的,因此结果具有较高的可解释性,便于向非技术利益相关者解释。

我们假设规则: [0~0.2) 1组,[0.2~0.5)2组,[0.5~0.8)3[0.8~1)4

select

  id,

val,

  case when val >=0 and val < 0.2 then 1

     when val >=0.2 and val <0.5 then 2

     when val >=0.5 and val <0.8 then 3

     when val >=0.8 and val <1 then 4

     end as bucket_flag

  from bucket;

2.2 等距分桶

等距分桶是一种将连续数值数据分布到等间隔区间的方法。在等距分桶中,数据的整个范围被均匀地分割成若干个桶里,每个桶的宽度(即间隔)是相同的,但桶的个数是不确定的。

等距分桶的关键特点:

1.均匀分割:数据的范围(最大值和最小值之间的差)被均匀地分割成同的桶里,每个桶里的宽度是相同的。桶的大小一致,桶个数不确定。例如年龄分桶:0-5岁,5-10岁,10-15岁,…

2.边界确定:桶的边界是基于数据的实际值计算出来的,通常是通过取最大值和最小值的平均值来确定中间点,然后根据这个中间点向两边扩展。

3.数据分配:每个数据点根据其值被分配到相应的桶中。如果数据点的值正好等于某个桶的边界值,它通常会被分配到该边界值所在的箱子。

等距分桶将数据从最小值到最大值之间,平均分为 N 等份。比如年龄数据,最大值为75,最小值为3,如果试图将数据分为4份,这时候每个区间的长度就是:(75-3)/4 = 18。切分后的边界就是:21,39,47,75,(amin + W, amin + 2W, …, amin +N*W)

我们假设规则:数据平均分为5组

(1)尺寸确定

bucket_size :(max_val-min_val)/N

(2)边界确定

min_val + N* bucket_size。其中N为分桶编号

bucket_1:min_val + 1*bucket_size 

bucket_2:min_val + 2*bucket_size

bucket_3:min_val + 3*bucket_size 

bucket_4:min_val + 4*bucket_size 

bucket_5:min_val + 5*bucket_size 

(3)桶编号确定(当前数据值进入哪个桶中)

根据当前值确定当前值在哪个桶中。由公式:

min_val + N* bucket_size = val得到

(val – min_val) / bucket_size –-分组标签确定(关键点)

由于编号一般都为整数,因此我们对上述公式取整处理

int((val – min_val) / bucket_size) –-编号从0开始

或floor((val – min_val) / bucket_size) –-编号从0开始

具体示例SQL如下:

with bucket as

         (select pos + 1 as id, rand() as val

          from (select split(space(10), '') as a) t

                   lateral view posexplode(a) tt as pos, val)

  select      id

          , val

          , min_val

          , max_val

          , bucket_size

          --- 边界确定

          , min_val + 1 * bucket_size bucket_1

          , min_val + 2 * bucket_size bucket_2

          , min_val + 3 * bucket_size bucket_3

          , min_val + 4 * bucket_size bucket_4

          , min_val + 5 * bucket_size bucket_5

         --编号确定

         , floor((val  - min_val) / bucket_size)  bucket_fag -- 编号从0开始

  from

    (select id

          , val

          , min_val

          , max_val

          , bucket_size

          --- 边界确定

          , min_val + 1 * bucket_size bucket_1

          , min_val + 2 * bucket_size bucket_2

          , min_val + 3 * bucket_size bucket_3

          , min_val + 4 * bucket_size bucket_4

          , min_val + 5 * bucket_size bucket_5

     from (select id

                , val

                , min_val

                , max_val

                , (max_val - min_val) / 5 as bucket_size

           from (select id,

                        val,

                        min(val) over () as min_val,

                        max(val) over () as max_val

                 from bucket) t) t) t

2.3等频分桶

等频分桶是将数据集划分为具有相同数量的区间或桶。这种方法的目标是确保每个桶中包含的数据点数量大致相同,而不是像等距分桶那样将数据范围均匀分割。等频分桶在处理具有不同密度区域的数据集时特别有用,因为它可以更好地反映数据的实际分布。

等频分桶的关键特点:

1.数据点均匀分布:每个桶中的数据点数量相同或非常接近,这有助于在数据可视化和分析中保持一致性。【桶的个数一致

2.边界动态确定:桶的边界不是预先定义的,而是根据数据点的实际分布动态计算的【桶的大小不确定】,每个桶尺寸大小不一样。

3.适用于偏斜分布:等频分可以很好地处理偏斜分布的数据,因为它不受数据范围的影响,而是关注数据点的分布。

等频分是将数据的值由大到小排列后,将数据分成N等份,保证每份中数据的个数是一样的。比如我们有12个数据值,按照从小到大排序,我们希望把数据分为4个桶,这时候等频分桶中每个桶就有3个数据。

我们假设规则:数据平均分为5组。

桶个数: 5

每个桶中数据点数:均等

桶尺寸:动态计算

桶编号:nitile(n),n为桶个数

具体SQL示例如下:

with bucket as

         (select pos + 1 as id, rand() as val

          from (select split(space(10), '') as a) t

                   lateral view posexplode(a) tt as pos, val)

  

  select id,

       val,

       ntile(5) over (order by val ) as bucket_flag

  from bucket

 3 小结

本文详细介绍了数据分析中常见的几种分桶方式:基于业务规则的分桶、等距分桶及等频分桶等,针对每种分桶方式给出了SQL实现。具体实际中SQL应用如下:

SQL进阶技巧:动态分桶算法应用之用户观看时长问题分析_not yet supported place for udaf 'sum-CSDN博客

SQL进阶技巧:如何按照固定尺寸(固定区间)对数据进行打分类标签?_sql给数据打标签-CSDN博客

SQL进阶技巧:如何按照某个字段对数据进行动态分桶?_按照某个字段进行动态分桶-CSDN博客

SQL进阶技巧-动态分桶算法应用之数据前后百分比问题_underlying error: org.apache.hadoop.hive.ql.parse.-CSDN博客

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

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

相关文章

【算法】KMP算法

应用场景 有一个字符串 str1 "BBA ABCA ABCDAB ABCDABD"&#xff0c;和一个子串 str2 "ABCDABD"现在要判断 str1 是否含有 str2&#xff0c;如果含有&#xff0c;就返回第一次出现的位置&#xff0c;如果不含有&#xff0c;则返回 -1 我们很容易想到暴力…

The Llama 3 Herd of Models 第8部分语音实验部分全文

第1,2,3部分,介绍、概览、预训练 第4部分,后训练 第5部分,结果 第6部分,推理 第7部分,视觉实验 8 Speech Experiments 我们进行了实验来研究将语音功能集成到Llama 3中的组合方法,类似于我们用于视觉识别的方法。在输入端,一个编码器,连同一个适配器,被并入处理语…

低代码开发是什么意思?低代码是开发的未来吗?

在数字化转型的浪潮中&#xff0c;低代码平台是一股不可忽视的力量&#xff0c;它正在以前所未有的速度改变着软件开发的格局。低代码不仅极大地简化了开发流程&#xff0c;降低了技术门槛&#xff0c;还通过高效、灵活的特性&#xff0c;为企业和开发者带来了前所未有的创新机…

页面弹窗中英文切换

一、遇到的问题 页面右上角弹窗如下 二、解决 去掉 lang"en"即可。

SVPWM5段式7段式差异分析和关键代码基于TI F28035

SVPWM5段式7段式差异分析和关键代码基于TI F28035 5段式有一相占空比始终为0或者1 扇区判断的扇区号和实际扇区不是一一对应,直接使用,而是映射关系 扇区判断变量 7段式和5段式在基本矢量作用顺序上的差异 SVPWM算法详解(已标注重点) 来自这篇文章,但经过实际测试,发现是…

计算机和医学领域成重灾区!5本TOP刊也位列其中,请大家谨慎投稿!

【SciencePub学术】自从Hindawi一年撤稿多达一万多篇的事件以来&#xff0c;官方对期刊质量的管控就越来越严格了。更有很多学校和单位都频频更新自己的风险期刊名单&#xff0c;其中&#xff0c;Hindawi、Frontiers、MDPI甚至都被直接打包拉黑&#xff01; 更有On Hold 期刊现…

ios上音频需要点击两次才播放

问题 用H5标签audio渲染音频&#xff0c;测试PC和安卓都没有问题&#xff0c;点击一次就播放&#xff0c;并且可以在播放之前正常显示音频时长 但是在iOS系统上没有播放之前&#xff0c;不仅时长显示为0&#xff0c;并且播放还需要点击2次才正常播放 原因 debug之后发现是因为…

计算机毕业设计选题推荐-遥感影像共享系统-Java/Python项目实战

✨作者主页&#xff1a;IT毕设梦工厂✨ 个人简介&#xff1a;曾从事计算机专业培训教学&#xff0c;擅长Java、Python、微信小程序、Golang、安卓Android等项目实战。接项目定制开发、代码讲解、答辩教学、文档编写、降重等。 ☑文末获取源码☑ 精彩专栏推荐⬇⬇⬇ Java项目 Py…

GaussDB关键技术原理|高可用:两地三中心跨Region容灾

接上篇GaussDB关键技术原理|高可用&#xff1a;逻辑复制从逻辑复制方面对GaussDB的高可用能力进行了介绍&#xff0c;本篇将从两地三中心跨Region容灾方面继续解读GaussDB高可用技术。 目录 4 两地三中心跨Region容灾 4.1 概述 4.2 异地容灾部署示例 集中式 分布式&#x…

sheng的学习笔记-AI-层次聚类

AI目录&#xff1a;sheng的学习笔记-AI目录-CSDN博客 需要学习的前置知识&#xff1a;聚类&#xff0c;可参考&#xff1a;sheng的学习笔记-AI-聚类(Clustering)-CSDN博客 什么是层次聚类 层次聚类(hierarchical clustering)试图在不同层次对数据集进行划分&#xff0c;从而形…

2024年第五届华数杯全国大学生数学建模竞赛【C题】完整版代码+结果 分享

问题1的设问虽然不涉及到数学模型&#xff0c;只需要统计题目所给附件数据&#xff0c;但在做题之前可以先整理思路&#xff1a; ①统计景点评分最高分&#xff1b;②统计最高分在所有文件中出现的总次数&#xff1b;③统计出现高分次数最多的csv文件&#xff1b;④统计出现最…

js前端展示ppt【插件:PPTXJS】

前端展示PPT 使用插件&#xff1a; 官方网址: https://pptx.js.org/index.html github网址: https://github.com/meshesha/PPTXjs/releases 实例网址: https://pptx.js.org/pages/demos.html通过下载官方demo可以获得完整的实例

MySQL简介 数据库管理与表管理

文章目录 1 MySQL的优势2 MySQL数据类型1 数字类型2 日期和时间类型3 字符串类型 3 数据库管理4 数据表管理参考 1 MySQL的优势 性能优化&#xff1a;通过优化存储引擎&#xff08;InnoDB&#xff0c;MyISAM&#xff09;和查询优化。解决大规模数据处理和查询优化开源&#xf…

孩子被确诊为自闭症怎么办?

当家庭收到孩子被确诊为自闭症的消息时&#xff0c;这无疑是一次巨大的心理冲击和挑战。面对这一突如其来的诊断&#xff0c;许多家长会感到无助、焦虑甚至绝望。然而&#xff0c;重要的是要认识到&#xff0c;自闭症并非不可逾越的障碍&#xff0c;通过科学、专业的干预和治疗…

调度中心控制台:智慧运营的心脏,引领高效管理的未来

在当今这个信息化、智能化发展的时代&#xff0c;各行各业的运营管理都面临着前所未有的挑战与机遇。作为协调资源、指挥调度的核心枢纽&#xff0c;调度中心控制台不仅是信息汇聚的窗口&#xff0c;更是智慧决策与高效执行的起点。接下来就由嘉德立给大家深入探讨一下调度中心…

【C#语音文字互转】.NET的TTS文本转语音合成

本文章环境介绍&#xff1a; Visual Studio 2022&#xff1b;C#SDK为.NET6.0 一. 启动 Visual Studio 并创建控制台应用程序 1.1 首先在项目打开NuGet包管理工具下载System.Speech。 1.2测试 下面为一个典型的输出示例 using System.Speech.Synthesis; namespace KeepTalkin…

视觉SLAM第三讲

本讲将介绍视觉 SLAM 的基本问题之一&#xff1a;三维空间的刚体运动描述方式&#xff1a;旋转矩阵、变换矩阵、四元数和欧拉角。 点、向量和坐标系 点&#xff1a;空间当中的基本元素&#xff0c;没有长度&#xff0c;没有体积。 向量&#xff1a;可以将向量看作从一个点指向…

如何快速创建一个微信报名链接

在这个快节奏的时代&#xff0c;如何让活动报名更加便捷、高效&#xff0c;成为了众多主办方关注的焦点。今天&#xff0c;就让我们一起探索如何快速创建一个微信报名链接&#xff0c;让您的活动报名变得前所未有的简单与智能。 一、洞悉需求&#xff0c;解锁报名新方式 在数字…

【Pyspark-驯化】一文搞定spark的代码执行原理和使用技巧

【Pyspark-驯化】一文搞定spark的代码执行原理和使用技巧 本次修炼方法请往下查看 &#x1f308; 欢迎莅临我的个人主页 &#x1f448;这里是我工作、学习、实践 IT领域、真诚分享 踩坑集合&#xff0c;智慧小天地&#xff01; &#x1f387; 相关内容文档获取 微信公众号 &…

国标GB28181协议设备通道告警没有快照图片怎么办?实时流抓图/录像抓图

熟悉国标GB28181协议的同学都知道&#xff0c;国标协议在告警推送这一块定义了各种告警类型和告警参数&#xff0c;但就是没有定义告警的图片应该怎么上传到平台&#xff0c;所以&#xff0c;现在市面上的所有设备&#xff0c;几乎都不支持上传告警图片&#xff0c;这给我们的项…