前言
當下網絡借貸平台不斷增多,借貸人數也不斷增多。
希望借由這個數據分析可以得到關於這部分人群借貸的相關視圖,並進行數據分析。
數據來源
數據為拍拍貸真實業務數據,但僅為信用標的一個樣本,分別為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')
總結
本此項目在完成的過程中碰到了許多問題,例如圖像顯示不出來,數據處理有瑕疵這些方面的問題。多虧如今發達的網絡和同學我才能基本解決這些問題。同時這也暴露了我的不足和進步的方向。總的來說這次項目達到了我的預期。今后會繼續提高自己。