Modeling_Tool.Core¶
基础设施层 —— 分箱、ODPS、工具函数、加密、JSON、斜率计算。
无跨包依赖,被其他所有子包依赖。
样本权重 — sample_weight_utils¶
解析 weight_col / sample_weight(及 wgt / wgt_col 别名),供 Model / Eval 层统一调用。
sample_weight_utils
¶
Sample-weight resolution and weighted aggregation helpers.
resolve_sample_weight
¶
resolve_sample_weight(data=None, weight_col=None, sample_weight=None, expected_len=None, wgt=None, wgt_col=None)
Resolve sample weights from a DataFrame column or array.
Accepts weight_col / wgt_col and sample_weight / wgt aliases.
Returns None when no weight source is provided.
源代码位于: Modeling_Tool/Core/sample_weight_utils.py
validate_sample_weight
¶
Validate and return a 1-D float numpy weight vector.
源代码位于: Modeling_Tool/Core/sample_weight_utils.py
weighted_sum
¶
weighted_mean
¶
Weighted mean; returns NaN when total weight is zero.
源代码位于: Modeling_Tool/Core/sample_weight_utils.py
分箱工具 — Binning_Tool¶
Binning_Tool
¶
NumVarBinning
¶
根据分组数和方法, 计算数值型数值变量切分点数值序列。
根据指定分组数计算切分点数值, 分组方法包括"等距分组"和"等分分组": (1) 当分组数不小于变量唯一值个数时, 切分点数值序列即为变量唯一值序列 (2) 当分组数小于变量唯一值个数时, 可选择"等距分组"或"等分分组"
若有指定需要独立成组的数值, 则: (1) 将数值加入切分点数值序列 (2) 添加数值上确界=数值+0.1**(精度+1), 加入切分点数值序列
切分点数值精度: (1) 若变量取值为整数, 则精度为保留1位小数 (2) 若变量取值为浮点数, 则精度为保留输入的位数
为了泛化性, 将切分点数值序列中的最小值替换为-inf, 最大值增加+inf
参数:
| 名称 | 类型 | 描述 | 默认 |
|---|---|---|---|
var_name
|
str
|
变量名 |
必需 |
spec_values
|
list
|
指定需要单独成组的特殊数值 |
None
|
spec_digit
|
int
|
指定特殊的切分点上确界保留小数位数, 若变量为整数则固定为1, 若非整数则为spec_digit值 |
3
|
示例:
>>> nvb = NumVarBinning(var_name='income', spec_values=[-9999])
>>> binning = nvb.equi_binning(df, bins=10)
源代码位于: Modeling_Tool/Core/Binning_Tool.py
145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322 323 324 325 326 327 328 329 330 331 332 333 334 335 336 337 338 339 340 341 342 343 344 345 346 347 348 349 350 351 352 353 354 355 356 357 358 359 360 361 362 363 364 365 366 367 368 369 370 371 372 373 374 375 376 377 378 379 380 381 382 383 384 385 386 387 388 389 390 391 392 393 394 395 396 397 398 399 400 401 402 403 404 405 406 407 408 409 410 411 412 413 414 415 416 417 418 419 420 421 422 423 424 425 426 427 428 429 430 431 432 433 434 435 436 437 438 439 440 441 442 443 444 445 446 447 448 449 450 451 452 453 454 455 456 457 458 459 460 461 462 463 464 465 466 467 468 469 470 471 472 473 474 475 476 477 478 479 480 481 482 483 484 485 486 487 488 489 490 491 492 493 494 495 496 497 498 499 500 501 502 503 504 505 506 507 508 509 510 511 | |
calc_equi_cutpoints
¶
根据分组数和等值分组方法, 计算数值型数值变量切分点数值序列。
1、根据指定分组数计算切分点数值, 分组方法包括"等距分组"和"等分分组" (1) 当分组数不小于变量唯一值个数时, 切分点数值序列即为变量唯一值序列 (2) 当分组数小于变量唯一值个数时, 可选择"等距分组"或"等分分组"
2、若有指定需要独立成组的数值, 则: (1) 将数值加入切分点数值序列; (2) 添加数值上确界=数值+0.1**(精度+1), 加入切分点数值序列;
3、切分点数值精度: (1) 若变量取值为整数, 则精度为保留1位小数 (2) 若变量取值为浮点数, 则精度为保留输入的位数
参数:
| 名称 | 类型 | 描述 | 默认 |
|---|---|---|---|
df
|
DataFrame
|
数据表 |
必需 |
bins
|
int
|
切分组数 |
10
|
equi_method
|
string
|
分组方法, 候选值{"equid"等距分组, "equif"等分分组} |
"equif"
|
返回:
| 名称 | 类型 | 描述 |
|---|---|---|
cut_points |
array
|
切分点数值序列 |
源代码位于: Modeling_Tool/Core/Binning_Tool.py
modify_cutpoints
¶
修正切分点数值序列。
1、切分点数值精度: (1) 若变量取值为整数, 则精度为保留1位小数 (2) 若变量取值为浮点数, 则精度为保留输入的位数
2、过滤不在变量值域内的切分点, 并去重
3、为了泛化性, 将切分点数值序列中的最小值替换为-inf, 最大值增加+inf。
参数:
| 名称 | 类型 | 描述 | 默认 |
|---|---|---|---|
df
|
DataFrame
|
数据表 |
必需 |
points
|
array - like
|
切分点数值序列 |
必需 |
返回:
| 名称 | 类型 | 描述 |
|---|---|---|
cut_points |
array
|
修正后的切分点数值序列 |
源代码位于: Modeling_Tool/Core/Binning_Tool.py
apt_binning
¶
使用指定切分点数值序列对变量进行分组。
切分点数值精度: (1) 若变量取值为整数, 则精度为保留1位小数 (2) 若变量取值为浮点数, 则精度为保留输入的位数
过滤不在变量值域内的切分点
为了泛化性, 将切分点数值序列中的最小值替换为-inf, 最大值增加+inf。
参数:
| 名称 | 类型 | 描述 | 默认 |
|---|---|---|---|
df
|
DataFrame
|
数据表 |
必需 |
points
|
array - like
|
切分点数值序列 |
必需 |
modify
|
bool
|
是否修正切分点数值序列 |
True
|
返回:
| 名称 | 类型 | 描述 |
|---|---|---|
binning_series |
Categorical
|
分组后序列 |
源代码位于: Modeling_Tool/Core/Binning_Tool.py
equi_binning
¶
根据分组数和等值分组方法, 计算数值型数值变量切分点数值序列并分箱。
参数:
| 名称 | 类型 | 描述 | 默认 |
|---|---|---|---|
df
|
DataFrame
|
数据表 |
必需 |
bins
|
int
|
切分组数 |
10
|
equi_method
|
string
|
分组方法, 候选值{"equid"等距分组, "equif"等分分组} |
"equif"
|
返回:
| 名称 | 类型 | 描述 |
|---|---|---|
binning_series |
Categorical
|
分组后序列 |
源代码位于: Modeling_Tool/Core/Binning_Tool.py
apply_binning
¶
使用已保存的切分点数值序列对变量进行分组。
使用之前通过equi_binning或auto_binning等方法计算的切分点对新数据进行分组。
参数:
| 名称 | 类型 | 描述 | 默认 |
|---|---|---|---|
df
|
DataFrame
|
数据表 |
必需 |
返回:
| 名称 | 类型 | 描述 |
|---|---|---|
binning_series |
Categorical
|
分组后序列 |
源代码位于: Modeling_Tool/Core/Binning_Tool.py
auto_binning
¶
auto_binning(df, tgt_name, max_bins=10, min_prop_in_bin=0.05, equi_bins=200, equi_method='equif', init_points=None, binning_criteria='chi2', chi2_p=0.95)
基于卡方检验的自动分组。
基于分布距离计算方法, 按照规定最大组数和最小组样本数, 自动求解分组序列。 步骤: 1. 利用初始分组方法, 完成初始分组 2. 基于分布距离计算方法, 计算初始分组中各组样本大小、组内分布距离, 以及合并相邻组后对原分组的距离差异增益 3. 不断合并样本量不符合最小组样本数要求, 合并相邻组后距离差异增益较大的组, 直至满足最大组数和最小组样本数要求 4. 根据最终分组结果, 生成分组后变量序列。
参数:
| 名称 | 类型 | 描述 | 默认 |
|---|---|---|---|
df
|
DataFrame
|
数据表 |
必需 |
tgt_name
|
str
|
目标变量名 |
必需 |
max_bins
|
int
|
最大分组数量 |
10
|
min_prop_in_bin
|
float
|
每组最小样本数占比 |
0.05
|
equi_bins
|
int
|
初始分组数量 |
200
|
equi_method
|
string
|
初始分组方法, 候选值{"equid"等距分组, "equif"等分分组} |
"equif"
|
init_points
|
array - like
|
初始切分点数值序列, 若非None时则equi_bins、equi_method失效 |
None
|
binning_criteria
|
string
|
分组准则, 候选值{"chi2": "卡方值"} |
"chi2"
|
chi2_p
|
float
|
用于计算自由度为1的卡方分布分位数的概率值. 当相邻组卡方值小于该值时, 认为不独立, 进行合并. 故越大独立性判断越严格 |
0.95
|
返回:
| 名称 | 类型 | 描述 |
|---|---|---|
binning_series |
Categorical
|
分组后序列 |
源代码位于: Modeling_Tool/Core/Binning_Tool.py
428 429 430 431 432 433 434 435 436 437 438 439 440 441 442 443 444 445 446 447 448 449 450 451 452 453 454 455 456 457 458 459 460 461 462 463 464 465 466 467 468 469 470 471 472 473 474 475 476 477 478 479 480 481 482 483 484 485 486 487 488 489 490 491 492 493 494 495 496 497 498 499 500 501 502 503 504 505 506 507 508 509 510 511 | |
Binning
¶
统一的分箱操作类。
整合了快速分箱、卡方分箱等多种分箱方法,提供统一的接口进行数据分箱操作。 支持等频/等距分箱、决策树分箱、卡方自动分箱等多种策略。
参数:
| 名称 | 类型 | 描述 | 默认 |
|---|---|---|---|
data
|
DataFrame
|
输入数据表(将被复制,不修改原数据) |
必需 |
column
|
str
|
需要分箱的列名 |
必需 |
tgt_name
|
str
|
目标变量名(卡方分箱时必需) |
None
|
nbins
|
int
|
分箱数量 |
10
|
precision
|
int
|
边界值精度(小数位数) |
5
|
min_bin_prop
|
float
|
每箱最小样本占比 |
0.05
|
include_missing
|
bool
|
是否包含缺失值 |
True
|
equal_freq
|
bool
|
True为等频分箱,False为等距分箱 |
True
|
bin_colnames
|
tuple
|
分箱结果列名元组 |
("_bin_num", "_bin_range")
|
ascending
|
bool
|
分箱顺序是否升序 |
True
|
right
|
bool
|
区间是否右闭合 |
True
|
include_lowest
|
bool
|
是否包含最小值 |
False
|
tree_binning
|
bool
|
是否使用决策树分箱 |
False
|
chi2_method
|
bool
|
是否使用卡方分箱 |
False
|
chi2_p
|
float
|
卡方检验显著性水平 |
0.95
|
init_equi_bins
|
int
|
初始等频分箱数量 |
200
|
fillna
|
any
|
缺失值填充值 |
-999999
|
spec_values
|
list
|
特殊值列表 |
[]
|
random_state
|
int
|
随机种子 |
42
|
属性:
| 名称 | 类型 | 描述 |
|---|---|---|
result |
DataFrame
|
分箱结果数据 |
bin_edges |
ndarray
|
分箱边界数组 |
示例:
>>> binner = Binning(data, column='income', tgt_name='default', nbins=10)
>>> binner.run()
>>> result, edges = binner.get_result()
>>> # 使用卡方分箱
>>> binner = Binning(data, column='income', tgt_name='default',
... nbins=10, chi2_method=True, chi2_p=0.95)
>>> binner.run()
源代码位于: Modeling_Tool/Core/Binning_Tool.py
982 983 984 985 986 987 988 989 990 991 992 993 994 995 996 997 998 999 1000 1001 1002 1003 1004 1005 1006 1007 1008 1009 1010 1011 1012 1013 1014 1015 1016 1017 1018 1019 1020 1021 1022 1023 1024 1025 1026 1027 1028 1029 1030 1031 1032 1033 1034 1035 1036 1037 1038 1039 1040 1041 1042 1043 1044 1045 1046 1047 1048 1049 1050 1051 1052 1053 1054 1055 1056 1057 1058 1059 1060 1061 1062 1063 1064 1065 1066 1067 1068 1069 1070 1071 1072 1073 1074 1075 1076 1077 1078 1079 1080 1081 1082 1083 1084 1085 1086 1087 1088 1089 1090 1091 1092 1093 1094 1095 1096 1097 1098 1099 1100 1101 1102 1103 1104 1105 1106 1107 1108 1109 1110 1111 1112 1113 1114 1115 1116 1117 1118 1119 1120 1121 1122 1123 1124 1125 1126 1127 1128 1129 1130 1131 1132 1133 1134 1135 1136 1137 1138 1139 1140 1141 1142 1143 1144 1145 1146 1147 1148 1149 1150 1151 1152 1153 1154 1155 1156 1157 1158 1159 1160 1161 1162 1163 1164 1165 1166 1167 1168 1169 1170 1171 1172 1173 1174 1175 1176 1177 1178 1179 1180 1181 1182 1183 1184 1185 1186 1187 1188 1189 1190 1191 1192 1193 1194 1195 1196 1197 1198 1199 1200 1201 1202 1203 1204 1205 1206 1207 1208 1209 1210 1211 1212 1213 1214 1215 1216 1217 1218 1219 1220 1221 1222 1223 1224 1225 1226 1227 1228 1229 1230 1231 1232 1233 1234 1235 1236 1237 1238 1239 1240 1241 1242 1243 1244 1245 1246 1247 1248 1249 1250 1251 1252 1253 1254 1255 1256 1257 1258 1259 1260 1261 1262 1263 1264 1265 1266 1267 1268 1269 1270 1271 1272 1273 1274 1275 1276 1277 1278 1279 1280 1281 1282 1283 1284 1285 1286 1287 1288 1289 1290 1291 | |
run_quick_binning
¶
执行快速分箱。
根据配置参数执行等频或等距分箱,并将结果添加到数据中。
返回:
| 类型 | 描述 |
|---|---|
self
|
返回自身以便链式调用 |
源代码位于: Modeling_Tool/Core/Binning_Tool.py
run_chi2_binning
¶
执行卡方分箱。
在快速分箱的基础上,进一步使用卡方检验进行自动分箱优化。
参数:
| 名称 | 类型 | 描述 | 默认 |
|---|---|---|---|
init_points
|
array - like
|
初始分箱边界,将作为卡方分箱的起点 |
None
|
返回:
| 类型 | 描述 |
|---|---|
self
|
返回自身以便链式调用 |
源代码位于: Modeling_Tool/Core/Binning_Tool.py
1177 1178 1179 1180 1181 1182 1183 1184 1185 1186 1187 1188 1189 1190 1191 1192 1193 1194 1195 1196 1197 1198 1199 1200 1201 1202 1203 1204 1205 1206 1207 1208 1209 1210 1211 1212 1213 1214 1215 1216 1217 1218 1219 1220 1221 1222 1223 1224 1225 1226 1227 1228 1229 1230 1231 1232 1233 1234 1235 1236 1237 1238 1239 1240 1241 1242 1243 1244 1245 1246 1247 1248 1249 | |
run
¶
执行分箱操作。
根据chi2_method参数决定执行快速分箱还是卡方分箱。
返回:
| 类型 | 描述 |
|---|---|
self
|
返回自身以便链式调用 |
源代码位于: Modeling_Tool/Core/Binning_Tool.py
get_result
¶
获取分箱结果。
参数:
| 名称 | 类型 | 描述 | 默认 |
|---|---|---|---|
return_edges
|
bool
|
是否返回分箱边界 |
True
|
返回:
| 类型 | 描述 |
|---|---|
tuple or DataFrame
|
如果return_edges为True,返回(result, bin_edges)元组 否则只返回result |
源代码位于: Modeling_Tool/Core/Binning_Tool.py
get_max_nbins
¶
根据给定的最小分箱比例计算最大分箱数。
根据数据总量和最小分箱比例,计算能够满足最小样本数要求的最大分箱数。
参数:
| 名称 | 类型 | 描述 | 默认 |
|---|---|---|---|
data
|
DataFrame
|
输入数据表 |
必需 |
nbins
|
int
|
期望的分箱数量 |
必需 |
min_bin_prop
|
float
|
每个分箱最小样本占比 |
0.05
|
返回:
| 类型 | 描述 |
|---|---|
int
|
可行的最大分箱数 |
示例:
源代码位于: Modeling_Tool/Core/Binning_Tool.py
get_decision_tree_binning_edges
¶
get_decision_tree_binning_edges(feature, target, max_leaf_nodes=5, min_samples_leaf=0.05, random_state=42, missing_ref_value=None, spec_values=[])
使用决策树对连续变量进行最优分箱。
通过决策树分类算法寻找最优的分箱边界点,适用于连续型变量的自动化分箱。 算法会自动处理缺失值和特殊值,并返回合适的分箱边界。
参数:
| 名称 | 类型 | 描述 | 默认 |
|---|---|---|---|
feature
|
array - like
|
待分箱的连续特征,Pandas Series或一维数组 |
必需 |
target
|
array - like
|
目标变量,二分类标签(Pandas Series或一维数组) |
必需 |
max_leaf_nodes
|
int
|
决策树最大叶节点数,即最大分箱数 |
5
|
min_samples_leaf
|
float
|
叶节点最小样本比例,默认为0.05(5%) |
0.05
|
random_state
|
int
|
随机种子,确保结果可重现 |
42
|
missing_ref_value
|
any
|
缺失值参考值,该值将被视为缺失 |
None
|
spec_values
|
list
|
特殊数值列表,这些值将被独立分箱 |
[]
|
返回:
| 名称 | 类型 | 描述 |
|---|---|---|
bin_edges |
list
|
分箱边界列表 |
示例:
源代码位于: Modeling_Tool/Core/Binning_Tool.py
55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 | |
cre_pvt
¶
生成以变量为行,目标变量为列的数据透视表。
根据指定变量和目标变量生成分组统计透视表,包含每组的负样本数、正样本数、 总样本数以及目标转化率。
参数:
| 名称 | 类型 | 描述 | 默认 |
|---|---|---|---|
df
|
DataFrame
|
数据表 |
必需 |
var_name
|
str
|
变量名(分组依据) |
必需 |
tgt_name
|
str
|
目标变量名(二分类标签,0和1) |
必需 |
返回:
| 名称 | 类型 | 描述 |
|---|---|---|
df_pvt |
DataFrame
|
变量数据透视表,包含列: - 0: 负样本数 - 1: 正样本数 - n: 总样本数 - tr: 目标转化率(正样本占比) |
示例:
源代码位于: Modeling_Tool/Core/Binning_Tool.py
merge_bins
¶
基于位置编号的变量组合并。
将指定位置的分组进行合并,计算合并后的统计指标(样本数、转化率等), 并更新卡方值和转化率差异。
特别注意: 不可重置df_pvt的index
参数:
| 名称 | 类型 | 描述 | 默认 |
|---|---|---|---|
df_pvt
|
DataFrame
|
变量数据透视表,通过cre_pvt函数生成 |
必需 |
ilocs
|
list
|
待合并的位置编号列表(如[0,1]表示合并前两个分组) |
必需 |
返回:
| 名称 | 类型 | 描述 |
|---|---|---|
df_pvt_new |
DataFrame
|
合并后的变量数据透视表 |
示例:
源代码位于: Modeling_Tool/Core/Binning_Tool.py
observed_laplace
¶
对列联表数值进行拉普拉斯修正。
在列联表的每个单元格数值上加上一个小量(0.1**digit),以避免 零计数导致的卡方检验问题。
参数:
| 名称 | 类型 | 描述 | 默认 |
|---|---|---|---|
observed
|
array_like
|
列联表(二维数组或类似结构) |
必需 |
digit
|
int
|
对观测值增加小数的位数, 若为-1则增加整数1 |
6
|
返回:
| 名称 | 类型 | 描述 |
|---|---|---|
obs_laplace |
ndarray
|
拉普拉斯修正后的列联表 |
示例:
源代码位于: Modeling_Tool/Core/Binning_Tool.py
cat_2_list
¶
将分箱后的Categorical序列转换为边界值列表。
从Categorical类型的数据中提取所有区间边界,返回所有左边界和右边界 组成的去重列表。
参数:
| 名称 | 类型 | 描述 | 默认 |
|---|---|---|---|
bin_series
|
Categorical
|
分箱后的Categorical序列 |
必需 |
返回:
| 类型 | 描述 |
|---|---|
list
|
包含所有区间边界值的列表 |
示例:
源代码位于: Modeling_Tool/Core/Binning_Tool.py
get_bin_range
¶
根据分箱边界生成区间字符串描述列表。
将分箱边界点列表转换为带区间符号的字符串描述列表,支持自定义 区间开闭符号和精度。
参数:
| 名称 | 类型 | 描述 | 默认 |
|---|---|---|---|
edges
|
array - like
|
分箱边界值列表 |
必需 |
precision
|
int
|
边界值精度(小数位数) |
5
|
ascending
|
bool
|
是否升序排列 |
False
|
left_sign
|
str
|
左区间符号,'['表示包含,'('表示不包含 |
'('
|
right_sign
|
str
|
右区间符号,']'表示包含,')'表示不包含 |
']'
|
返回:
| 类型 | 描述 |
|---|---|
list
|
区间字符串描述列表 |
示例:
>>> edges = [0, 10, 20, 30]
>>> ranges = get_bin_range(edges, precision=0, ascending=True)
['[0, 10]', '[10, 20]', '[20, 30]']
源代码位于: Modeling_Tool/Core/Binning_Tool.py
get_bin_range_list
¶
将分箱区间字符串列转换为边界值列表。
解析DataFrame中的分箱区间字符串列(如"[0, 10)", "(10, 20]"等), 提取所有唯一的边界值并排序返回。
参数:
| 名称 | 类型 | 描述 | 默认 |
|---|---|---|---|
data
|
DataFrame
|
包含分箱区间列的DataFrame |
必需 |
col
|
str
|
分箱区间列名 |
"_bin_range"
|
返回:
| 类型 | 描述 |
|---|---|
list
|
去重并排序后的边界值列表 |
示例:
源代码位于: Modeling_Tool/Core/Binning_Tool.py
chi2_auto_binning
¶
基于卡方检验的自动分箱。
通过卡方检验判断相邻分箱是否应该合并,迭代进行以下步骤: 1. 首先处理样本量不满足最小要求的头尾分箱 2. 然后处理样本量不足的中间分箱 3. 最后进行卡方检验合并不独立的相邻分箱
参数:
| 名称 | 类型 | 描述 | 默认 |
|---|---|---|---|
df_pvt
|
DataFrame
|
变量数据透视表,通过cre_pvt函数生成,包含列:0, 1, n, tr |
必需 |
max_bins
|
int
|
最大分组数量 |
必需 |
min_cnt_in_bin
|
int
|
每组最小样本数 |
必需 |
p
|
float
|
用于计算自由度为1的卡方分布分位数的概率值. 当相邻组卡方值小于该值时, 认为不独立, 进行合并. 值越大独立性判断越严格 |
0.95
|
返回:
| 名称 | 类型 | 描述 |
|---|---|---|
df_pvt |
DataFrame
|
合并后的变量数据透视表 |
示例:
源代码位于: Modeling_Tool/Core/Binning_Tool.py
751 752 753 754 755 756 757 758 759 760 761 762 763 764 765 766 767 768 769 770 771 772 773 774 775 776 777 778 779 780 781 782 783 784 785 786 787 788 789 790 791 792 793 794 795 796 797 798 799 800 801 802 803 804 805 806 807 808 809 810 811 812 813 814 815 816 817 818 819 820 821 822 823 824 825 826 827 828 829 830 831 832 833 834 835 836 837 838 839 840 841 842 843 844 845 846 847 848 849 850 851 | |
quick_binning
¶
quick_binning(data, column, labels=None, nbins=10, precision=5, equal_freq=True, right=True, include_lowest=False, min_bin_prop=0.05, ascending=True, include_missing=False, tree_binning=False, target=None, random_state=42, fillna=-999999, spec_values=[])
快速分箱函数。
对数据进行快速等频或等距分箱,支持多种分箱策略: - 等频分箱:按分位数切分,保证每箱样本数接近 - 等距分箱:按数值区间均匀切分 - 决策树分箱:使用决策树寻找最优切分点
参数:
| 名称 | 类型 | 描述 | 默认 |
|---|---|---|---|
data
|
DataFrame
|
输入数据表 |
必需 |
column
|
str
|
需要分箱的列名 |
必需 |
labels
|
array - like
|
自定义分箱标签 |
None
|
nbins
|
int or list / tuple
|
分箱数量(整数)或指定分箱边界(列表或元组) |
10
|
precision
|
int
|
边界值精度(小数位数) |
5
|
equal_freq
|
bool
|
True为等频分箱,False为等距分箱 |
True
|
right
|
bool
|
区间是否右闭合 |
True
|
include_lowest
|
bool
|
是否包含最小值 |
False
|
min_bin_prop
|
float
|
每箱最小样本占比 |
0.05
|
ascending
|
bool
|
分箱顺序是否升序 |
True
|
include_missing
|
bool
|
是否包含缺失值 |
False
|
tree_binning
|
bool
|
是否使用决策树分箱 |
False
|
target
|
str
|
目标变量名(决策树分箱时必需) |
None
|
random_state
|
int
|
随机种子 |
42
|
fillna
|
any
|
缺失值填充值 |
-999999
|
spec_values
|
list
|
特殊值列表,将独立成箱 |
[]
|
返回:
| 名称 | 类型 | 描述 |
|---|---|---|
binned |
Categorical
|
分箱后的序列 |
bin_edges |
ndarray
|
分箱边界数组 |
示例:
源代码位于: Modeling_Tool/Core/Binning_Tool.py
854 855 856 857 858 859 860 861 862 863 864 865 866 867 868 869 870 871 872 873 874 875 876 877 878 879 880 881 882 883 884 885 886 887 888 889 890 891 892 893 894 895 896 897 898 899 900 901 902 903 904 905 906 907 908 909 910 911 912 913 914 915 916 917 918 919 920 921 922 923 924 925 926 927 928 929 930 931 932 933 934 935 936 937 938 939 940 941 942 943 944 945 946 947 948 949 950 951 952 953 954 955 956 957 958 959 960 961 962 963 964 965 966 967 968 969 970 971 972 973 974 975 976 977 978 979 | |
chi2_binning
¶
chi2_binning(data, column, nbins=10, precision=5, min_bin_prop=0.05, tgt_name=None, include_missing=True, equal_freq=True, bin_colnames=('_bin_num', '_bin_range'), ascending=True, chi2_p=0.95, init_equi_bins=100, fillna=-999999, spec_values=[], init_points=None)
基于卡方检验的分箱函数。
使用卡方检验自动寻找最优分箱边界,通过卡方检验判断相邻分箱是否应该合并, 最终得到统计上显著的分箱结果。
参数:
| 名称 | 类型 | 描述 | 默认 |
|---|---|---|---|
data
|
DataFrame
|
输入数据表 |
必需 |
column
|
str
|
需要分箱的列名 |
必需 |
nbins
|
int
|
最大分箱数量 |
10
|
precision
|
int
|
边界值精度(小数位数) |
5
|
min_bin_prop
|
float
|
每箱最小样本占比 |
0.05
|
tgt_name
|
str
|
目标变量名(二分类标签,0和1) |
None
|
include_missing
|
bool
|
是否包含缺失值 |
True
|
equal_freq
|
bool
|
True为等频分箱,False为等距分箱 |
True
|
bin_colnames
|
tuple
|
分箱结果列名元组 |
("_bin_num", "_bin_range")
|
ascending
|
bool
|
分箱顺序是否升序 |
True
|
chi2_p
|
float
|
卡方检验显著性水平 |
0.95
|
init_equi_bins
|
int
|
初始等频分箱数量 |
100
|
fillna
|
any
|
缺失值填充值 |
-999999
|
spec_values
|
list
|
特殊值列表 |
[]
|
init_points
|
array - like
|
初始分箱边界,将作为卡方分箱的起点 |
None
|
返回:
| 类型 | 描述 |
|---|---|
tuple
|
(result, bin_edges) - 分箱结果数据框和分箱边界数组 |
示例:
源代码位于: Modeling_Tool/Core/Binning_Tool.py
1294 1295 1296 1297 1298 1299 1300 1301 1302 1303 1304 1305 1306 1307 1308 1309 1310 1311 1312 1313 1314 1315 1316 1317 1318 1319 1320 1321 1322 1323 1324 1325 1326 1327 1328 1329 1330 1331 1332 1333 1334 1335 1336 1337 1338 1339 1340 1341 1342 1343 1344 1345 1346 1347 1348 1349 1350 1351 1352 1353 1354 1355 1356 1357 1358 1359 1360 1361 1362 1363 1364 1365 1366 1367 1368 1369 1370 1371 1372 1373 1374 1375 1376 1377 1378 1379 1380 1381 1382 1383 1384 1385 1386 1387 1388 1389 1390 1391 1392 1393 1394 1395 1396 1397 1398 | |
run_binning
¶
run_binning(data, column, nbins=10, precision=5, min_bin_prop=0.05, include_missing=True, equal_freq=True, bin_colnames=('bin_num', 'bin_range'), ascending=False, right=True, include_lowest=False, tree_binning=False, target=None, random_state=42, spec_values=[])
通用分箱函数,支持等频或等距分箱。
对数值型变量进行分箱处理,支持多种配置选项,返回分箱后的数据和边界值。
参数:
| 名称 | 类型 | 描述 | 默认 |
|---|---|---|---|
data
|
DataFrame
|
包含数据的DataFrame |
必需 |
column
|
str
|
需要分箱的列名 |
必需 |
nbins
|
int
|
分箱数量 |
10
|
precision
|
int
|
边界值精度(小数位数) |
5
|
min_bin_prop
|
float
|
每箱最小样本占比 |
0.05
|
include_missing
|
bool
|
是否包含缺失值 |
True
|
equal_freq
|
bool
|
True为等频分箱,False为等距分箱 |
True
|
bin_colnames
|
tuple
|
分箱结果列名元组 |
("bin_num", "bin_range")
|
ascending
|
bool
|
分箱顺序是否升序 |
False
|
right
|
bool
|
区间是否右闭合 |
True
|
include_lowest
|
bool
|
是否包含最小值 |
False
|
tree_binning
|
bool
|
是否使用决策树分箱 |
False
|
target
|
str
|
目标变量名(决策树分箱时必需) |
None
|
random_state
|
int
|
随机种子 |
42
|
spec_values
|
list
|
特殊值列表 |
[]
|
返回:
| 类型 | 描述 |
|---|---|
tuple
|
(data, bin_edges) - 添加了分箱列的数据和分箱边界数组 |
示例:
源代码位于: Modeling_Tool/Core/Binning_Tool.py
1401 1402 1403 1404 1405 1406 1407 1408 1409 1410 1411 1412 1413 1414 1415 1416 1417 1418 1419 1420 1421 1422 1423 1424 1425 1426 1427 1428 1429 1430 1431 1432 1433 1434 1435 1436 1437 1438 1439 1440 1441 1442 1443 1444 1445 1446 1447 1448 1449 1450 1451 1452 1453 1454 1455 1456 1457 1458 1459 1460 1461 1462 1463 1464 1465 1466 1467 1468 1469 1470 1471 1472 1473 1474 1475 1476 1477 1478 1479 1480 1481 1482 1483 1484 1485 1486 1487 1488 1489 1490 1491 1492 1493 1494 1495 1496 | |
super_binning
¶
super_binning(data, score, dep, nbins=10, precision=5, min_bin_prop=0.05, include_missing=True, equal_freq=True, chi2_method=False, chi2_p=0.95, init_equi_bins=2000, fillna=-999999, spec_values=[], tree_binning=False, random_state=42, return_edges=False, ascending=True, bin_colnames=('_bin_num', '_bin_range'))
超级分箱函数,整合多种分箱策略。
提供统一的分箱接口,支持基础分箱和卡方分箱两种模式, 可以根据参数配置自动选择合适的分箱策略。
参数:
| 名称 | 类型 | 描述 | 默认 |
|---|---|---|---|
data
|
DataFrame
|
输入数据表 |
必需 |
score
|
str
|
需要分箱的分数/数值列名 |
必需 |
dep
|
str
|
目标变量名(二分类标签,0和1) |
必需 |
nbins
|
int
|
最大分箱数量 |
10
|
precision
|
int
|
边界值精度(小数位数) |
5
|
min_bin_prop
|
float
|
每箱最小样本占比 |
0.05
|
include_missing
|
bool
|
是否包含缺失值 |
True
|
equal_freq
|
bool
|
True为等频分箱,False为等距分箱 |
True
|
chi2_method
|
bool
|
是否使用卡方分箱进行精细化 |
False
|
chi2_p
|
float
|
卡方检验显著性水平 |
0.95
|
init_equi_bins
|
int
|
初始等频分箱数量(卡方分箱前) |
2000
|
fillna
|
any
|
缺失值填充值 |
-999999
|
spec_values
|
list
|
特殊值列表 |
[]
|
tree_binning
|
bool
|
是否使用决策树分箱 |
False
|
random_state
|
int
|
随机种子 |
42
|
return_edges
|
bool
|
是否返回分箱边界 |
False
|
ascending
|
bool
|
分箱顺序是否升序 |
True
|
bin_colnames
|
tuple
|
分箱结果列名元组 |
("_bin_num", "_bin_range")
|
返回:
| 类型 | 描述 |
|---|---|
DataFrame or tuple
|
如果return_edges为False,返回分箱结果数据 如果return_edges为True,返回(result, edges)元组 |
示例:
>>> # 卡方分箱
>>> result, edges = super_binning(data, score='income', dep='default',
... nbins=10, chi2_method=True, return_edges=True)
源代码位于: Modeling_Tool/Core/Binning_Tool.py
1499 1500 1501 1502 1503 1504 1505 1506 1507 1508 1509 1510 1511 1512 1513 1514 1515 1516 1517 1518 1519 1520 1521 1522 1523 1524 1525 1526 1527 1528 1529 1530 1531 1532 1533 1534 1535 1536 1537 1538 1539 1540 1541 1542 1543 1544 1545 1546 1547 1548 1549 1550 1551 1552 1553 1554 1555 1556 1557 1558 1559 1560 1561 1562 1563 1564 1565 1566 1567 1568 1569 1570 1571 1572 1573 1574 1575 1576 1577 1578 1579 1580 1581 1582 1583 1584 1585 1586 1587 1588 1589 1590 1591 1592 1593 1594 1595 1596 1597 1598 1599 1600 1601 1602 1603 1604 1605 1606 1607 1608 | |
ODPS 工具 — ODPS_Tool¶
ODPS_Tool
¶
ODPSRunner
¶
Bases: object
源代码位于: Modeling_Tool/Core/ODPS_Tool.py
20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 | |
run_sql
¶
运行SQL并下载结果。
参数:
| 名称 | 类型 | 描述 | 默认 |
|---|---|---|---|
sql
|
str
|
单个 SQL 代码。 |
必需 |
to_df
|
bool
|
是否把结果加载到内存中作为 |
True
|
n_process
|
int
|
|
1
|
csv_path
|
str
|
把结果另存为本地 CSV 的路径。与 |
None
|
返回:
| 类型 | 描述 |
|---|---|
DataFrame
|
当 |
Notes
- 执行阶段(execute_sql)只跑一次, 无重试.
- 下载阶段(to_pandas + to_csv)最多重试 6 次, 适用于网络抖动.
- 当 SQL 返回列数 > 200 时, 线程安全的 wide-schema patch 会自动 patch ODPS Tunnel, 防止 HTTP 414 (URI too long).
示例:
>>> odps = ODPSRunner()
>>> df = odps.run_sql("SELECT * FROM dual LIMIT 10") # 仅 DataFrame
>>> df = odps.run_sql("SELECT * FROM dual LIMIT 10", csv_path="x.csv") # DataFrame + CSV
>>> _ = odps.run_sql("SELECT * FROM dual LIMIT 10", to_df=False, # 仅 CSV
... csv_path="x.csv")
>>> _ = odps.run_sql("CREATE TABLE t AS SELECT 1") # 仅执行, 不下载
源代码位于: Modeling_Tool/Core/ODPS_Tool.py
download_table
¶
读取表中数据至DataFrame
参数:
| 名称 | 类型 | 描述 | 默认 |
|---|---|---|---|
table_name
|
str
|
表名 |
必需 |
partition
|
dict
|
分区, 例如: 'dt=2022-01-01,taino=0' |
None
|
n_process
|
int
|
将查询数据转为pandas.DataFrame的进程数 |
1
|
csv_path
|
str
|
查询数据保存至csv文件路径 |
None
|
返回:
| 名称 | 类型 | 描述 |
|---|---|---|
df |
DataFrame
|
SQL查询数据结果 |
源代码位于: Modeling_Tool/Core/ODPS_Tool.py
upload_df
¶
上传数据集至mc中创建新表
参数:
| 名称 | 类型 | 描述 | 默认 |
|---|---|---|---|
table_name
|
表名 |
必需 | |
table_schema
|
表Schema |
None
|
|
df
|
数据集 |
必需 | |
partition
|
保存分区 |
None
|
源代码位于: Modeling_Tool/Core/ODPS_Tool.py
insert_df
¶
将数据集插入至mc已存在的表中.
参数:
| 名称 | 类型 | 描述 | 默认 |
|---|---|---|---|
df
|
数据集 |
必需 | |
table_name
|
表名 |
必需 | |
overwrite
|
是否覆盖 |
True
|
|
partition
|
写入分区, 默认为None即无分区 |
None
|
源代码位于: Modeling_Tool/Core/ODPS_Tool.py
ODPS 并发管理 — Parallel_ODPS_Manager¶
Parallel_ODPS_Manager
¶
ParallelODPSManager
¶
Parallel ODPS pull/push helper built on ODPSRunner and ParallelApplyEngine.
源代码位于: Modeling_Tool/Core/Parallel_ODPS_Manager.py
100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322 323 324 325 326 327 328 329 330 331 332 333 334 335 336 337 338 339 340 341 342 343 344 345 346 347 348 | |
数据一致性对比 — Proc_Compare¶
Proc_Compare
¶
ProcCompareEngine
¶
SAS proc_compare-like consistency checker for DataFrames and CSV files.
源代码位于: Modeling_Tool/Core/Proc_Compare.py
66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322 323 324 325 326 327 328 329 330 331 332 333 334 335 336 337 338 339 340 341 342 343 344 345 346 347 348 349 350 351 352 353 354 355 356 357 358 359 360 361 362 363 364 365 366 367 368 369 370 371 372 373 374 375 376 377 378 379 380 381 382 383 384 385 386 387 388 389 390 391 392 393 394 395 396 397 398 399 400 401 402 403 404 405 406 407 408 409 410 411 412 413 414 415 416 417 418 419 420 421 422 423 424 425 426 427 428 429 430 431 432 433 434 435 436 437 438 439 440 441 442 443 444 445 446 447 448 449 450 451 452 453 454 455 456 457 458 459 460 461 462 463 464 465 466 467 468 469 470 471 472 473 474 475 476 477 478 479 480 481 482 483 484 485 486 487 488 489 490 491 492 493 494 495 496 497 498 499 500 501 502 503 504 505 506 507 508 509 510 511 512 513 514 515 516 517 518 519 520 521 522 523 524 525 526 527 528 529 530 531 532 533 534 535 536 537 538 539 540 541 542 543 544 545 546 547 548 549 550 551 552 553 554 555 556 557 558 559 560 561 562 563 564 565 566 567 568 569 570 571 572 573 574 575 576 577 578 579 580 581 582 583 584 585 586 587 588 589 590 591 592 593 594 595 596 597 598 599 600 601 602 603 604 605 606 607 608 609 610 611 612 613 614 615 616 617 618 619 620 621 622 623 624 625 626 627 628 629 630 631 632 633 634 635 636 637 638 639 640 641 642 643 644 645 646 647 648 649 650 651 652 653 654 655 656 657 658 659 660 661 662 663 664 665 666 667 668 669 670 671 672 673 674 675 676 677 678 679 680 681 682 683 684 685 686 687 688 689 690 691 | |
proc_compare
¶
proc_compare(left: DataFrame | str | Path, right: DataFrame | str | Path, **kwargs: Any) -> ProcCompareResult
Convenience wrapper around :class:ProcCompareEngine.
源代码位于: Modeling_Tool/Core/Proc_Compare.py
斜率计算 — Slope_Tool¶
Slope_Tool
¶
SlopeCalculator
¶
斜率计算器。
提供多种方法计算数据列的线性回归斜率,支持: - sklearn LinearRegression - scipy.stats.linregress - numpy.polyfit - 手动最小二乘法
参数:
| 名称 | 类型 | 描述 | 默认 |
|---|---|---|---|
data
|
DataFrame
|
包含数据的DataFrame |
必需 |
column
|
str
|
数据列名 |
必需 |
属性:
| 名称 | 类型 | 描述 |
|---|---|---|
data |
DataFrame
|
输入数据 |
column |
str
|
列名 |
y |
ndarray
|
转换后的数据数组 |
x |
ndarray
|
x轴数组(索引) |
示例:
>>> df = pd.DataFrame({'values': [1, 2, 3, 4, 5]})
>>> calc = SlopeCalculator(df, 'values')
>>> calc.calculate_sklearn()
1.0
>>> calc.calculate_scipy()
(1.0, 1.0, 9.999999999999996e-08, 0.0)
源代码位于: Modeling_Tool/Core/Slope_Tool.py
192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322 323 324 325 326 327 328 329 330 331 332 333 334 335 336 337 338 339 340 341 342 343 344 345 346 347 348 349 350 351 352 353 354 355 356 | |
calculate_sklearn
¶
calculate_scipy
¶
使用scipy.stats.linregress计算斜率。
返回:
| 类型 | 描述 |
|---|---|
tuple
|
(slope, r_value, p_value, std_err) 元组 |
calculate_numpy
¶
calculate_manual
¶
calculate_all
¶
使用所有方法计算斜率。
返回:
| 类型 | 描述 |
|---|---|
dict
|
包含各种方法计算结果的字典 |
源代码位于: Modeling_Tool/Core/Slope_Tool.py
calculate
staticmethod
¶
静态方法:使用指定方法计算斜率。
参数:
| 名称 | 类型 | 描述 | 默认 |
|---|---|---|---|
data
|
DataFrame
|
包含数据的DataFrame |
必需 |
column
|
str
|
数据列名 |
必需 |
method
|
str
|
计算方法,候选值:'sklearn', 'scipy', 'numpy', 'manual' |
'sklearn'
|
返回:
| 类型 | 描述 |
|---|---|
float or tuple
|
斜率值(scipy返回元组,其他返回浮点数) |
示例:
>>> df = pd.DataFrame({'values': [1, 2, 3, 4, 5]})
>>> SlopeCalculator.calculate(df, 'values', method='numpy')
1.0
源代码位于: Modeling_Tool/Core/Slope_Tool.py
calculate_slope_sklearn
¶
使用SKlearn的LinearRegression计算数据列的斜率。
基于最小二乘法,通过LinearRegression模型拟合数据点, 返回线性回归的斜率系数。
参数:
| 名称 | 类型 | 描述 | 默认 |
|---|---|---|---|
data
|
DataFrame
|
包含数据的DataFrame |
必需 |
column
|
str
|
数据列名 |
必需 |
返回:
| 类型 | 描述 |
|---|---|
float
|
线性回归的斜率值 |
示例:
源代码位于: Modeling_Tool/Core/Slope_Tool.py
calculate_slope_scipy
¶
使用SciPy的linregress函数计算数据列的斜率。
基于最小二乘法,通过scipy.stats.linregress函数拟合数据点, 返回斜率及更多统计信息。
参数:
| 名称 | 类型 | 描述 | 默认 |
|---|---|---|---|
data
|
DataFrame
|
包含数据的DataFrame |
必需 |
column
|
str
|
数据列名 |
必需 |
返回:
| 类型 | 描述 |
|---|---|
tuple
|
(slope, r_value, p_value, std_err) 元组,包含: - slope: 斜率值 - r_value: 相关系数 - p_value: p值 - std_err: 标准误差 |
示例:
>>> df = pd.DataFrame({'values': [1, 2, 3, 4, 5]})
>>> slope, r, p, se = calculate_slope_scipy(df, 'values')
>>> print(f"斜率: {slope}, 相关系数: {r}")
斜率: 1.0, 相关系数: 1.0
源代码位于: Modeling_Tool/Core/Slope_Tool.py
calculate_slope_numpy
¶
使用NumPy的polyfit函数计算数据列的斜率。
使用numpy.polyfit函数进行一阶多项式拟合, 返回线性回归的斜率。
参数:
| 名称 | 类型 | 描述 | 默认 |
|---|---|---|---|
data
|
DataFrame
|
包含数据的DataFrame |
必需 |
column
|
str
|
数据列名 |
必需 |
返回:
| 类型 | 描述 |
|---|---|
float
|
线性回归的斜率值 |
示例:
源代码位于: Modeling_Tool/Core/Slope_Tool.py
calculate_slope_manual
¶
手动使用最小二乘法计算数据列的斜率。
通过手动实现最小二乘法公式,计算线性回归的斜率: slope = Σ((x - x_mean) * (y - y_mean)) / Σ((x - x_mean)²)
参数:
| 名称 | 类型 | 描述 | 默认 |
|---|---|---|---|
data
|
DataFrame
|
包含数据的DataFrame |
必需 |
column
|
str
|
数据列名 |
必需 |
返回:
| 类型 | 描述 |
|---|---|
float
|
线性回归的斜率值 |
示例:
源代码位于: Modeling_Tool/Core/Slope_Tool.py
通用工具 — utils¶
utils
¶
DataFrameProcessor
¶
DataFrame处理工具类。
提供DataFrame操作的统一接口,包括列操作、行过滤、类型转换等功能。
参数:
| 名称 | 类型 | 描述 | 默认 |
|---|---|---|---|
data
|
DataFrame
|
要处理的DataFrame |
必需 |
示例:
>>> processor = DataFrameProcessor(df)
>>> processor.move_column('col_a', 0)
>>> processor.convert_colnames('lower')
源代码位于: Modeling_Tool/Core/utils.py
1987 1988 1989 1990 1991 1992 1993 1994 1995 1996 1997 1998 1999 2000 2001 2002 2003 2004 2005 2006 2007 2008 2009 2010 2011 2012 2013 2014 2015 2016 2017 2018 2019 2020 2021 2022 2023 2024 2025 2026 2027 2028 2029 2030 2031 2032 2033 2034 2035 2036 2037 2038 2039 2040 2041 2042 2043 2044 2045 2046 2047 2048 2049 2050 2051 2052 2053 2054 2055 2056 2057 2058 2059 2060 2061 2062 2063 2064 2065 2066 2067 2068 2069 2070 2071 2072 2073 2074 2075 2076 2077 2078 2079 2080 2081 2082 2083 2084 2085 2086 2087 2088 2089 2090 2091 2092 2093 2094 2095 2096 2097 2098 2099 2100 2101 2102 2103 2104 2105 2106 2107 2108 2109 2110 2111 2112 2113 2114 2115 2116 2117 2118 2119 2120 2121 2122 2123 2124 2125 2126 2127 2128 2129 2130 2131 2132 2133 2134 2135 2136 2137 2138 | |
move_column
¶
移动列到指定位置。
参数:
| 名称 | 类型 | 描述 | 默认 |
|---|---|---|---|
colname
|
str
|
要移动的列名 |
必需 |
idx
|
int
|
目标位置索引 |
必需 |
return_kDF
|
bool
|
是否返回kDataFrame |
True
|
h2o_frame
|
bool
|
输入是否为H2OFrame |
False
|
返回:
| 类型 | 描述 |
|---|---|
DataFrame or kDataFrame
|
|
源代码位于: Modeling_Tool/Core/utils.py
convert_colnames
¶
转换列名格式。
参数:
| 名称 | 类型 | 描述 | 默认 |
|---|---|---|---|
how
|
str
|
转换方式 |
"lowercase"
|
return_kDF
|
bool
|
是否返回kDataFrame |
True
|
返回:
| 类型 | 描述 |
|---|---|
DataFrame or kDataFrame
|
|
源代码位于: Modeling_Tool/Core/utils.py
col_filter_regex
¶
使用正则表达式过滤列。
参数:
| 名称 | 类型 | 描述 | 默认 |
|---|---|---|---|
regex
|
str
|
正则表达式 |
必需 |
case_sensitive
|
bool
|
是否区分大小写 |
True
|
h2o_frame
|
bool
|
输入是否为H2OFrame |
False
|
return_kDF
|
bool
|
是否返回kDataFrame |
True
|
返回:
| 类型 | 描述 |
|---|---|
DataFrame or kDataFrame
|
|
源代码位于: Modeling_Tool/Core/utils.py
row_filter_regex
¶
使用正则表达式过滤行。
参数:
| 名称 | 类型 | 描述 | 默认 |
|---|---|---|---|
col
|
str
|
用于过滤的列名 |
必需 |
regex
|
str
|
正则表达式 |
必需 |
case_sensitive
|
bool
|
是否区分大小写 |
True
|
as_index
|
bool
|
是否将过滤列作为索引 |
False
|
return_kDF
|
bool
|
是否返回kDataFrame |
True
|
返回:
| 类型 | 描述 |
|---|---|
DataFrame or kDataFrame
|
|
源代码位于: Modeling_Tool/Core/utils.py
get_dtypes
¶
获取数据类型。
参数:
| 名称 | 类型 | 描述 | 默认 |
|---|---|---|---|
outputFile
|
str
|
输出文件路径 |
None
|
ck_format
|
bool
|
是否使用自定义格式 |
False
|
返回:
| 类型 | 描述 |
|---|---|
DataFrame
|
|
源代码位于: Modeling_Tool/Core/utils.py
drop_tmp_cols
¶
删除临时列。
参数:
| 名称 | 类型 | 描述 | 默认 |
|---|---|---|---|
drop_list
|
list
|
要删除的列列表 |
['py_inserttime']
|
返回:
| 类型 | 描述 |
|---|---|
DataFrame
|
|
源代码位于: Modeling_Tool/Core/utils.py
FilePathManager
¶
文件路径管理工具类。
提供路径操作、文件列表获取、目录创建等功能。
示例:
>>> fpm = FilePathManager('/base/path')
>>> fpm.get_filenames('.*\.csv')
>>> fpm.mkdir_if_not_exist('output')
源代码位于: Modeling_Tool/Core/utils.py
2141 2142 2143 2144 2145 2146 2147 2148 2149 2150 2151 2152 2153 2154 2155 2156 2157 2158 2159 2160 2161 2162 2163 2164 2165 2166 2167 2168 2169 2170 2171 2172 2173 2174 2175 2176 2177 2178 2179 2180 2181 2182 2183 2184 2185 2186 2187 2188 2189 2190 2191 2192 2193 2194 2195 2196 2197 2198 2199 2200 2201 2202 2203 2204 2205 2206 2207 2208 2209 2210 2211 2212 2213 2214 2215 2216 2217 2218 2219 2220 2221 2222 2223 2224 2225 2226 2227 2228 2229 | |
get_filenames
¶
获取匹配的文件名列表。
参数:
| 名称 | 类型 | 描述 | 默认 |
|---|---|---|---|
path
|
str
|
目录路径 |
必需 |
regex
|
str
|
正则表达式 |
必需 |
返回:
| 类型 | 描述 |
|---|---|
list
|
|
add_suffix
¶
添加文件后缀。
参数:
| 名称 | 类型 | 描述 | 默认 |
|---|---|---|---|
file
|
str
|
文件路径 |
必需 |
suffix
|
str
|
后缀 |
"_cut"
|
返回:
| 类型 | 描述 |
|---|---|
str
|
|
mkdir
¶
创建目录。
参数:
| 名称 | 类型 | 描述 | 默认 |
|---|---|---|---|
folder_path
|
str
|
目录路径 |
必需 |
replace
|
bool
|
是否替换已存在目录 |
False
|
返回:
| 类型 | 描述 |
|---|---|
int
|
|
源代码位于: Modeling_Tool/Core/utils.py
get_curr_abs_path
¶
DateTimeUtils
¶
日期时间工具类。
提供日期时间相关的便捷方法。
示例:
>>> dt_utils = DateTimeUtils()
>>> dt_utils.get_curr_datetime('-')
'2025-03-30-143624'
>>> dt_utils.get_last_vintage()
'202502'
源代码位于: Modeling_Tool/Core/utils.py
2232 2233 2234 2235 2236 2237 2238 2239 2240 2241 2242 2243 2244 2245 2246 2247 2248 2249 2250 2251 2252 2253 2254 2255 2256 2257 2258 2259 2260 2261 2262 2263 2264 2265 2266 2267 2268 2269 2270 2271 2272 2273 2274 2275 2276 2277 2278 2279 2280 2281 2282 2283 2284 2285 2286 2287 2288 2289 2290 2291 2292 2293 2294 2295 2296 2297 2298 2299 2300 2301 2302 2303 2304 2305 2306 2307 2308 2309 2310 2311 2312 2313 2314 2315 2316 2317 2318 2319 2320 2321 2322 2323 2324 2325 2326 2327 2328 2329 2330 2331 | |
get_curr_datetime
¶
获取当前日期时间。
参数:
| 名称 | 类型 | 描述 | 默认 |
|---|---|---|---|
sep
|
str
|
分隔符 |
''
|
返回:
| 类型 | 描述 |
|---|---|
str
|
|
get_buffer_date
¶
获取缓冲日期。
参数:
| 名称 | 类型 | 描述 | 默认 |
|---|---|---|---|
start_date
|
str
|
起始日期 |
必需 |
返回:
| 类型 | 描述 |
|---|---|
str
|
|
get_quarter
¶
get_last_vintage
¶
last_month_vintage
¶
获取上个月vintage。
参数:
| 名称 | 类型 | 描述 | 默认 |
|---|---|---|---|
year
|
int
|
|
必需 |
month
|
int
|
|
必需 |
day
|
int
|
|
必需 |
返回:
| 类型 | 描述 |
|---|---|
int
|
|
get_valid_vintages
¶
获取有效vintage列表。
参数:
| 名称 | 类型 | 描述 | 默认 |
|---|---|---|---|
sVintage
|
int
|
|
必需 |
eVintage
|
int
|
|
必需 |
返回:
| 类型 | 描述 |
|---|---|
list
|
|
WOEIVCalculator
¶
WOE和IV计算工具类。
提供信用评分中常用的WOE和IV指标计算功能。
参数:
| 名称 | 类型 | 描述 | 默认 |
|---|---|---|---|
data
|
DataFrame
|
包含比例的数据表 |
必需 |
bad_pct_col
|
str
|
坏样本占比列名 |
必需 |
good_pct_col
|
str
|
好样本占比列名 |
必需 |
示例:
源代码位于: Modeling_Tool/Core/utils.py
2334 2335 2336 2337 2338 2339 2340 2341 2342 2343 2344 2345 2346 2347 2348 2349 2350 2351 2352 2353 2354 2355 2356 2357 2358 2359 2360 2361 2362 2363 2364 2365 2366 2367 2368 2369 2370 2371 2372 2373 2374 2375 2376 2377 2378 2379 2380 2381 2382 2383 2384 2385 2386 2387 2388 2389 2390 2391 2392 2393 2394 2395 2396 2397 2398 2399 2400 2401 2402 2403 2404 2405 2406 2407 2408 2409 2410 2411 2412 2413 2414 2415 2416 2417 2418 | |
calc_woe
¶
计算WOE值。
参数:
| 名称 | 类型 | 描述 | 默认 |
|---|---|---|---|
fillna
|
bool
|
是否填充NA为0 |
True
|
返回:
| 类型 | 描述 |
|---|---|
float or Series
|
|
源代码位于: Modeling_Tool/Core/utils.py
calc_iv
¶
计算IV值。
参数:
| 名称 | 类型 | 描述 | 默认 |
|---|---|---|---|
fillna
|
bool
|
是否填充NA为0 |
True
|
返回:
| 类型 | 描述 |
|---|---|
float or Series
|
|
源代码位于: Modeling_Tool/Core/utils.py
calc_both
¶
同时计算WOE和IV。
参数:
| 名称 | 类型 | 描述 | 默认 |
|---|---|---|---|
fillna
|
bool
|
是否填充NA为0 |
True
|
返回:
| 类型 | 描述 |
|---|---|
tuple
|
|
源代码位于: Modeling_Tool/Core/utils.py
bucket_by_cond
¶
bucket_by_cond(df: DataFrame, cond_dict: dict, colname: str, drop_unmatched: bool = True, default=nan) -> DataFrame
根据 query 条件字典对数据分组打标签。
参数:
| 名称 | 类型 | 描述 | 默认 |
|---|---|---|---|
df
|
原始 DataFrame
|
|
必需 |
cond_dict
|
标签: query条件字符串
|
|
标签: query条件字符串
|
colname
|
新增的标签列名
|
|
必需 |
drop_unmatched
|
True=丢弃未命中行(原逻辑), False=保留全量
|
|
True
|
default
|
未命中行的默认值(仅 drop_unmatched=False 时生效)
|
|
nan
|
源代码位于: Modeling_Tool/Core/utils.py
cut2pieces
¶
将列表切分为多个子列表。
根据指定的切分数量,将列表均匀地切分为多个子列表。
参数:
| 名称 | 类型 | 描述 | 默认 |
|---|---|---|---|
varlist
|
list
|
需要切分的列表 |
必需 |
n
|
int
|
切分的子列表数量 |
4
|
返回:
| 类型 | 描述 |
|---|---|
list
|
切分后的子列表 |
示例:
源代码位于: Modeling_Tool/Core/utils.py
check_colname_exist
¶
检查列名是否存在于DataFrame中。
参数:
| 名称 | 类型 | 描述 | 默认 |
|---|---|---|---|
data
|
DataFrame
|
输入数据表 |
必需 |
colname
|
str
|
需要检查的列名 |
必需 |
返回:
| 类型 | 描述 |
|---|---|
bool
|
如果列名存在返回True,否则返回False |
示例:
源代码位于: Modeling_Tool/Core/utils.py
get_curr_abs_path
¶
获取当前模块目录下指定路径的绝对路径。
参数:
| 名称 | 类型 | 描述 | 默认 |
|---|---|---|---|
path
|
str
|
相对路径 |
必需 |
返回:
| 类型 | 描述 |
|---|---|
str
|
绝对路径字符串 |
get_curr_datetime
¶
获取当前日期时间字符串。
参数:
| 名称 | 类型 | 描述 | 默认 |
|---|---|---|---|
sep
|
str
|
日期和时间之间的分隔符 |
''
|
返回:
| 类型 | 描述 |
|---|---|
str
|
格式化后的日期时间字符串,格式为YYYYMMDD{sep}HHMMSS |
示例:
源代码位于: Modeling_Tool/Core/utils.py
get_buffer_date
¶
获取起始日期前4周(28天)的日期。
参数:
| 名称 | 类型 | 描述 | 默认 |
|---|---|---|---|
start_date
|
str
|
起始日期,格式为'YYYY-MM-DD' |
必需 |
返回:
| 类型 | 描述 |
|---|---|
str
|
起始日期前4周的日期,格式为'YYYY-MM-DD' |
示例:
源代码位于: Modeling_Tool/Core/utils.py
get_quarter
¶
从日期字符串获取季度值。
参数:
| 名称 | 类型 | 描述 | 默认 |
|---|---|---|---|
strDate
|
str
|
日期字符串,格式为'YYYYMM'或'YYYYMMDD' |
必需 |
返回:
| 类型 | 描述 |
|---|---|
int
|
季度值(1-4) |
示例:
源代码位于: Modeling_Tool/Core/utils.py
get_last_vintage
¶
获取上一个月的年月字符串。
返回:
| 类型 | 描述 |
|---|---|
str
|
上一年月的字符串,格式为'YYYYMM' |
示例:
源代码位于: Modeling_Tool/Core/utils.py
read_csv
¶
读取CSV文件并返回kDataFrame对象。
参数:
| 名称 | 类型 | 描述 | 默认 |
|---|---|---|---|
path
|
str
|
CSV文件路径 |
必需 |
*args
|
pandas.read_csv的其他位置参数 |
()
|
|
**kwargs
|
pandas.read_csv的其他关键字参数 |
{}
|
返回:
| 类型 | 描述 |
|---|---|
kDataFrame
|
包含数据的kDataFrame对象 |
示例:
源代码位于: Modeling_Tool/Core/utils.py
df_to_h2oframe
¶
将DataFrame转换为H2OFrame。
参数:
| 名称 | 类型 | 描述 | 默认 |
|---|---|---|---|
data
|
DataFrame
|
输入数据表 |
必需 |
返回:
| 类型 | 描述 |
|---|---|
H2OFrame
|
H2OFrame对象 |
示例:
源代码位于: Modeling_Tool/Core/utils.py
move_column
¶
将指定列移动到DataFrame的特定位置。
参数:
| 名称 | 类型 | 描述 | 默认 |
|---|---|---|---|
data
|
DataFrame
|
输入数据表 |
必需 |
colname
|
str
|
需要移动的列名 |
必需 |
idx
|
int
|
目标位置索引 |
必需 |
return_kDF
|
bool
|
是否返回kDataFrame对象 |
True
|
h2o_frame
|
bool
|
输入是否为H2OFrame |
False
|
返回:
| 类型 | 描述 |
|---|---|
DataFrame or kDataFrame
|
列顺序调整后的数据表 |
示例:
>>> df = pd.DataFrame({'a': [1, 2], 'b': [3, 4], 'c': [5, 6]})
>>> move_column(df, 'c', 0) # 将'c'列移到第一列
源代码位于: Modeling_Tool/Core/utils.py
convert_to_vintage
¶
根据时间列生成Vintage列。
参数:
| 名称 | 类型 | 描述 | 默认 |
|---|---|---|---|
data
|
DataFrame
|
输入数据表 |
必需 |
vintage_colname
|
str
|
生成的Vintage列名 |
'VINTAGE'
|
by
|
str
|
时间列名 |
'TRAN_TMS'
|
return_kDF
|
bool
|
是否返回kDataFrame对象 |
True
|
返回:
| 类型 | 描述 |
|---|---|
DataFrame or kDataFrame
|
添加了Vintage列的数据表 |
示例:
>>> df = pd.DataFrame({'TRAN_TMS': ['2025-03-15 10:00:00', '2025-03-20 11:00:00']})
>>> convert_to_vintage(df)
源代码位于: Modeling_Tool/Core/utils.py
col_filter_regex
¶
col_filter_regex(data, regex='.*?of_co_at_12m', case_sensitive=True, h2o_frame=False, return_kDF=True)
使用正则表达式过滤DataFrame的列名。
参数:
| 名称 | 类型 | 描述 | 默认 |
|---|---|---|---|
data
|
DataFrame or H2OFrame
|
输入数据表 |
必需 |
regex
|
str
|
正则表达式模式 |
".*?of_co_at_12m"
|
case_sensitive
|
bool
|
是否区分大小写 |
True
|
h2o_frame
|
bool
|
输入是否为H2OFrame |
False
|
return_kDF
|
bool
|
是否返回kDataFrame对象 |
True
|
返回:
| 类型 | 描述 |
|---|---|
DataFrame or kDataFrame
|
过滤后的数据表(只包含匹配的列) |
示例:
>>> df = pd.DataFrame({'score_at_12m': [1, 2], 'other_col': [3, 4]})
>>> col_filter_regex(df, regex='score_at_12m')
源代码位于: Modeling_Tool/Core/utils.py
row_filter_regex
¶
使用正则表达式过滤DataFrame的行。
参数:
| 名称 | 类型 | 描述 | 默认 |
|---|---|---|---|
data
|
DataFrame
|
输入数据表 |
必需 |
col
|
str
|
用于过滤的列名 |
必需 |
regex
|
str
|
正则表达式模式 |
必需 |
case_sensitive
|
bool
|
是否区分大小写 |
True
|
as_index
|
bool
|
是否将过滤列作为索引 |
False
|
return_kDF
|
bool
|
是否返回kDataFrame对象 |
True
|
返回:
| 类型 | 描述 |
|---|---|
DataFrame or kDataFrame
|
过滤后的数据表 |
示例:
>>> df = pd.DataFrame({'name': ['apple', 'banana', 'cherry'], 'value': [1, 2, 3]})
>>> row_filter_regex(df, 'name', 'a.*')
源代码位于: Modeling_Tool/Core/utils.py
convert_colnames
¶
统一DataFrame列名的格式。
参数:
| 名称 | 类型 | 描述 | 默认 |
|---|---|---|---|
data
|
DataFrame
|
输入数据表 |
必需 |
how
|
str
|
转换方式,可选值:'lower'/'lowercase', 'upper'/'uppercase', 'cap'/'capitalize' |
"lowercase"
|
return_kDF
|
bool
|
是否返回kDataFrame对象 |
True
|
返回:
| 类型 | 描述 |
|---|---|
DataFrame or kDataFrame
|
列名统一后的数据表 |
示例:
源代码位于: Modeling_Tool/Core/utils.py
proc_freq
¶
实现SAS的PROC FREQ功能,计算频数和百分比。
参数:
| 名称 | 类型 | 描述 | 默认 |
|---|---|---|---|
data
|
DataFrame
|
输入数据表 |
必需 |
var
|
str
|
需要统计的列名 |
必需 |
return_kDF
|
bool
|
是否返回kDataFrame对象 |
True
|
返回:
| 类型 | 描述 |
|---|---|
DataFrame
|
包含frequency, percent, cumFrequency, cumPercent的统计表 |
示例:
源代码位于: Modeling_Tool/Core/utils.py
proc_means
¶
实现SAS的PROC MEANS功能,计算描述性统计量。
参数:
| 名称 | 类型 | 描述 | 默认 |
|---|---|---|---|
data
|
DataFrame
|
输入数据表 |
必需 |
varlist
|
list
|
需要统计的列名列表,默认为所有列 |
None
|
quantiles
|
list
|
分位数列表 |
[0.05, 0.15, 0.25, 0.5, 0.75, 0.95, 0.99]
|
返回:
| 类型 | 描述 |
|---|---|
DataFrame
|
包含统计量的数据表,包括count, mean, std, min, max及指定分位数 |
示例:
源代码位于: Modeling_Tool/Core/utils.py
capping_score
¶
对模型分数进行缩放和上限处理。
参数:
| 名称 | 类型 | 描述 | 默认 |
|---|---|---|---|
data
|
DataFrame
|
输入数据表 |
必需 |
pb_score
|
str
|
分数列名 |
必需 |
multiplier
|
float
|
分数缩放倍数 |
1
|
df_type
|
str
|
数据类型,'DataFrame'或'h2o' |
'DataFrame'
|
返回:
| 类型 | 描述 |
|---|---|
Series or H2OFrame
|
处理后的分数 |
示例:
>>> df = pd.DataFrame({'score': [0.1, 0.5, 0.99, 1.0]})
>>> capping_score(df, 'score', multiplier=600, df_type='DataFrame')
源代码位于: Modeling_Tool/Core/utils.py
get_filenames
¶
获取指定路径下匹配正则表达式的文件名列表。
参数:
| 名称 | 类型 | 描述 | 默认 |
|---|---|---|---|
path
|
str
|
文件夹路径 |
必需 |
regex
|
str
|
正则表达式模式 |
必需 |
返回:
| 类型 | 描述 |
|---|---|
list
|
匹配的文件名列表 |
示例:
源代码位于: Modeling_Tool/Core/utils.py
sas_to_csv_by_folder
¶
将指定文件夹中的所有SAS数据集转换为CSV文件。
参数:
| 名称 | 类型 | 描述 | 默认 |
|---|---|---|---|
folder_path
|
str
|
包含SAS文件的文件夹路径 |
必需 |
返回:
| 类型 | 描述 |
|---|---|
int
|
执行状态码(0表示成功) |
示例:
源代码位于: Modeling_Tool/Core/utils.py
read_attr_list
¶
读取属性列表文件(每行一个属性)。
参数:
| 名称 | 类型 | 描述 | 默认 |
|---|---|---|---|
path
|
str
|
文件路径 |
"pe_attr_list.txt"
|
lower
|
bool
|
是否转换为小写 |
False
|
返回:
| 类型 | 描述 |
|---|---|
list
|
属性列表 |
示例:
源代码位于: Modeling_Tool/Core/utils.py
write_attr_list
¶
将变量列表写入文件。
Parameters
Parameters
var_list : list
要写入的变量列表
path : str, default "_vls_results.txt"
输出文件路径
sep : str, default "
" 分隔符 quote : str, default 'double' 引号类型,'double', 'single', 或 'none'
Returns
Returns
None
Examples
Examples
>>> write_attr_list(['var1', 'var2'], 'output.txt', quote='single')
源代码位于: Modeling_Tool/Core/utils.py
list_filter_regex
¶
使用正则表达式过滤列表元素。
参数:
| 名称 | 类型 | 描述 | 默认 |
|---|---|---|---|
ls
|
list
|
输入列表 |
必需 |
regex
|
str
|
正则表达式模式 |
必需 |
返回:
| 类型 | 描述 |
|---|---|
list
|
匹配的元素列表 |
示例:
源代码位于: Modeling_Tool/Core/utils.py
list_to_h2oFrame
¶
将值转换为指定长度的H2O Frame。
参数:
| 名称 | 类型 | 描述 | 默认 |
|---|---|---|---|
val
|
str or float or int
|
值 |
必需 |
length
|
int
|
长度 |
必需 |
返回:
| 类型 | 描述 |
|---|---|
H2OFrame
|
包含重复值的H2OFrame |
示例:
源代码位于: Modeling_Tool/Core/utils.py
odds_score
¶
根据概率分数计算Odds分数。
用于将概率值转换为信用分数刻度。
参数:
| 名称 | 类型 | 描述 | 默认 |
|---|---|---|---|
pb_score
|
float
|
预测概率(0到1之间) |
必需 |
event_ratio
|
float
|
事件比例 |
15
|
margin_point
|
float
|
分数点差 |
20
|
score_point
|
float
|
基础分数点 |
500
|
返回:
| 类型 | 描述 |
|---|---|
float
|
Odds分数 |
示例:
源代码位于: Modeling_Tool/Core/utils.py
last_Month_Vintage
¶
获取上一个月的年月字符串。
参数:
| 名称 | 类型 | 描述 | 默认 |
|---|---|---|---|
year
|
int
|
年份 |
必需 |
month
|
int
|
月份 |
必需 |
day
|
int
|
日期 |
必需 |
返回:
| 类型 | 描述 |
|---|---|
str
|
上一个月的年月字符串,格式为'YYYYMM' |
示例:
源代码位于: Modeling_Tool/Core/utils.py
read_sas_file
¶
读取SAS数据集文件。
使用latin-1编码读取SAS文件,这是SAS Studio和SAS Grid的默认编码。
参数:
| 名称 | 类型 | 描述 | 默认 |
|---|---|---|---|
file_path_name
|
str
|
SAS文件路径 |
''
|
返回:
| 类型 | 描述 |
|---|---|
kDataFrame
|
包含数据的kDataFrame对象 |
示例:
源代码位于: Modeling_Tool/Core/utils.py
sas_to_csv
¶
将SAS数据集转换为CSV文件。
参数:
| 名称 | 类型 | 描述 | 默认 |
|---|---|---|---|
fileNameWithPath
|
str
|
输入SAS文件路径 |
必需 |
outputFileNameWithPath
|
str
|
输出CSV文件路径 |
必需 |
timecounter
|
bool
|
是否打印执行时间 |
True
|
返回:
| 类型 | 描述 |
|---|---|
int
|
执行状态码(0表示成功) |
示例:
源代码位于: Modeling_Tool/Core/utils.py
merge_all_data
¶
合并多个数据集。
参数:
| 名称 | 类型 | 描述 | 默认 |
|---|---|---|---|
*args
|
要合并的DataFrame列表 |
()
|
|
on
|
str
|
连接键列名 |
"APPLICATION_ID"
|
how
|
str
|
连接方式,'left', 'right', 'inner', 'outer' |
"left"
|
return_kDF
|
bool
|
是否返回kDataFrame对象 |
True
|
返回:
| 类型 | 描述 |
|---|---|
DataFrame or kDataFrame
|
合并后的数据表 |
示例:
>>> df1 = pd.DataFrame({'id': [1, 2], 'a': [3, 4]})
>>> df2 = pd.DataFrame({'id': [1, 2], 'b': [5, 6]})
>>> merge_all_data(df1, df2, on='id')
源代码位于: Modeling_Tool/Core/utils.py
get_valid_vintages
¶
获取指定范围内的有效Vintage列表。
参数:
| 名称 | 类型 | 描述 | 默认 |
|---|---|---|---|
sVintage
|
int
|
起始Vintage(格式YYYYMM) |
必需 |
eVintage
|
int
|
结束Vintage(格式YYYYMM) |
必需 |
返回:
| 类型 | 描述 |
|---|---|
list
|
有效的Vintage列表 |
示例:
源代码位于: Modeling_Tool/Core/utils.py
set_non_number_str
¶
导入文件为H2OFrame并将所有非数值列设置为字符串类型。
参数:
| 名称 | 类型 | 描述 | 默认 |
|---|---|---|---|
h2o_tbl_path
|
str
|
H2O表路径 |
必需 |
返回:
| 类型 | 描述 |
|---|---|
H2OFrame
|
处理后的H2OFrame |
示例:
源代码位于: Modeling_Tool/Core/utils.py
list_to_SQL
¶
将列表转换为SQL格式的字符串。
参数:
| 名称 | 类型 | 描述 | 默认 |
|---|---|---|---|
ls
|
list
|
输入列表 |
必需 |
excl
|
list
|
要排除的元素列表 |
[]
|
prefix
|
str
|
列名前缀(如表别名) |
''
|
wquote
|
bool
|
是否用引号包裹元素 |
False
|
返回:
| 类型 | 描述 |
|---|---|
str
|
SQL格式的字符串 |
示例:
源代码位于: Modeling_Tool/Core/utils.py
bool_to_str
¶
将DataFrame中的布尔类型列转换为字符串类型。
参数:
| 名称 | 类型 | 描述 | 默认 |
|---|---|---|---|
data
|
DataFrame
|
输入数据表 |
必需 |
返回:
| 类型 | 描述 |
|---|---|
DataFrame
|
转换后的数据表 |
示例:
源代码位于: Modeling_Tool/Core/utils.py
get_dtypes_file
¶
获取DataFrame各列的数据类型。
参数:
| 名称 | 类型 | 描述 | 默认 |
|---|---|---|---|
data
|
DataFrame
|
输入数据表 |
必需 |
outputFile
|
str
|
输出文件路径 |
None
|
ck_format
|
bool
|
是否使用自定义格式 |
False
|
返回:
| 类型 | 描述 |
|---|---|
DataFrame
|
包含列名和数据类型的DataFrame |
示例:
源代码位于: Modeling_Tool/Core/utils.py
add_path_suffix
¶
为文件路径添加后缀。
参数:
| 名称 | 类型 | 描述 | 默认 |
|---|---|---|---|
file
|
str
|
文件路径 |
必需 |
suffix
|
str
|
要添加的后缀 |
"_cut"
|
返回:
| 类型 | 描述 |
|---|---|
str
|
添加后缀后的文件路径 |
示例:
源代码位于: Modeling_Tool/Core/utils.py
h2o_apply_regex
¶
对H2O Frame的列应用正则表达式转换函数。
参数:
| 名称 | 类型 | 描述 | 默认 |
|---|---|---|---|
data
|
H2OFrame
|
输入数据 |
必需 |
colname
|
str
|
列名 |
必需 |
func
|
callable
|
应用函数 |
必需 |
返回:
| 类型 | 描述 |
|---|---|
H2OFrame
|
转换后的H2OFrame |
示例:
源代码位于: Modeling_Tool/Core/utils.py
get_summary_rpt
¶
合并生成特征汇总报告。
将Means报告、IV/PSI报告和相关性报告合并为一个综合报告。
参数:
| 名称 | 类型 | 描述 | 默认 |
|---|---|---|---|
means_rpt
|
DataFrame
|
Means统计报告 |
必需 |
iv_psi_rpt
|
DataFrame
|
IV/PSI报告 |
必需 |
corr_rpt
|
DataFrame
|
相关性报告 |
必需 |
返回:
| 类型 | 描述 |
|---|---|
DataFrame
|
合并后的汇总报告 |
示例:
源代码位于: Modeling_Tool/Core/utils.py
flatten_json_attr
¶
展开JSON格式的模型属性列。
参数:
| 名称 | 类型 | 描述 | 默认 |
|---|---|---|---|
data
|
DataFrame
|
包含JSON列的数据表 |
必需 |
jsonColname
|
str
|
JSON列名 |
"data"
|
返回:
| 类型 | 描述 |
|---|---|
DataFrame
|
展开后的数据表 |
示例:
源代码位于: Modeling_Tool/Core/utils.py
parse_odps_schema
¶
解析ODPS Schema。
参数:
| 名称 | 类型 | 描述 | 默认 |
|---|---|---|---|
schema_list
|
list
|
ODPS Schema列表 |
必需 |
返回:
| 类型 | 描述 |
|---|---|
dict
|
字段名到数据类型的字典 |
示例:
>>> schema = parse_odps_schema(['column col1 type=string, column col2 type=bigint'])
{'col1': 'string', 'col2': 'bigint'}
源代码位于: Modeling_Tool/Core/utils.py
npnan2none
¶
将DataFrame中的np.nan和np.nat转换为None值。
参数:
| 名称 | 类型 | 描述 | 默认 |
|---|---|---|---|
df
|
DataFrame
|
输入数据表 |
必需 |
返回:
| 类型 | 描述 |
|---|---|
DataFrame
|
转换后的数据表 |
示例:
源代码位于: Modeling_Tool/Core/utils.py
drop_tmp_cols
¶
删除DataFrame中的临时列。
参数:
| 名称 | 类型 | 描述 | 默认 |
|---|---|---|---|
df
|
DataFrame
|
输入数据表 |
必需 |
drop_list
|
list
|
要删除的临时列列表 |
['py_inserttime']
|
返回:
| 类型 | 描述 |
|---|---|
DataFrame
|
删除临时列后的数据表 |
示例:
源代码位于: Modeling_Tool/Core/utils.py
mkdir_if_not_exist
¶
如果目录不存在则创建目录。
参数:
| 名称 | 类型 | 描述 | 默认 |
|---|---|---|---|
folder_path
|
str
|
文件夹路径 |
必需 |
replace
|
bool
|
如果目录已存在是否替换 |
False
|
返回:
| 类型 | 描述 |
|---|---|
int
|
状态码:0表示成功,1表示目录已存在 |
示例:
源代码位于: Modeling_Tool/Core/utils.py
parse_sql_file
¶
parse_sql_file(sql_path: str = None, sql_query: str = None, split: bool = False, format_select: bool = False, **kwargs)
解析SQL文件并替换变量。
参数:
| 名称 | 类型 | 描述 | 默认 |
|---|---|---|---|
sql_path
|
str
|
SQL文件路径 |
None
|
sql_query
|
str
|
SQL查询字符串 |
None
|
split
|
bool
|
是否分割多个查询 |
False
|
format_select
|
bool
|
是否自动格式化SELECT字段(每个字段一行,前置逗号风格) |
False
|
**kwargs
|
SQL中要替换的变量 |
{}
|
返回:
| 类型 | 描述 |
|---|---|
str or list
|
解析后的SQL字符串或字符串列表 |
示例:
>>> parse_sql_file(sql_path='query.sql', table_name='my_table', date='2025-01-01')
>>> parse_sql_file(sql_path='query.sql', format_select=True, table_name='my_table')
源代码位于: Modeling_Tool/Core/utils.py
1613 1614 1615 1616 1617 1618 1619 1620 1621 1622 1623 1624 1625 1626 1627 1628 1629 1630 1631 1632 1633 1634 1635 1636 1637 1638 1639 1640 1641 1642 1643 1644 1645 1646 1647 1648 1649 1650 1651 1652 1653 1654 1655 1656 1657 1658 1659 1660 1661 1662 1663 1664 1665 1666 1667 1668 1669 1670 1671 1672 1673 1674 1675 1676 1677 1678 1679 1680 1681 1682 1683 1684 1685 1686 1687 | |
calc_woe
¶
计算WOE(Weight of Evidence)值。
WOE = ln(组正样本占比 / 组负样本占比)
参数:
| 名称 | 类型 | 描述 | 默认 |
|---|---|---|---|
data
|
DataFrame
|
包含比例的数据表 |
必需 |
bad_pct
|
str
|
坏样本占比列名 |
必需 |
good_pct
|
str
|
好样本占比列名 |
必需 |
fillwoe
|
bool
|
当比例为0时是否将woe置为0 |
True
|
返回:
| 类型 | 描述 |
|---|---|
float or Series
|
WOE值 |
示例:
>>> df = pd.DataFrame({'bad_pct': [0.3, 0.5], 'good_pct': [0.7, 0.5]})
>>> calc_woe(df, 'bad_pct', 'good_pct')
源代码位于: Modeling_Tool/Core/utils.py
calc_iv
¶
计算IV(Information Value)值。
IV = (组正样本占比 - 组负样本占比) * WOE
参数:
| 名称 | 类型 | 描述 | 默认 |
|---|---|---|---|
data
|
DataFrame
|
包含比例的数据表 |
必需 |
bad_pct
|
str
|
坏样本占比列名 |
必需 |
good_pct
|
str
|
好样本占比列名 |
必需 |
filliv
|
bool
|
当比例为0时是否将iv置为0 |
True
|
返回:
| 类型 | 描述 |
|---|---|
float or Series
|
IV值 |
示例:
>>> df = pd.DataFrame({'bad_pct': [0.3, 0.5], 'good_pct': [0.7, 0.5]})
>>> calc_iv(df, 'bad_pct', 'good_pct')
源代码位于: Modeling_Tool/Core/utils.py
save_model
¶
使用pickle保存lightGBM模型。
参数:
| 名称 | 类型 | 描述 | 默认 |
|---|---|---|---|
model
|
object
|
要保存的模型对象 |
必需 |
filename
|
str
|
保存路径 |
必需 |
返回:
| 类型 | 描述 |
|---|---|
int
|
执行状态码(0表示成功) |
示例:
源代码位于: Modeling_Tool/Core/utils.py
load_model
¶
加载pickle模型。
参数:
| 名称 | 类型 | 描述 | 默认 |
|---|---|---|---|
model_path
|
str
|
模型文件路径 |
必需 |
返回:
| 类型 | 描述 |
|---|---|
object
|
加载的模型对象 |
示例:
源代码位于: Modeling_Tool/Core/utils.py
scoring
¶
使用模型对数据进行评分。
参数:
| 名称 | 类型 | 描述 | 默认 |
|---|---|---|---|
data
|
DataFrame
|
输入数据表 |
必需 |
model
|
sklearn-like model
|
机器学习模型 |
必需 |
varlist
|
list
|
特征变量列表 |
必需 |
scr_name
|
str
|
分数列名 |
必需 |
keeplist
|
list
|
要保留的列列表 |
None
|
all_missing_spec_value
|
float
|
全缺失样本的指定分数值 |
None
|
返回:
| 类型 | 描述 |
|---|---|
DataFrame
|
包含分数的数据表 |
示例:
源代码位于: Modeling_Tool/Core/utils.py
get_missing_indicator
¶
upload_score
¶
upload_score(data, model, varlist, scr_name, table_name, keeplist=None, retPandas=False, all_missing_spec_value=None)
将模型分数上传到Maxcompute。
参数:
| 名称 | 类型 | 描述 | 默认 |
|---|---|---|---|
data
|
DataFrame
|
输入数据表 |
必需 |
model
|
sklearn-like model
|
机器学习模型 |
必需 |
varlist
|
list
|
特征变量列表 |
必需 |
scr_name
|
str
|
分数列名 |
必需 |
table_name
|
str
|
目标表名 |
必需 |
keeplist
|
list
|
要保留的列列表 |
None
|
retPandas
|
bool
|
是否返回pandas DataFrame |
False
|
all_missing_spec_value
|
float
|
全缺失样本的指定分数值 |
None
|
返回:
| 类型 | 描述 |
|---|---|
int or DataFrame
|
状态码或数据表 |
示例:
源代码位于: Modeling_Tool/Core/utils.py
pull_attributes_in_batch
¶
pull_attributes_in_batch(table_name, varlist, batch_num=6, unikey='flow_id', main_info_select=['*'], add_query='')
Pull Data from DataWorks in Vertical Batch.
源代码位于: Modeling_Tool/Core/utils.py
get_feature_names
¶
获取模型的特征名称列表。
自动检测模型类型并返回其特征名称。 支持LightGBM、XGBoost、sklearn等多种模型。
参数:
| 名称 | 类型 | 描述 | 默认 |
|---|---|---|---|
model
|
object
|
训练好的机器学习模型对象 |
必需 |
model_type
|
str
|
模型类型提示,可选值: - 'lgb' 或 'lightgbm': LightGBM模型 - 'xgb' 或 'xgboost': XGBoost模型 - 'sklearn': sklearn模型 - None: 自动检测(默认) |
None
|
返回:
| 类型 | 描述 |
|---|---|
list
|
特征名称列表 |
引发:
| 类型 | 描述 |
|---|---|
ValueError
|
当无法获取特征名称时抛出 |
示例:
源代码位于: Modeling_Tool/Core/utils.py
2421 2422 2423 2424 2425 2426 2427 2428 2429 2430 2431 2432 2433 2434 2435 2436 2437 2438 2439 2440 2441 2442 2443 2444 2445 2446 2447 2448 2449 2450 2451 2452 2453 2454 2455 2456 2457 2458 2459 2460 2461 2462 2463 2464 2465 2466 2467 2468 2469 2470 2471 2472 2473 2474 2475 2476 2477 2478 2479 2480 2481 2482 2483 2484 2485 2486 2487 2488 2489 2490 2491 2492 2493 2494 2495 2496 2497 2498 2499 2500 2501 2502 2503 2504 2505 2506 2507 2508 2509 2510 2511 2512 2513 2514 2515 2516 2517 2518 2519 2520 2521 2522 2523 2524 2525 2526 2527 2528 2529 2530 2531 2532 2533 2534 | |
get_feature_names_lgb
¶
获取LightGBM模型的特征名称。
参数:
| 名称 | 类型 | 描述 | 默认 |
|---|---|---|---|
model
|
LGBMClassifier or LGBMRegressor
|
训练好的LightGBM模型 |
必需 |
返回:
| 类型 | 描述 |
|---|---|
list
|
特征名称列表 |
引发:
| 类型 | 描述 |
|---|---|
ValueError
|
当无法获取特征名称时抛出 |
示例:
>>> import lightgbm as lgb
>>> model = lgb.LGBMClassifier().fit(X_train, y_train)
>>> feature_names = get_feature_names_lgb(model)
>>> print(feature_names)
['feature_1', 'feature_2', 'feature_3']
源代码位于: Modeling_Tool/Core/utils.py
get_feature_names_xgb
¶
获取XGBoost模型的特征名称。
参数:
| 名称 | 类型 | 描述 | 默认 |
|---|---|---|---|
model
|
XGBClassifier or XGBRegressor
|
训练好的XGBoost模型 |
必需 |
返回:
| 类型 | 描述 |
|---|---|
list
|
特征名称列表 |
引发:
| 类型 | 描述 |
|---|---|
ValueError
|
当无法获取特征名称时抛出 |
示例:
>>> import xgboost as xgb
>>> model = xgb.XGBClassifier().fit(X_train, y_train)
>>> feature_names = get_feature_names_xgb(model)
>>> print(feature_names)
['feature_1', 'feature_2', 'feature_3']
源代码位于: Modeling_Tool/Core/utils.py
get_feature_names_batch
¶
批量获取多个模型的特征名称。
参数:
| 名称 | 类型 | 描述 | 默认 |
|---|---|---|---|
models
|
dict or list
|
模型字典 {name: model} 或模型列表 |
必需 |
model_type
|
str
|
模型类型提示 |
None
|
返回:
| 类型 | 描述 |
|---|---|
dict or list
|
特征名称字典或列表,与输入结构对应 |
示例:
>>> models = {'lgb': lgb_model, 'xgb': xgb_model}
>>> feature_names_dict = get_feature_names_batch(models)
>>> print(feature_names_dict)
{'lgb': ['f1', 'f2'], 'xgb': ['f1', 'f2']}
源代码位于: Modeling_Tool/Core/utils.py
加密 — XOR_Encryptor¶
XOR_Encryptor
¶
TextEncryptor
¶
基于XOR算法的文本加密解密工具类。
该类提供文本加密和解密功能,支持单个字符串以及整个Pandas DataFrame的加解密操作。 加密后的数据使用Base64 URL安全编码,便于存储和传输。
Attributes: key (str): 加密解密使用的密钥。如果为None,则使用空字符串作为密钥。 suffix (str): DataFrame列名加密后的后缀,默认为'_encrypted'。
Example: >>> encryptor = TextEncryptor(key="my_secret_key") >>> encrypted = encryptor.encrypt("Hello World") >>> decrypted = encryptor.decrypt(encrypted) >>> print(decrypted) # 输出: Hello World
源代码位于: Modeling_Tool/Core/XOR_Encryptor.py
6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 | |
encrypt
¶
对输入的文本进行加密。
使用XOR算法将明文与密钥进行异或操作,然后通过Base64 URL安全编码输出。 加密结果包含原始文本长度信息(前2个字节),用于解密时的验证。
Parameters: text (str): 需要加密的明文字符串。
Returns: str: 加密后的字符串,使用Base64 URL安全编码。
Raises: AttributeError: 如果key属性为None(self.key为None时,实际使用空字符串)。
Example: >>> encryptor = TextEncryptor(key="secret") >>> encrypted = encryptor.encrypt("Hello") >>> print(encrypted) # 输出类似: aAAAAS垂涎==
源代码位于: Modeling_Tool/Core/XOR_Encryptor.py
decrypt
¶
对加密后的文本进行解密。
首先使用Base64解码,然后提取长度信息(前2字节),接着使用XOR算法与密钥进行异或操作恢复明文。 解密后会验证恢复文本的长度是否与存储的长度信息匹配,以确保数据完整性。
Parameters: encrypted_text (str): 经过encrypt方法加密的Base64编码字符串。
Returns: str: 解密后的原始明文字符串。
Raises: ValueError: 如果解密失败,可能原因包括: - Base64解码失败(输入不是有效的Base64字符串) - 长度验证失败(数据被篡改或使用了不同的密钥) - 其他解码错误
Example: >>> encryptor = TextEncryptor(key="secret") >>> encrypted = encryptor.encrypt("Hello") >>> decrypted = encryptor.decrypt(encrypted) >>> print(decrypted) # 输出: Hello
源代码位于: Modeling_Tool/Core/XOR_Encryptor.py
encrypt_dataframe
¶
对整个Pandas DataFrame进行加密。
将DataFrame中的所有列值转换为字符串格式后进行加密,同时为列名添加指定的后缀。 该方法返回一个全新的DataFrame,原始数据不会被修改。
Parameters: data (pandas.DataFrame): 需要加密的Pandas DataFrame对象。 所有列的值都会被转换为字符串格式进行加密。
Returns: pandas.DataFrame: 加密后的新DataFrame,具有以下特点: - 所有列值都经过加密,使用Base64编码 - 所有列名都添加了初始化时指定的后缀(默认为'_encrypted') - 返回的是副本,原始DataFrame保持不变
Raises: AttributeError: 如果key属性为None导致加密失败。
Note: - 加密后的DataFrame无法直接用于数据分析,必须先解密 - 建议在加密前备份原始DataFrame的列名对应关系
Example: >>> import pandas as pd >>> df = pd.DataFrame({'name': ['Alice', 'Bob'], 'age': [25, 30]}) >>> encryptor = TextEncryptor(key="secret") >>> encrypted_df = encryptor.encrypt_dataframe(df) >>> print(encrypted_df.columns.tolist()) # 输出: ['name_encrypted', 'age_encrypted']
源代码位于: Modeling_Tool/Core/XOR_Encryptor.py
decrypt_dataframe
¶
对加密后的Pandas DataFrame进行解密。
遍历DataFrame中的所有列,对每个列值进行解密,同时移除列名中的加密后缀。 该方法返回一个全新的DataFrame,原始数据不会被修改。
Parameters: data (pandas.DataFrame): 需要解密的Pandas DataFrame对象。 应该是由encrypt_dataframe方法加密产生的DataFrame。
Returns: pandas.DataFrame: 解密后的新DataFrame,具有以下特点: - 所有列值都经过解密,恢复为原始字符串格式 - 所有列名都移除了初始化时指定的后缀(默认为'_encrypted') - 返回的是副本,原始DataFrame保持不变
Raises: ValueError: 如果解密失败,可能原因包括: - 列值不是有效的加密字符串 - 使用了错误的密钥进行解密 - 数据在传输或存储过程中被损坏 UnicodeDecodeError: 如果解密后的字节无法正确解码为UTF-8字符串。
Note: - 加密和解密必须使用相同的密钥 - 如果DataFrame包含非加密的列,解密操作可能会失败
Example: >>> import pandas as pd >>> df = pd.DataFrame({'name_encrypted': ['aGVsbG8=', 'd29ybGQ='], ... 'age_encrypted': ['c2F2ZWQ=', 'dGVzdA==']}) >>> encryptor = TextEncryptor(key="secret") >>> decrypted_df = encryptor.decrypt_dataframe(df) >>> print(decrypted_df.columns.tolist()) # 输出: ['name', 'age']
源代码位于: Modeling_Tool/Core/XOR_Encryptor.py
扩展 DataFrame — kDataFrame¶
kDataFrame
¶
kSeries
¶
Bases: Series
源代码位于: Modeling_Tool/Core/kDataFrame.py
to_pdSeries
¶
odds_score
¶
Calculate the odd score based on the given probability score.
Odds Score = (count of sth happening) / (count of sth not happening) Odds Score = pb_score / (1-pb_score) [This ranges from 0 to infinity.] Log Odds Score = np.log(pb_score / (1-pb_score)) [This ranges from -infinity to +infinity] This is helpful for solving binary classification problem. Odds Ratio: The ratio of odds.
源代码位于: Modeling_Tool/Core/kDataFrame.py
scale_score
¶
Scale the model scores (for internt segment of MCI model)
proc_freq
¶
Implement the Python version "proc freq" query in SAS.
源代码位于: Modeling_Tool/Core/kDataFrame.py
kDataFrame
¶
Bases: DataFrame
The extension class of Pandas DataFrame including more useful methods to manipulate dataset.
Parameters:
data [DataFrame]: Any pandas dataframe dataset.
Return:
data [kDataFrame]: the extension object of dataframe.
源代码位于: Modeling_Tool/Core/kDataFrame.py
82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 | |
move_column
¶
To move a column into specific place by index.
源代码位于: Modeling_Tool/Core/kDataFrame.py
convert_to_vintage
¶
To obtain a vintage column by a time/data column.
源代码位于: Modeling_Tool/Core/kDataFrame.py
col_filter_regex
¶
To filter the DataFrame columns by regular expression.
源代码位于: Modeling_Tool/Core/kDataFrame.py
row_filter_regex
¶
row_filter_regex(col=None, regex: str = None, case_sensitive=True, as_index=False, inplace: bool = False)
To filter the string format row using regex.
源代码位于: Modeling_Tool/Core/kDataFrame.py
scale_score
¶
Scale the model scores (for internt segment of MCI model)
源代码位于: Modeling_Tool/Core/kDataFrame.py
proc_freq
¶
Implement the Python version "proc freq" query in SAS.
源代码位于: Modeling_Tool/Core/kDataFrame.py
unify_table_col_names
¶
Unify the format of column names.
源代码位于: Modeling_Tool/Core/kDataFrame.py
convert_strlist_to_list
¶
cast string-type lists in a specified Series into real lists.
to_pdDataFrame
¶
CDC JSON 转换 — Json_Data_Converter¶
Json_Data_Converter
¶
df_to_json
¶
df_to_json(drv_df: DataFrame, input_vars: Optional[List[str]] = None, metadata_cols: Optional[List[str]] = None) -> Dict[str, Any]
将 drv_df DataFrame 转换为 JSON 格式。
两种模式:
- 分区模式 (input_vars 指定):
元信息列(非 input_vars 列)提取为标量,input_vars 列收集为数组
放入 cdc_credit_inputs 下。
输出: {"":
- 平铺模式 (input_vars=None):
所有列都作为数组放在一级 JSON 下,不再区分 metadata / input_vars。
输出: {"
": [...], " ": [...], ...}
参数:
| 名称 | 类型 | 描述 | 默认 |
|---|---|---|---|
drv_df
|
DataFrame
|
源 DataFrame,每行一条记录。 |
必需 |
input_vars
|
Optional[List[str]]
|
入模特征列名列表。为 None 时使用平铺模式,所有列均为数组。 |
None
|
metadata_cols
|
Optional[List[str]]
|
分区模式下显式指定元信息列。平铺模式下忽略。 |
None
|
返回:
| 类型 | 描述 |
|---|---|
Dict[str, Any]
|
JSON 格式的字典。 |
引发:
| 类型 | 描述 |
|---|---|
ValueError
|
分区模式下,如果 metadata 列值不一致。 |
KeyError
|
如果 input_vars 中的列在 DataFrame 中不存在。 |
源代码位于: Modeling_Tool/Core/Json_Data_Converter.py
138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 | |
df_to_json_custom
¶
df_to_json_custom(drv_df: DataFrame, input_vars: List[str], inputs_key: str = 'inputs', metadata_cols: Optional[List[str]] = None, unwrap_single: bool = True) -> Dict[str, Any]
将 drv_df DataFrame 转换为分区 JSON 格式,支持自定义二级 key 和自动解包。
与 df_to_json 分区模式类似,但: - 二级 JSON 的 key 名称可自定义(通过 inputs_key) - 二级 JSON 中长度为 1 的数组自动解包为标量(通过 unwrap_single)
参数:
| 名称 | 类型 | 描述 | 默认 |
|---|---|---|---|
drv_df
|
DataFrame
|
源 DataFrame。 |
必需 |
input_vars
|
List[str]
|
放入二级 JSON 的列名列表。 |
必需 |
inputs_key
|
str
|
二级 JSON 的 key 名称,默认 "inputs"。 |
'inputs'
|
metadata_cols
|
Optional[List[str]]
|
一级元信息列。为 None 时自动推导(非 input_vars 的列)。 |
None
|
unwrap_single
|
bool
|
是否将二级 JSON 中长度为 1 的数组解包为标量。默认 True。 |
True
|
返回:
| 类型 | 描述 |
|---|---|
Dict[str, Any]
|
{
"": |
示例:
>>> df = pd.DataFrame({'req': ['a','a'], 'x': [1,2], 'y': [3,4]})
>>> df_to_json_custom(df, input_vars=['x','y'], inputs_key='features')
{'req': 'a', 'features': {'x': [1,2], 'y': [3,4]}}
>>> df_single = pd.DataFrame({'req': ['a'], 'x': [1], 'y': [3]})
>>> df_to_json_custom(df_single, input_vars=['x','y'], inputs_key='features')
{'req': 'a', 'features': {'x': 1, 'y': 3}}
源代码位于: Modeling_Tool/Core/Json_Data_Converter.py
232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322 323 324 | |
json_to_df
¶
json_to_df(json_data: Union[str, Dict[str, Any]], input_vars: Optional[List[str]] = None, metadata_cols: Optional[List[str]] = None) -> DataFrame
将 JSON 格式还原为 DataFrame(自动检测三种格式)。
三种模式: 1) Row-Oriented 模式 (JSON 有 cdc_query_credits key)——NEW 一级标量为 metadata,cdc_query_credits 为对象数组,每个对象一行。 输出: metadata 列广播到所有行 + 对象字段展开为列。
{
"requestId": "req@123", "pullLogId": 3836171, ...,
"cdc_query_credits": [
{"_id": "id1", "montoPagar": 922, ...},
{"_id": "id2", "montoPagar": 0, ...}
]
}
2) 分区模式 (JSON 有 cdc_credit_inputs key) 从 cdc_credit_inputs 取数组列,其余一级 key 为 metadata scalars。
{
"requestid": "req_001", "pulllogid": 3836171, ...,
"cdc_credit_inputs": {
"account_open_days": [2381, 4493],
"pagoactual": ["V", "V"]
}
}
3) 平铺模式 (JSON 无 cdc_credit_inputs 也无 cdc_query_credits) 所有一级 key 均为列名,list 值展开为行,scalar 值广播。
参数:
| 名称 | 类型 | 描述 | 默认 |
|---|---|---|---|
json_data
|
Union[str, Dict[str, Any]]
|
JSON 字符串或字典。 |
必需 |
input_vars
|
Optional[List[str]]
|
分区模式下的入模特征列名。为 None 时自动检测 JSON 格式。 注: row-oriented 模式下忽略此参数(cdc_query_credits 中的全部字段均展开)。 |
None
|
metadata_cols
|
Optional[List[str]]
|
元信息列名。为 None 时自动推导(非 cdc_* 的一级 key)。 |
None
|
返回:
| 类型 | 描述 |
|---|---|
DataFrame
|
还原后的 DataFrame,metadata 列在前,数据列在后。 |
引发:
| 类型 | 描述 |
|---|---|
ValueError
|
如果数组长度不一致,或 cdc_query_credits 不是数组。 |
源代码位于: Modeling_Tool/Core/Json_Data_Converter.py
327 328 329 330 331 332 333 334 335 336 337 338 339 340 341 342 343 344 345 346 347 348 349 350 351 352 353 354 355 356 357 358 359 360 361 362 363 364 365 366 367 368 369 370 371 372 373 374 375 376 377 378 379 380 381 382 383 384 385 386 387 388 389 390 391 392 393 394 395 396 397 398 399 400 401 402 403 404 405 406 407 408 409 410 411 412 413 414 415 416 417 418 419 420 421 422 423 424 425 426 427 428 429 430 431 432 433 434 435 436 437 438 439 440 441 442 443 444 445 446 447 448 449 450 451 452 453 454 455 456 457 458 459 460 461 462 463 464 465 466 467 468 469 470 471 472 473 474 475 476 477 478 479 480 481 482 483 484 485 486 487 488 489 490 491 492 493 494 495 496 497 498 499 500 501 502 503 504 505 506 507 508 509 510 511 512 513 | |
df_to_json_string
¶
df_to_json_string(drv_df: DataFrame, input_vars: Optional[List[str]] = None, metadata_cols: Optional[List[str]] = None, indent: Optional[int] = 2, ensure_ascii: bool = False) -> str
df_to_json 的便捷封装,直接返回 JSON 字符串。
源代码位于: Modeling_Tool/Core/Json_Data_Converter.py
json_string_to_df
¶
json_string_to_df(json_string: str, input_vars: Optional[List[str]] = None, metadata_cols: Optional[List[str]] = None) -> DataFrame
json_to_df 的便捷封装,接受 JSON 字符串输入。
源代码位于: Modeling_Tool/Core/Json_Data_Converter.py
df_to_json_file
¶
df_to_json_file(drv_df: DataFrame, output_path: str, input_vars: Optional[List[str]] = None, metadata_cols: Optional[List[str]] = None, indent: Optional[int] = 2, ensure_ascii: bool = False) -> str
将 drv_df DataFrame 转换为 expected JSON 格式并写入 .json 文件。
参数:
| 名称 | 类型 | 描述 | 默认 |
|---|---|---|---|
drv_df
|
DataFrame
|
源 DataFrame,每行一条征信账户记录。 |
必需 |
input_vars
|
List[str]
|
入模特征列名列表。 |
None
|
output_path
|
str
|
输出 .json 文件的路径。 |
必需 |
metadata_cols
|
Optional[List[str]]
|
显式指定元信息列名。为 None 时自动推导。 |
None
|
indent
|
Optional[int]
|
JSON 缩进空格数。None 表示紧凑输出(单行),默认 2。 |
2
|
ensure_ascii
|
bool
|
是否将非 ASCII 字符转义为 \uXXXX。默认 False,保留中文等原始字符。 |
False
|
返回:
| 类型 | 描述 |
|---|---|
str
|
写入文件的绝对路径。 |
源代码位于: Modeling_Tool/Core/Json_Data_Converter.py
load_json_file
¶
从 .json 文件加载为字典。
参数:
| 名称 | 类型 | 描述 | 默认 |
|---|---|---|---|
file_path
|
str
|
.json 文件的路径。 |
必需 |
返回:
| 类型 | 描述 |
|---|---|
Dict[str, Any]
|
解析后的字典,结构符合 expected JSON 格式。 |
源代码位于: Modeling_Tool/Core/Json_Data_Converter.py
json_to_file
¶
json_to_file(data: Dict[str, Any], output_path: str, indent: Optional[int] = 2, ensure_ascii: bool = False) -> str
将 Python dict 写入 .json 文件。
参数:
| 名称 | 类型 | 描述 | 默认 |
|---|---|---|---|
data
|
Dict[str, Any]
|
待写入的字典。 |
必需 |
output_path
|
str
|
输出 .json 文件路径。 |
必需 |
indent
|
Optional[int]
|
JSON 缩进空格数。None 表示紧凑单行,默认 2。 |
2
|
ensure_ascii
|
bool
|
是否转义非 ASCII 字符。默认 False。 |
False
|
返回:
| 类型 | 描述 |
|---|---|
str
|
写入文件的绝对路径。 |