본문 바로가기

Kaggle/House Prices

Housing Data Exploratory Analysis by AiO (With R)

https://www.kaggle.com/notaapple/house-prices-advanced-regression-techniques/detailed-exploratory-data-analysis-using-r
library(data.table)
library(testthat)
library(gridExtra)
library(corrplot)
library(GGally)
library(ggplot2)
library(e1071)
library(dplyr)
## -------------------------------------------------------------------------
## data.table + dplyr 패키지는 dtplyr에 담겨져 있다.
## dtplyr을 불러오자! library(dtplyr)!
## -------------------------------------------------------------------------
## dplyr도 불러온다.
## 다음 객체는 'package:GGally'에서 불러온것이다.
##     nasa
## 다음 객체는 'package:gridExtra'에서 불러온것이다.
##     combine
## 다음 객체는  'package:testthat' 에서 불러온 것이다.
##     matches
## 다음 객체는  'package:data.table' 에서 불러온 것이다.
##     between, last
## 다음 객체는  'package:stats' 에서 불러온 것이다.
##     filter, lag
## 다음 객체는  'package:base' 에서 불러온 것이다.
##     intersect, setdiff, setequal, union
cat_var <- names(train)[which(sapply(train, is.character))] # train의 변수 중 character변수의 이름을 할당.
cat_car <- c(cat_var, 'BedroomAbvGr', 'HalfBath', ' KitchenAbvGr','BsmtFullBath', 'BsmtHalfBath', 'MSSubClass')
numeric_var <- names(train)[which(sapply(train, is.numeric))] # train의 변수 중 numeric변수의 이름을 할당.

Structure of the data

주택 데이터셋은 1460개의 행과 종속변수인 Sale Price를 포함해 81개의 열을 가진다.

