[R] 연습

[R] 데이터 시각화 - 스케일조절

Simon Yoon 2022. 9. 25. 23:40

데이터 분석 과정에서 데이터를 전처리 하는 과정은 상당히 많은 시간이 소요된다.

이러한 작업 단계에서 기존의 변수를 변환하거나 새로운 파생 변수를 생성해 내기도 하는데,

기존 변수의 변환 과정에서 범주형 변수를 처리하던지, 수치형 변수를 그룹화 하거나 스케일을 조절하기도 한다.

 

- 데이터 스케일링

보통 데이터들은 각 변수의 범위가 다양할 것이다. 예를 들어 서울의 집값은 몇 억 단위로 값이 저장되어 있겠지만, 각 집의 연식은 10년, 20년처럼 저장되어있을 것이다. 이러한 데이터 범위의 차이가 크게 발생하는 경우 알고리즘은 제대로 작동하지 않는다. 따라서 데이터 전처리 과정에서 스케일링 작업을 해주게 된다.


➢ R 시각화 예시

시각화를 하게 될 경우에 스케일을 변환하게 되면 변수 간의 관계를 부각시킬 수 있다. 간단하게 아래의 예시를 보자.

먼저 아래의 그래프는 데이터를 변환하지 않고 두 변수에 대한 scatter plot을 생성한 경우이다. 이러한 산점도에서는 MEDV와 CRIM의 관계를 확인하기 어렵다. 왜냐하면 점들이 한쪽으로 너무 밀집되어있기 때문이다.

regular scatter plot

plot(df$MEDV ~ df$CRIM, xlab = 'CRIM', ylab = 'MEDV')

이 데이터를 로그스케일 변환을 통해서 아래의 그림과 같이 다시 시각화 해보면, 밀집 현상도 제거되고 두 변수 사이의 선형 관계를 확인할 수 있게 된다.

log scale

plot(df$MEDV ~ df$CRIM, xlab = 'CRIM', ylab = 'MEDV', log = 'xy')

산점도(scatter plot)에서 뿐만 아니라 박스플롯을 그릴 때에도 로그스케일 변환을 통해서 데이터의 분포 상태를 더욱 명확하게 파악할 수 있다. 먼저 스케일 변환하지 않은 경우의 박스플롯을 확인해보자.

regular box plot

boxplot(df$CRIM ~ df$CAT..MEDV, xlab = 'CAT.MEDV', ylab = 'CRIM')

이러한 상태에서는 전체적인 분포와 하방 아웃라이어, 박스의 크기 등을 확인하기 어렵다. 이제 다시 로그스케일 변환을 한 박스플롯을 확인해보자. 아래와 같은 그래프에서는 전체적인 분포 상태를 더욱 확인하기 쉬워진다.

log scale

boxplot(df$CRIM ~ df$CAT..MEDV, xlab = 'CAT.MEDV', ylab = 'CRIM', log = 'y')

➢ ggplot 참고용 코드

library(ggplot2)
ggplot(df) + geom_point(aes(x = CRIM, y = MEDV)) +
  scale_x_log10(breaks = 10^(-2:2),
                labels = format(10^(-2:2), scientific = FALSE, dropOtrailing = TRUE)) +
  scale_y_log10(breaks = c(5, 10, 20, 40))

log scaled scatter plot w/ ggplot library