项目github地址:bitcarmanlee easy-algorithm-interview-and-practice
欢迎大家star,留言,一起学习进步

1.分箱

数据分箱的需求在实际中非常常见。对于一组连续的值,会对其切分成若干段,每一段我们将其看做一个类别,这个过程就叫做分箱。分箱操作本质上就是将连续值离散化的一个过程。

举个常见的例子:
最常见的就是对年龄进行分箱操作。假设人的年龄从0-120岁不等,我们将0-5认为是婴幼儿,6-15岁认为是少年,16-30岁认为是青年,31-50认为是中年,50-60认为是中老年,60岁以上认为是老年。在这个过程中,就将连续的年龄分为了婴幼儿、少年、青年、中年、中老年、老年这六个类别,或者说分成了六个“箱子”,每个"箱子"代表的就是一个类别。

2.cut方法

pandas里面有cut方法与qcut方法都可以实现分箱的需求,下面我们先来看看cut方法。

def t1():scores = [80, 55, 78, 99, 60, 35, 82, 57]cut = pd.cut(scores, 3)print(cut)

上面的方法,将scores分成三个区间,最后的结果为

[(77.667, 99.0], (34.936, 56.333], (77.667, 99.0], (77.667, 99.0], (56.333, 77.667], (34.936, 56.333], (77.667, 99.0], (56.333, 77.667]]
Categories (3, interval[float64]): [(34.936, 56.333] < (56.333, 77.667] < (77.667, 99.0]]

输出的第一行表示原来的数据位于哪个箱子,第二行表示三个箱子的相关信息。

def t2():scores = [80, 55, 78, 99, 60, 35, 82, 57]bins = [0, 60, 80, 100]cut = pd.cut(scores, bins)print(cut)print(cut.codes)print(cut.categories)print(pd.value_counts(cut))

输出结果为

[(60, 80], (0, 60], (60, 80], (80, 100], (0, 60], (0, 60], (80, 100], (0, 60]]
Categories (3, interval[int64]): [(0, 60] < (60, 80] < (80, 100]]
[1 0 1 2 0 0 2 0]
IntervalIndex([(0, 60], (60, 80], (80, 100]],closed='right',dtype='interval[int64]')
(0, 60]      4
(80, 100]    2
(60, 80]     2
dtype: int64

上面的方法,指定了划分的bins,所以分箱的时候区间为(0, 60), (60, 80), (80, 100)。
value_counts方法,可以统计各区间的数量。

def t3():scores = [80, 55, 78, 99, 60, 35, 82, 57]bins = [0, 60, 80, 100]cut = pd.cut(scores, bins, labels=["low", "mid", "high"])print(pd.value_counts(cut))print()cut2 = pd.cut(scores, bins, labels=["low", "mid", "high"], right=False)print(pd.value_counts(cut2))
low     4
high    2
mid     2
dtype: int64high    3
low     3
mid     2
dtype: int64

上面的方法,指定了labels参数,这样每个分箱区间相当于有了标签名称。
如果指定right=False,则右区间由默认的闭区间变成开区间。

3.qcut方法

def t4():scores = [x**2 for x in range(11)]cut = pd.qcut(scores, 5)print(cut)print()print(pd.value_counts(cut))
[(-0.001, 4.0], (-0.001, 4.0], (-0.001, 4.0], (4.0, 16.0], (4.0, 16.0], ..., (16.0, 36.0], (36.0, 64.0], (36.0, 64.0], (64.0, 100.0], (64.0, 100.0]]
Length: 11
Categories (5, interval[float64]): [(-0.001, 4.0] < (4.0, 16.0] < (16.0, 36.0] < (36.0, 64.0] <(64.0, 100.0]](-0.001, 4.0]    3
(64.0, 100.0]    2
(36.0, 64.0]     2
(16.0, 36.0]     2
(4.0, 16.0]      2
dtype: int64

与cut方法不同的是,cut是按变量的值进行划分, qcut是按照变量的个数进行划分。上面方法的意思是,将输入分为数量相等的五个分箱区间。