dim(train)
## [1] 1460   81
str(train)
## Classes 'data.table' and 'data.frame':   1460 obs. of  81 variables:
##  $ Id           : int  1 2 3 4 5 6 7 8 9 10 ...
##  $ MSSubClass   : int  60 20 60 70 60 50 20 60 50 190 ...
##  $ MSZoning     : chr  "RL" "RL" "RL" "RL" ...
##  $ LotFrontage  : int  65 80 68 60 84 85 75 NA 51 50 ...
##  $ LotArea      : int  8450 9600 11250 9550 14260 14115 10084 10382 6120 7420 ...
##  $ Street       : chr  "Pave" "Pave" "Pave" "Pave" ...
##  $ Alley        : chr  NA NA NA NA ...
##  $ LotShape     : chr  "Reg" "Reg" "IR1" "IR1" ...
##  $ LandContour  : chr  "Lvl" "Lvl" "Lvl" "Lvl" ...
##  $ Utilities    : chr  "AllPub" "AllPub" "AllPub" "AllPub" ...
##  $ LotConfig    : chr  "Inside" "FR2" "Inside" "Corner" ...
##  $ LandSlope    : chr  "Gtl" "Gtl" "Gtl" "Gtl" ...
##  $ Neighborhood : chr  "CollgCr" "Veenker" "CollgCr" "Crawfor" ...
##  $ Condition1   : chr  "Norm" "Feedr" "Norm" "Norm" ...
##  $ Condition2   : chr  "Norm" "Norm" "Norm" "Norm" ...
##  $ BldgType     : chr  "1Fam" "1Fam" "1Fam" "1Fam" ...
##  $ HouseStyle   : chr  "2Story" "1Story" "2Story" "2Story" ...
##  $ OverallQual  : int  7 6 7 7 8 5 8 7 7 5 ...
##  $ OverallCond  : int  5 8 5 5 5 5 5 6 5 6 ...
##  $ YearBuilt    : int  2003 1976 2001 1915 2000 1993 2004 1973 1931 1939 ...
##  $ YearRemodAdd : int  2003 1976 2002 1970 2000 1995 2005 1973 1950 1950 ...
##  $ RoofStyle    : chr  "Gable" "Gable" "Gable" "Gable" ...
##  $ RoofMatl     : chr  "CompShg" "CompShg" "CompShg" "CompShg" ...
##  $ Exterior1st  : chr  "VinylSd" "MetalSd" "VinylSd" "Wd Sdng" ...
##  $ Exterior2nd  : chr  "VinylSd" "MetalSd" "VinylSd" "Wd Shng" ...
##  $ MasVnrType   : chr  "BrkFace" "None" "BrkFace" "None" ...
##  $ MasVnrArea   : int  196 0 162 0 350 0 186 240 0 0 ...
##  $ ExterQual    : chr  "Gd" "TA" "Gd" "TA" ...
##  $ ExterCond    : chr  "TA" "TA" "TA" "TA" ...
##  $ Foundation   : chr  "PConc" "CBlock" "PConc" "BrkTil" ...
##  $ BsmtQual     : chr  "Gd" "Gd" "Gd" "TA" ...
##  $ BsmtCond     : chr  "TA" "TA" "TA" "Gd" ...
##  $ BsmtExposure : chr  "No" "Gd" "Mn" "No" ...
##  $ BsmtFinType1 : chr  "GLQ" "ALQ" "GLQ" "ALQ" ...
##  $ BsmtFinSF1   : int  706 978 486 216 655 732 1369 859 0 851 ...
##  $ BsmtFinType2 : chr  "Unf" "Unf" "Unf" "Unf" ...
##  $ BsmtFinSF2   : int  0 0 0 0 0 0 0 32 0 0 ...
##  $ BsmtUnfSF    : int  150 284 434 540 490 64 317 216 952 140 ...
##  $ TotalBsmtSF  : int  856 1262 920 756 1145 796 1686 1107 952 991 ...
##  $ Heating      : chr  "GasA" "GasA" "GasA" "GasA" ...
##  $ HeatingQC    : chr  "Ex" "Ex" "Ex" "Gd" ...
##  $ CentralAir   : chr  "Y" "Y" "Y" "Y" ...
##  $ Electrical   : chr  "SBrkr" "SBrkr" "SBrkr" "SBrkr" ...
##  $ 1stFlrSF     : int  856 1262 920 961 1145 796 1694 1107 1022 1077 ...
##  $ 2ndFlrSF     : int  854 0 866 756 1053 566 0 983 752 0 ...
##  $ LowQualFinSF : int  0 0 0 0 0 0 0 0 0 0 ...
##  $ GrLivArea    : int  1710 1262 1786 1717 2198 1362 1694 2090 1774 1077 ...
##  $ BsmtFullBath : int  1 0 1 1 1 1 1 1 0 1 ...
##  $ BsmtHalfBath : int  0 1 0 0 0 0 0 0 0 0 ...
##  $ FullBath     : int  2 2 2 1 2 1 2 2 2 1 ...
##  $ HalfBath     : int  1 0 1 0 1 1 0 1 0 0 ...
##  $ BedroomAbvGr : int  3 3 3 3 4 1 3 3 2 2 ...
##  $ KitchenAbvGr : int  1 1 1 1 1 1 1 1 2 2 ...
##  $ KitchenQual  : chr  "Gd" "TA" "Gd" "Gd" ...
##  $ TotRmsAbvGrd : int  8 6 6 7 9 5 7 7 8 5 ...
##  $ Functional   : chr  "Typ" "Typ" "Typ" "Typ" ...
##  $ Fireplaces   : int  0 1 1 1 1 0 1 2 2 2 ...
##  $ FireplaceQu  : chr  NA "TA" "TA" "Gd" ...
##  $ GarageType   : chr  "Attchd" "Attchd" "Attchd" "Detchd" ...
##  $ GarageYrBlt  : int  2003 1976 2001 1998 2000 1993 2004 1973 1931 1939 ...
##  $ GarageFinish : chr  "RFn" "RFn" "RFn" "Unf" ...
##  $ GarageCars   : int  2 2 2 3 3 2 2 2 2 1 ...
##  $ GarageArea   : int  548 460 608 642 836 480 636 484 468 205 ...
##  $ GarageQual   : chr  "TA" "TA" "TA" "TA" ...
##  $ GarageCond   : chr  "TA" "TA" "TA" "TA" ...
##  $ PavedDrive   : chr  "Y" "Y" "Y" "Y" ...
##  $ WoodDeckSF   : int  0 298 0 0 192 40 255 235 90 0 ...
##  $ OpenPorchSF  : int  61 0 42 35 84 30 57 204 0 4 ...
##  $ EnclosedPorch: int  0 0 0 272 0 0 0 228 205 0 ...
##  $ 3SsnPorch    : int  0 0 0 0 0 320 0 0 0 0 ...
##  $ ScreenPorch  : int  0 0 0 0 0 0 0 0 0 0 ...
##  $ PoolArea     : int  0 0 0 0 0 0 0 0 0 0 ...
##  $ PoolQC       : chr  NA NA NA NA ...
##  $ Fence        : chr  NA NA NA NA ...
##  $ MiscFeature  : chr  NA NA NA NA ...
##  $ MiscVal      : int  0 0 0 0 0 700 0 350 0 0 ...
##  $ MoSold       : int  2 5 9 2 12 10 8 11 4 1 ...
##  $ YrSold       : int  2008 2007 2008 2006 2008 2009 2007 2009 2008 2008 ...
##  $ SaleType     : chr  "WD" "WD" "WD" "WD" ...
##  $ SaleCondition: chr  "Normal" "Normal" "Normal" "Abnorml" ...
##  $ SalePrice    : int  208500 181500 223500 140000 250000 143000 307000 200000 129900 118000 ...
##  - attr(*, ".internal.selfref")=<externalptr>

Summarize the missing values in the data.

