基于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中的元组与逻辑运算符
Oct 13 Python
Python整型运算之布尔型、标准整型、长整型操作示例
Jul 21 Python
Python2.7编程中SQLite3基本操作方法示例
Aug 09 Python
对python中的logger模块全面讲解
Apr 28 Python
解决python "No module named pip" 的问题
Oct 13 Python
python 与服务器的共享文件夹交互方法
Dec 27 Python
pygame实现俄罗斯方块游戏(AI篇2)
Oct 29 Python
numpy 返回函数的上三角矩阵实例
Nov 25 Python
3种python调用其他脚本的方法
Jan 06 Python
python编写一个会算账的脚本的示例代码
Jun 02 Python
关于Python3爬虫利器Appium的安装步骤
Jul 29 Python
python实现马丁策略回测3000只股票的实例代码
Jan 22 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/08/11 PHP
php中字符串和整数比较的操作方法
2019/06/06 PHP
写给想学习Javascript的朋友一点学习经验小结
2010/11/23 Javascript
javascript 上下banner替换具体实现
2013/11/14 Javascript
关于JavaScript命名空间的一些心得
2014/06/07 Javascript
分享20款美化网站的 jQuery Lightbox 灯箱插件
2014/10/10 Javascript
jQuery文件上传控件 Uploadify 详解
2016/06/20 Javascript
值得分享的JavaScript实现图片轮播组件
2016/11/21 Javascript
jQuery手指滑动轮播效果
2016/12/22 Javascript
jQuery Form表单取值的方法
2017/01/11 Javascript
jQuery图片轮播功能实例代码
2017/01/29 Javascript
node.js+jQuery实现用户登录注册AJAX交互
2017/04/28 jQuery
微信小程序实现缓存根据不同的id来进行设置和读取缓存
2017/06/12 Javascript
Vue中的slot使用插槽分发内容的方法
2018/03/01 Javascript
vue实现element-ui对话框可拖拽功能
2018/08/17 Javascript
Vue表单输入绑定的示例代码
2018/11/01 Javascript
vue axios封装及API统一管理的方法
2019/04/18 Javascript
vue中使用mxgraph的方法实例代码详解
2019/05/17 Javascript
JavaScript遍历数组的方法代码实例
2020/01/14 Javascript
js实现消灭星星(web简易版)
2020/03/24 Javascript
Python中统计函数运行耗时的方法
2015/05/05 Python
Python实现批量将word转html并将html内容发布至网站的方法
2015/07/14 Python
Python字符串内置函数功能与用法总结
2019/04/16 Python
利用ImageAI库只需几行python代码实现目标检测
2019/08/09 Python
Python爬虫 批量爬取下载抖音视频代码实例
2019/08/16 Python
如何在django中添加日志功能
2020/02/06 Python
python实现低通滤波器代码
2020/02/26 Python
python输出第n个默尼森数的实现示例
2020/03/08 Python
优秀经理事迹材料
2014/02/01 职场文书
趣味活动策划方案
2014/02/08 职场文书
2014年关于两会精神的心得体会
2014/03/17 职场文书
缅怀先烈演讲稿
2014/09/03 职场文书
实验心得体会
2014/09/05 职场文书
党员学习新党章思想汇报
2014/10/25 职场文书
步步惊心观后感
2015/06/12 职场文书
学习杨善洲同志先进事迹心得体会
2016/01/23 职场文书