基于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实现的金山快盘的签到程序
Jan 17 Python
python安装numpy和pandas的方法步骤
May 27 Python
Django生成PDF文档显示在网页上以及解决PDF中文显示乱码的问题
Jul 04 Python
详解Python 4.0 预计推出的新功能
Jul 26 Python
Pyecharts绘制全球流向图的示例代码
Jan 08 Python
Tensorflow实现多GPU并行方式
Feb 03 Python
python 计算概率密度、累计分布、逆函数的例子
Feb 25 Python
python怎么判断素数
Jul 01 Python
python如何控制进程或者线程的个数
Oct 16 Python
python中编写函数并调用的知识点总结
Jan 13 Python
Python编写可视化界面的全过程(Python+PyCharm+PyQt)
May 17 Python
全网非常详细的pytest配置文件
Jul 15 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+MYSQL的文章管理系统(一)
2006/10/09 PHP
附件名前加网站名
2008/03/23 PHP
php 高效率写法 推荐
2010/02/21 PHP
ThinkPHP访问不存在的模块跳转到404页面的方法
2014/06/19 PHP
php获取指定范围内最接近数的方法
2015/06/02 PHP
PHP5.2中PDO的简单使用方法
2016/03/25 PHP
Mootools 1.2教程 Tooltips
2009/09/15 Javascript
JavaScript对象之间的转换 jQuery对象和原声DOM
2011/03/07 Javascript
js局部刷新页面时间具体实现
2013/07/04 Javascript
JQuery实现鼠标移动到图片上显示边框效果
2014/01/09 Javascript
js使用eval解析json(js中使用json)
2014/01/17 Javascript
Jquery Easyui菜单组件Menu使用详解(15)
2016/12/18 Javascript
老生常谈javascript中逻辑运算符&&和||的返回值问题
2017/04/13 Javascript
JavaScript实现QQ列表展开收缩扩展功能
2017/10/30 Javascript
解决vue 中 echart 在子组件中只显示一次的问题
2018/08/07 Javascript
layui数据表格跨行自动合并的例子
2019/09/02 Javascript
React组件设计模式之组合组件应用实例分析
2020/04/29 Javascript
Openlayers测量距离与面积的实现方法
2020/09/25 Javascript
Python比较文件夹比另一同名文件夹多出的文件并复制出来的方法
2015/03/05 Python
如何在sae中设置django,让sae的工作环境跟本地python环境一致
2017/11/21 Python
使用python画个小猪佩奇的示例代码
2018/06/06 Python
Python中偏函数用法示例
2018/06/07 Python
详解Python中正则匹配TAB及空格的小技巧
2019/07/26 Python
一篇文章搞定Python操作文件与目录
2019/08/13 Python
使用Python调取任意数字资产钱包余额功能
2019/08/15 Python
Python中的上下文管理器相关知识详解
2019/09/19 Python
Edwaybuy西班牙:小米在线商店
2019/12/04 全球购物
JSF界面控制层技术
2013/06/17 面试题
JPA的优势都有哪些
2013/07/04 面试题
送货司机岗位职责
2013/12/11 职场文书
铅球加油稿100字
2014/09/26 职场文书
专题组织生活会思想汇报
2014/10/01 职场文书
群众路线剖析材料(四风问题)
2014/10/08 职场文书
2015年初中教师个人工作总结
2015/07/21 职场文书
python数据可视化使用pyfinance分析证券收益示例详解
2021/11/20 Python
Java 在线考试云平台的实现
2021/11/23 Java/Android