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(结果)) # 从输出结果可以看到每个箱子中的数据量时相同的

       

  • 相关阅读:
    CentOS查看CPU信息、位数、多核信息
    Linux常用命令大全
    chmod命令详细用法
    tar命令的详细解释
    yum和rpm命令详解
    LeetCode 241. Different Ways to Add Parentheses
    LeetCode 139. Word Break
    LeetCode 201. Bitwise AND of Numbers Range
    LeetCode 486. Predict the Winner
    LeetCode 17. Letter Combinations of a Phone Number
  • 原文地址:https://www.cnblogs.com/yifanrensheng/p/14659814.html
Copyright © 2011-2022 走看看