基于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中with语句的用法
Apr 15 Python
python冒泡排序简单实现方法
Jul 09 Python
Python3.6正式版新特性预览
Dec 15 Python
python生成式的send()方法(详解)
May 08 Python
使用python绘制3维正态分布图的方法
Dec 29 Python
Python中使用遍历在列表中添加字典遇到的坑
Feb 27 Python
简单易懂Pytorch实战实例VGG深度网络
Aug 27 Python
python实现五子棋游戏(pygame版)
Jan 19 Python
Python Request类源码实现方法及原理解析
Aug 17 Python
python代码实现备忘录案例讲解
Jul 26 Python
python脚本框架webpy模板赋值实现
Nov 20 Python
Python中非常使用的6种基本变量的操作与技巧
Mar 22 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脚本的10个技巧(1)
2006/10/09 PHP
PHP开发中常用的8个小技巧
2008/08/27 PHP
php+xml实现在线英文词典之添加词条的方法
2015/01/23 PHP
php实现对象克隆的方法
2015/06/20 PHP
php lcg_value与mt_rand生成0~1随机小数的效果对比分析
2017/04/05 PHP
jquery remove方法应用详解
2012/11/22 Javascript
js multiple全选与取消全选实现代码
2012/12/04 Javascript
document.execCommand()的用法小结
2014/01/08 Javascript
jquery调整表格行tr上下顺序实例讲解
2016/01/09 Javascript
JavaScript交换两个变量值的七种解决方案
2016/12/01 Javascript
nodejs+websocket实时聊天系统改进版
2017/05/18 NodeJs
Angular.js中$resource高大上的数据交互详解
2017/07/30 Javascript
为什么使用koa2搭建微信第三方公众平台的原因
2018/05/16 Javascript
详解如何在webpack中做预渲染降低首屏空白时间
2018/08/22 Javascript
Angular8路由守卫原理和使用方法
2019/08/29 Javascript
小程序卡片切换效果组件wxCardSwiper的实现
2020/02/13 Javascript
[03:36]2014DOTA2 TI小组赛综述 八强诞生进军钥匙球馆
2014/07/15 DOTA
[03:26]《DAC最前线》之EG经理自述DOTA2经历
2015/02/02 DOTA
python连接mysql并提交mysql事务示例
2014/03/05 Python
详解Python中的strftime()方法的使用
2015/05/22 Python
利用Python爬虫给孩子起个好名字
2017/02/14 Python
python使用KNN算法手写体识别
2018/02/01 Python
python实现读取大文件并逐行写入另外一个文件
2018/04/19 Python
简单瞅瞅Python vars()内置函数的实现
2019/09/27 Python
Python:type、object、class与内置类型实例
2019/12/25 Python
大数据分析用java还是Python
2020/07/06 Python
html5指南-1.html5全局属性(html5 global attributes)深入理解
2013/01/07 HTML / CSS
加拿大户外探险购物网站:SAIL
2020/06/27 全球购物
春节联欢会主持词
2014/03/24 职场文书
最新优秀教师个人先进事迹材料
2014/05/06 职场文书
优秀求职信
2014/05/29 职场文书
预备党员考察表党小组意见
2015/06/01 职场文书
旅游安全责任协议书
2016/03/22 职场文书
Python实现简繁体转换
2021/06/07 Python
Java实现学生管理系统(IO版)
2022/02/24 Java/Android
利用Python将list列表写入文件并读取的方法汇总
2022/03/25 Python