데이터셋의 첫 5행을 보는것은 결측치가 있는 열이 있는지를 보여준다. (번역가의 생각으론 첫 5행 그리고 마지막 5행을 보는것은 데이터가 제대로 불러와 졌는지를 보기위함이다. 그러나 이 말도 뭐 아주 틀린말은 아니다. 사실 결측치가 있는 열을 보기 위해서는 summary 함수가 더 올바른 방법일 것이다.) 범주형 변수들중 가장 많은 결측치를 가진 것은 Alley, FirePlaceQu, PoolQC, Fence, 그리고 MiscFeature 이다.

  • Alley: 골목길 접근성 종류를 나타냄.
  • FirePlaceQu: 벽난로의 품질
  • PoolQC: 수영장의 품질.
  • Fence: 울타리의 품질.
  • MiscFeature: Miscellaneous features는 다른 카테고리에서 다루어지지 않은 변수들을 말한다.

결측값들은 주택의 대다수가 골목길 접근성이 없고, 수영장이 없고, 울타리가 없고, 엘레베이터도 없다는 것을 나타낸다. 2번째 차고(집에 달려있는 차고외의 것), 오두막, 또는 테니스코트는 MiscFeature로 다뤘다.

수치형변수들은 결측값이 범주형만큼 많이 있진 않지만, 여전히 몇몇개가 존재한다. LotFrontage 변수에서 259개의 결측치, MasVnrArea 에서 8개의 결측치 그리고 GarageYrBlt에서 81개의 결측치들이 있다.


  • LotFrontage: 집까지 연결된 거리(street)의 발자국거리(Linear feet)
  • GarageYrBlt: 차고가 지어진 년도Year garage was built
  • MasVnrArea: 평방 Masonry veener 공간(외부벽돌이 쌓여진 공간, 주로 집의 모양새(appearance)를 위한 것이라고 함.) 

구글링 하여 찾은 Masonry Veener의 정의: Veneer masonry는 집을 건축하거나 리모델링하는데 많이 선택되는 것이다. 왜냐하면 이것은 훨씬 더 싸고 절연효과를 주면서 붉은벽돌 혹은 석조의 외형을 살린다. 이 공법은 기존목조구조에 추가하여 사용되어 질 수 있으며 콘크리트벽돌 벽을 대체할 수 있다.

Brick veeners 는 집의 건축에 반드시 필요한 부분은 아니나 더 나은 절연효과를 가져오면서, 벽의 외관을 유지하기위해 사용된다. 이 공법은 주로 단일 벽돌층만을 갖는 경향이 있다.

