데이터 분석 (Data Analysis)/R

[데이터정제] 범주형변수처리 - 원핫인코딩(One-Hot Encoding) 예제

apdo 2021. 7. 27. 13:38

 

library(dplyr)

# One-Hot Encoding

# 데이터 생성
set.seed(0614)
data <- data.frame(Num = seq(1,100, by=1),
                   Variables = sample(c("a", "b", "c"), 100, replace=T)
)

data$Variables <- as.factor(data$Variables) # Variables 변수를 factor 처리
str(data)

data %>% head()

- 기존데이터 상위 6개 값 (변수 : data)

Index Num Variable
1 1 a
2 2 a
3 3 c
4 4 a
5 5 c
6 6 c

<방법1> caret 패키지 활용

# [방법1]
## caret 패키지 활용 -> 머신러닝에서 자주 이용
library(caret)
dummy <- dummyVars("~.", data = data)

data2 <- data.frame(predict(dummy, newdata = data))

data2 %>% head() # 변수명이 Variables.(?) 로 바뀌고 원핫인코딩

* 편의상 Variablesa 를 Vars a로 수정해서 작성했습니다. (출력은 Variablesa입니다.)

Index Num Vars a Vars b Vars c
1 1 1 0 0
2 2 1 0 0
3 3 0 0 1
4 4 1 0 0
5 5 0 0 1
6 6 0 0 1

원핫인코딩으로 기존 data의 variable feature의 값들(a, b, c)이 각각의 feature로 나누어짐

그리고 해당하는 값에 1, 해당하지 않으면 0으로 변환.

 

<방법2> reshape2 패키지 활용

# [방법2]
## reshape2 패키지 활용
library(reshape2) # 데이터 정제 및 변환에 유용한 패키지

data3 <- dcast(data=data, Outcome~Variable, length)
data3 %>% head() # levels 값들을 변수명으로 바뀌면서 원핫인코딩