基于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之玩转字符串(3)
Sep 14 Python
python多线程操作实例
Nov 21 Python
Django框架中方法的访问和查找
Jul 15 Python
Python加密方法小结【md5,base64,sha1】
Jul 13 Python
Python增强赋值和共享引用注意事项小结
May 28 Python
用Python调用win命令行提高工作效率的实例
Aug 14 Python
Kears+Opencv实现简单人脸识别
Aug 28 Python
django框架使用views.py的函数对表进行增删改查内容操作详解【models.py中表的创建、views.py中函数的使用,基于对象的跨表查询】
Dec 12 Python
基于numpy中的expand_dims函数用法
Dec 18 Python
keras model.fit 解决validation_spilt=num 的问题
Jun 19 Python
PyCharm+PyQt5+QtDesigner配置详解
Aug 12 Python
Python的Tqdm模块实现进度条配置
Feb 24 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获得当前的脚本网址
2007/12/10 PHP
php 删除目录下N分钟前创建的所有文件的实现代码
2013/08/10 PHP
显示程序执行时间php函数代码
2013/08/29 PHP
php字符串按照单词进行反转的方法
2015/03/14 PHP
详解WordPress中过滤链接与过滤SQL语句的方法
2015/12/18 PHP
PHP 范围解析操作符(::)用法分析【访问静态成员和类常量】
2020/04/14 PHP
Dom 是什么的详细说明
2010/10/25 Javascript
JS target与currentTarget区别说明
2011/08/28 Javascript
javascript中input中readonly和disabled区别介绍
2012/10/23 Javascript
javascript异步处理工作机制详解
2015/04/13 Javascript
JavaScript几种数组去掉重复值的方法推荐
2016/04/12 Javascript
jQuery简单实现tab选项卡切换效果
2016/06/20 Javascript
jQuery.cookie.js使用方法及相关参数解释
2017/03/06 Javascript
Vue.js教程之axios与网络传输的学习实践
2017/04/29 Javascript
vue 怎么创建组件及组件使用方法
2017/07/27 Javascript
JavaScript实现打印星型金字塔功能实例分析
2017/09/27 Javascript
关闭Vue计算属性自带的缓存功能方法
2018/03/02 Javascript
vue 项目中使用Loading组件的示例代码
2018/08/31 Javascript
[01:05:56]2018DOTA2亚洲邀请赛3月29日 小组赛A组 Newbee VS VG
2018/03/30 DOTA
[52:22]EG vs VG Supermajor小组赛B组 BO3 第一场 6.2
2018/06/03 DOTA
详解Django缓存处理中Vary头部的使用
2015/07/24 Python
Pandas实现数据类型转换的一些小技巧汇总
2018/05/07 Python
python3实现基于用户的协同过滤
2018/05/31 Python
python自动化生成IOS的图标
2018/11/13 Python
举例讲解Python常用模块
2019/03/08 Python
树莓派使用USB摄像头和motion实现监控
2019/06/22 Python
mac使用python识别图形验证码功能
2020/01/10 Python
keras训练曲线,混淆矩阵,CNN层输出可视化实例
2020/06/15 Python
用python实现名片管理系统
2020/06/18 Python
在线购买澳大利亚设计师手拿包和奢华晚装手袋:Olga Berg
2019/03/20 全球购物
英国计算机商店:Technextday
2019/12/28 全球购物
初中女生自我鉴定
2013/12/19 职场文书
《争吵》教学反思
2014/02/15 职场文书
2015年公务员转正工作总结
2015/04/24 职场文书
公务员岗前培训心得体会
2016/01/08 职场文书
Windows10下安装MySQL8
2021/04/06 MySQL