head(train)
##    Id MSSubClass MSZoning LotFrontage LotArea Street Alley LotShape
## 1:  1         60       RL          65    8450   Pave    NA      Reg
## 2:  2         20       RL          80    9600   Pave    NA      Reg
## 3:  3         60       RL          68   11250   Pave    NA      IR1
## 4:  4         70       RL          60    9550   Pave    NA      IR1
## 5:  5         60       RL          84   14260   Pave    NA      IR1
## 6:  6         50       RL          85   14115   Pave    NA      IR1
##    LandContour Utilities LotConfig LandSlope Neighborhood Condition1
## 1:         Lvl    AllPub    Inside       Gtl      CollgCr       Norm
## 2:         Lvl    AllPub       FR2       Gtl      Veenker      Feedr
## 3:         Lvl    AllPub    Inside       Gtl      CollgCr       Norm
## 4:         Lvl    AllPub    Corner       Gtl      Crawfor       Norm
## 5:         Lvl    AllPub       FR2       Gtl      NoRidge       Norm
## 6:         Lvl    AllPub    Inside       Gtl      Mitchel       Norm
##    Condition2 BldgType HouseStyle OverallQual OverallCond YearBuilt
## 1:       Norm     1Fam     2Story           7           5      2003
## 2:       Norm     1Fam     1Story           6           8      1976
## 3:       Norm     1Fam     2Story           7           5      2001
## 4:       Norm     1Fam     2Story           7           5      1915
## 5:       Norm     1Fam     2Story           8           5      2000
## 6:       Norm     1Fam     1.5Fin           5           5      1993
##    YearRemodAdd RoofStyle RoofMatl Exterior1st Exterior2nd MasVnrType
## 1:         2003     Gable  CompShg     VinylSd     VinylSd    BrkFace
## 2:         1976     Gable  CompShg     MetalSd     MetalSd       None
## 3:         2002     Gable  CompShg     VinylSd     VinylSd    BrkFace
## 4:         1970     Gable  CompShg     Wd Sdng     Wd Shng       None
## 5:         2000     Gable  CompShg     VinylSd     VinylSd    BrkFace
## 6:         1995     Gable  CompShg     VinylSd     VinylSd       None
##    MasVnrArea ExterQual ExterCond Foundation BsmtQual BsmtCond
## 1:        196        Gd        TA      PConc       Gd       TA
## 2:          0        TA        TA     CBlock       Gd       TA
## 3:        162        Gd        TA      PConc       Gd       TA
## 4:          0        TA        TA     BrkTil       TA       Gd
## 5:        350        Gd        TA      PConc       Gd       TA
## 6:          0        TA        TA       Wood       Gd       TA
##    BsmtExposure BsmtFinType1 BsmtFinSF1 BsmtFinType2 BsmtFinSF2 BsmtUnfSF
## 1:           No          GLQ        706          Unf          0       150
## 2:           Gd          ALQ        978          Unf          0       284
## 3:           Mn          GLQ        486          Unf          0       434
## 4:           No          ALQ        216          Unf          0       540
## 5:           Av          GLQ        655          Unf          0       490
## 6:           No          GLQ        732          Unf          0        64
##    TotalBsmtSF Heating HeatingQC CentralAir Electrical 1stFlrSF 2ndFlrSF
## 1:         856    GasA        Ex          Y      SBrkr      856      854
## 2:        1262    GasA        Ex          Y      SBrkr     1262        0
## 3:         920    GasA        Ex          Y      SBrkr      920      866
## 4:         756    GasA        Gd          Y      SBrkr      961      756
## 5:        1145    GasA        Ex          Y      SBrkr     1145     1053
## 6:         796    GasA        Ex          Y      SBrkr      796      566
##    LowQualFinSF GrLivArea BsmtFullBath BsmtHalfBath FullBath HalfBath
## 1:            0      1710            1            0        2        1
## 2:            0      1262            0            1        2        0
## 3:            0      1786            1            0        2        1
## 4:            0      1717            1            0        1        0
## 5:            0      2198            1            0        2        1
## 6:            0      1362            1            0        1        1
##    BedroomAbvGr KitchenAbvGr KitchenQual TotRmsAbvGrd Functional
## 1:            3            1          Gd            8        Typ
## 2:            3            1          TA            6        Typ
## 3:            3            1          Gd            6        Typ
## 4:            3            1          Gd            7        Typ
## 5:            4            1          Gd            9        Typ
## 6:            1            1          TA            5        Typ
##    Fireplaces FireplaceQu GarageType GarageYrBlt GarageFinish GarageCars
## 1:          0          NA     Attchd        2003          RFn          2
## 2:          1          TA     Attchd        1976          RFn          2
## 3:          1          TA     Attchd        2001          RFn          2
## 4:          1          Gd     Detchd        1998          Unf          3
## 5:          1          TA     Attchd        2000          RFn          3
## 6:          0          NA     Attchd        1993          Unf          2
##    GarageArea GarageQual GarageCond PavedDrive WoodDeckSF OpenPorchSF
## 1:        548         TA         TA          Y          0          61
## 2:        460         TA         TA          Y        298           0
## 3:        608         TA         TA          Y          0          42
## 4:        642         TA         TA          Y          0          35
## 5:        836         TA         TA          Y        192          84
## 6:        480         TA         TA          Y         40          30
##    EnclosedPorch 3SsnPorch ScreenPorch PoolArea PoolQC Fence MiscFeature
## 1:             0         0           0        0     NA    NA          NA
## 2:             0         0           0        0     NA    NA          NA
## 3:             0         0           0        0     NA    NA          NA
## 4:           272         0           0        0     NA    NA          NA
## 5:             0         0           0        0     NA    NA          NA
## 6:             0       320           0        0     NA MnPrv        Shed
##    MiscVal MoSold YrSold SaleType SaleCondition SalePrice
## 1:       0      2   2008       WD        Normal    208500
## 2:       0      5   2007       WD        Normal    181500
## 3:       0      9   2008       WD        Normal    223500
## 4:       0      2   2006       WD       Abnorml    140000
## 5:       0     12   2008       WD        Normal    250000
## 6:     700     10   2009       WD        Normal    143000
colSums(sapply(train, is.na))
##            Id    MSSubClass      MSZoning   LotFrontage       LotArea 
##             0             0             0           259             0 
##        Street         Alley      LotShape   LandContour     Utilities 
##             0          1369             0             0             0 
##     LotConfig     LandSlope  Neighborhood    Condition1    Condition2 
##             0             0             0             0             0 
##      BldgType    HouseStyle   OverallQual   OverallCond     YearBuilt 
##             0             0             0             0             0 
##  YearRemodAdd     RoofStyle      RoofMatl   Exterior1st   Exterior2nd 
##             0             0             0             0             0 
##    MasVnrType    MasVnrArea     ExterQual     ExterCond    Foundation 
##             8             8             0             0             0 
##      BsmtQual      BsmtCond  BsmtExposure  BsmtFinType1    BsmtFinSF1 
##            37            37            38            37             0 
##  BsmtFinType2    BsmtFinSF2     BsmtUnfSF   TotalBsmtSF       Heating 
##            38             0             0             0             0 
##     HeatingQC    CentralAir    Electrical      1stFlrSF      2ndFlrSF 
##             0             0             1             0             0 
##  LowQualFinSF     GrLivArea  BsmtFullBath  BsmtHalfBath      FullBath 
##             0             0             0             0             0 
##      HalfBath  BedroomAbvGr  KitchenAbvGr   KitchenQual  TotRmsAbvGrd 
##             0             0             0             0             0 
##    Functional    Fireplaces   FireplaceQu    GarageType   GarageYrBlt 
##             0             0           690            81            81 
##  GarageFinish    GarageCars    GarageArea    GarageQual    GarageCond 
##            81             0             0            81            81 
##    PavedDrive    WoodDeckSF   OpenPorchSF EnclosedPorch     3SsnPorch 
##             0             0             0             0             0 
##   ScreenPorch      PoolArea        PoolQC         Fence   MiscFeature 
##             0             0          1453          1179          1406 
##       MiscVal        MoSold        YrSold      SaleType SaleCondition 
##             0             0             0             0             0 
##     SalePrice 
##             0
colSums(sapply(train[,.SD, .SDcols = cat_var], is.na)) # .SD로 서브셋 불러오기
##      MSZoning        Street         Alley      LotShape   LandContour 
##             0             0          1369             0             0 
##     Utilities     LotConfig     LandSlope  Neighborhood    Condition1 
##             0             0             0             0             0 
##    Condition2      BldgType    HouseStyle     RoofStyle      RoofMatl 
##             0             0             0             0             0 
##   Exterior1st   Exterior2nd    MasVnrType     ExterQual     ExterCond 
##             0             0             8             0             0 
##    Foundation      BsmtQual      BsmtCond  BsmtExposure  BsmtFinType1 
##             0            37            37            38            37 
##  BsmtFinType2       Heating     HeatingQC    CentralAir    Electrical 
##            38             0             0             0             1 
##   KitchenQual    Functional   FireplaceQu    GarageType  GarageFinish 
##             0             0           690            81            81 
##    GarageQual    GarageCond    PavedDrive        PoolQC         Fence 
##            81            81             0          1453          1179 
##   MiscFeature      SaleType SaleCondition 
##          1406             0             0
colSums(sapply(train[,.SD, .SDcols = numeric_var], is.na))
##            Id    MSSubClass   LotFrontage       LotArea   OverallQual 
##             0             0           259             0             0 
##   OverallCond     YearBuilt  YearRemodAdd    MasVnrArea    BsmtFinSF1 
##             0             0             0             8             0 
##    BsmtFinSF2     BsmtUnfSF   TotalBsmtSF      1stFlrSF      2ndFlrSF 
##             0             0             0             0             0 
##  LowQualFinSF     GrLivArea  BsmtFullBath  BsmtHalfBath      FullBath 
##             0             0             0             0             0 
##      HalfBath  BedroomAbvGr  KitchenAbvGr  TotRmsAbvGrd    Fireplaces 
##             0             0             0             0             0 
##   GarageYrBlt    GarageCars    GarageArea    WoodDeckSF   OpenPorchSF 
##            81             0             0             0             0 
## EnclosedPorch     3SsnPorch   ScreenPorch      PoolArea       MiscVal 
##             0             0             0             0             0 
##        MoSold        YrSold     SalePrice 
##             0             0             0

