基于python 等頻分箱qcut問(wèn)題的解決
在python 較新的版本中,pandas.qcut()這個(gè)函數(shù)中是有duplicates這個(gè)參數(shù)的,它能解決在等頻分箱中遇到的重復(fù)值過(guò)多引起報(bào)錯(cuò)的問(wèn)題;
在比較舊版本的python中,提供一下解決辦法:
import pandas as pd def pct_rank_qcut(series, n): ''' series:要分箱的列 n:箱子數(shù) ''' edages = pd.series([i/n for i in range(n)] # 轉(zhuǎn)換成百分比 func = lambda x: (edages >= x).argmax() #函數(shù):(edages >= x)返回fasle/true列表中第一次出現(xiàn)true的索引值 return series.rank(pct=1).astype(float).apply(func) #series.rank(pct=1)每個(gè)值對(duì)應(yīng)的百分位數(shù),最終返回對(duì)應(yīng)的組數(shù);rank()函數(shù)傳入的數(shù)據(jù)類型若為object,結(jié)果會(huì)有問(wèn)題,因此進(jìn)行了astype
補(bǔ)充拓展:Python數(shù)據(jù)離散化:等寬及等頻
在處理數(shù)據(jù)時(shí),我們往往需要將連續(xù)性變量進(jìn)行離散化,最常用的方式便是等寬離散化,等頻離散化,在此處我們討論離散化的概念,只給出在python中的實(shí)現(xiàn)以供參考
1. 等寬離散化
使用pandas中的cut()函數(shù)進(jìn)行劃分
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()可以使用,但是邊界易出現(xiàn)重復(fù)值,如果為了刪除重復(fù)值設(shè)置 duplicates=‘drop',則易出現(xiàn)于分片個(gè)數(shù)少于指定個(gè)數(shù)的問(wèn)題,因此在此處不使用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問(wèn)題的解決就是小編分享給大家的全部?jī)?nèi)容了,希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
相關(guān)文章
Python成功解決TypeError: ‘method’ object is
在Python編程中,有時(shí)候我們可能會(huì)遇到一個(gè)讓人摸不著頭腦的錯(cuò)誤信息:TypeError: 'method' object is not subscriptable,本文給大家介紹了Python如何成功解決TypeError: ‘method’ object is not subscriptable,需要的朋友可以參考下2024-06-06
python中subprocess批量執(zhí)行l(wèi)inux命令
本篇文章給大家詳細(xì)講述了python中使用subprocess批量執(zhí)行l(wèi)inux命令的方法,有興趣的朋友參考學(xué)習(xí)下。2018-04-04
詳解如何使用Python?LXML庫(kù)來(lái)解析和處理XML文檔
在數(shù)據(jù)處理過(guò)程中,XML(可擴(kuò)展標(biāo)記語(yǔ)言)常常被用作數(shù)據(jù)存儲(chǔ)和傳輸,Python的lxml庫(kù)是一個(gè)強(qiáng)大的庫(kù),用于解析XML和HTML文檔,本文將向您介紹如何使用lxml庫(kù)來(lái)解析和處理XML文檔,需要的朋友可以參考下2023-08-08
python使用jenkins發(fā)送企業(yè)微信通知的實(shí)現(xiàn)
公司使用的是企業(yè)微信,因此考慮Jenkins通知企業(yè)微信機(jī)器人的實(shí)現(xiàn)方式,本文主要介紹了python使用jenkins發(fā)送企業(yè)微信通知的實(shí)現(xiàn),感興趣的可以了解一下2021-06-06
Python利用Gradio與EasyOCR構(gòu)建在線識(shí)別文本的Web應(yīng)用
隨著人工智能的不斷發(fā)展,各種智能算法越來(lái)越普遍,本文就給大家介紹一種通過(guò)訓(xùn)練好的算法進(jìn)行文字識(shí)別的方法,而且是Web頁(yè)面可視化操作,方便調(diào)用,希望大家喜歡2023-04-04
python-pymysql如何實(shí)現(xiàn)更新mysql表中任意字段數(shù)據(jù)
這篇文章主要介紹了python-pymysql如何實(shí)現(xiàn)更新mysql表中任意字段數(shù)據(jù)問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2023-05-05

