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...