连续数据离散化之等宽法
数据离散化意义
数据离散化是指将连续的数据进行分段,使其变为一段段离散化的区间。分段的原则有基于等距离、等频率或优化的方法。之所以离散化,部分条件是由于后期的模型需要,另外数据也好理解,比如用户年龄离散化,20-30作为一个区间,是青年,30-50作为另一个区间,是中年,这样可以更加直观的表达出数据,青年、中年,方便用户理解。
我们用等宽法(将数据的值域分成具有相同宽度的区间,区间的个数由数据本身的特点决定或者用户指定,与制作频率分布表类似。)来实现数据离散化。pandas 提供了 cut 函数,可以进行连续型数据的等宽离散化,其基础语法格式如下。
知识点:
函数
pandas.cut(x, bins, right=True, labels=None, retbins=False, precision=3, include_lowest=False, duplicates='raise') #0.23.4
参数含义
x
:被切分的类数组(array-like)数据,必须是1维的(不能用DataFrame);bins
:bins是被切割后的区间(或者叫“桶”、“箱”、“面元”),有3中形式:一个int型的标量、标量序列(数组)或者pandas.IntervalIndex 。
right
:bool型参数,默认为True,表示是否包含区间右部。比如如果bins=[1,2,3],right=True,则区间为(1,2],(2,3];right=False,则区间为(1,2),(2,3)。
labels
:给分割后的bins打标签,比如把年龄x分割成年龄段bins后,可以给年龄段打上诸如青年、中年的标签。labels的长度必须和划分后的区间长度相等,比如bins=[1,2,3],划分后有2个区间(1,2],(2,3],则labels的长度必须为2。如果指定labels=False,则返回x中的数据在第几个bin中(从0开始)。retbins
:bool型的参数,表示是否将分割后的bins返回,当bins为一个int型的标量时比较有用,这样可以得到划分后的区间,默认为False。precision
:保留区间小数点的位数,默认为3.include_lowest
:bool型的参数,表示区间的左边是开还是闭的,默认为false,也就是不包含区间左部(闭)。duplicates
:是否允许重复区间。有两种选择:raise
:不允许,drop
:允许。返回值
out
:一个pandas.Categorical, Series或者ndarray类型的值,代表分区后x中的每个值在哪个bin(区间)中,如果指定了labels,则返回对应的label。bins
:分隔后的区间,当指定retbins为True时返回。
我们已pandas的cut函数来实例讲解:

