ITPub博客

首页 > 数据库 > 数据库开发技术 > 数据分析01-如何进行数据分箱

数据分析01-如何进行数据分箱

原创 数据库开发技术 作者:晨曦_001 时间:2024-03-11 08:06:00 0 删除 编辑

样例数据:我们创建一张hive表 t_box,包含两列(id,val), 其中id为1~1000,val 为随机数浮点数。

分箱(Binning)是一种数据预处理技术,它将连续的数据划分为离散的区间或“箱子”。这种方法在数据分析、统计学和机器学习中非常常见,尤其是在处理大规模数据集时。在数仓或数据分析常用以下三种”分箱”方式

1.基于规则的分箱

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

特点:

1.自定义规则:分箱的规则是根据业务需求、数据分析目标或领域专家的建议来定义的。这些规则可以是简单的阈值,也可以是复杂的逻辑表达式。
2.灵活性:基于规则的分箱允许用户根据实际情况灵活地设计分箱逻辑,这在处理具有特定业务含义的数据时非常有用。
3.可解释性:由于分箱规则是明确的,因此结果具有较高的可解释性,便于向非技术利益相关者解释。

我们假设规则:(0~0.4] 为1组,(0.4~0.6]为2组,(0.6~1)为3组

实现SQL:

select id,val.case when val >0 and val <= 0.4 then 1     when val >0.4 and val <= 0.6 then 2     when val >0.6 and val <1 then 3 end as box_indxfrom t_box

样例结果

根据分箱box_indx统计

with t as (select id,val,case when val >0 and val <= 0.4 then 1     when val >0.4 and val <= 0.6 then 2     when val >0.6 and val <1 then 3 end as box_indxfrom t_box)selectbox_indx,count(1)from tgroup by box_indx

查询结果

2.等距分箱

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

等距分箱的关键特点:

1.均匀分割:数据的范围(最大值和最小值之间的差)被均匀地分割成n个箱子,每个箱子的宽度是相同的。
2.边界确定:箱子的边界是基于数据的实际值计算出来的,通常是通过取最大值和最小值的平均值来确定中间点,然后根据这个中间点向两边扩展。
3.数据分配:每个数据点根据其值被分配到相应的箱子中。如果数据点的值正好等于某个箱子的边界值,它通常会被分配到该边界值所在的箱子。

我们假设规则:分为3组

实现SQL

select id,val,ceil(if((val-min_val)=0,1,(val-min_val)/((max_val-min_val)/3))) as box_indxfrom t_boxjoin (selectmin(val) as min_val,max(val) as max_valfrom t_box) t1

样例结果




根据分箱box_indx统计

with t as (select id,val,ceil(if((val-min_val)=0,1,(val-min_val)/((max_val-min_val)/3))) as box_indxfrom t_boxjoin (selectmin(val) as min_val,max(val) as max_valfrom t_box) t1)selectbox_indx,count(1)from tgroup by box_indx

统计结果

3.等频分箱

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

等频分箱的关键特点:

1.数据点均匀分布:每个箱子中的数据点数量相同或非常接近,这有助于在数据可视化和分析中保持一致性。
2.边界动态确定:箱子的边界不是预先定义的,而是根据数据点的实际分布动态计算的。
3.适用于偏斜分布:等频分箱可以很好地处理偏斜分布的数据,因为它不受数据范围的影响,而是关注数据点的分布。

我们假设规则:分为3组

实现SQL

selectid,val,ntile(3)over(order by val asc) as box_indxfrom t_box

样例结果

根据分箱box_indx统计

with t as (selectid,val,ntile(3)over(order by val asc) as box_indxfrom t_box)selectbox_indx,count(1)from tgroup by box_indx

查询结果




建表语句及数据插入语句

--建表语句create table if not exists t_box (  id bigint,  val double)ROW FORMAT DELIMITEDFIELDS TERMINATED BY ','STORED AS orc;--数据插入insert into t_box(id,val)select ind+1 as id,rand() as val from(select split(space(999),'') as a) t lateral view posexplode(a) tt as ind,space_val;

本文同步在微信公众号”数据仓库技术“和个人博客”数据仓库技术“发表。原文:

微信社群“数据仓库技术”有几十位小伙伴一起讨论数据仓库相关技术,关注公众号后台回复“加群”,添加好友加入;



原文作者:数据仓库技术;如有侵权,请联系管理员删除。

请登录后发表评论 登录
全部评论
公众号:数据仓库技术 数据仓库技术:https://dwsql.com spark内置函数手册: https://sparkfunctions.com

注册时间:2022-12-18

  • 博文量
    116
  • 访问量
    55278