基于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发送arp欺骗攻击代码分析
Jan 16 Python
OpenCV实现人脸识别
Apr 07 Python
神经网络python源码分享
Dec 15 Python
在python中利用最小二乘拟合二次抛物线函数的方法
Dec 29 Python
python使用Plotly绘图工具绘制水平条形图
Mar 25 Python
利用Python的turtle库绘制玫瑰教程
Nov 23 Python
python模拟预测一下新型冠状病毒肺炎的数据
Feb 01 Python
Python3之外部文件调用Django程序操作model等文件实现方式
Apr 07 Python
Python通过getattr函数获取对象的属性值
Oct 16 Python
python3中celery异步框架简单使用+守护进程方式启动
Jan 20 Python
python 数据类型强制转换的总结
Jan 25 Python
基于Python-Pycharm实现的猴子摘桃小游戏(源代码)
Feb 20 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判断并删除空目录及空子目录的方法
2015/02/11 PHP
PHP 的比较运算与逻辑运算详解
2016/05/12 PHP
PHP简单读取PDF页数的实现方法
2016/07/21 PHP
php导出csv文件,可导出前导0实例代码
2016/11/16 PHP
php获取客户端IP及URL的方法示例
2017/02/03 PHP
PHP基于关联数组20行代码搞定约瑟夫问题示例
2017/11/07 PHP
Windows Live的@live.com域名注册漏洞 利用代码
2006/12/27 Javascript
js获取浏览器的可视区域尺寸的实现代码
2011/11/30 Javascript
jquery的$getjson调用并获取远程的JSON字符串问题
2012/12/10 Javascript
jquery马赛克拼接翻转效果代码分享
2015/08/24 Javascript
Jquery检验手机号是否符合规则并根据手机号检测结果将提交按钮设为不同状态
2015/11/26 Javascript
浅析AngularJs HTTP响应拦截器
2015/12/28 Javascript
JavaScript学习笔记之创建对象
2016/03/25 Javascript
Vue.js快速入门实例教程
2016/10/15 Javascript
bootstrap按钮插件(Button)使用方法解析
2017/01/13 Javascript
彻底解决 webpack 打包文件体积过大问题
2017/07/07 Javascript
使用vs code开发Nodejs程序的使用方法
2017/09/21 NodeJs
vue.js分页中单击页码更换页面内容的方法(配合spring springmvc)
2018/02/10 Javascript
8个非常实用的Vue自定义指令
2020/12/15 Vue.js
python实现将元祖转换成数组的方法
2015/05/04 Python
python获取多线程及子线程的返回值
2017/11/15 Python
Python3 伪装浏览器的方法示例
2017/11/23 Python
Python enumerate函数功能与用法示例
2019/03/01 Python
python写入文件自动换行问题的方法
2019/07/05 Python
Python使用psutil获取进程信息的例子
2019/12/17 Python
Python HTMLTestRunner如何下载生成报告
2020/09/04 Python
Needle & Thread官网:英国仙女品牌
2018/01/13 全球购物
英语专业大学生求职简历的自我评价
2013/10/18 职场文书
阳光体育活动方案
2014/02/16 职场文书
小学元宵节活动总结
2015/02/06 职场文书
预备党员介绍人意见
2015/06/01 职场文书
新学期感想
2015/08/10 职场文书
学校中层领导培训心得体会
2016/01/11 职场文书
2016年企业先进员工事迹材料
2016/02/25 职场文书
python playwrigh框架入门安装使用
2022/07/23 Python
MySQL存储过程及语法详解
2022/08/05 MySQL