캐글 Rmd 링크

5.3 Label encoding/ factorizing the ramaining character variables {.tabset}

결측치는 다 살펴보았지만, character 타입이었던 변수들은 아직 확인이 되지 않았다. 그래서 이번에도 탭으로 구분하여 살펴 보겠다.

Charcol <- names(all[,sapply(all, is.character)]) #문자형 변수만 선별하여 생성
Charcol
cat('There are', length(Charcol), 'remaining columns with character values')

5.3.1 Foundation

** Foundation: 건물 기초(토대)의 종류 **

BrkTil          Brick & Tile
CBlock          Cinder Block
PConc           Poured Contrete 
Slab            Slab
Stone           Stone
Wood            Wood
#순서형이 아니기에, factor형으로 변환하겠다.
all$Foundation <- as.factor(all$Foundation)
table(all$Foundation)
sum(table(all$Foundation))

5.3.2 Heating and airco

2개의 Heating 변수와, 1개의 에어컨 변수(Y/N)가 있다.

** Heating: 난방 장치의 종류 **

 Floor    Floor Furnace
 GasA Gas forced warm air furnace
 GasW Gas hot water or steam heat
 Grav Gravity furnace 
 OthW Hot water or steam heat other than gas
 Wall Wall furnace
#순서형이 아니기에, factor형으로 변환하겠다.
all$Heating <- as.factor(all$Heating)
table(all$Heating)
sum(table(all$Heating))

** HeatingQC: 난방 장치의 품질과 상태 **

 Ex   Excellent
 Gd   Good
 TA   Average/Typical
 Fa   Fair
 Po   Poor
# Qualities 벡터로 순서형으로 변환한다.
all$HeatingQC <- as.integer(revalue(all$HeatingQC, Qualities))
table(all$HeatingQC)
sum(table(all$HeatingQC))

** CentralAir: 중앙 냉방 에어컨 유무 **

 N    No
 Y    Yes
all$CentralAir <- as.integer(revalue(all$CentralAir, c('N' = 0, 'Y' = 1)))
table(all$CentralAir)
sum(table(all$CentralAir))

5.3.3 Roof

2개의 변수가 있다.

** RoofStyle: 지붕의 종류 **

 Flat Flat
 Gable    Gable
 Gambrel  Gabrel (Barn)
 Hip  Hip
 Mansard  Mansard
 Shed Shed
# 순서형이 아니기에, factor형으로 변환하겠다.
all$RoofStyle <- as.factor(all$RoofStyle)
table(all$RoofStyle)
sum(table(all$RoofStyle))

** RoofMatl: 지붕 재료 **

 ClyTile  Clay or Tile
 CompShg  Standard (Composite) Shingle
 Membran  Membrane
 Metal    Metal
 Roll Roll
 Tar&Grv  Gravel & Tar
 WdShake  Wood Shakes
 WdShngl  Wood Shingles
# 순서형이 아니기에, factor형으로 변환하겠다.
all$RoofMatl <- as.factor(all$RoofMatl)
table(all$RoofMatl)
sum(table(all$RoofMatl))

5.3.4 Land

부지가 평지인지, 비탈인지 2개의 변수가 있다.

** LandContour: 부지의 평탄함 **

 Lvl  Near Flat/Level 
 Bnk  Banked - Quick and significant rise from street grade to building
 HLS  Hillside - Significant slope from side to side
 Low  Depression
# 순서형이 아니기에, factor형으로 변환하겠다.
all$LandContour <- as.factor(all$LandContour)
table(all$LandContour)
sum(table(all$LandContour))

** LandSlope: 부지의 경사(비탈) **

 Gtl  Gentle slope
 Mod  Moderate Slope  
 Sev  Severe Slope
# 순서형 타입, 정수형으로 변환하겠다.
all$LandSlope <- as.integer(revalue(all$LandSlope, c('Sev' = 0, 'Mod' = 1, 'Gtl' = 2)))
table(all$LandSlope)
sum(table(all$LandSlope))

5.3.5 Dwelling

주거에 따른 2개의 변수가 있다.

** BldgType: 주거의 형태 **

 1Fam     Single-family Detached  
 2FmCon   Two-family Conversion; originally built as one-family dwelling
 Duplx    Duplex
 TwnhsE   Townhouse End Unit
 TwnhsI   Townhouse Inside Unit

순서형 타입으로 보여, 시각화해 보겠다.(single family detached = best)

