基于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中from module import * 的一个坑
Jul 20 Python
基于Python实现的百度贴吧网络爬虫实例
Apr 17 Python
在Python中使用zlib模块进行数据压缩的教程
Jun 26 Python
Python的Tornado框架实现图片上传及图片大小修改功能
Jun 30 Python
Python基于生成器迭代实现的八皇后问题示例
May 23 Python
Python使用pandas处理CSV文件的实例讲解
Jun 22 Python
解决python中导入win32com.client出错的问题
Jul 26 Python
python序列化与数据持久化实例详解
Dec 20 Python
简单了解pytest测试框架setup和tearDown
Apr 14 Python
Python判断远程服务器上Excel文件是否被人打开的方法
Jul 13 Python
python中绕过反爬虫的方法总结
Nov 25 Python
django中ImageField的使用详解
Dec 21 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微信开发之模板消息回复
2016/06/24 PHP
PHP实现的AES双向加密解密功能示例【128位】
2018/09/03 PHP
[原创]提供复制本站内容时出现,该文章转自脚本之家等字样的js代码
2007/03/27 Javascript
完整显示当前日期和时间的JS代码
2007/09/17 Javascript
javascript 四则运算精度修正函数代码
2010/05/31 Javascript
jQuery 选择表格(table)里的行和列及改变简单样式
2012/12/15 Javascript
node.js中的fs.readlinkSync方法使用说明
2014/12/17 Javascript
javascript面向对象之对象的深入理解
2015/01/13 Javascript
JQuery CheckBox(复选框)操作方法汇总
2015/04/15 Javascript
原生js仿jquery animate动画效果
2016/07/13 Javascript
JS实现鼠标滑过显示边框的菜单效果
2016/09/21 Javascript
JS常见简单正则表达式验证功能小结【手机,地址,企业税号,金额,身份证等】
2017/01/22 Javascript
vue2.0结合DataTable插件实现表格动态刷新的方法详解
2017/03/17 Javascript
Javascript中从学习bind到实现bind的过程
2018/01/05 Javascript
基于vue,vue-router, vuex及addRoutes进行权限控制问题
2018/05/02 Javascript
vue组件之间的数据传递方法详解
2019/04/19 Javascript
Element-ui DatePicker显示周数的方法示例
2019/07/19 Javascript
layui实现三级联动效果
2019/07/26 Javascript
node爬取新型冠状病毒的疫情实时动态
2020/02/06 Javascript
node.js中对Event Loop事件循环的理解与应用实例分析
2020/02/14 Javascript
JavaScript计算出两个数的差值
2020/03/19 Javascript
使用APScheduler3.0.1 实现定时任务的方法
2019/07/22 Python
Python 类的私有属性和私有方法实例分析
2019/09/29 Python
python list数据等间隔抽取并新建list存储的例子
2019/11/27 Python
Python函数调用追踪实现代码
2020/11/27 Python
CSS+jQuery实现的在线答题功能
2015/04/25 HTML / CSS
瑞士香水购物网站:Parfumcity.ch
2017/01/14 全球购物
Interhome丹麦:在线预订度假屋和公寓
2019/07/18 全球购物
vue路由实现登录拦截
2021/03/24 Vue.js
师范生实习自我鉴定
2013/11/01 职场文书
学习十八大报告感言
2014/02/04 职场文书
名人演讲稿范文
2014/09/16 职场文书
教师批评与自我批评剖析材料
2014/10/16 职场文书
打架检讨书范文
2015/01/27 职场文书
导游词之茶卡盐湖
2019/11/26 职场文书
用Python实现一个打字速度测试工具来测试你的手速
2021/05/28 Python