Python 批量計算變數iv值

2021-10-05 21:37:09 字數 3482 閱讀 5604

import pandas as pd

import numpy as np

from sklearn.tree import decisiontreeclassifier

data=pd.read_excel(r'e:\lll\20200311人工客群分布\sx_all_data_0311.xlsx'

)#匯入資料

variable=pd.read_excel(r'e:\lll\20200311人工客群分布\變數型別.xlsx'

)#變數列表

continue_variable=

list

(variable[

'連續變數'])

#獲取連續變數列表

'''連續型變數iv計算

'''def

feature_woe_iv

(x: pd.series, y: pd.series, nan:

float=-

999.)-

> pd.dataframe:

''' 計算變數各個分箱的woe、iv值,返回乙個dataframe

'''x = x.fillna(nan)

boundary = optimal_binning_boundary(x, y, nan)

# 獲得最優分箱邊界值列表

df = pd.concat(

[x, y]

, axis=1)

# 合併x、y為乙個dataframe,方便後續計算

df.columns =

['x'

,'y'

]# 特徵變數、目標變數欄位的重新命名

df['bins'

]= pd.cut(x=x, bins=boundary, right=

false

)# 獲得每個x值所在的分箱區間

grouped = df.groupby(

'bins')[

'y']

# 統計各分箱區間的好、壞、總客戶數量

result_df = grouped.agg([(

'good'

,lambda y:

(y ==0)

.sum()

),('bad'

,lambda y:

(y ==1)

.sum()

),('total'

,'count')]

) result_df[

'good_pct'

]= result_df[

'good'

]/ result_df[

'good'].

sum(

)#好客戶佔比

result_df[

'bad_pct'

]= result_df[

'bad'

]/ result_df[

'bad'].

sum(

)# 壞客戶佔比

result_df[

'total_pct'

]= result_df[

'total'

]/ result_df[

'total'].

sum(

)#總客戶佔

result_df[

'iv'

]=result_df[

'iv'].

sum(

) result_df[

'變數']=i

result_df=result_df.reset_index(

)return result_dfa=[

]for i in

list

(continue_variable[

'連續變數'])

: ,y=data[

'dpd30'])

)'''

離散型變數iv計算

'''de_variable=

list

(continue_variable[

'離散變數'

].unique())

defde_variable

(data)

:for i in de_variable:

povit1=pd.pivot_table(data,index=

[i],values=

['contract_no'

,'dpd30'],

aggfunc=

) povit1=povit1.rename(columns=

)

povit1[

'good'

]= povit1[

'total'

]- povit1[

'bad'].

sum(

)# 好客戶佔比

povit1[

'good_pct'

]= povit1[

'good'

]/ povit1[

'good'].

sum(

)# 好客戶佔比

povit1[

'bad_pct'

]= povit1[

'bad'

]/ povit1[

'bad'].

sum(

)# 壞客戶佔比

povit1[

'total_pct'

]= povit1[

'total'

]/ povit1[

'total'].

sum(

)# 總客戶佔比

povit1[

'bad_rate'

]= povit1[

'bad'

]/ povit1[

'total'

]# 壞比率

povit1[

'woe'

]= np.log(povit1[

'good_pct'

]/ povit1[

'bad_pct'])

# woe

povit1[

'iv']=

(povit1[

'good_pct'

]- povit1[

'bad_pct'])

* povit1[

'woe'

]# iv

povit1[

'iv'

]=povit1[

'iv'].

sum(

) povit1[

'變數']=i

povit1=povit1.reset_index(

) povit1=povit1.rename(columns=

)iv_result=pd.concat(a,axis=0)

#合併所有變數iv

iv_result.to_excel(r'e:\lusiru\20200311人工客群分布\iv_result.xlsx'

)

Python批量計算NDVI

python批量計算ndvi 做了少量修改,剔除了異常值,執行代價時需要更換影像對應波段及檔案儲存位置 import os import numpy as np from osgeo import gdal import glob import time list tif glob.glob f 2...

變數計算 型別轉換

const a 100 10 100 const b 100 10 10010 const c true 10 true10 如果我們需要拼接字串需要先將字串轉化為數字然後計算parint 100 100 true0 true 0 false true false true null undefin...

hadoop批量計算框架 MapReduce

結合自身的經驗記錄,mapreduce中的一些知識點以及乙個wordcount小實踐 核心思想 分而治之 map程式 需要根據自己的需求開發 shuffle 緩衝區大小設定 core site.xml設定為100m io.file.buffer.size 100000000 以位元組為單位 hdfs...