91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

pandas.cut與pandas.qcut怎么用

發布時間:2021-02-02 11:19:24 來源:億速云 閱讀:221 作者:小新 欄目:開發技術

小編給大家分享一下pandas.cut與pandas.qcut怎么用,希望大家閱讀完這篇文章之后都有所收獲,下面讓我們一起去探討吧!

pandas.cut:

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維數組

demo:

>>> pd.cut(np.array([.2, 1.4, 2.5, 6.2, 9.7, 2.1]), 3, retbins=True)
... 
([(0.19, 3.367], (0.19, 3.367], (0.19, 3.367], (3.367, 6.533], ...
Categories (3, interval[float64]): [(0.19, 3.367] < (3.367, 6.533] ...
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
>>> pd.cut(np.array([.2, 1.4, 2.5, 6.2, 9.7, 2.1]),
... 3, labels=["good", "medium", "bad"])
... 
[good, good, good, medium, bad, good]
Categories (3, object): [good < medium < bad] 
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
>>> pd.cut(np.ones(5), 4, labels=False)
array([1, 1, 1, 1, 1])

pandas.qcut

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

參數:

1.x
2.q,整數或分位數組成的數組。
3.labels,
4.retbins
5.precisoon
6.duplicates

結果中超過邊界的值將會變成NA

demo:

>>> pd.qcut(range(5), 4)
... 
[(-0.001, 1.0], (-0.001, 1.0], (1.0, 2.0], (2.0, 3.0], (3.0, 4.0]]
Categories (4, interval[float64]): [(-0.001, 1.0] < (1.0, 2.0] ...
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
>>> pd.qcut(range(5), 3, labels=["good", "medium", "bad"])
... 
[good, good, medium, bad, bad]
Categories (3, object): [good < medium < bad]
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
pd.qcut(range(5), 4, labels=False)
array([0, 0, 1, 2, 3])

補充拓展:解決 Python 中 qcut() 運行報錯: Bin edges must be unique和drop duplicate edges by setting 'duplicates' kwarg

本次糾錯背景,來源于互金領域信用風控建模中的變量分箱處理。(附在文末)

解決 Python 中 qcut() 函數運行報錯:
Bin edges must be unique和 You can drop duplicate edges by setting the ‘duplicates' kwarg

首先,報錯如下:

pandas.cut與pandas.qcut怎么用

然后,在qcut() 函數中設置duplicates參數為“drop”(不能設置為“raise”),解決(如下)。

pandas.cut與pandas.qcut怎么用

本次糾錯背景,來源于互金領域信用風控建模中的變量分箱處理。如下:

# 五、變量選擇
# 特征變量選擇(排序)對于數據分析、機器學習從業者來說非常重要。
# 好的特征選擇能夠提升模型的性能,更能幫助我們理解數據的特點、底層結構,這對進一步改善模型、算法都有著重要作用。
# 至于Python的變量選擇代碼實現可以參考結合Scikit-learn介紹幾種常用的特征選擇方法。

# 在本文中,我們采用信用評分模型的變量選擇方法,通過WOE分析方法,即是通過比較指標分箱和對應分箱的違約概率來確定指標是否符合經濟意義。
# 首先我們對變量進行離散化(分箱)處理。
# 5.1 分箱處理
# 變量分箱(binning)是對連續變量離散化(discretization)的一種稱呼。
# 信用評分卡開發中一般有常用的等距分段、等深分段、最優分段。
# 其中等距分段(Equval length intervals)是指分段的區間是一致的,比如年齡以十年作為一個分段;
# 等深分段(Equal frequency intervals)是先確定分段數量,然后令每個分段中數據數量大致相等;
# 最優分段(Optimal Binning)又叫監督離散化(supervised discretizaion),使用遞歸劃分(Recursive Partitioning)將連續變量分為分段,背后是一種基于條件推斷查找較佳分組的算法。

# 我們首先選擇對連續變量進行最優分段,在連續變量的分布不滿足最優分段的要求時,再考慮對連續變量進行等距分段。最優分箱的代碼如下:

# 定義自動分箱函數

from scipy import stats
def mono_bin(Y, X, n = 20):
 r = 0
 good=Y.sum()
 bad=Y.count()-good
 while np.abs(r) < 1:
 d1 = pd.DataFrame({"X": X, "Y": Y, "Bucket": pd.qcut(X, n,duplicates="drop")}) 
 # 后面報錯You can drop duplicate edges by setting the 'duplicates' kwarg,所以回到這里補充duplicates參數
 # pandas中使用qcut(),邊界易出現重復值,如果為了刪除重復值設置 duplicates=‘drop',則易出現于分片個數少于指定個數的問題
 d2 = d1.groupby('Bucket', as_index = True)
 r, p = stats.spearmanr(d2.mean().X, d2.mean().Y)
 n = n - 1
 d3 = pd.DataFrame(d2.X.min(), columns = ['min'])
 d3['min']=d2.min().X
 d3['max'] = d2.max().X
 d3['sum'] = d2.sum().Y
 d3['total'] = d2.count().Y
 d3['rate'] = d2.mean().Y
 d3['woe']=np.log((d3['rate']/(1-d3['rate']))/(good/bad))
 d4 = (d3.sort_index(by = 'min')).reset_index(drop=True)
 print("=" * 60)
 print(d4)
 return d4

# 此定義函數暫未理解通透,暫且保留。這里先直接使用。
# 原帖代碼沒有導入scipy.stats模塊,會導致下一條語句運行報錯,上面補上,搞定。
# 原帖代碼qcut()函數中沒有設置duplicates參數,上面補上,搞定。
# 自定義函數分箱RevolvingUtilizationOfUnsecuredLines時報錯You can drop duplicate edges by setting the 'duplicates' kwarg
# 所以先回來刪除重復值。刪除后發現沒有解決問題,真正解決問題是在qcut()函數中沒有設置duplicates參數為“drop”(不能設置為“raise”)
data=data.drop_duplicates(subset=None,keep='first',inplace=False)
data.shape

(119703, 11)

# 針對我們將使用最優分段對于數據集中的RevolvingUtilizationOfUnsecuredLines、age、DebtRatio和MonthlyIncome進行分類。

mono_bin(data.SeriousDlqin2yrs,data.RevolvingUtilizationOfUnsecuredLines)

============================================================
 min  max sum total rate woe
0 0.000000 0.035034 29333 29926 0.980184 1.298275
1 0.035037 0.176771 29205 29926 0.975907 1.098457
2 0.176777 0.577036 28305 29925 0.945865 0.257613
3 0.577040 50708.000000 24607 29926 0.822262 -1.071254

minmaxsumtotalratewoe
00.0000000.03503429333299260.9801841.298275
10.0350370.17677129205299260.9759071.098457
20.1767770.57703628305299250.9458650.257613
30.57704050708.00000024607299260.822262-1.071254

mono_bin(data.SeriousDlqin2yrs,data.age)

============================================================
 min max sum total rate woe
0 21 30 7913 8885 0.890602 -0.506093
1 31 34 6640 7383 0.899363 -0.412828
2 35 38 7594 8386 0.905557 -0.342447
3 39 41 7131 7849 0.908523 -0.307262
4 42 43 4890 5362 0.911973 -0.265031
5 44 46 8163 8868 0.920501 -0.153830
6 47 48 5776 6274 0.920625 -0.152133
7 49 51 8545 9280 0.920797 -0.149768
8 52 53 5454 5901 0.924250 -0.101453
9 54 56 7922 8463 0.936075 0.080980
10 57 59 7517 7946 0.946011 0.260466
11 60 61 4942 5200 0.950385 0.349567
12 62 64 7464 7776 0.959877 0.571844
13 65 68 6968 7212 0.966167 0.748916
14 69 75 7911 8141 0.971748 0.934931
15 76 103 6620 6777 0.976833 1.138606

minmaxsumtotalratewoe
02130791388850.890602-0.506093
13134664073830.899363-0.412828
23538759483860.905557-0.342447
33941713178490.908523-0.307262
44243489053620.911973-0.265031
54446816388680.920501-0.153830
64748577662740.920625-0.152133
74951854592800.920797-0.149768
85253545459010.924250-0.101453
95456792284630.9360750.080980
105759751779460.9460110.260466
116061494252000.9503850.349567
126264746477760.9598770.571844
136568696872120.9661670.748916
146975791181410.9717480.934931
1576103662067770.9768331.138606

mono_bin(data.SeriousDlqin2yrs,data.MonthlyIncome)

============================================================
 min max sum total rate woe
0 0.0 3400.0 27355 30073 0.909620 -0.293996
1 3401.0 5400.0 27655 30008 0.921588 -0.138884
2 5401.0 8200.0 27925 29725 0.939445 0.138736
3 8201.0 49750.0 28515 29897 0.953775 0.423899

minmaxsumtotalratewoe
00.03400.027355300730.909620-0.293996
13401.05400.027655300080.921588-0.138884
25401.08200.027925297250.9394450.138736
38201.049750.028515298970.9537750.423899

看完了這篇文章,相信你對“pandas.cut與pandas.qcut怎么用”有了一定的了解,如果想了解更多相關知識,歡迎關注億速云行業資訊頻道,感謝各位的閱讀!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

江阴市| 鄂州市| 武川县| 沅陵县| 根河市| 宝丰县| 新余市| 开江县| 平远县| 兴山县| 容城县| 阿瓦提县| 潞城市| 西乡县| 即墨市| 卓资县| 田林县| 徐水县| 长寿区| 大连市| 罗甸县| 永年县| 徐闻县| 邹平县| 叶城县| 东乡| 宁城县| 乐清市| 许昌县| 青岛市| 丹东市| 铁岭市| 呼伦贝尔市| 泗洪县| 勃利县| 依兰县| 涟水县| 枝江市| 绥德县| 丁青县| 神农架林区|