"); //-->
来源:DeepHub IMBA
分箱是一种常见的数据预处理技术有时也被称为分桶或离散化,他可用于将连续数据的间隔分组到“箱”或“桶”中。在本文中,我们将讨论使用 python Pandas 库对数值进行分箱的 4 种方法。
我们创建以下合成数据用于演示
import pandas as pd # version 1.3.5import numpy as npdef create_df():df = pd.DataFrame({'score': np.random.randint(0,101,1000)})return df
create_df()df.head()
数据包括 1000 名学生的 0 到 100 分的考试分数。而这次的任务是将数字分数分为值“A”、“B”和“C”的等级,其中“A”是最好的,“C”是最差的。
Pandas .between 方法返回一个包含 True 的布尔向量,用来对应的 Series 元素位于边界值 left 和 right[1] 之间。
参数有下面三个:
根据以下间隔规则将学生的分数分为等级:
其中方括号 [ 和圆括号 ) 分别表示边界值是包含的和不包含的。我们需要确定哪个分数在感兴趣的区间之间,并为其分配相应的等级值。注意看下面的不同的参数表示是否包含边界
df.loc[df['score'].between(0, 50, 'both'), 'grade'] = 'C'df.loc[df['score'].between(50, 80, 'right'), 'grade'] = 'B'df.loc[df['score'].between(80, 100, 'right'), 'grade'] = 'A'
以下是每个分数区间的人数:
df.grade.value_counts()
可以使用 cut将值分类为离散的间隔。此函数对于从连续变量到分类变量[2] 也很有用。
cut的参数如下:
bins = [0, 50, 80, 100]labels = ['C', 'B', 'A']df['grade'] = pd.cut(x = df['score'], bins = bins, labels = labels, include_lowest = True)
这样就创建一个包含 bin 边界值的 bins 列表和一个包含相应 bin 标签的标签列表。
查看每个区段的人数
df.grade.value_counts()
qcut可以根据排名或基于样本分位数将变量离散为大小相等的桶[3]。
在前面的示例中,我们为每个级别定义了分数间隔,这回使每个级别的学生数量不均匀。在下面的示例中,我们将尝试将学生分类为 3 个具有相等(大约)数量的分数等级。示例中有 1000 名学生,因此每个分箱应该有大约 333 名学生。
qcut参数:
x:要分箱的输入数组。必须是一维的。
q:分位数。10 表示十分位数,4 表示四分位数等。也可以是交替排列的分位数,例如[0, .25, .5, .75, 1.] 四分位数。
labels:指定 bin 的标签。必须与生成的 bin 长度相同。
retbins: (bool) 是否返回 (bins, labels)。
df['grade'], cut_bin = pd.qcut(df['score'], q = 3, labels = ['C', 'B', 'A'], retbins = True)df.head()
如果 retbins 设置为 True 则会返回 bin 边界。
print (cut_bin)>> [ 0. 36. 68. 100.]
分数间隔如下:
使用 .value_counts() 检查每个等级有多少学生。理想情况下,每个箱应该有大约 333 名学生。
df.grade.value_counts()
虽然 pandas .value_counts 通常用于计算系列中唯一值的数量,但它也可用于使用 bins 参数 [4] 将值分组到半开箱中。
df['score'].value_counts(bins = 3, sort = False)
默认情况下, .value_counts 按值的降序对返回的系列进行排序。将 sort 设置为 False 以按其索引的升序对系列进行排序。
series 索引是指每个 bin 的区间范围,其中方括号 [ 和圆括号 ) 分别表示边界值是包含的和不包含的。返回series 的值表示每个 bin 中有多少条记录。
与 .qcut 不同,每个 bin 中的记录数不一定相同(大约)。.value_counts 不会将相同数量的记录分配到相同的类别中,而是根据最高和最低分数将分数范围分成 3 个相等的部分。分数的最小值为 0,最大值为 100,因此这 3 个部分中的每一个都大约在 33.33 范围内。这也解释了为什么 bin 的边界是 33.33 的倍数。
我们还可以通过传入边界列表来定义 bin 边界。
df['score'].value_counts(bins = [0,50,80,100], sort = False)
这给了我们与示例 1 和 2 相同的结果。
在本文中,介绍了如何使用 .between、.cut、.qcut 和 .value_counts 对连续值进行分箱。这里是本文的源代码:https://colab.research.google.com/drive/1yWTl2OzOnxG0jCdmeIN8nV1MoX3KQQ_1?usp=sharing
专栏文章内容及配图由作者撰写发布,仅供工程师学习之用,如有侵权或者其他违规问题,请联系本站处理。 联系我们
相关推荐
瑞萨电子AI单元解决方案成功提高GE医疗(日本)日野工厂的生产力
基于Microchip MCU的AI/ML培训教程3
万家乐JSYZ5-AI燃气热水器电路图
EEPW2018年3月刊(工业物联网)
基于VisitionX制造智能眼镜
EEPW2018年6月刊(5G)
WTC-AI型太阳能热水器电路图
英伟达CFO:我们早就知道内存大涨价要来了
尼吉康的事业介绍
Nigel AI赋能LabVIEW,NI用AI重塑测试新边界
释说芯语16:硬科技:构建企业未来之路(附PPT)
紧凑型集成连接器模块抑制噪声 为人工智能应用实现以太网供电
CSR8670CSR8675智能语音Alexa蓝牙方案开发
电子元件培训教材
基于Ai-WB2-12F与Rd-04的雷达检测系统
WTC-AI太阳能热水器电路图
基于Microchip MCU的AI/ML培训教程2
基于Microchip MCU的AI/ML培训教程1
研华 COMPUTEX 首度整合全球伙伴大会 强化全球边缘 AI 生态系统联结
爱立信携手 Net Feasa 布局海事网络 融合公网级通信与智能体 AI 赋能航运
继上次海联达Ai-ap100拆机之电源改造
PowiGaN for AI Data Centers: Unmatched Power Density and Reliability
赋能边缘端对话式人工智能
AI热潮引发多层陶瓷电容MLCC供应短缺
海联达(Aigale)Ai-HD1 无线全高清套件拆解
iCAN-4017 AI功能模块
GPU:面临工作负载转变的高吞吐架构
人工智能是如何帮助阻止造假者的?
AI 驱动估值飙升:光通信半导体企业市值暴涨
AI竞争进入下半场:从“卷参数”到“卷单价”