데이터 분석 (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 값들을 변수명으로 바뀌면서 원핫인코딩