SAS에서 했던 작업을 그대로 Python에서도 진행해봅시다. 범주화를 제외한 나머지 작업을 거의 동일하게 진행해볼텐데요. 끝까지 잘 따라오세요.
import pandas as pd
import numpy as np
from scipy.stats import norm
%matplotlib inline
import matplotlib.pyplot as plt
import seaborn as sns
아까 분석과 동일하게 사용하지 않는 데이터를 제거합니다.
train_df.drop(['Street','Alley','Utilities','Condition2','RoofMatl','BsmtFinType2',
'BsmtFinSF2','Heating','LowQualFinSF','WoodDeckSF','OpenPorchSF',
'PoolArea','PoolQC','MiscFeature','MiscVal','MoSold','YrSold'], axis = 'columns', inplace=True)
test_df.drop(['Street','Alley','Utilities','Condition2','RoofMatl','BsmtFinType2',
'BsmtFinSF2','Heating','LowQualFinSF','WoodDeckSF','OpenPorchSF',
'PoolArea','PoolQC','MiscFeature','MiscVal','MoSold','YrSold'], axis = 'columns', inplace=True)
왼쪽 그림을 보면 타겟변수가 한쪽으로 치우쳐져 있는 것을 동일한데요. 로그함수를 취했을때 정규분포처럼 보이는 것을 확인 할 수 있습니다. 타겟변수에 로그함수 취하는것은 모델 구축전에 수행하도록 하겠습니다.
#Target 변수 확인
figure, (ax1, ax2) = plt.subplots(nrows=1, ncols=2)
figure.set_size_inches(15,5)
sns.distplot(train_df['SalePrice'], fit=norm, ax=ax1)
sns.distplot(np.log(train_df['SalePrice']), fit=norm, ax=ax2)
다음과 같이 외부 컨디션에 대한 변수 중 범주형으로 되어있는 변수를 가공합니다. 4가지 변수를 더하여 New_var1를 생성합니다.
Condition_var = ['OverallQual','OverallCond','ExterQual','ExterCond']
Condition_Ex = train_df[Condition_var]
Condition_Ex = Condition_Ex.replace(to_replace='Ex',value = 5)
Condition_Ex = Condition_Ex.replace(to_replace='Gd',value = 4)
Condition_Ex = Condition_Ex.replace(to_replace='TA',value = 3)
Condition_Ex = Condition_Ex.replace(to_replace='Fa',value = 2)
Condition_Ex = Condition_Ex.replace(to_replace='Po',value = 1)
Condition_Ex = Condition_Ex.replace(to_replace='None',value = 0)
Condition_Ex = Condition_Ex.replace(to_replace='',value = 0)
Condition_Ex = Condition_Ex.replace(to_replace='NA',value = 0)
train_df['New_var1'] = Condition_Ex['OverallQual'] + Condition_Ex['OverallCond'] + Condition_Ex['ExterQual'] + Condition_Ex['ExterCond']
테스트 데이터도 동일하게 작업해 줍니다.