1. 程式人生 > >Loan Prediction III--A practice

Loan Prediction III--A practice

專案連結: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)

返回值如下: 在這裡插入圖片描述 由上,貸款狀態的分佈大致相同,不由收入的高低影響