大家好,欢迎来到IT知识分享网。
前言
当下网络借贷平台不断增多,借贷人数也不断增多。
希望借由这个数据分析可以得到关于这部分人群借贷的相关视图,并进行数据分析。
数据来源
数据为拍拍贷真实业务数据,但仅为信用标的一个样本,分别为LC.csv(标的特征表)LP.csv(标的还款计划和还款记录)
所提供数据包含了成交时间从2015年1月1日到2017年1月30日的328553支信用标。
数据获取自:https://www.ppdai.com/help/quarterReport。
项目介绍
这个项目使用了拍拍贷真实业务数据。基于数据集研究了用户画像分析、资金储备、逾期还款率、借款利率、用户还款情况的问题。
使用技术:pandas数据分析处理、数据探索分析、matplotlib、数据可视化
数据分析
通过分析可得到LC表借贷人基本信息如下:
基本信息:年龄、性别;
认证信息:手机认证、户口认证、视频认证、征信认证、淘宝认证;
信用信息:初始评级、历史正常还款期数、历史逾期还款期数;
借款信息:历史成功借款金额、历史成功借款次数、借款金额、借款期限、借款成功日期
LP表基本信息为:
用户画像,.资金储备,用户逾期率,借款人的初始评级、借款类型、性别、年龄等。
数据预览及处理
1.#导入所用库 2.import pandas as pd 3.import numpy as np 4.import matplotlib.pyplot as plt 5.#读取数据 6.LC = pd.read_csv('./data/LC.csv') 7.LP = pd.read_csv('./data/LP.csv')
对数据进行清洗
依次检查重复值、缺失值的处理,一致化以及异常值。
1 #打开Lc表 2 LC.info()
1 LC.describe()
观察一下年龄分布,最小17岁,最大56岁,平均年龄29岁,33岁以下的占比超过了75%。说明用户整体还是中青年。
1 #打开LP表 2 LP.info(
1 LP.describe()
1 LP = LP.dropna(how='any') 2 print(LP.info()) 3 LC = LC.dropna(how='any') 4 print(LC.info())
1.分析用户画像(性别、学历、年龄、是否首标)
按‘性别’、‘年龄’、‘是否首标’、‘学历认证’字段对‘借款金额’进行加总,用饼图或柱状图将结果可视化
1 # 让图表直接在jupyter中展示出来 2 %matplotlib inline 3 # 解决中文乱码问题 4 plt.rcParams["font.sans-serif"] = 'SimHei' 5 # 解决负号无法正常显示问题 6 plt.rcParams['axes.unicode_minus'] = False 7 8 #性别分析 9 male = LC[LC['性别'] == '男'] 10 female = LC[LC['性别'] == '女'] 11 sex = (male,female) 12 sex_data = (male['借款金额'].sum(), female['借款金额'].sum()) 13 sex_idx = ('男', '女') 14 plt.figure(figsize=(15, 6)) 15 plt.subplot(1,3,1) 16 plt.pie(sex_data, labels=sex_idx, autopct='%.1f%%') 17 18 #新老客户分析 19 new = LC[LC['是否首标'] == '是'] 20 old = LC[LC['是否首标'] == '否'] 21 newold_data = (new['借款金额'].sum(), old['借款金额'].sum()) 22 newold_idx = ('新客户', '老客户') 23 plt.subplot(1,3,2) 24 plt.pie(newold_data, labels=newold_idx, autopct='%.1f%%') 25 26 #学历分析 27 ungraduate = LC[LC['学历认证'] == '未成功认证'] 28 graduate = LC[LC['学历认证'] == '成功认证'] 29 education_data = (ungraduate['借款金额'].sum(), graduate['借款金额'].sum()) 30 education_idx = ('大专以下', '大专及以上') 31 plt.subplot(1,3,3) 32 plt.pie(education_data, labels=education_idx, autopct='%.1f%%') 33 plt.show() 34 35 #年龄分析 36 ageA = LC.loc[(LC['年龄'] >= 15) & (LC['年龄'] < 20)] 37 ageB = LC.loc[(LC['年龄'] >= 20) & (LC['年龄'] < 25)] 38 ageC = LC.loc[(LC['年龄'] >= 25) & (LC['年龄'] < 30)] 39 ageD = LC.loc[(LC['年龄'] >= 30) & (LC['年龄'] < 35)] 40 ageE = LC.loc[(LC['年龄'] >= 35) & (LC['年龄'] < 40)] 41 ageF = LC.loc[LC['年龄'] >= 40] 42 age = (ageA, ageB, ageC, ageD, ageE, ageF) 43 age_total = 0 44 age_percent =[] 45 for i in age: 46 tmp = i['借款金额'].sum() 47 age_percent.append(tmp) 48 age_total += tmp 49 age_percent /= age_total 50 age_idx = ['15-20', '20-25', '25-30', '30-35', '35-40', '40+'] 51 plt.figure(figsize=(15, 8)) 52 plt.bar(age_idx, age_percent) 53 for (a, b) in zip(age_idx, age_percent): 54 plt.text(a, b+0.001, '%.2f%%' % (b * 100), ha='center', va='bottom', fontsize=10) 55 plt.show()
结论:
1.男性客户的贡献的贷款金额占到了69%,可能的原因是男性更倾向于提前消费且贷款金额较大。
2.非首标的金额占比达到66%,说明用户倾向于多次使用,产品粘性较高。
3.大专以下学历的贷款金额更多,但是由于可能有很多用户并未认证学历,所以数据存在出入。
4.年龄段在25-30岁之间的借款金额最多,而20-35岁的人群占比超过75%,是该产品的主力消费人群。
2.分析资金储备
1 from datetime import datetime 2 3 #分析每日贷款金额的走势 4 loan = LC[['借款成功日期', '借款金额']].copy() 5 loan['借款日期'] = pd.to_datetime(loan['借款成功日期']) 6 loan1 = loan.pivot_table(index='借款日期', aggfunc='sum').copy() 7 plt.figure(figsize=(15, 6)) 8 plt.subplot(1,2,1) 9 plt.plot(loan1) 10 plt.xlabel('日期') 11 plt.ylabel('借款金额') 12 plt.title('每天贷款金额波动图') 13 14 #分析每月贷款金额的走势 15 loan['借款成功月份'] = [datetime.strftime(x, '%Y-%m') for x in loan['借款日期']] 16 loan2 = loan.pivot_table(index='借款成功月份', aggfunc='sum').copy() 17 plt.subplot(1,2,2) 18 plt.plot(loan2) 19 plt.xlabel('月份') 20 plt.xticks(['2015-01','2015-07','2016-01','2016-07','2017-01']) 21 plt.ylabel('借款金额') 22 plt.title('每月贷款金额波动图') 23 plt.show() 24 25 # 对2017年1月的数据继续进行分析,并求出平均值和标准差 26 loan3 = loan1.loc['2017-01'] 27 avg = loan3['借款金额'].mean() 28 std = loan3['借款金额'].std() 29 print(avg, std)
结论:
1.每日贷款金额呈现的是一个往上的趋势,但是每天的波动较大。
2.每月贷款分析结论:从2015年1月到2017年1月,月度贷款金额呈现上升趋势,上升速度随着时间增快。
3.2017年1月每日的借款金额达到5204664元,标准差为2203394,根据3σ原则,想使每日借款金额充足的概率达到99.9%,则每日公式账上需准备5204664+2203394×3=11814846元。
3.分析逾期还款率借款利率(借款人的初始评级、借款类型、性别、年龄、借款金额等特征)
逾期还款率 = 历史逾期还款期数/(历史逾期还款期数+历史正常还款期数)
1 #初始评级的数据划分 2 level_idx = ('A','B','C','D','E','F') 3 lev = [] 4 for i in level_idx: 5 temp = LC[LC['初始评级'] == i] 6 lev.append(temp) 7 8 #借款类型的数据划分 9 kind_idx = ('电商', 'APP闪电','普通', '其他') 10 kind = [] 11 for i in kind_idx: 12 temp = LC[LC['借款类型'] == i] 13 kind.append(temp) 14 15 #不同借款金额的数据划分 16 amount_idx = ('0-2000', '2000-3000', '3000-4000', '4000-5000', '5000-6000', '6000+') 17 amountA = LC.loc[(LC['借款金额'] > 0) & (LC['借款金额'] < 2000)] 18 amountB = LC.loc[(LC['借款金额'] >= 2000) & (LC['借款金额'] < 3000)] 19 amountC = LC.loc[(LC['借款金额'] >= 3000) & (LC['借款金额'] < 4000)] 20 amountD = LC.loc[(LC['借款金额'] >= 4000) & (LC['借款金额'] < 5000)] 21 amountE = LC.loc[(LC['借款金额'] >= 5000) & (LC['借款金额'] < 6000)] 22 amountF = LC.loc[(LC['借款金额'] >= 6000)] 23 amount = (amountA, amountB, amountC, amountD,amountE,amountF) 24 25 #逾期还款率的分析图 26 def depayplot(i,idx,data,xlabel,title,index): 27 depay = [] 28 for a in data: 29 a['逾期还款率'] = a['历史逾期还款期数']/(a['历史逾期还款期数']+a['历史正常还款期数'])*100 30 tmp = a[index].mean() 31 depay.append(tmp) 32 plt.subplot(2,3,i) 33 plt.bar(idx, depay) 34 for (a, b) in zip(idx, depay): 35 plt.text(a, b+0.001, '%.2f%%'% b, ha='center', va='bottom', fontsize=10) 36 plt.xlabel(xlabel) 37 plt.ylabel(index) 38 plt.title(title) 39 40 plt.figure(figsize=(15, 10)) 41 index = '逾期还款率' 42 # 根据初始评级对逾期还款率进行分析 43 depayplot(1,level_idx,lev,'初始评级','不同初始评级客户逾期还款率',index) 44 45 # 根据年龄对逾期还款率进行分析 46 depayplot(2,age_idx,age,'年龄','不同年龄客户逾期还款率',index) 47 48 # 根据借款类型对逾期还款率进行分析 49 depayplot(3,kind_idx,kind,'借款类型','不同借款类型客户逾期还款率',index) 50 51 # 根据性别对逾期还款率进行分析 52 depayplot(4,sex_idx,sex,'性别','不同性别客户逾期还款率',index) 53 54 # 根据借款金额对逾期还款率进行分析 55 depayplot(5,amount_idx,amount,'借款金额','不同借款金额客户逾期还款率',index) 56 57 plt.show()
1 #借款利率的分析图 2 plt.figure(figsize=(15, 10)) 3 index1 = '借款利率' 4 5 # 根据初始评级对借款利率进行分析 6 depayplot(1,level_idx,lev,'初始评级','不同初始评级客户借款利率',index1) 7 8 # 根据年龄对借款利率进行分析 9 depayplot(2,age_idx,age,'年龄','不同年龄客户借款利率',index1) 10 11 # 根据借款类型对借款利率进行分析 12 depayplot(3,kind_idx,kind,'借款类型','不同借款类型客户借款利率',index1) 13 14 # 根据性别对借款利率进行分析 15 depayplot(4,sex_idx,sex,'性别','不同性别客户借款利率',index1) 16 17 # 根据借款金额对借款利率进行分析 18 depayplot(5,amount_idx,amount,'借款金额','不同借款金额客户借款利率',index1) 19 20 plt.show()
结论:
1.初始评级对于贷款者的还款能力有比较好的预测作用,EF两级反转可能是因为样本数量较少,ABCD四个等级的平均逾期还款率都比较小,而EF两级明显增大。
2.年龄对于逾期率的分布较为平均,25-30岁的年轻人可以重点关注。但借款利率的分布较为平均,差异性很小。
3.电商的借款利率明显低于其他三种。
4.女性的逾期率高于男性,可能是由于生活中男性收入较女性高造成的。
5.借款金额在2000以下的逾期还款率最低,2000-3000之间的最高。
4.用户还款情况分析
1 # 删除尚未到期的记录 2 LP = LP[LP['到期日期'] <= LP['recorddate']] 3 #LP.info() 4 #LP.describe() 5 # 将LC和LP两个表融合起来 6 LCLP = pd.merge(LC, LP, how='left', on=['ListingId']) 7 # 删除数据不全的记录 8 LCLP = LCLP.dropna(how='any') 9 LCLP.info() 10 #LCLP.describe()
1 #定义用户还款习惯分析可视化函数 2 def repayhabit(group,num,idx,xlabel,color): 3 # 一次性全部还款 4 onetime = [] 5 for a in group: 6 ot = a.loc[a['还款状态'] == 3]['应还本金'].sum( 7 ) + a.loc[a['还款状态'] == 3]['应还利息'].sum() 8 onetime.append(ot) 9 # 部分提前还款 10 partial = [] 11 for a in group: 12 pa = a.loc[(a['还款状态'] == 1) & (a['还款日期'] < a['到期日期'])]['应还本金'].sum( 13 ) + a.loc[(a['还款状态'] == 1) & (a['还款日期'] < a['到期日期'])]['应还利息'].sum() 14 partial.append(pa) 15 # 逾期还款 16 pastdue = [] 17 for a in group: 18 pas = a.loc[(a['还款状态'] == 2) | (a['还款状态'] == 4)|(a['还款状态'] == 0)]['应还本金'].sum() + \ 19 a.loc[(a['还款状态'] == 2) | (a['还款状态'] == 4)|(a['还款状态'] == 0)]['应还利息'].sum() 20 pastdue.append(pas) 21 # 正常还款 22 normal = [] 23 for a in group: 24 nm = a.loc[(a['还款状态'] == 1) & (a['还款日期'] == a['到期日期'])]['应还本金'].sum( 25 ) + a.loc[(a['还款状态'] == 1) & (a['还款日期'] == a['到期日期'])]['应还利息'].sum() 26 normal.append(nm) 27 28 tot = [] 29 for i in range(num): 30 t = onetime[i]+partial[i]+pastdue[i]+normal[i] 31 tot.append(t) 32 33 print(tot) 34 35 temp = [] 36 for i in range(num): 37 tp = (100 * onetime[i] / tot[i], 100 * partial[i] / tot[i], 38 100 * normal[i] / tot[i], 100 * pastdue[i] / tot[i]) 39 temp.append(tp) 40 41 df = pd.DataFrame(temp) 42 df.index = idx 43 df.columns = ('提前一次性', '部分提前', '正常', '逾期') 44 print(df) 45 46 df.plot(kind='bar', colormap=color, stacked=True) 47 plt.ylabel('还款金额') 48 plt.xlabel(xlabel) 49 plt.legend(loc='best') 50 plt.show() 51 amountA = LCLP.loc[(LCLP['借款金额'] > 0) & (LCLP['借款金额'] < 2000)] 52 amountB = LCLP.loc[(LCLP['借款金额'] >= 2000) & (LCLP['借款金额'] < 3000)] 53 amountC = LCLP.loc[(LCLP['借款金额'] >= 3000) & (LCLP['借款金额'] < 4000)] 54 amountD = LCLP.loc[(LCLP['借款金额'] >= 4000) & (LCLP['借款金额'] < 5000)] 55 amountE = LCLP.loc[(LCLP['借款金额'] >= 5000) & (LCLP['借款金额'] < 6000)] 56 amountF = LCLP.loc[(LCLP['借款金额'] >= 6000)] 57 amountgroup = [amountA, amountB, amountC, amountD,amountE,amountF] 58 59 repayhabit(amountgroup,6,amount_idx,'借款金额','Greys_r')
结论:
从对借款金额分组的统计结果以及上图结果中可以看出:
1.借款总额6000元以上最多,3000-4000其次,说明3000-4000元的借款金额是最多的。
2.逾期风险在各金额组表现比较平均,其中2000-3000最大,6000+最小。
3.随着标的金额增加,部分提前还款的总金额比例在减少,正常还款的总金额比例在增加。
完整代码
1 #导入所用库 2 import pandas as pd 3 import numpy as np 4 import matplotlib.pyplot as plt 5 #读取数据 6 LC = pd.read_csv('./data/LC.csv') 7 LP = pd.read_csv('./data/LP.csv') 8 #打开Lc表 9 LC.info() 10 LC.describe() 11 #打开LP表 12 LP.info() 13 LP.describe() 14 15 LP = LP.dropna(how='any') 16 print(LP.info()) 17 LC = LC.dropna(how='any') 18 print(LC.info()) 19 # 让图表直接在jupyter中展示出来 20 %matplotlib inline 21 # 解决中文乱码问题 22 plt.rcParams["font.sans-serif"] = 'SimHei' 23 # 解决负号无法正常显示问题 24 plt.rcParams['axes.unicode_minus'] = False 25 26 #性别分析 27 male = LC[LC['性别'] == '男'] 28 female = LC[LC['性别'] == '女'] 29 sex = (male,female) 30 sex_data = (male['借款金额'].sum(), female['借款金额'].sum()) 31 sex_idx = ('男', '女') 32 plt.figure(figsize=(15, 6)) 33 plt.subplot(1,3,1) 34 plt.pie(sex_data, labels=sex_idx, autopct='%.1f%%') 35 36 #新老客户分析 37 new = LC[LC['是否首标'] == '是'] 38 old = LC[LC['是否首标'] == '否'] 39 newold_data = (new['借款金额'].sum(), old['借款金额'].sum()) 40 newold_idx = ('新客户', '老客户') 41 plt.subplot(1,3,2) 42 plt.pie(newold_data, labels=newold_idx, autopct='%.1f%%') 43 44 #学历分析 45 ungraduate = LC[LC['学历认证'] == '未成功认证'] 46 graduate = LC[LC['学历认证'] == '成功认证'] 47 education_data = (ungraduate['借款金额'].sum(), graduate['借款金额'].sum()) 48 education_idx = ('大专以下', '大专及以上') 49 plt.subplot(1,3,3) 50 plt.pie(education_data, labels=education_idx, autopct='%.1f%%') 51 plt.show() 52 53 #年龄分析 54 ageA = LC.loc[(LC['年龄'] >= 15) & (LC['年龄'] < 20)] 55 ageB = LC.loc[(LC['年龄'] >= 20) & (LC['年龄'] < 25)] 56 ageC = LC.loc[(LC['年龄'] >= 25) & (LC['年龄'] < 30)] 57 ageD = LC.loc[(LC['年龄'] >= 30) & (LC['年龄'] < 35)] 58 ageE = LC.loc[(LC['年龄'] >= 35) & (LC['年龄'] < 40)] 59 ageF = LC.loc[LC['年龄'] >= 40] 60 age = (ageA, ageB, ageC, ageD, ageE, ageF) 61 age_total = 0 62 age_percent =[] 63 for i in age: 64 tmp = i['借款金额'].sum() 65 age_percent.append(tmp) 66 age_total += tmp 67 age_percent /= age_total 68 age_idx = ['15-20', '20-25', '25-30', '30-35', '35-40', '40+'] 69 plt.figure(figsize=(15, 8)) 70 plt.bar(age_idx, age_percent) 71 for (a, b) in zip(age_idx, age_percent): 72 plt.text(a, b+0.001, '%.2f%%' % (b * 100), ha='center', va='bottom', fontsize=10) 73 plt.show() 74 75 from datetime import datetime 76 77 #分析每日贷款金额的走势 78 loan = LC[['借款成功日期', '借款金额']].copy() 79 loan['借款日期'] = pd.to_datetime(loan['借款成功日期']) 80 loan1 = loan.pivot_table(index='借款日期', aggfunc='sum').copy() 81 plt.figure(figsize=(15, 6)) 82 plt.subplot(1,2,1) 83 plt.plot(loan1) 84 plt.xlabel('日期') 85 plt.ylabel('借款金额') 86 plt.title('每天贷款金额波动图') 87 88 #分析每月贷款金额的走势 89 loan['借款成功月份'] = [datetime.strftime(x, '%Y-%m') for x in loan['借款日期']] 90 loan2 = loan.pivot_table(index='借款成功月份', aggfunc='sum').copy() 91 plt.subplot(1,2,2) 92 plt.plot(loan2) 93 plt.xlabel('月份') 94 plt.xticks(['2015-01','2015-07','2016-01','2016-07','2017-01']) 95 plt.ylabel('借款金额') 96 plt.title('每月贷款金额波动图') 97 plt.show() 98 99 # 对2017年1月的数据继续进行分析,并求出平均值和标准差 100 loan3 = loan1.loc['2017-01'] 101 avg = loan3['借款金额'].mean() 102 std = loan3['借款金额'].std() 103 print(avg, std) 104 #初始评级的数据划分 105 level_idx = ('A','B','C','D','E','F') 106 lev = [] 107 for i in level_idx: 108 temp = LC[LC['初始评级'] == i] 109 lev.append(temp) 110 111 #借款类型的数据划分 112 kind_idx = ('电商', 'APP闪电','普通', '其他') 113 kind = [] 114 for i in kind_idx: 115 temp = LC[LC['借款类型'] == i] 116 kind.append(temp) 117 118 #不同借款金额的数据划分 119 amount_idx = ('0-2000', '2000-3000', '3000-4000', '4000-5000', '5000-6000', '6000+') 120 amountA = LC.loc[(LC['借款金额'] > 0) & (LC['借款金额'] < 2000)] 121 amountB = LC.loc[(LC['借款金额'] >= 2000) & (LC['借款金额'] < 3000)] 122 amountC = LC.loc[(LC['借款金额'] >= 3000) & (LC['借款金额'] < 4000)] 123 amountD = LC.loc[(LC['借款金额'] >= 4000) & (LC['借款金额'] < 5000)] 124 amountE = LC.loc[(LC['借款金额'] >= 5000) & (LC['借款金额'] < 6000)] 125 amountF = LC.loc[(LC['借款金额'] >= 6000)] 126 amount = (amountA, amountB, amountC, amountD,amountE,amountF) 127 128 #逾期还款率的分析图 129 def depayplot(i,idx,data,xlabel,title,index): 130 depay = [] 131 for a in data: 132 a['逾期还款率'] = a['历史逾期还款期数']/(a['历史逾期还款期数']+a['历史正常还款期数'])*100 133 tmp = a[index].mean() 134 depay.append(tmp) 135 plt.subplot(2,3,i) 136 plt.bar(idx, depay) 137 for (a, b) in zip(idx, depay): 138 plt.text(a, b+0.001, '%.2f%%'% b, ha='center', va='bottom', fontsize=10) 139 plt.xlabel(xlabel) 140 plt.ylabel(index) 141 plt.title(title) 142 143 plt.figure(figsize=(15, 10)) 144 index = '逾期还款率' 145 # 根据初始评级对逾期还款率进行分析 146 depayplot(1,level_idx,lev,'初始评级','不同初始评级客户逾期还款率',index) 147 148 # 根据年龄对逾期还款率进行分析 149 depayplot(2,age_idx,age,'年龄','不同年龄客户逾期还款率',index) 150 151 # 根据借款类型对逾期还款率进行分析 152 depayplot(3,kind_idx,kind,'借款类型','不同借款类型客户逾期还款率',index) 153 154 # 根据性别对逾期还款率进行分析 155 depayplot(4,sex_idx,sex,'性别','不同性别客户逾期还款率',index) 156 157 # 根据借款金额对逾期还款率进行分析 158 depayplot(5,amount_idx,amount,'借款金额','不同借款金额客户逾期还款率',index) 159 160 plt.show() 161 #借款利率的分析图 162 plt.figure(figsize=(15, 10)) 163 index1 = '借款利率' 164 165 # 根据初始评级对借款利率进行分析 166 depayplot(1,level_idx,lev,'初始评级','不同初始评级客户借款利率',index1) 167 168 # 根据年龄对借款利率进行分析 169 depayplot(2,age_idx,age,'年龄','不同年龄客户借款利率',index1) 170 171 # 根据借款类型对借款利率进行分析 172 depayplot(3,kind_idx,kind,'借款类型','不同借款类型客户借款利率',index1) 173 174 # 根据性别对借款利率进行分析 175 depayplot(4,sex_idx,sex,'性别','不同性别客户借款利率',index1) 176 177 # 根据借款金额对借款利率进行分析 178 depayplot(5,amount_idx,amount,'借款金额','不同借款金额客户借款利率',index1) 179 180 plt.show() 181 182 # 删除尚未到期的记录 183 LP = LP[LP['到期日期'] <= LP['recorddate']] 184 #LP.info() 185 #LP.describe() 186 # 将LC和LP两个表融合起来 187 LCLP = pd.merge(LC, LP, how='left', on=['ListingId']) 188 # 删除数据不全的记录 189 LCLP = LCLP.dropna(how='any') 190 LCLP.info() 191 #LCLP.describe() 192 193 #定义用户还款习惯分析可视化函数 194 def repayhabit(group,num,idx,xlabel,color): 195 # 一次性全部还款 196 onetime = [] 197 for a in group: 198 ot = a.loc[a['还款状态'] == 3]['应还本金'].sum( 199 ) + a.loc[a['还款状态'] == 3]['应还利息'].sum() 200 onetime.append(ot) 201 # 部分提前还款 202 partial = [] 203 for a in group: 204 pa = a.loc[(a['还款状态'] == 1) & (a['还款日期'] < a['到期日期'])]['应还本金'].sum( 205 ) + a.loc[(a['还款状态'] == 1) & (a['还款日期'] < a['到期日期'])]['应还利息'].sum() 206 partial.append(pa) 207 # 逾期还款 208 pastdue = [] 209 for a in group: 210 pas = a.loc[(a['还款状态'] == 2) | (a['还款状态'] == 4)|(a['还款状态'] == 0)]['应还本金'].sum() + \ 211 a.loc[(a['还款状态'] == 2) | (a['还款状态'] == 4)|(a['还款状态'] == 0)]['应还利息'].sum() 212 pastdue.append(pas) 213 # 正常还款 214 normal = [] 215 for a in group: 216 nm = a.loc[(a['还款状态'] == 1) & (a['还款日期'] == a['到期日期'])]['应还本金'].sum( 217 ) + a.loc[(a['还款状态'] == 1) & (a['还款日期'] == a['到期日期'])]['应还利息'].sum() 218 normal.append(nm) 219 220 tot = [] 221 for i in range(num): 222 t = onetime[i]+partial[i]+pastdue[i]+normal[i] 223 tot.append(t) 224 225 print(tot) 226 227 temp = [] 228 for i in range(num): 229 tp = (100 * onetime[i] / tot[i], 100 * partial[i] / tot[i], 230 100 * normal[i] / tot[i], 100 * pastdue[i] / tot[i]) 231 temp.append(tp) 232 233 df = pd.DataFrame(temp) 234 df.index = idx 235 df.columns = ('提前一次性', '部分提前', '正常', '逾期') 236 print(df) 237 238 df.plot(kind='bar', colormap=color, stacked=True) 239 plt.ylabel('还款金额') 240 plt.xlabel(xlabel) 241 plt.legend(loc='best') 242 plt.show() 243 amountA = LCLP.loc[(LCLP['借款金额'] > 0) & (LCLP['借款金额'] < 2000)] 244 amountB = LCLP.loc[(LCLP['借款金额'] >= 2000) & (LCLP['借款金额'] < 3000)] 245 amountC = LCLP.loc[(LCLP['借款金额'] >= 3000) & (LCLP['借款金额'] < 4000)] 246 amountD = LCLP.loc[(LCLP['借款金额'] >= 4000) & (LCLP['借款金额'] < 5000)] 247 amountE = LCLP.loc[(LCLP['借款金额'] >= 5000) & (LCLP['借款金额'] < 6000)] 248 amountF = LCLP.loc[(LCLP['借款金额'] >= 6000)] 249 amountgroup = [amountA, amountB, amountC, amountD,amountE,amountF] 250 251 repayhabit(amountgroup,6,amount_idx,'借款金额','Greys_r')
总结
本此项目在完成的过程中碰到了许多问题,例如图像显示不出来,数据处理有瑕疵这些方面的问题。多亏如今发达的网络和同学我才能基本解决这些问题。同时这也暴露了我的不足和进步的方向。总的来说这次项目达到了我的预期。今后会继续提高自己。
免责声明:本站所有文章内容,图片,视频等均是来源于用户投稿和互联网及文摘转载整编而成,不代表本站观点,不承担相关法律责任。其著作权各归其原作者或其出版社所有。如发现本站有涉嫌抄袭侵权/违法违规的内容,侵犯到您的权益,请在线联系站长,一经查实,本站将立刻删除。 本文来自网络,若有侵权,请联系删除,如若转载,请注明出处:https://yundeesoft.com/30697.html