ggplot(all[!is.na(all$SalePrice),], aes(x=as.factor(BldgType), y = SalePrice)) +
  geom_bar(stat = 'summary', fun.y = 'median', fill = 'blue') +
  scale_y_continuous(breaks = seq(0, 800000, by = 100000), labels = comma) +
  geom_label(stat = 'count', aes(label = ..count.., y = ..count..))

시각화론 알수가 없다.

# 순서형 범주가 아니기에, factor로 변환한다.
all$BldgType <- as.factor(all$BldgType)
table(all$BldgType)
sum(table(all$BldgType))

** HouseStyle: 주거의 Style **

 1Story   One story
 1.5Fin   One and one-half story: 2nd level finished
 1.5Unf   One and one-half story: 2nd level unfinished
 2Story   Two story
 2.5Fin   Two and one-half story: 2nd level finished
 2.5Unf   Two and one-half story: 2nd level unfinished
 SFoyer   Split Foyer
 SLvl     Split Level
# 순서형 범주가 아니기에, factor로 변환한다.
all$HouseStyle <- as.factor(all$HouseStyle)
table(all$HouseStyle)
sum(table(all$HouseStyle))

5.3.6 Neighborhood and Conditions

물리적 거리, 근방의 입지에 따른 3개의 변수가 있다.

** Neighborhood: 물리적 위치는 ‘Ames’ 시내이다. **

 Blmngtn  Bloomington Heights
 Blueste  Bluestem
 BrDale   Briardale
 BrkSide  Brookside
 ClearCr  Clear Creek
 CollgCr  College Creek
 Crawfor  Crawford
 Edwards  Edwards
 Gilbert  Gilbert
 IDOTRR   Iowa DOT and Rail Road
 MeadowV  Meadow Village
 Mitchel  Mitchell
 Names    North Ames
 NoRidge  Northridge
 NPkVill  Northpark Villa
 NridgHt  Northridge Heights
 NWAmes   Northwest Ames
 OldTown  Old Town
 SWISU    South & West of Iowa State University
 Sawyer   Sawyer
 SawyerW  Sawyer West
 Somerst  Somerset
 StoneBr  Stone Brook
 Timber   Timberland
 Veenker  Veenker
# 순서형 범주가 아니기에, factor로 변환한다.
all$Neighborhood <- as.factor(all$Neighborhood)
table(all$Neighborhood)
sum(table(all$Neighborhood))

** Condition1: 근방의 다양한 조건 **

 Artery   Adjacent to arterial street
 Feedr    Adjacent to feeder street   
 Norm Normal  
 RRNn Within 200' of North-South Railroad
 RRAn Adjacent to North-South Railroad
 PosN Near positive off-site feature--park, greenbelt, etc.
 PosA Adjacent to postive off-site feature
 RRNe Within 200' of East-West Railroad
 RRAe Adjacent to East-West Railroad
# 순서형 범주가 아니기에, factor로 변환한다.
all$Condition1 <- as.factor(all$Condition1)
table(all$Condition1)
sum(table(all$Condition1))

** Condition2: 근방의 다양한 조건 (2개 이상) **

 Artery   Adjacent to arterial street
 Feedr    Adjacent to feeder street   
 Norm Normal  
 RRNn Within 200' of North-South Railroad
 RRAn Adjacent to North-South Railroad
 PosN Near positive off-site feature--park, greenbelt, etc.
 PosA Adjacent to postive off-site feature
 RRNe Within 200' of East-West Railroad
 RRAe Adjacent to East-West Railroad
# 순서형 범주가 아니기에, factor로 변환한다.
all$Condition2 <- as.factor(all$Condition2)
table(all$Condition2)
sum(table(all$Condition2))

5.3.7 Pavement of Street & Driveway

2개의 변수가 있다.

** Street: 부지에 접한 길의 종류**

 Grvl Gravel  
 Pave Paved
# 순서형 범주로, 정수형으로 변환하겠다.
all$Street <- as.integer(revalue(all$Street, c('Grvl' = 0, 'Pave' = 1)))
table(all$Street)
sum(table(all$Street))

** PavedDrive: 진입로의 포장 **

 Y    Paved 
 P    Partial Pavement
 N    Dirt/Gravel
#순서형 범주로, 정수형으로 변환하겠다.
all$PavedDrive <- as.integer(revalue(all$PavedDrive, c('N' = 0, 'P' = 1, 'Y' = 2)))
table(all$PavedDrive)
sum(table(all$PavedDrive))

** character형 변수에 대한 인코딩 변환과 설명은 여기까지다 **

5.4 Changing some numeric variables into factors

