Quellcode durchsuchen

add: 添加分箱代码

wangzhaoyang vor 5 Monaten
Ursprung
Commit
34a38aa3c1
1 geänderte Dateien mit 11 neuen und 4 gelöschten Zeilen
  1. 11 4
      feature/feature_utils.py

+ 11 - 4
feature/feature_utils.py

@@ -5,13 +5,20 @@
 @desc:  特征工具类
 """
 import pandas as pd
-
+from sklearn.preprocessing import KBinsDiscretizer
 from entitys import DataSplitEntity
 
 
-def f_get_bins(data: DataSplitEntity) -> pd.DataFrame:
-    pass
-
+def f_get_bins(data: DataSplitEntity, feat: str, strategy: str='quantile', nbins: int=10) -> pd.DataFrame:
+    # 等频分箱
+    if strategy == 'quantile':
+        kbin_encoder = KBinsDiscretizer(n_bins=nbins, encode='ordinal', strategy='quantile')
+        feature_binned = kbin_encoder.fit_transform(data[feat])
+        return feature_binned.astype(int).astype(str)
+    # 等宽分箱
+    if strategy == 'width':
+        bin_width = (data[feat].max()-data[feat].min()) / nbins
+        return pd.cut(data[feat], bins=nbins, labels=[f'Bin_{i}' for i in range(1, nbins+1)])
 
 def f_get_woe(data: DataSplitEntity) -> pd.DataFrame:
     pass