基于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实现可以断点续传和并发的ftp程序
Sep 13 Python
python实现m3u8格式转换为mp4视频格式
Feb 28 Python
Python使用numpy实现BP神经网络
Mar 10 Python
Python实现的当前时间多加一天、一小时、一分钟操作示例
May 21 Python
python和pygame实现简单俄罗斯方块游戏
Feb 19 Python
Python实现的爬取小说爬虫功能示例
Mar 30 Python
Python日期格式和字符串格式相互转换的方法
Feb 18 Python
pycharm工具连接mysql数据库失败问题
Apr 01 Python
浅谈python 调用open()打开文件时路径出错的原因
Jun 05 Python
Python自动化操作实现图例绘制
Jul 09 Python
详解Python中的路径问题
Sep 02 Python
python基于selenium爬取斗鱼弹幕
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
APMServ使用说明
2006/10/23 PHP
新浪SAE云平台下使用codeigniter的数据库配置
2014/06/12 PHP
PHP检测链接是否存在的代码实例分享
2016/05/06 PHP
微信自定义分享php代码分析
2016/11/24 PHP
基于CI框架的微信网页授权库示例
2016/11/25 PHP
使用Zttp简化Guzzle 调用
2017/07/02 PHP
PHP code 验证码生成类定义和简单使用示例
2020/05/27 PHP
JavaScript创建命名空间(namespace)的最简实现
2007/12/11 Javascript
实现点击列表弹出列表索引的两种方式
2013/03/08 Javascript
jQuery+css实现图片滚动效果(附源码)
2013/03/18 Javascript
二叉树的非递归后序遍历算法实例详解
2014/02/07 Javascript
jquery通过select列表选择框对表格数据进行过滤示例
2014/05/07 Javascript
js的回调函数详解
2015/01/05 Javascript
js实现选中复选框文字变色的方法
2015/08/14 Javascript
js+css实现上下翻页相册代码分享
2015/08/18 Javascript
让浏览器崩溃的12行JS代码(DoS攻击分析及防御)
2016/10/10 Javascript
AngularJS路由实现页面跳转实例
2017/03/03 Javascript
jQuery插件HighCharts绘制2D圆环图效果示例【附demo源码下载】
2017/03/09 Javascript
为Jquery EasyUI 组件加上清除功能的方法(详解)
2017/04/13 jQuery
vue增删改查的简单操作
2017/07/15 Javascript
用vuex写了一个购物车H5页面的示例代码
2018/12/04 Javascript
微信小程序人脸识别功能代码实例
2019/05/07 Javascript
微信小程序的mpvue框架快速上手指南
2019/05/15 Javascript
深入浅出了解Node.js Streams
2019/05/27 Javascript
javascript实现前端input密码输入强度验证
2020/06/24 Javascript
Python原始字符串(raw strings)用法实例
2014/10/13 Python
python中子类继承父类的__init__方法实例
2016/12/15 Python
Python3之手动创建迭代器的实例代码
2019/05/22 Python
PyTorch的自适应池化Adaptive Pooling实例
2020/01/03 Python
django正续或者倒序查库实例
2020/05/19 Python
html5 canvas简单封装一个echarts实现不了的饼图
2018/06/12 HTML / CSS
adidas美国官网:adidas US
2016/09/21 全球购物
员工工作自我评价
2014/09/26 职场文书
有关水浒传的读书笔记
2015/06/25 职场文书
python中sys模块的介绍与实例
2021/04/17 Python
redis lua限流算法实现示例
2022/07/15 Redis