👩‍💼

3.3 보스턴 주택가격 예측분석 Python - 1

 
SAS에서 분석했던 보스턴 집값 분석을 Python에서도 동일하게 해봅시다.

1. 데이터 준비

1) 필요 패키지 불러오기

import pandas as pd import numpy as np import matplotlib.pyplot as plt import seaborn as sns

2) 데이터 불러오기

read_csv를 이용하여 Train/Test 데이터를 불러옵니다.
train_df = pd.read_csv('train.csv') test_df = pd.read_csv('test.csv')

3) 불필요한 데이터 제거

SAS에서도 제외했던 변수들을 제거합니다. Python에서는 drop문을 사용하여 제외합니다.
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)

4) 범주형 변수 더미화

SAS와는 다르게 Python에서는 범주형 변수를 더미화 시켜야합니다. 여러 방법이 있지만 여기서는 get_dummies를 활용하여 더미화를 합니다. 더미화를 시킨 변수를 남기고 원래 변수는 제거합니다.
 
#Train 데이터 범주형 변수 더미화 dummy_list = list(train_df.select_dtypes(include =['object']).columns) dummies = pd.get_dummies(train_df[dummy_list], prefix = dummy_list) train_df.drop(dummy_list, axis = 1, inplace = True) X = pd.concat([train_df, dummies], axis = 1) #Test 데이터 데이터 범주형 변수 더미화 dummy_list = list(test_df.select_dtypes(include =['object']).columns) dummies = pd.get_dummies(test_df[dummy_list], prefix = dummy_list) test_df.drop(dummy_list, axis = 1, inplace = True) Y = pd.concat([test_df, dummies], axis = 1)

5) Missing 값 처리

데이터에 있는 Missing값도 처리해봅시다. 먼저 Missing값이 있는 변수를 확인해봅시다.
 
#Train 데이터 Missing 값 처리 cols=list(train_df) for col in list(train_df): if (train_df[col].isnull().sum())==0: cols.remove(col) else: pass print(len(cols)) #3개 #Test 데이터 Missing 값 처리 cols=list(test_df) for col in list(test_df): if (test_df[col].isnull().sum())==0: cols.remove(col) else: pass print(len(cols)) #7개
Missing변수가 Train 데이터에 3개 Test 데이터에 7개가 있습니다. 여기서는 간단하게 0을 넣어 처리해봅시다.
#Train 데이터 Missing값 처리 for col in ('LotFrontage', 'MasVnrArea', 'GarageYrBlt'): train_df[col] = train_df[col].fillna(0) #Test 데이터 Missing값 처리 for col in ('BsmtFinSF1', 'BsmtUnfSF', 'TotalBsmtSF', 'BsmtFullBath', 'BsmtHalfBath', 'GarageCars', 'GarageArea'): test_df[col] = test_df[col].fillna(0)
 
이제 분석을 위한 준비가 마쳤습니다. 기본 Baseline모델을 구축해봅시다.

2. 모델 구축

1) 분석변수/타겟변수 준비

sklearn에서 모델을 구축하기 위해 분석변수와 타겟변수로 나누는 작업이 선행되어야 합니다. 다음과 같이 분석변수(data)와 타겟변수(target)으로 나누어 데이터를 준비해봅시다.
data = train_df.drop('SalePrice', axis=1).values target = train_df['SalePrice'].values

2) 필요한 패키지 불러오기

여기서는 Lasso 모델을 구축해볼텐데요. 모델 구축전 다음과 같이 Lasso 모델을 이용하기 위해 필요 패키지를 불러옵니다.
from sklearn.linear_model import Lasso

3) Lasso 모델 구축

다음과 같이 간단하게 모델을 불러오고, fit 구문을 이용하여 분석변수와 타겟변수를 순서대로 입력하고 실행시키면 모델이 구축됩니다.
Lasso = Lasso() Lasso.fit(data, target)

4) 스코어링 및 제출

미리 준비해둔 테스트 데이터를 Lasso모델에 적합하기 위해서는 predict 구문을 이용해야합니다. 그 다음 SAS에서 했던것처럼 데이터에 Id와 SalePrice만 남긴후 to_csv구문을 이용하여 결과 파일을 내보냅니다.
predict = Lasso.predict(test_df) result =pd.DataFrame({ 'Id': test_df['Id'], 'SalePrice': predict }) result.to_csv('result_Lasso.csv', index=False)

5) 결과 확인

result_Lasso.csv 파일을 Kaggle에 제출에 봅시다. 제출 결과 스코어 0.33302로 생각보다 좋은 결과를 얻었습니다. 이제 더 나은 모델을 만들어 봅시다.
notion imagenotion image