pandas cut qcut 分箱算法详解相关推荐

  1. python 卡方分箱算法_特征工程 - 分箱

    卡方分箱 python自帶分箱函數  --  無法實現對分類型數據的分箱,可借助卡方分箱算法實現 import numpy as np import pandas as pd data = np.ra ...

  2. 基础排序算法详解与优化

    文章图片存储在GitHub,网速不佳的朋友,请看<基础排序算法详解与优化> 或者 来我的技术小站 godbmw.com 1. 谈谈基础排序 常见的基础排序有选择排序.冒泡排序和插入排序.众 ...

  3. 【目标检测】Faster RCNN算法详解

    转载自:http://blog.csdn.net/shenxiaolu1984/article/details/51152614 Ren, Shaoqing, et al. "Faster ...

  4. 操作系统之银行家算法—详解流程及案例数据

    操作系统之进程调度--优先权法和轮转法(附上样例讲解) 操作系统之银行家算法-详解流程及案例数据 操作系统之多线程编程-读者优先/写者优先详解 操作系统之存储管理--FIFO算法和LRU算法 操作系统 ...

  5. Faster RCNN算法详解

    Ren, Shaoqing, et al. "Faster R-CNN: Towards real-time object detection with region proposal ne ...

  6. JVM之垃圾收集机制四种GC算法详解

    JVM之四种GC算法详解 目录: 什么是GC? GC算法之引用计数法 GC算法之复制算法(Copying) GC算法之标记清除(Mark-Sweep) GC算法之标记压缩(Mark-Compact) ...

  7. c4.5算法 程序语言,决策树之C4.5算法详解-Go语言中文社区

    决策树之C4.5算法详解 主要内容 C4.5算法简介 分裂属性的选择--信息增益率 连续型属性的离散化处理 剪枝--PEP(Pessimistic Error Pruning)剪枝法 缺失属性值的处理 ...

  8. AdBoost算法详解

    AdBoost算法详解 1 算法简介 1.2AdaBoost特点 1.3Bagging与AdaBoost区别 2AdaBoost算法步骤 3 AdaBoost的数学定义 4 推广到多分类 算法引入: ...

  9. python 卡方分箱算法_python实现二分类的卡方分箱示例

    解决的问题: 1.实现了二分类的卡方分箱: 2.实现了最大分组限定停止条件,和最小阈值限定停止条件: 问题,还不太清楚,后续补充. 1.自由度k,如何来确定,卡方阈值的自由度为 分箱数-1,显著性水平 ...

  10. 聚类 python_python中实现k-means聚类算法详解

    算法优缺点: 优点:容易实现 缺点:可能收敛到局部最小值,在大规模数据集上收敛较慢 使用数据类型:数值型数据 算法思想 k-means算法实际上就是通过计算不同样本间的距离来判断他们的相近关系的,相近 ...

最新文章

  1. Python Django 多表设计OneToOneField/ManyToManyField/ForeignKey
  2. 漫画算法:最小栈的实现
  3. web容器(02):tomcat配置监控
  4. swift for循环_Swift | 实战一个简单的素数计算器demo
  5. codeforces Round #320 (Div. 2) C. A Problem about Polyline(数学) D. Or Game(暴力,数学)
  6. 《大数据》致谢审稿专家
  7. Python实战从入门到精通第二十一讲——构建一个模块的层级包
  8. oracle用户被锁
  9. 三向合并和 Git 的合并策略,手把手教你Git 合并
  10. 防计算机病毒的重点,计算机病毒防范技术重点措施(1).doc
  11. 设计模式学习之—我是一个粉刷匠(装饰模式)
  12. C语言排序算法之“选择排序法”
  13. 字节跳动2018校招前端面试题
  14. Android JNI --函数调用大全
  15. 如何用python计算函数的值域_(完整版)求函数定义域及值域方法及典型题归纳
  16. 搭建vue前端脚手架
  17. 计算机考研复试之数据结构
  18. 设置打印html页面大小,A4纸网页打印 html网页页面的宽度设置成多少
  19. rd630服务器raid修复,联想服务器rd630做raid5系统.pdf
  20. Java代码规范与质量检测插件SonarLint

热门文章

  1. Java之Windows下环境搭建配置
  2. Confluence 6 附件存储提取文本文件
  3. XAML实例教程系列 - 标记扩展(Markup Extensions)
  4. 打造linux回收站功能
  5. ado.net 实体类_数据访问类
  6. [转载]github在线更改mysql表结构工具gh-ost
  7. u-boot环境的擦除,默认设置,批写入
  8. idea中有些类明明在jar包里有,但是却搜不到
  9. WEB前端 盒子模型稳定性
  10. ExecutorService的四种线程池