리모델링된 집들의 숫자에 대해서 인사이트를 좀 얻어 보자. 데이터 설명에 따르면, YearBuilt의 날짜가 YearRemodAdd의 날짜와 다르다면, 그 집은 리모델링 된것이다. 이 두 열을 비교해보면 696개의 집들이 리모델링 되었고 764개의 집들이 리모델링 되지 않았다

#with =FALSE는 문자열을 컬럼 이름으로 취급한다.
sum(train[,'YearRemodAdd', with = FALSE] != train[,'YearBuilt', with = FALSE]) 
## [1] 696
cat('Percentage of houses remodeled',sum(train[,'YearRemodAdd', with = FALSE] != train[,'YearBuilt', with = FALSE])/ dim(train)[1])
## Percentage of houses remodeled 0.4767123
train %>% select(YearBuilt, YearRemodAdd) %>%    mutate(Remodeled = as.integer(YearBuilt != YearRemodAdd)) %>% ggplot(aes(x= factor(x = Remodeled, labels = c( 'No','Yes')))) + geom_bar() + xlab('Remodeled') + theme_light()

Summarize the numeric values and the structure of the data.

summary(train[,.SD, .SDcols =numeric_var])
##        Id           MSSubClass     LotFrontage        LotArea      
##  Min.   :   1.0   Min.   : 20.0   Min.   : 21.00   Min.   :  1300  
##  1st Qu.: 365.8   1st Qu.: 20.0   1st Qu.: 59.00   1st Qu.:  7554  
##  Median : 730.5   Median : 50.0   Median : 69.00   Median :  9478  
##  Mean   : 730.5   Mean   : 56.9   Mean   : 70.05   Mean   : 10517  
##  3rd Qu.:1095.2   3rd Qu.: 70.0   3rd Qu.: 80.00   3rd Qu.: 11602  
##  Max.   :1460.0   Max.   :190.0   Max.   :313.00   Max.   :215245  
##                                   NA's   :259                      
##   OverallQual      OverallCond      YearBuilt     YearRemodAdd 
##  Min.   : 1.000   Min.   :1.000   Min.   :1872   Min.   :1950  
##  1st Qu.: 5.000   1st Qu.:5.000   1st Qu.:1954   1st Qu.:1967  
##  Median : 6.000   Median :5.000   Median :1973   Median :1994  
##  Mean   : 6.099   Mean   :5.575   Mean   :1971   Mean   :1985  
##  3rd Qu.: 7.000   3rd Qu.:6.000   3rd Qu.:2000   3rd Qu.:2004  
##  Max.   :10.000   Max.   :9.000   Max.   :2010   Max.   :2010  
##                                                                
##    MasVnrArea       BsmtFinSF1       BsmtFinSF2        BsmtUnfSF     
##  Min.   :   0.0   Min.   :   0.0   Min.   :   0.00   Min.   :   0.0  
##  1st Qu.:   0.0   1st Qu.:   0.0   1st Qu.:   0.00   1st Qu.: 223.0  
##  Median :   0.0   Median : 383.5   Median :   0.00   Median : 477.5  
##  Mean   : 103.7   Mean   : 443.6   Mean   :  46.55   Mean   : 567.2  
##  3rd Qu.: 166.0   3rd Qu.: 712.2   3rd Qu.:   0.00   3rd Qu.: 808.0  
##  Max.   :1600.0   Max.   :5644.0   Max.   :1474.00   Max.   :2336.0  
##  NA's   :8                                                           
##   TotalBsmtSF        1stFlrSF       2ndFlrSF     LowQualFinSF    
##  Min.   :   0.0   Min.   : 334   Min.   :   0   Min.   :  0.000  
##  1st Qu.: 795.8   1st Qu.: 882   1st Qu.:   0   1st Qu.:  0.000  
##  Median : 991.5   Median :1087   Median :   0   Median :  0.000  
##  Mean   :1057.4   Mean   :1163   Mean   : 347   Mean   :  5.845  
##  3rd Qu.:1298.2   3rd Qu.:1391   3rd Qu.: 728   3rd Qu.:  0.000  
##  Max.   :6110.0   Max.   :4692   Max.   :2065   Max.   :572.000  
##                                                                  
##    GrLivArea     BsmtFullBath     BsmtHalfBath        FullBath    
##  Min.   : 334   Min.   :0.0000   Min.   :0.00000   Min.   :0.000  
##  1st Qu.:1130   1st Qu.:0.0000   1st Qu.:0.00000   1st Qu.:1.000  
##  Median :1464   Median :0.0000   Median :0.00000   Median :2.000  
##  Mean   :1515   Mean   :0.4253   Mean   :0.05753   Mean   :1.565  
##  3rd Qu.:1777   3rd Qu.:1.0000   3rd Qu.:0.00000   3rd Qu.:2.000  
##  Max.   :5642   Max.   :3.0000   Max.   :2.00000   Max.   :3.000  
##                                                                   
##     HalfBath       BedroomAbvGr    KitchenAbvGr    TotRmsAbvGrd   
##  Min.   :0.0000   Min.   :0.000   Min.   :0.000   Min.   : 2.000  
##  1st Qu.:0.0000   1st Qu.:2.000   1st Qu.:1.000   1st Qu.: 5.000  
##  Median :0.0000   Median :3.000   Median :1.000   Median : 6.000  
##  Mean   :0.3829   Mean   :2.866   Mean   :1.047   Mean   : 6.518  
##  3rd Qu.:1.0000   3rd Qu.:3.000   3rd Qu.:1.000   3rd Qu.: 7.000  
##  Max.   :2.0000   Max.   :8.000   Max.   :3.000   Max.   :14.000  
##                                                                   
##    Fireplaces     GarageYrBlt     GarageCars      GarageArea    
##  Min.   :0.000   Min.   :1900   Min.   :0.000   Min.   :   0.0  
##  1st Qu.:0.000   1st Qu.:1961   1st Qu.:1.000   1st Qu.: 334.5  
##  Median :1.000   Median :1980   Median :2.000   Median : 480.0  
##  Mean   :0.613   Mean   :1979   Mean   :1.767   Mean   : 473.0  
##  3rd Qu.:1.000   3rd Qu.:2002   3rd Qu.:2.000   3rd Qu.: 576.0  
##  Max.   :3.000   Max.   :2010   Max.   :4.000   Max.   :1418.0  
##                  NA's   :81                                     
##    WoodDeckSF      OpenPorchSF     EnclosedPorch      3SsnPorch     
##  Min.   :  0.00   Min.   :  0.00   Min.   :  0.00   Min.   :  0.00  
##  1st Qu.:  0.00   1st Qu.:  0.00   1st Qu.:  0.00   1st Qu.:  0.00  
##  Median :  0.00   Median : 25.00   Median :  0.00   Median :  0.00  
##  Mean   : 94.24   Mean   : 46.66   Mean   : 21.95   Mean   :  3.41  
##  3rd Qu.:168.00   3rd Qu.: 68.00   3rd Qu.:  0.00   3rd Qu.:  0.00  
##  Max.   :857.00   Max.   :547.00   Max.   :552.00   Max.   :508.00  
##                                                                     
##   ScreenPorch        PoolArea          MiscVal             MoSold      
##  Min.   :  0.00   Min.   :  0.000   Min.   :    0.00   Min.   : 1.000  
##  1st Qu.:  0.00   1st Qu.:  0.000   1st Qu.:    0.00   1st Qu.: 5.000  
##  Median :  0.00   Median :  0.000   Median :    0.00   Median : 6.000  
##  Mean   : 15.06   Mean   :  2.759   Mean   :   43.49   Mean   : 6.322  
##  3rd Qu.:  0.00   3rd Qu.:  0.000   3rd Qu.:    0.00   3rd Qu.: 8.000  
##  Max.   :480.00   Max.   :738.000   Max.   :15500.00   Max.   :12.000  
##                                                                        
##      YrSold       SalePrice     
##  Min.   :2006   Min.   : 34900  
##  1st Qu.:2007   1st Qu.:129975  
##  Median :2008   Median :163000  
##  Mean   :2008   Mean   :180921  
##  3rd Qu.:2009   3rd Qu.:214000  
##  Max.   :2010   Max.   :755000  
## 
cat('Train has', dim(train)[1], 'rows and', dim(train)[2], 'columns.')
## Train has 1460 rows and 81 columns.
cat('Test has', dim(test)[1], 'rows and', dim(test)[2], ' columns.')
## Test has 1459 rows and 80  columns.
# train셋에서 결측데이터의 비율.
sum(is.na(train)) / (nrow(train) *ncol(train))
## [1] 0.05889565
# test셋에서 결측데이터의 비율.
sum(is.na(test)) / (nrow(test) * ncol(test))
## [1] 0.05997258
# 중복된 행 데이터 확인.

