基于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中使用PIL模块处理图像的教程
Apr 29 Python
Python文件夹与文件的相关操作(推荐)
Jul 25 Python
python3读取MySQL-Front的MYSQL密码
May 03 Python
在Python中使用AOP实现Redis缓存示例
Jul 11 Python
python去重,一个由dict组成的list的去重示例
Jan 21 Python
Python中一个for循环循环多个变量的示例
Jul 16 Python
简单了解python 生成器 列表推导式 生成器表达式
Aug 22 Python
python实现把两个二维array叠加成三维array示例
Nov 29 Python
python+OpenCV实现图像拼接
Mar 05 Python
python 已知三条边求三角形的角度案例
Apr 12 Python
解决Tkinter中button按钮未按却主动执行command函数的问题
May 23 Python
Python爬虫 简单介绍一下Xpath及使用
Apr 26 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一些服务器端特性的配置加强php的安全
2006/10/09 PHP
dedecms系统常用术语汇总
2007/04/03 PHP
用php将任何格式视频转为flv的代码
2009/09/03 PHP
PHP stream_context_create()作用和用法分析
2011/03/29 PHP
thinkphp验证码显示不出来的解决方法
2014/03/29 PHP
laravel5.4生成验证码的实例讲解
2017/08/05 PHP
PHP面向对象多态性实现方法简单示例
2017/09/27 PHP
js jquery分别实现动态的文件上传操作按钮的添加和删除
2014/01/13 Javascript
2014 HTML5/CSS3热门动画特效TOP10
2014/12/07 Javascript
js实现浏览器窗口大小被改变时触发事件的方法
2015/02/02 Javascript
Bootstrap学习笔记之css样式设计(1)
2016/06/07 Javascript
第一次接触神奇的前端框架vue.js
2016/12/01 Javascript
利用VUE框架,实现列表分页功能示例代码
2017/01/12 Javascript
完美解决浏览器跨域的几种方法(汇总)
2017/05/08 Javascript
Node.js中sequelize时区的配置方法
2017/12/10 Javascript
javascript用rem来做响应式开发
2018/01/13 Javascript
p5.js绘制创意自画像
2019/11/04 Javascript
[02:36]DOTA2英雄基础教程 一击致命幻影刺客
2013/12/06 DOTA
python快速查找算法应用实例
2014/09/26 Python
Python脚本文件打包成可执行文件的方法
2015/06/02 Python
pycharm使用matplotlib.pyplot不显示图形的解决方法
2018/10/28 Python
python3 写一个WAV音频文件播放器的代码
2019/09/27 Python
python SVD压缩图像的实现代码
2019/11/05 Python
对Tensorflow中tensorboard日志的生成与显示详解
2020/02/04 Python
django处理select下拉表单实例(从model到前端到post到form)
2020/03/13 Python
使用py-spy解决scrapy卡死的问题方法
2020/09/29 Python
Yankee Candle官网:美国最畅销蜡烛品牌之一
2020/01/05 全球购物
行政部主管岗位职责
2013/12/28 职场文书
小学亲子活动总结
2014/07/01 职场文书
公司户外活动总结
2014/07/04 职场文书
环境日宣传活动总结
2014/07/09 职场文书
2014年质量管理工作总结
2014/12/01 职场文书
业务员岗位职责范本
2015/04/03 职场文书
2015年机关纠风工作总结
2015/05/15 职场文书
红色故事汇观后感
2015/06/18 职场文书
Go Plugins插件的实现方式
2021/08/07 Golang