連續(xù)數(shù)據(jù)離散化之等寬法
數(shù)據(jù)離散化意義
????數(shù)據(jù)離散化是指將連續(xù)的數(shù)據(jù)進(jìn)行分段,使其變?yōu)橐欢味坞x散化的區(qū)間。分段的原則有基于等距離、等頻率或優(yōu)化的方法。之所以離散化,部分條件是由于后期的模型需要,另外數(shù)據(jù)也好理解,比如用戶年齡離散化,20-30作為一個(gè)區(qū)間,是青年,30-50作為另一個(gè)區(qū)間,是中年,這樣可以更加直觀的表達(dá)出數(shù)據(jù),青年、中年,方便用戶理解。
????我們用等寬法(將數(shù)據(jù)的值域分成具有相同寬度的區(qū)間,區(qū)間的個(gè)數(shù)由數(shù)據(jù)本身的特點(diǎn)決定或者用戶指定,與制作頻率分布表類似。)來實(shí)現(xiàn)數(shù)據(jù)離散化。pandas 提供了 cut 函數(shù),可以進(jìn)行連續(xù)型數(shù)據(jù)的等寬離散化,其基礎(chǔ)語法格式如下。
知識(shí)點(diǎn):
函數(shù)
pandas.cut(x, bins, right=True, labels=None, retbins=False, precision=3, include_lowest=False, duplicates='raise') #0.23.4
參數(shù)含義
x
:被切分的類數(shù)組(array-like)數(shù)據(jù),必須是1維的(不能用DataFrame);bins
:bins是被切割后的區(qū)間(或者叫“桶”、“箱”、“面元”),有3中形式:一個(gè)int型的標(biāo)量、標(biāo)量序列(數(shù)組)或者pandas.IntervalIndex 。
right
:bool型參數(shù),默認(rèn)為True,表示是否包含區(qū)間右部。比如如果bins=[1,2,3],right=True,則區(qū)間為(1,2],(2,3];right=False,則區(qū)間為(1,2),(2,3)。
labels
:給分割后的bins打標(biāo)簽,比如把年齡x分割成年齡段bins后,可以給年齡段打上諸如青年、中年的標(biāo)簽。labels的長度必須和劃分后的區(qū)間長度相等,比如bins=[1,2,3],劃分后有2個(gè)區(qū)間(1,2],(2,3],則labels的長度必須為2。如果指定labels=False,則返回x中的數(shù)據(jù)在第幾個(gè)bin中(從0開始)。retbins
:bool型的參數(shù),表示是否將分割后的bins返回,當(dāng)bins為一個(gè)int型的標(biāo)量時(shí)比較有用,這樣可以得到劃分后的區(qū)間,默認(rèn)為False。precision
:保留區(qū)間小數(shù)點(diǎn)的位數(shù),默認(rèn)為3.include_lowest
:bool型的參數(shù),表示區(qū)間的左邊是開還是閉的,默認(rèn)為false,也就是不包含區(qū)間左部(閉)。duplicates
:是否允許重復(fù)區(qū)間。有兩種選擇:raise
:不允許,drop
:允許。返回值
out
:一個(gè)pandas.Categorical, Series或者ndarray類型的值,代表分區(qū)后x中的每個(gè)值在哪個(gè)bin(區(qū)間)中,如果指定了labels,則返回對(duì)應(yīng)的label。bins
:分隔后的區(qū)間,當(dāng)指定retbins為True時(shí)返回。
我們已pandas的cut函數(shù)來實(shí)例講解:

