什么是分箱?

简单点说就是将不同的东西,按照特定的条件放到一个指定容器里,比如水果 把绿色的放一个篮子里,红色一个篮子等等,这个篮子就是箱,而水果就是数据 颜色就是条件

什么样式的数据要进行分箱

数据主要分为连续变量和分类变量,分箱的操作主要针对于连续变量。

为什么要对数据进行分箱操作

稳定性,时间复杂度,看的舒服,提高准确度 等等

分箱分为 有监督和无监督

先说有监督,意思就是 个人确定范围区间

  例如,给了一堆年龄数据,你现在自己要把年龄分为[0-20,20-40,40-60-60-80,80-1000000]

这个是根据你个人意愿来划分区间

python 中主要使用cut方法

pandas.cut:

pandas.cut(x, bins, right=True, labels=None, retbins=False, precision=3, include_lowest=False)

参数:

x,类array对象,且必须为一维,待切割的原形式
bins, 整数、序列尺度、或间隔索引。如果bins是一个整数,它定义了x宽度范围内的等宽面元数量,但是在这种情况下,x的范围在每个边上被延长1%,以保证包括x的最小值或最大值。如果bin是序列,它定义了允许非均匀in宽度的bin边缘。在这种情况下没有x的范围的扩展。
right,布尔值。是否是左开右闭区间
labels,用作结果箱的标签。必须与结果箱相同长度。如果FALSE,只返回整数指标面元。
retbins,布尔值。是否返回面元
precision,整数。返回面元的小数点几位
include_lowest,布尔值。第一个区间的左端点是否包含
t/cc_jjj/article/details/78878878
import pandas as pd

ages = [20, 22, 25, 27, 21, 23, 37, 31, 61, 45, 41, 32]
# 有一组人员年龄数据,希望将这些数据划分为“18到25”,“26到35”,“36到60”,“60以上”几个面元
bins = [18, 25, 35, 60, 100]
# 返回的是一个特殊的Categorical对象 → 一组表示面元名称的字符串

cats = pd.cut(ages, bins)
print(cats)
group_names = ['Youth', 'YoungAdult', 'MiddleAged', 'Senior']###打上标签
cats1 = pd.cut(ages, bins, labels=group_names)
print(cats1)
aa = pd.value_counts(cats)  # 按照区间计数
print(aa)

下面介绍下让代码自己划分组 -无监督 使用的是qcut方法

data = np.random.randn(1000)
s = pd.Series(data)
cats = pd.qcut(s, 4)  # 按四分位数进行切割
a = pd.value_counts(cats)
print(a)

qcut() 方法第一个参数是数据,第二个参数定义区间的分割方法,比如上面 将数据按四分位数进行分割,你也可以按照自己比例进行分割例如[0, 0.5, 1] 相遇55分,四分位还可学成这样 [0, 0.25, 0.5, 0.75, 1] ,也可以不是均分,比如 [0, 0.1, 0.2, 0.3, 1] ,这就就会按照 1:1:1:7 进行分布

上面这两种是简单的使用内置函数进行分箱。

下面介绍CART算法-最优分箱法

Logo

权威|前沿|技术|干货|国内首个API全生命周期开发者社区

更多推荐