cat("The number of duplicated rows are", nrow(train) - nrow(unique(train)))
## The number of duplicated rows are 0
####문자를 팩터형으로 바꾸기

train[,(cat_var) := lapply(.SD, as.factor), .SDcols = cat_var]
train_cat <- train[,.SD, .SDcols = cat_var]
train_cont <- train[,.SD,.SDcols = numeric_var]

plotHist <- function(data_in, i) {
  data <- data.frame(x=data_in[[i]])
  p <- ggplot(data=data, aes(x=factor(x))) + stat_count() + xlab(colnames(data_in)[i]) + theme_light() + 
    theme(axis.text.x = element_text(angle = 90, hjust =1))
  return (p)
}

doPlots <- function(data_in, fun, ii, ncol=3) {
  pp <- list()
  for (i in ii) {
    p <- fun(data_in=data_in, i=i)
    pp <- c(pp, list(p))
  }
  do.call("grid.arrange", c(pp, ncol=ncol))
}


plotDen <- function(data_in, i){
  data <- data.frame(x=data_in[[i]], SalePrice = data_in$SalePrice)
  p <- ggplot(data= data) + geom_line(aes(x = x), stat = 'density', size = 1,alpha = 1.0) +
    xlab(paste0((colnames(data_in)[i]), '\n', 'Skewness: ',round(skewness(data_in[[i]], na.rm = TRUE), 2))) + theme_light() 
  return(p)
   
}

