基于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 相关文章推荐
Python中断言Assertion的一些改进方案
Oct 27 Python
python生成随机图形验证码详解
Nov 08 Python
Python及PyCharm下载与安装教程
Nov 18 Python
Linux系统(CentOS)下python2.7.10安装
Sep 26 Python
python+unittest+requests实现接口自动化的方法
Nov 29 Python
Python使用sqlalchemy模块连接数据库操作示例
Mar 13 Python
python实现AES加密解密
Mar 28 Python
opencv导入头文件时报错#include的解决方法
Jul 31 Python
Python实现使用dir获取类的方法列表
Dec 24 Python
django rest framework 过滤时间操作
Jul 12 Python
python四个坐标点对图片区域最小外接矩形进行裁剪
Jun 04 Python
python实现简单的三子棋游戏
Apr 28 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根据日期判断星座的函数分享
2014/02/13 PHP
Dwz与thinkphp整合下的数据导出到Excel实例
2014/12/04 PHP
Zend Framework教程之Zend_Db_Table_Row用法实例分析
2016/03/21 PHP
PHP时间戳和日期相互转换操作实例小结
2018/12/18 PHP
PHP连接SQL Server的方法分析【基于thinkPHP5.1框架】
2019/05/06 PHP
laravel利用中间件做防非法登录和权限控制示例
2019/10/21 PHP
extjs之去除s.gif的影响
2010/12/25 Javascript
javascript 学习笔记(八)javascript对象
2011/04/12 Javascript
JS自定义功能函数实现动态添加网址参数修改网址参数值
2013/08/02 Javascript
JavaScript/Js脚本处理html元素的自定义属性解析(亲测兼容Firefox与IE)
2013/11/25 Javascript
基于jquery实现的可编辑下拉框实现代码
2014/08/02 Javascript
nodejs中简单实现Javascript Promise机制的实例
2014/12/06 NodeJs
jQuery控制网页打印指定区域的方法
2015/04/07 Javascript
JS中的Replace()传入函数时的用法详解
2017/09/11 Javascript
详解在React里使用"Vuex"
2018/04/02 Javascript
Python学习资料
2007/02/08 Python
Django中使用locals()函数的技巧
2015/07/16 Python
用python处理图片之打开\显示\保存图像的方法
2018/05/04 Python
详解Python的数据库操作(pymysql)
2019/04/04 Python
python 画3维轨迹图并进行比较的实例
2019/12/06 Python
Django模型中字段属性choice使用说明
2020/03/30 Python
德国玩具商店:Planet Happy DE
2021/01/16 全球购物
历史专业毕业生的自我鉴定
2013/11/15 职场文书
经贸日语专业个人求职信
2013/12/13 职场文书
大一军训感言
2014/01/09 职场文书
模特职业生涯规划范文
2014/02/26 职场文书
基层干部2014全国两会学习心得体会
2014/03/10 职场文书
总经理助理的职责
2014/03/14 职场文书
机械工程及自动化专业求职信
2014/09/03 职场文书
建设幸福中国演讲稿
2014/09/11 职场文书
2014年四风问题自我剖析材料
2014/09/15 职场文书
2015年员工试用期工作总结
2015/05/28 职场文书
大学军训口号大全
2015/12/24 职场文书
银行服务理念口号
2015/12/25 职场文书
2019自荐信该如何写呢?
2019/07/05 职场文书
python神经网络 tf.name_scope 和 tf.variable_scope 的区别
2022/05/04 Python