基于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中cPickle用法例子分享
Jan 03 Python
让 python 命令行也可以自动补全
Nov 30 Python
Python使用scrapy采集数据时为每个请求随机分配user-agent的方法
Apr 08 Python
Python编程之多态用法实例详解
May 19 Python
Python中的连接符(+、+=)示例详解
Jan 13 Python
使用Python对Excel进行读写操作
Mar 30 Python
Python搭建FTP服务器的方法示例
Jan 19 Python
用十张图详解TensorFlow数据读取机制(附代码)
Feb 06 Python
python制作抖音代码舞
Apr 07 Python
python实现比较类的两个instance(对象)是否相等的方法分析
Jun 26 Python
Python 转换文本编码实现解析
Aug 27 Python
python GUI库图形界面开发之PyQt5中QWebEngineView内嵌网页与Python的数据交互传参详细方法实例
Feb 26 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入库和出库
2013/06/25 PHP
php四种基础算法代码实例
2013/10/29 PHP
php中的四舍五入函数代码(floor函数、ceil函数、round与intval)
2014/07/14 PHP
编写PHP脚本过滤用户上传的图片
2015/07/03 PHP
php实现模拟post请求用法实例
2015/07/11 PHP
thinkPHP+PHPExcel实现读取文件日期的方法(含时分秒)
2016/07/07 PHP
php生成静态页面并实现预览功能
2019/06/27 PHP
window.addeventjs事件驱动函数集合addEvent等
2008/02/19 Javascript
event.srcElement 用法笔记e.target
2009/12/18 Javascript
Extjs学习笔记之二 初识Extjs之Form
2010/01/07 Javascript
jquery在Chrome下获取图片的长宽问题解决
2013/03/20 Javascript
javascript文件中引用依赖的js文件的方法
2014/03/17 Javascript
Javascript学习笔记之 对象篇(四) : for in 循环
2014/06/24 Javascript
jquery实现翻动fadeIn显示的方法
2015/03/05 Javascript
jQuery ready()和onload的加载耗时分析
2016/09/08 Javascript
jquery.validate[.unobtrusive]和Bootstrap实现tooltip错误提示问题分析
2016/10/30 Javascript
AngularJS框架的ng-app指令与自动加载实现方法分析
2017/01/04 Javascript
浅谈angular4 ng-content 中隐藏的内容
2017/08/18 Javascript
13 个npm 快速开发技巧(推荐)
2019/07/04 Javascript
Angular处理未可知异常错误的方法详解
2021/01/17 Javascript
Python调用C# Com dll组件实战教程
2017/10/12 Python
python plt可视化——打印特殊符号和制作图例代码
2020/04/17 Python
使用PyQt5实现图片查看器的示例代码
2020/04/21 Python
对Keras中predict()方法和predict_classes()方法的区别说明
2020/06/09 Python
HTML5 Canvas玩转酷炫大波浪进度图效果实例(附demo)
2016/12/14 HTML / CSS
捷克钓鱼用品网上商店:Parys.cz
2018/06/15 全球购物
Guess美国官网:美国知名服装品牌
2019/04/08 全球购物
简述Linux文件系统通过i节点把文件的逻辑结构和物理结构转换的工作过程
2016/01/06 面试题
工作中的自我评价如何写好
2013/10/28 职场文书
公司领导推荐信
2013/11/12 职场文书
劳动模范事迹材料
2014/01/19 职场文书
教师师德反思材料
2014/02/15 职场文书
质量承诺书怎么写
2014/05/24 职场文书
幼儿园大班教师个人工作总结
2015/02/05 职场文书
创业计划书之电动车企业
2019/10/11 职场文书
MySQL 重命名表的操作方法及注意事项
2021/05/21 MySQL