kaggle 및 dacon

Kaggle 정복하기 - House Prices - Advanced Regression Techniques #1 EDA

jinmc 2022. 4. 17. 22:48
반응형

다음 캐글 Contest를 try해봤습니다.

https://www.kaggle.com/competitions/house-prices-advanced-regression-techniques 

모르는 것을 너무도 많이 알 수 있었던 좋은 Contest였습니다.

 

참고 : https://www.kaggle.com/code/pmarcelino/comprehensive-data-exploration-with-python

1460개의 data와, 80개의 column이 있습니다. train의 경우 81개의  column이 있습니다.

81개의 column 중 target은 salePrice가 우리가 regression을 원하는 값입니다.

 

필요 library를 import합니다.

#invite people for the Kaggle party
import pandas as pd
import matplotlib.pyplot as plt
import seaborn as sns
import numpy as np
from scipy.stats import norm
from sklearn.preprocessing import StandardScaler
from scipy import stats
import warnings
warnings.filterwarnings('ignore')
%matplotlib inline

df_train에 training 파일을 불러옵니다.

#bring in the six packs
df_train = pd.read_csv('../input/train.csv')

 

salePrice같은 경우에는 skewness와 kurtosis를 구하였습니다.

#skewness and kurtosis
print("Skewness: %f" % df_train['SalePrice'].skew())
print("Kurtosis: %f" % df_train['SalePrice'].kurt())

Skewness의 경우 왜도라고 하며, 얼마나 좌우로 치우쳐 있는지를 알려줍니다. 

Kurtosis의 경우 첨도라고 하며, 얼마나 날카로운지에 대해 알려줍니다.

 

 

 

이 중에서 가장 중요한 variable는 grlivarea와 totalBsmtSF, overallQuality 라고 합니다.

이는 다음 correlation matrix를 보면 확인할 수 있습니다.

 

#saleprice correlation matrix
k = 10 #number of variables for heatmap
cols = corrmat.nlargest(k, 'SalePrice')['SalePrice'].index
cm = np.corrcoef(df_train[cols].values.T)
sns.set(font_scale=1.25)
hm = sns.heatmap(cm, cbar=True, annot=True, square=True, fmt='.2f', annot_kws={'size': 10}, yticklabels=cols.values, xticklabels=cols.values)
plt.show()

참고로

OVerallQual은 전체적인 재질과 마감의 퀄리티,

GrLivArea는 땅 위 생활 면적 (전용면적 인듯? 하다)

TotalBsmtSF : basement area의 면적 (지하실 면적?)

 

각자 visualization을 해 보면, 확실히 OverallQual와 GrLivArea의 상관도가 TotalBsmtSF보다 큰 것으로 보입니다.

 

#scatter plot grlivarea/saleprice
var = 'GrLivArea'
data = pd.concat([df_train['SalePrice'], df_train[var]], axis=1)
data.plot.scatter(x=var, y='SalePrice', ylim=(0,800000));

#scatter plot totalbsmtsf/saleprice
var = 'TotalBsmtSF'
data = pd.concat([df_train['SalePrice'], df_train[var]], axis=1)
data.plot.scatter(x=var, y='SalePrice', ylim=(0,800000));

확실히  totalBsmtSF는 GrLivArea에 비해서는 상관관계가 없어 보입니다.

그럼 OverallQual은 어떨까요? 1~10 의 categorical value 이기 때문에 box plot으로 visualization이 가능합니다.

#box plot overallqual/saleprice
var = 'OverallQual'
data = pd.concat([df_train['SalePrice'], df_train[var]], axis=1)
f, ax = plt.subplots(figsize=(8, 6))
fig = sns.boxplot(x=var, y="SalePrice", data=data)
fig.axis(ymin=0, ymax=800000);

확실하게 가장 상관관계가 있어보이네요.

원래는 모델까지 알아보려고 했는데 EDA만 해도 너무 길어져서 모델에 관한 포스팅은 다음에 하도록 하겠습니다.

 

참고 : https://www.kaggle.com/code/pmarcelino/comprehensive-data-exploration-with-python

반응형

'kaggle 및 dacon' 카테고리의 다른 글

kaggle competition - H&M Recommendation EDA  (0) 2022.03.20