Barplots for the categorical features

밑에 있는 막대 그래프는 데이터에 대한 더 많은 인사이트를 제공한다. MSZoning : 막대그래프는 대부분의 집들이 저밀도 거주지역과 중밀도 거주지역에 있다는것을 나타낸다.

집으로 연결된 도로의 종류는 포장도로인 경우가 많고 집들은 골목을 가지고 있지 않다.(아마 집들이 많이 떨어져 있다는 말 같다.)


  • Landcontour: 평평한 땅에 집들이 지어졌다.
  • Utilities: 거의 모든 집들은공동시설을 갖추었다. (E,G,W, & S)
  • LandSlope: 대부분의 땅들은 완만한 경사를 가진다.
doPlots(train_cat, fun = plotHist, ii = 1:4, ncol = 2)

doPlots(train_cat, fun = plotHist, ii  = 4:8, ncol = 2)

doPlots(train_cat, fun = plotHist, ii = 8:12, ncol = 2)

doPlots(train_cat, fun = plotHist, ii = 13:18, ncol = 2)

doPlots(train_cat, fun = plotHist, ii = 18:22, ncol = 2)

급격한 경사를 가진 집들은 Clear Creek과 Timberland에 위치해 있다. 적당한 경사를 가진 집들은 다른 동네에 있다. Clear Creek과 Timberland 주위가 높은 경사를 가지고 있는것 처럼 보인다.

train %>% select(LandSlope, Neighborhood, SalePrice) %>% filter(LandSlope == c('Sev', 'Mod')) %>% arrange(Neighborhood) %>% group_by(Neighborhood, LandSlope) %>% summarize(Count = n()) %>% ggplot(aes(Neighborhood, Count)) + geom_bar(aes(fill = LandSlope), position = 'dodge', stat = 'identity') + theme_light() +theme(axis.text.x = element_text(angle = 90, hjust =1))

지역들과 Sale Price 간에 막대그래프를 그리면 BrookSide와 South & West of Iowa State University가 값싼 집들을 가지고 있는 것을 볼수 있다. 반면 Northridge와 Northridge Heights는 가격의 관점에서는 이상치를 가진 부자동네이다. 

