zoukankan      html  css  js  c++  java
  • 【Pandas-10】离散化和分箱

       

    在机械学习中,我们经常会对数据进行分箱处理的操作, 也就是 把一段连续的值切分成若干段,每一段的值看成一个分类。这个把连续值转换成离散值的过程,我们叫做分箱处理。

    比如,把年龄按15岁划分成一组,0-15岁叫做少年,16-30岁叫做青年,31-45岁叫做壮年。在这个过程中,我们把连续的年龄分成了三个类别,"少年","青年"和"壮年"就是各个类别的名称,或者叫做标签。

    cut和qcut函数的基本介绍

    在pandas中,cut和qcut函数都可以进行分箱处理操作。其中cut函数是按照数据的值进行分割,而qcut函数则是根据数据本身的数量来对数据进行分割。

    一、pandas.cut

    1 函数介绍

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

    参数:

    1. x,类array对象,且必须为一维,待切割的原形式

    2. bins, 整数、序列尺度、或间隔索引。如果bins是一个整数,它定义了x宽度范围内的等宽面元数量,但是在这种情况下,x的范围在每个边上被延长1%,以保证包括x的最小值或最大值。如果bin是序列,它定义了允许非均匀bin宽度的bin边缘。在这种情况下没有x的范围的扩展。

    3. right,布尔值。是否是左开右闭区间

    4. labels,用作结果箱的标签。必须与结果箱相同长度。如果FALSE,只返回整数指标面元。

    5. retbins,布尔值。是否返回面元

    6. precision,整数。返回面元的小数点几位

    7. include_lowest,布尔值。第一个区间的左端点是否包含

    返回值:

    若labels为False则返回整数填充的Categorical或数组或Series

    若retbins为True还返回用浮点数填充的N维数组

    2 实例

    import pandas as pd

    年份 = [1992, 1983, 1922, 1932, 1973] # 待分箱数据

    箱子 = [1900, 1950, 2000] # 指定箱子的分界点

    结果 = pd.cut(年份, 箱子)

    print(结果)

    # 结果说明:其中(1950, 2000]说明【年份】列表的第一个值1992位于(1950, 2000]区间

       

    print(pd.value_counts(结果)) # 对不同箱子中的数进行计数

       

    # labels参数为False时,返回结果中用不同的整数作为箱子的指示符

    结果2 = pd.cut(年份, 箱子,labels=False)

    # 输出结果中的数字对应着不同的箱子

    print(结果2)

    # 结果说明:其中 1 说明【年份】列表的第一个值1992位于(1950, 2000]区间

    # 其中 0 说明【年份】列表的第一个值1922位于(1900, 1950]区间

       

    print(pd.value_counts(result2)) # 对不同箱子中的数进行计数

       

    import pandas as pd

    年份 = [1992, 1983, 1922, 1932, 1973] # 待分箱数据

    箱子 = [1900, 1950, 2000] # 指定箱子的分界点

    # 可以将想要指定给不同箱子的标签传递给labels参数

    箱子名称 = [ '50年代前', '50年代后']

    结果3 = pd.cut(年份, 箱子, labels=箱子名称)

    print(pd.value_counts(结果3))

    二、pandas.qcut

    1 理论

    pandas.qcut 和上面基本相同,只是q分箱需要自己设置。可以指定箱子的数量对连续数据进行等宽分箱处理(注意:所谓等宽指的是每个箱子中的数据量是相同的)

    pandas.qcut(x, q, labels=None, retbins=False, precision=3, duplicates='raise')

    2 实例

    import pandas as pd

    年份 = [1992, 1983, 1922, 1932, 1973, 1999, 1993, 1995] # 待分箱数据

    结果 = pd.qcut(年份,q=4) # 参数q指定所分箱子的数量

    # 从输出结果可以看到每个箱子中的数据量时相同的

    print(结果)

    print(pd.value_counts(结果)) # 从输出结果可以看到每个箱子中的数据量时相同的

       

  • 相关阅读:
    UIImagePickerController从拍照、图库、相册获取图片
    swift2.0 UIImagePickerController 拍照 相册 录像
    UIImagePickerController拍照与摄像
    iOS 从相机或相册获取图片并裁剪
    Android播放音频的两种方式
    UICollectionView的基本使用
    UIImageView圆角,自适应图片宽高比例,图片拉伸,缩放比例和图片缩微图
    UIView属性clipsTobounds的应用
    iOS开发UI篇—CALayer简介
    chrome插件演示,经js转让chrome api清除浏览器缓存
  • 原文地址:https://www.cnblogs.com/yifanrensheng/p/14659814.html
Copyright © 2011-2022 走看看