基于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 获取进程pid号的方法
Mar 10 Python
python调用Moxa PCOMM Lite通过串口Ymodem协议实现发送文件
Aug 15 Python
Python实现二叉堆
Feb 03 Python
基于python3 OpenCV3实现静态图片人脸识别
May 25 Python
python微信公众号之关注公众号自动回复
Oct 25 Python
python+opencv实现高斯平滑滤波
Jul 21 Python
python读取各种文件数据方法解析
Dec 29 Python
Python基于BeautifulSoup和requests实现的爬虫功能示例
Aug 02 Python
python实现跨excel sheet复制代码实例
Mar 03 Python
Python selenium爬取微博数据代码实例
May 22 Python
Python爬取网页信息的示例
Sep 24 Python
分享PyCharm最新激活码(真永久激活方法)不用每月找安装参数或最新激活码了
Dec 27 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
追忆往昔!浅谈收音机的百年发展历史
2021/03/01 无线电
php实现表单提交上传文件功能
2018/05/28 PHP
对xmlHttp对象方法和属性的理解
2011/01/17 Javascript
intro.js 页面引导简单用法 分享
2013/08/06 Javascript
JS复制内容到剪切板的实例代码(兼容IE与火狐)
2013/11/19 Javascript
JS组件中bootstrap multiselect两大组件较量
2016/01/26 Javascript
localStorage实现便签小程序
2016/11/28 Javascript
jsonp跨域请求详解
2017/07/13 Javascript
Vue 2.0学习笔记之Vue中的computed属性
2017/10/16 Javascript
Vue press 支持图片放大功能的实例代码
2018/11/09 Javascript
详解如何在Node.js的httpServer中接收前端发送的arraybuffer数据
2018/11/11 Javascript
Javascript中的奇葩知识,你知道吗?
2021/01/25 Javascript
[04:19]DOTA2亚洲邀请赛 现场花絮
2015/03/11 DOTA
Python 2与Python 3版本和编码的对比
2017/02/14 Python
python绘制直线的方法
2018/06/30 Python
解决Django生产环境无法加载静态文件问题的解决
2019/04/23 Python
CSS3实现滚动条动画效果代码分享
2016/08/03 HTML / CSS
HTML5拖拽的简单实例
2016/05/30 HTML / CSS
利用canvas实现图片压缩的示例代码
2018/07/17 HTML / CSS
HTML5 video循环播放多个视频的方法步骤
2020/08/06 HTML / CSS
统计学专业毕业生的自我评价分享
2013/11/28 职场文书
大学校园活动策划书
2014/02/04 职场文书
小学生个人先进事迹材料
2014/05/08 职场文书
大学学雷锋活动总结
2014/06/26 职场文书
授权委托书(完整版)
2014/09/10 职场文书
离婚协议书标准格式
2014/10/04 职场文书
美国旅游签证工作证明
2014/10/14 职场文书
一年级数学下册复习计划
2015/01/17 职场文书
2015年行风建设工作总结
2015/05/15 职场文书
公司的力量观后感
2015/06/05 职场文书
运动会广播稿50字
2015/08/19 职场文书
解析laravel使用workerman用户交互、服务器交互
2021/04/28 PHP
JavaScript canvas实现流星特效
2021/05/20 Javascript
MySQL数据库完全卸载的方法
2022/03/03 MySQL
Python万能模板案例之matplotlib绘制直方图的基本配置
2022/04/13 Python
详解ZABBIX监控ESXI主机的问题
2022/06/21 Servers