Loan Prediction III--A practice
阿新 • • 發佈:2018-12-13
專案連結:https://datahack.analyticsvidhya.com/contest/practice-problem-loan-prediction-iii/ 參考文獻:《Python for Data Analysis》 參考連結:https://pandas.pydata.org/pandas-docs/stable/index.html 使用工具:Jupyter Notebook 今天進行資料清洗&初步資料整合,後期會逐漸把建立好的預測貼上來,時間週期:10天。 反省:A.資料結構認知過於倉促,實際上,預測若符合實際應用,還需進一步探索 B.填充缺失資料時,除了數值型資料用中位數填充,文字型資料用ffill方法填充且改變了原資料,之後要警惕小心使用,否則要備份原資料 (一)資料結構認知
import pandas as pd
import numpy as np
data=pd.read_csv("C:\\Users\\lx\\Desktop\\prediction\\train_u6lujuX_CVtuZ9i.csv",
index_col="Loan_ID")
import matplotlib.pyplot as plt
%matplotlib inline
#(1)檢視資料:eg.辦貸款且尚未畢業的女性名單 data.loc[(data['Gender']=='Female') &(data['Education']=='Not Graduate') &(data['Loan_Status']=='Y'), ['Gender','Education','Loan_Status']]
返回值如下:
#(2)查詢缺失值
def missing(x):
return sum(x.isnull())
print('Missing values from every column:')
print(data.apply(missing,axis=0))
print('\nMissing values from every row:')
print (data.apply(missing,axis=1).head())
返回值如下:
#(3)補全缺失值:用平均數替換缺失值 data.fillna(data.mean(),inplace=True) print(data) #補全缺失值:向前填充方法 data.fillna(method='ffill',inplace=True) print(data)
#(4)檢查缺失值是否被補全
print (data.apply(missing, axis=0))
返回值如下: 由上,缺失值補齊
#(5)用'Gender','Married','Self_Employed'這幾組的平均數剔掉缺失值,檢視一下每組的平均‘LoanAmount’
#作出資料透視表pivot_table
Graphics=data.pivot_table(values=['LoanAmount'],index=['Gender','Married','Self_Employed'],aggfunc=np.mean)
print(Graphics)
返回值如下:
由上,自僱的女性最受青睞,貸款最多,而且十分突出
#(5)考慮信用歷史的影響
#作出交叉表crosstab
pd.crosstab(data['Credit_History'],data['Loan_Status'],margins=True)
返回值如下:
#轉化成百分比
def percConvert(ser):
return ser/float(ser[-1])
pd.crosstab(data["Credit_History"],data["Loan_Status"],margins=True).apply(percConvert, axis=1)
返回值如下: 如上,有信用歷史獲得貸款的機率為:79.58%,然而無信用歷史獲得貸款的機率僅為:7.87%
#(6)考慮是否為自僱人士
pd.crosstab(data['Self_Employed'],data['Loan_Status'],margins=True)
返回值如下:
#轉化成百分比
def percConvert(ser):
return ser/float(ser[-1])
pd.crosstab(data["Self_Employed"],data["Loan_Status"],margins=True).apply(percConvert, axis=1)
返回值如下: 由上,自僱人士獲得貸款的機率為:68.29%,然而非自僱人士獲得貸款的機率為:68.60%,貸款狀態不由自僱(Y/N)影響
#(7)考慮收入的影響
#重塑DataFrame
prop_rates = pd.DataFrame([1000, 5000, 12000], index=['Rural','Semiurban','Urban'],columns=['rates'])
prop_rates
返回值如下:
data_merged = data.merge(right=prop_rates, how='inner',left_on='Property_Area',right_index=True, sort=False)
data_merged.pivot_table(values='Credit_History',index=['Property_Area','rates'], aggfunc=len)
返回值如下:
#排序DataFrame
data_sorted = data.sort_values(['ApplicantIncome','CoapplicantIncome'], ascending=False)
data_sorted[['ApplicantIncome','CoapplicantIncome']].head(20)
返回值如下:
#箱型圖&直方圖
data.boxplot(column="ApplicantIncome",by="Loan_Status")
data.hist(column="ApplicantIncome",by="Loan_Status",bins=30)
返回值如下: 由上,貸款狀態的分佈大致相同,不由收入的高低影響