Notice
Recent Posts
Recent Comments
Link
«   2025/01   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
Archives
Today
Total
관리 메뉴

천선생의 삶

[R] 시각화 시작하기 - ggplot2 본문

Data Analysis/R Basic

[R] 시각화 시작하기 - ggplot2

천선생 2019. 7. 23. 12:00

안녕하세요. 천선생입니다.

 

 데이터 분석을 공부할수록, 많이 접하게 되는 단어가 있습니다. 바로 시각화 인데요.

오늘은 R을 통해서 시각화를 할 때, 가장 많이 사용되는 패키지인 ggplot2에 대해서 알아보겠습니다.

 

- 시각화?

 시각화란 단순하게 말하면 데이터를 한눈에 이해할 수 있는 그림을 그리는 것을 뜻합니다.

R에서는 기본적으로 Gragraphics 라는 패키지를 제공하며, 이 패키지를 통하여 이미 수많은 시각화를 할 수 있습니다.

Gragraphics 에 내장된 함수를 통하여, cars 데이터(내장 데이터)의 시각화를 해보겠습니다.

# cars 데이터의 구조를 확인해보겠습니다.

str(cars)
# 'data.frame':	50 obs. of  2 variables:
# $ speed: num  4 4 7 7 8 9 10 10 10 11 ...
# $ dist : num  2 10 4 22 16 10 18 26 34 17 ...
#2개의 수치형 변수로 이루어진 데이터프레임입니다.

# 이후 조작을 위하여 data라는 변수로 저장하겠습니다.
data <- cars

# 출력할 화면을 지정합니다.
# 2개의 plot을 위하여 1행 2열의 출력화면(기본값 : 1행 1열)을 설정하겠습니다.
par(mfrow = c(1, 2))

# 2개의 변수로 이루어진 데이터를 입력받으면, 자동으로 산점도(Scatter plot)를 출력합니다.
plot(data)

# 1개의 변수를 추출해 Boxplot을 출력하겠습니다.
boxplot(data$speed)

좌 : data를 활용하여 표현한 Scatter plot / 우 : speed 변수를 활용하여 표현한 boxplot

이외에도 추가적인 함수를 통하여, 세부적인 조정 (제목 / 색상 설정등)을 진행할 수 있습니다.

 

- Why ggplot2?

구글에서 제공하는 이미지

 ggplot2 역시 시각화 패키지의 일종입니다. 그렇다면 왜 여기서 ggplot2를 더 배워야 할까요?

안그래도 배울 함수들이 쏟아지는데 이미 있는 기능들을 왜 새로운 함수로 배워야 하는지, 짜증을 유발하게 됩니다.

말보다는 행동이라고 했나요, ggplot을 통하여 위에서 출력한 plot을 다시 확인해보겠습니다.

library(ggplot2)
library(gridExtra) #ggplot 객체를 한 화면에 출력하도록 돕는 함수를 내장한 패키지입니다.

ggplot_scatter <- ggplot(data = data) +
  geom_point(aes(x = speed, y = dist))

ggplot_boxplot <- ggplot(data = data) +
  geom_boxplot(aes(y = speed))

# gridExtra에 내장된 grid.arrange 함수를 통해, 한번에 출력합니다.
grid.arrange(ggplot_scatter, ggplot_boxplot, ncol = 2)
# par(mfrow = c(1, 2)) 와 동일한 기능을 갖습니다.

좌 : data를 활용하여 표현한 Scatter plot / 우 : speed 변수를 활용하여 표현한 boxplot

 차이점을 느끼셨나요? 네 그렇습니다. 예쁩니다!!

대수롭지 않게 느껴질 수도 있지만, 시각화라는 것은 앞에서 말했듯이 한눈에 이해할 수 있는 그림을 그리는 것입니다.

ggplotLayer(층)의 형태로 출력하기때문에, 기본으로 제공되는 시각화에 비하여 지정할 수 있는 것이 많습니다.

즉, 다양하게 원하는 그림을 출력해주는 ggplot한눈에 이해할 수 있는 그림을 출력하기에 매우 큰 도움을 줍니다.

Layer를 활용하는 ggplot의 이미그령

 

- 활용

 그렇다면 이제부터는 간단한 예제를 통해서 ggplot을 활용해보겠습니다.

활용할 데이터는, R에서 기본적으로 제공해는 iris 데이터(붓꽃 데이터)입니다.

그래프를 그려보기 이전에, 데이터의 형태 먼저 확인해보겠습니다.

str(iris)
# 'data.frame':	150 obs. of  5 variables:
# $ Sepal.Length: num  5.1 4.9 4.7 4.6 5 5.4 4.6 5 4.4 4.9 ...
# $ Sepal.Width : num  3.5 3 3.2 3.1 3.6 3.9 3.4 3.4 2.9 3.1 ...
# $ Petal.Length: num  1.4 1.4 1.3 1.5 1.4 1.7 1.4 1.5 1.4 1.5 ...
# $ Petal.Width : num  0.2 0.2 0.2 0.2 0.2 0.4 0.3 0.2 0.2 0.1 ...
# $ Species     : Factor w/ 3 levels "setosa","versicolor",..: 1 1 1 1 1 1 1 1 1 1 ...
# 4개의 수치형 변수와 1개의 범주형 변수로 이루어진 데이터프레임입니다.

 - Sepal.Length / Width, Petal.Length / Width : 이 변수는 관측한 붓꽃의 꽃받침과 꽃잎의 크기를 나타냅니다.

 - Sepal.Length : 이 변수는 관측한 붓꽃의 종을 나타냅니다. 3종류의 종이 존재합니다.

 

 해당 데이터를 통해 Layer를 추가하며 그림을 그려보도록 하겠습니다.

# iris 데이터를 활용한 ggplot의 이해

# 기본 산점도를 지정합니다.
ggplot_A <- ggplot(data = iris) +
  geom_point(aes(x = Sepal.Length, y = Petal.Length, color = Species))

# 기본 산점도 위에 비선형 회귀선 Layer를 더합니다.
ggplot_B <- ggplot_A +
  geom_smooth(aes(x = Sepal.Length, y = Petal.Length, group = Species), method = 'loess')

# ggplot_B 위에 제목과 축의 이름을 추가합니다.
ggplot_C <- ggplot_B +
  labs(title = 'ggplot with iris data',
       x = '꽃받침 길이',
       y = '꽃잎 길이')

grid.arrange(ggplot_A, ggplot_B, ggplot_C, nrow = 3)

위에서부터 순서대로 ggplot_A, ggplot_B, ggplot_C

 

- 마치며

 ggplot의 유연함을 통하여 분석가가 대부분의 원하는 시각화는 구현할 수 있을 것입니다.

그 모든 내용을 다루기에는 비효율적이기에, Rstudio에서 제공해주는 ggplot의 Cheatsheet를 공유해드리겠습니다.

https://github.com/rstudio/cheatsheets/blob/master/data-visualization-2.1.pdf

 

rstudio/cheatsheets

RStudio Cheat Sheets. Contribute to rstudio/cheatsheets development by creating an account on GitHub.

github.com

시각화를 진행하면서 필요한 코드를 찾아서 저장해놓는 습관이 여러분의 가장 큰 자산이 될 것이라 확신합니다!

Comments