加载数据
import pandas as pd import numpy as np data = pd.read_csv('loan.csv',encoding='ansi') print(data)
好坏用户,0代表信用好用户,1代表信用坏用户。
data = pd.read_csv('loan.csv',encoding='ansi') print(data.isnull().sum())
对月收入数据进行填充
mode = data.loc[:,'月收入'].mode()[0] data.loc[:,'月收入'].fillna(value=mode,inplace=True) print(data.isnull().sum())
填充完成之后的结果如上图
使用相关系数来分析
res_corr = data.loc[:,['月收入','好坏客户']].corr() print(res_corr)
结果如下:
等宽分组
ptp = data.loc[:,'月收入'].max() - data.loc[:,'月收入'].min() step = np.ceil(ptp/5) bins = np.arange(data.loc[:,'月收入'].min(),data.loc[:,'月收入'].max()+step,step) data.loc[:,'月收入'] = pd.cut(data.loc[:,'月收入'],bins=bins,include_lowest=True) print(data.loc[:,'月收入'])
等频分组
bins = data.loc[:,'月收入'].quantile(np.arange(0,1+1/5,1/5)) data.loc[:,'月收入'] = pd.cut(data.loc[:,'月收入'],bins=bins,include_lowest=True) print(data.loc[:,'月收入'])
分组完成之后统计每组多少人如下:
res_counts = pd.value_counts(data.loc[:,'月收入']) print(res_counts)
按照月收入进行分组,统计各个组内坏人的个数:
res_sum = data.groupby(by=data.loc[:,'月收入'])['好坏客户'].sum() print(res_sum)
每组的坏账人数与组内人数的百分比
print("坏账率占比:\n",(res_sum/res_counts).apply(lambda x:format(x,".2%")))
得出结果:随着月收入的提高,坏账率会降低