train %>% select(Neighborhood, SalePrice) %>% ggplot(aes(factor(Neighborhood), SalePrice)) + geom_boxplot() + theme(axis.text.x = element_text(angle = 90, hjust =1)) + xlab('Neighborhoods')

Density plots for numeric variables.

변수에 대한 밀도 그래프는 변수들이 왜도가 있는지를 나타낸다. YearBuilt에 대한 밀도함수는 데이터셋이 새로지은 집과 오래된 집이 섞여 있다는걸 보여준다. 이것은 아마도 주택 위기 때문에, 최근 주택수의 하락세을 보여준다. 

doPlots(train_cont, fun = plotDen, ii = 2:6, ncol = 2)
## Warning: Removed 259 rows containing non-finite values (stat_density).

doPlots(train_cont, fun = plotDen, ii = 7:12, ncol = 2)
## Warning: Removed 8 rows containing non-finite values (stat_density).

doPlots(train_cont, fun = plotDen, ii = 13:17, ncol = 2)

아래 히스토그램은 대부분의 집이 2개의 full bath와 0개의 half baths 그리고 평균 3개의 bedrooms를 가진다는 것을 보았다. 

doPlots(train_cont, fun = plotHist, ii = 18:23, ncol = 2)

Explore the correlation

correlations <- cor(na.omit(train_cont[,-1, with = FALSE]))

# correlations
row_indic <- apply(correlations, 1, function(x) sum(x > 0.3 | x < -0.3) > 1)

correlations<- correlations[row_indic ,row_indic ]
corrplot(correlations, method="square")

Plot scatter plot for variables that have high correlation.

아래 상관계수 행렬은 housing price와 양이고 강하게 상관있는 몇몇 변수가 있다는걸 보여준다.

The correlation matrix below shows that there are several variables that are strongly and positively correlated with housing price.

높은 양의 상관관계의 변수들:

  • OverallQual
  • YearBuilt
  • YearRemodAdd
  • MasvnrArea
  • BsmtFinSF1
  • TotalBsmtSF
  • 1stFlrSF
  • GrLiveArea
  • FullBath
  • TotRmsAbvGrd
  • FirePlaces
  • GarageYrBlt
  • GarageCars
  • GarageArea
  • WoodDeskSF
  • OpenPorchSF

enclosed porches의 숫자와 year built는 음의 상관관계를 가진다. 잠재적인 집 구매자들이 enclosed porch를 싫어하고 최근 주택건설자들이 enclosed porch를 덜 짓는 것처럼 보인다.  이것은 또한 SalsPrice와 음의 상관관계를 갖는 데 이 또한 말이 된다.

OverallCond 와 SalePrice 간에 약한 음의 상관관계를 가지고 있다. Yearbuilt 와 OverallCond 사이에는 강한 음의 상관관계가 있다. 이것은 최근 지어진 집들이 전반적으로 더 나쁜 상태인 것으로 보인다.


train %>% select(OverallCond, YearBuilt) %>% ggplot(aes(factor(OverallCond),YearBuilt)) + geom_boxplot() + xlab('Overall Condition')

plotCorr <- function(data_in, i){
  data <- data.frame(x = data_in[[i]], SalePrice = data_in$SalePrice)
  p <- ggplot(data, aes(x = x, y = SalePrice)) + geom_point(shape = 1, na.rm = TRUE) + geom_smooth(method = lm ) + xlab(paste0(colnames(data_in)[i], '\n', 'R-Squared: ', round(cor(data_in[[i]], data$SalePrice, use = 'complete.obs'), 2))) + theme_light()
  return(suppressWarnings(p))
}


highcorr <- c(names(correlations[,'SalePrice'])[which(correlations[,'SalePrice'] > 0.5)], names(correlations[,'SalePrice'])[which(correlations[,'SalePrice'] < -0.2)])
 
data_corr <- train[,highcorr, with = FALSE]


doPlots(data_corr, fun = plotCorr, ii = 1:6)

doPlots(data_corr, fun = plotCorr, ii = 6:11)
## Warning: Removed 81 rows containing non-finite values (stat_smooth).

종속변수 SalePrice 에 대한 히스토그램은 왜도를 보인다. 따라서 로그를 취하여 정규화 시켜보자.

library(scales)
ggplot(train, aes(x=SalePrice)) + geom_histogram(col = 'white') + theme_light() +scale_x_continuous(labels = comma)
## `stat_bin()` using `bins = 30`. Pick better value with `binwidth`.

summary(train[,.(SalePrice)])
##    SalePrice     
##  Min.   : 34900  
##  1st Qu.:129975  
##  Median :163000  
##  Mean   :180921  
##  3rd Qu.:214000  
##  Max.   :755000
# 정규분포화 시키기
ggplot(train, aes(x=log(SalePrice+1))) + geom_histogram(col = 'white') + theme_light()
## `stat_bin()` using `bins = 30`. Pick better value with `binwidth`.