# Loading Packages
import pandas as pd
import numpy as np # For mathematical calculations
import seaborn as sns # For data visualization
import matplotlib.pyplot as plt # For plotting graphs
%matplotlib inline
import warnings # To ignore any warnings warnings.filterwarnings("ignore")
pd.set_option('display.max_rows', 100)
pd.set_option('display.max_columns', 50)
# Reading data
df_train=pd.read_csv("train_ctrUa4K.csv")
df_test=pd.read_csv("test_lAUu6dG.csv")
train_original=df_train.copy()
test_original=df_test.copy()
df_train.columns
df_test.columns
df_train.shape
df_test.shape
df_train['Loan_Status'].value_counts()
df_train.dtypes
df_train.describe(include=object)
df_train.describe(include=float)
#Apply Function
#Create a new function:
def num_missing(x):
return sum(x.isnull())
#Applying per column:
print("Missing values per column:")
print(df_train.apply(num_missing, axis=0)) #axis=0 defines that function is to be applied on each column
df_train['Dependents'].value_counts()
df_train.isnull().sum()
df_train[df_train['Gender'].isnull() | df_train['Married'].isnull()]
# For numerical variables: imputation using mean or median
# For categorical variables: imputation using mode
df_train['Gender'].fillna(df_train['Gender'].mode()[0], inplace=True)
df_train['Married'].fillna(df_train['Married'].mode()[0], inplace=True)
df_train['Dependents'].fillna(df_train['Dependents'].mode()[0], inplace=True)
df_train['Self_Employed'].fillna(df_train['Self_Employed'].mode()[0], inplace=True)
df_train['Credit_History'].fillna(df_train['Credit_History'].mode()[0], inplace=True)
df_train['Loan_Amount_Term'].fillna(df_train['Loan_Amount_Term'].mode()[0], inplace=True)
df_train['LoanAmount'].fillna(df_train['LoanAmount'].median(), inplace=True)
df_train.isnull().sum()
df_train['LoanAmount'].hist()
temp1 = df_train['Credit_History'].value_counts(ascending=True)
temp2 = df_train.pivot_table(values='Loan_Status',index=['Credit_History'],aggfunc=lambda x: x.map({'Y':1,'N':0}).mean())
print('Frequency Table for Credit History:\n %s' %(temp1))
# print temp1
print('\nProbility of getting loan for each Credit History class:')
print(temp2)
df_train['LoanAmount_log'] = np.log(df_train['LoanAmount'])
df_train['LoanAmount_log'].hist(bins=20)
df_test['LoanAmount_log'] = np.log(df_test['LoanAmount'])
df_train['ApplicantIncome'].idxmax()
df_train['ApplicantIncome'].idxmin()
bins=[0,1000,3000,42000]
def test(number):
if 0<number<1000:
return "Low"
elif 1000<=number<=3000:
return "Medium"
else:
return "High"
df_train['incomestatus'] = df_train['ApplicantIncome'].apply(test)
df_train.drop('incomestatus',axis=1)
df_train['Gender'].mode()[0]
df_train=df_train.drop('Loan_ID',axis=1)
df_test=df_test.drop('Loan_ID',axis=1)
X = df_train.drop('Loan_Status',1)
y = df_train.Loan_Status
X.head()
X=pd.get_dummies(X)
X
df_train=pd.get_dummies(df_train)
df_test=pd.get_dummies(df_test)
from sklearn.model_selection import train_test_split
x_train, x_cv, y_train, y_cv = train_test_split(X,y, test_size =0.3)
from sklearn.linear_model import LogisticRegression
from sklearn.metrics import accuracy_score
model = LogisticRegression()
model.fit(x_train, y_train)
pred_cv = model.predict(x_cv)
pred_cv
model.intercept_
accuracy_score(y_cv,pred_cv)