基于python 等频分箱qcut问题的解决


Posted in Python onMarch 03, 2020

在python 较新的版本中,pandas.qcut()这个函数中是有duplicates这个参数的,它能解决在等频分箱中遇到的重复值过多引起报错的问题;

在比较旧版本的python中,提供一下解决办法:

import pandas as pd
 
def pct_rank_qcut(series, n):
  '''
  series:要分箱的列
  n:箱子数
  '''
  edages = pd.series([i/n for i in range(n)] # 转换成百分比
  func = lambda x: (edages >= x).argmax() #函数:(edages >= x)返回fasle/true列表中第一次出现true的索引值
  return series.rank(pct=1).astype(float).apply(func) #series.rank(pct=1)每个值对应的百分位数,最终返回对应的组数;rank()函数传入的数据类型若为object,结果会有问题,因此进行了astype

补充拓展:Python数据离散化:等宽及等频

在处理数据时,我们往往需要将连续性变量进行离散化,最常用的方式便是等宽离散化,等频离散化,在此处我们讨论离散化的概念,只给出在python中的实现以供参考

1. 等宽离散化

使用pandas中的cut()函数进行划分

import numpy as np
import pandas as pd
 
# Discretization: Equal Width #
# Datas: Sample * Feature
def Discretization_EqualWidth(K, Datas, FeatureNumber):
  DisDatas = np.zeros_like(Datas)
  for i in range(FeatureNumber):
    DisOneFeature = pd.cut(Datas[:, i], K, labels=range(1, K+1))
    DisDatas[:, i] = DisOneFeature
  return DisDatas

2. 等频离散化

pandas中有qcut()可以使用,但是边界易出现重复值,如果为了删除重复值设置 duplicates=‘drop',则易出现于分片个数少于指定个数的问题,因此在此处不使用qcut()

import numpy as np
import pandas as pd
 
# Discretization: Equal Frequency #
# vector: single feature
def Rank_qcut(vector, K):
  quantile = np.array([float(i) / K for i in range(K + 1)]) # Quantile: K+1 values
  funBounder = lambda x: (quantile >= x).argmax()
  return vector.rank(pct=True).apply(funBounder)
 
# Discretization: Equal Frequency #
# Datas: Sample * Feature
def Discretization_EqualFrequency(K, Datas, FeatureNumber):
  DisDatas = np.zeros_like(Datas)
  w = [float(i) / K for i in range(K + 1)]
  for i in range(FeatureNumber):
    DisOneFeature = Rank_qcut(pd.Series(Datas[:, i]), K)
    #print(DisOneFeature)
    DisDatas[:, i] = DisOneFeature
  return DisDatas

以上这篇基于python 等频分箱qcut问题的解决就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持三水点靠木。

Python 相关文章推荐
pycharm 使用心得(四)显示行号
Jun 05 Python
python中from module import * 的一个坑
Jul 20 Python
跟老齐学Python之模块的加载
Oct 24 Python
python中字典(Dictionary)用法实例详解
May 30 Python
centos6.4下python3.6.1安装教程
Jul 21 Python
用Python从0开始实现一个中文拼音输入法的思路详解
Jul 20 Python
python 实现绘制整齐的表格
Nov 18 Python
python绘制无向图度分布曲线示例
Nov 22 Python
jupyter notebook运行命令显示[*](解决办法)
May 18 Python
如何用Python 实现全连接神经网络(Multi-layer Perceptron)
Oct 15 Python
Python爬虫入门案例之回车桌面壁纸网美女图片采集
Oct 16 Python
Python jiaba库的使用详解
Nov 23 Python
python实现快递价格查询系统
Mar 03 #Python
使用python 计算百分位数实现数据分箱代码
Mar 03 #Python
利用Python计算KS的实例详解
Mar 03 #Python
python如何提取英语pdf内容并翻译
Mar 03 #Python
Pycharm如何运行.py文件的方法步骤
Mar 03 #Python
python生成大写32位uuid代码
Mar 03 #Python
python str字符串转uuid实例
Mar 03 #Python
You might like
php使用array_search函数实现数组查找的方法
2015/06/12 PHP
yii2框架中使用下拉菜单的自动搜索yii-widget-select2实例分析
2016/01/09 PHP
深入讲解PHP的对象注入(Object Injection)
2017/03/01 PHP
PHP+MySQL高并发加锁事务处理问题解决方法
2018/04/30 PHP
php的命名空间与自动加载实现方法
2019/08/25 PHP
Laravel使用Queue队列的技巧汇总
2019/09/02 PHP
AJAX 网页保留浏览器前进后退等功能
2011/02/12 Javascript
JavaScript闭包 懂不懂由你反正我是懂了
2011/10/21 Javascript
现如今最流行的JavaScript代码规范
2014/03/08 Javascript
js中数组排序sort方法的原理分析
2014/11/20 Javascript
详解jQuery中的empty、remove和detach
2016/04/11 Javascript
微信小程序 Page()函数详解
2016/10/17 Javascript
JavaScript实现窗口抖动效果
2016/10/19 Javascript
微信小程序  wx.request合法域名配置详解
2016/11/23 Javascript
详解Node中导入模块require和import的区别
2017/08/11 Javascript
Javascript实现购物车功能的详细代码
2018/05/08 Javascript
Vue注册组件命名时不能用大写的原因浅析
2019/04/25 Javascript
layui 实现加载动画以及非真实加载进度的方法
2019/09/23 Javascript
vue用elementui写form表单时,在label里添加空格操作
2020/08/13 Javascript
[05:13]TI4 中国战队 机场出征!!
2014/07/07 DOTA
Python中实现变量赋值传递时的引用和拷贝方法
2018/04/29 Python
django中url映射规则和服务端响应顺序的实现
2020/04/02 Python
css3 box-sizing属性使用参考指南
2013/01/08 HTML / CSS
利用Node实现HTML5离线存储的方法
2020/10/16 HTML / CSS
草莓网化妆品日本站:Strawberrynet日本
2017/10/20 全球购物
西班牙三叶草药房:Farmacias Trébol
2019/05/03 全球购物
Right-on官方网站:日本知名的休闲服装品牌
2019/07/12 全球购物
总经理岗位职责描述
2014/02/08 职场文书
党员干部四风问题整改措施思想汇报
2014/10/12 职场文书
房屋出售授权委托书
2014/10/12 职场文书
2014年学生会工作总结
2014/11/07 职场文书
迎新晚会主持词开场白
2015/05/28 职场文书
MySQL主从复制断开的常用修复方法
2021/04/07 MySQL
Python实现生成bmp图像的方法
2021/06/13 Python
Nginx性能优化之Gzip压缩设置详解(最大程度提高页面打开速度)
2022/02/12 Servers
Python编写车票订购系统 Python实现快递收费系统
2022/08/14 Python