3개의 변수를 제외하고 모든 변수들은 결측이 없이 완벽하다. 문자형은 라벨링하여 factor형으로 변환했다. 남은 3개의 변수는 실질적으론 범주형 변수이지만, 형식은 숫자형이다.

5.4.1 Year and Month Sold

판매 연도에서 YearBuilt(or remodeled)의 범주는 오래된 집이 가치가 낮게 되어있다. 5년치 판매의 얘기를 해보자. 여기에는 경제 위기가 있던 해가 포함되었고, 그걸 기준으로 2007년 대비 2009년(경제 위기 이후)의 집값이 매우 낮아 보인다. 모델링 전에 YrSold 변수를 factor로 변환할것이지만, Age 변수를 만들기 위해 수치형 변수도 필요하다. 그래서 아직은 factor로 변환하지 않고 두겠다. ‘Month Sold’도 정수형 변수이지만, 12월은 1월보다 좋지 않다. 따라서 MoSold는 factor로 변환하겠다.

참조) 여기에서 말하는 경제 위기는 2008년에 있었던 Subprime mortgage 사태를 얘기하는 걸로 보인다.

str(all$YrSold)
str(all$MoSold)
all$MoSold <- as.factor(all$MoSold)

예상보다 변동폭이 적지만, 금융 위기의 타격은 2007년말 부터 제대로 나타났다. 매매가는 2007년이 가장 높은 중위값을 보인 이후에 점차 감소했다. 그러나 계절별로는 더 큰 규칙이 있어 보인다.

ys <- ggplot(all[!is.na(all$SalePrice),], aes(x = as.factor(YrSold), y = SalePrice)) +
  geom_bar(stat = 'summary', fun.y = 'median', fill = 'blue') +
  scale_y_continuous(breaks = seq(0, 800000, by = 25000), labels = comma) +
  geom_label(stat = 'count', aes(label = ..count.., y = ..count..)) +
  coord_cartesian(ylim = c(0, 200000)) + #y축 20만까지 표기 제한
  geom_hline(yintercept = 163000, linetype='dashed', color = 'red') #SalePrice 중위값

ms <- ggplot(all[!is.na(all$SalePrice),], aes(x = MoSold, y = SalePrice)) + 
  geom_bar(stat = 'summary', fun.y = 'median', fill = 'blue') +
  scale_y_continuous(breaks = seq(0, 800000, by = 25000), labels = comma) + 
  geom_label(stat = 'count', aes(label = ..count.., y = ..count..)) + 
  coord_cartesian(ylim = c(0, 200000)) +
  geom_hline(yintercept = 163000, linetype = 'dashed', color = 'red') 

grid.arrange(ys, ms, widths = c(1,2))

5.4.2 MSSubClass

** MSSubClass: 판매와 연관된 주거 타입 **

20  1-STORY 1946 & NEWER ALL STYLES
30  1-STORY 1945 & OLDER
40  1-STORY W/FINISHED ATTIC ALL AGES
45  1-1/2 STORY - UNFINISHED ALL AGES
50  1-1/2 STORY FINISHED ALL AGES
60  2-STORY 1946 & NEWER
70  2-STORY 1945 & OLDER
75  2-1/2 STORY ALL AGES
80  SPLIT OR MULTI-LEVEL
85  SPLIT FOYER
90  DUPLEX - ALL STYLES AND AGES
120  1-STORY PUD (Planned Unit Development) - 1946 & NEWER
150  1-1/2 STORY PUD - ALL AGES
160  2-STORY PUD - 1946 & NEWER
180  PUD - MULTILEVEL - INCL SPLIT LEV/FOYER
190  2 FAMILY CONVERSION - ALL STYLES AND AGES

이 클래스는 숫자로 나오지만, 실제적으로 범주형은 아니다.

str(all$MSSubClass)

all$MSSubClass <- as.factor(all$MSSubClass)

# 가독성을 높이기 위해 숫자를 문자로 revalue
all$MSSubClass <- revalue(all$MSSubClass, c('20'='1 story 1946+', '30'='1 story 1945-', '40'='1 story unf attic', '45'='1,5 story unf', '50'='1,5 story fin', '60'='2 story 1946+', '70'='2 story 1945-', '75'='2,5 story all ages', '80'='split/multi level', '85'='split foyer', '90'='duplex all style/age', '120'='1 story PUD 1946+', '150'='1,5 story PUD all', '160'='2 story PUD 1946+', '180'='PUD multilevel', '190'='2 family conversion'))

str(all$MSSubClass)