【Pandas-10】離散化和分箱


   

在機械學習中,我們經常會對數據進行分箱處理的操作, 也就是 把一段連續的值切分成若干段,每一段的值看成一個分類。這個把連續值轉換成離散值的過程,我們叫做分箱處理。

比如,把年齡按15歲划分成一組,0-15歲叫做少年,16-30歲叫做青年,31-45歲叫做壯年。在這個過程中,我們把連續的年齡分成了三個類別,"少年","青年"和"壯年"就是各個類別的名稱,或者叫做標簽。

cut和qcut函數的基本介紹

在pandas中,cut和qcut函數都可以進行分箱處理操作。其中cut函數是按照數據的值進行分割,而qcut函數則是根據數據本身的數量來對數據進行分割。

一、pandas.cut

1 函數介紹

pandas.cut(x, bins, right=True, labels=None, retbins=False, precision=3, include_lowest=False)

參數:

1. x,類array對象,且必須為一維,待切割的原形式

2. bins, 整數、序列尺度、或間隔索引。如果bins是一個整數,它定義了x寬度范圍內的等寬面元數量,但是在這種情況下,x的范圍在每個邊上被延長1%,以保證包括x的最小值或最大值。如果bin是序列,它定義了允許非均勻bin寬度的bin邊緣。在這種情況下沒有x的范圍的擴展。

3. right,布爾值。是否是左開右閉區間

4. labels,用作結果箱的標簽。必須與結果箱相同長度。如果FALSE,只返回整數指標面元。

5. retbins,布爾值。是否返回面元

6. precision,整數。返回面元的小數點幾位

7. include_lowest,布爾值。第一個區間的左端點是否包含

返回值:

若labels為False則返回整數填充的Categorical或數組或Series

若retbins為True還返回用浮點數填充的N維數組

2 實例

import pandas as pd

年份 = [1992, 1983, 1922, 1932, 1973] # 待分箱數據

箱子 = [1900, 1950, 2000] # 指定箱子的分界點

結果 = pd.cut(年份, 箱子)

print(結果)

# 結果說明:其中(1950, 2000]說明【年份】列表的第一個值1992位於(1950, 2000]區間

   

print(pd.value_counts(結果)) # 對不同箱子中的數進行計數

   

# labels參數為False時,返回結果中用不同的整數作為箱子的指示符

結果2 = pd.cut(年份, 箱子,labels=False)

# 輸出結果中的數字對應着不同的箱子

print(結果2)

# 結果說明:其中 1 說明【年份】列表的第一個值1992位於(1950, 2000]區間

# 其中 0 說明【年份】列表的第一個值1922位於(1900, 1950]區間

   

print(pd.value_counts(result2)) # 對不同箱子中的數進行計數

   

import pandas as pd

年份 = [1992, 1983, 1922, 1932, 1973] # 待分箱數據

箱子 = [1900, 1950, 2000] # 指定箱子的分界點

# 可以將想要指定給不同箱子的標簽傳遞給labels參數

箱子名稱 = [ '50年代前', '50年代后']

結果3 = pd.cut(年份, 箱子, labels=箱子名稱)

print(pd.value_counts(結果3))

二、pandas.qcut

1 理論

pandas.qcut 和上面基本相同,只是q分箱需要自己設置。可以指定箱子的數量對連續數據進行等寬分箱處理(注意:所謂等寬指的是每個箱子中的數據量是相同的)

pandas.qcut(x, q, labels=None, retbins=False, precision=3, duplicates='raise')

2 實例

import pandas as pd

年份 = [1992, 1983, 1922, 1932, 1973, 1999, 1993, 1995] # 待分箱數據

結果 = pd.qcut(年份,q=4) # 參數q指定所分箱子的數量

# 從輸出結果可以看到每個箱子中的數據量時相同的

print(結果)

print(pd.value_counts(結果)) # 從輸出結果可以看到每個箱子中的數據量時相同的

   


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM