천선생의 삶
[R] 시각화 시작하기 - ggplot2 본문
안녕하세요. 천선생입니다.
데이터 분석을 공부할수록, 많이 접하게 되는 단어가 있습니다. 바로 시각화 인데요.
오늘은 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)
이외에도 추가적인 함수를 통하여, 세부적인 조정 (제목 / 색상 설정등)을 진행할 수 있습니다.
- 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)) 와 동일한 기능을 갖습니다.
차이점을 느끼셨나요? 네 그렇습니다. 예쁩니다!!
대수롭지 않게 느껴질 수도 있지만, 시각화라는 것은 앞에서 말했듯이 한눈에 이해할 수 있는 그림을 그리는 것입니다.
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의 유연함을 통하여 분석가가 대부분의 원하는 시각화는 구현할 수 있을 것입니다.
그 모든 내용을 다루기에는 비효율적이기에, Rstudio에서 제공해주는 ggplot의 Cheatsheet를 공유해드리겠습니다.
https://github.com/rstudio/cheatsheets/blob/master/data-visualization-2.1.pdf
시각화를 진행하면서 필요한 코드를 찾아서 저장해놓는 습관이 여러분의 가장 큰 자산이 될 것이라 확신합니다!
'Data Analysis > R Basic' 카테고리의 다른 글
[R] 데이터 핸들링 쉽게하기 - dplyr (0) | 2019.09.01 |
---|---|
[R] apply 함수 활용하기 - apply, sapply (0) | 2019.07.14 |
[R] 사용자 정의 함수 활용하기 - function (0) | 2019.07.12 |
[R] 반복문 활용하기 - for, while (0) | 2019.07.11 |
[R] 조건문 활용하기 - if, else, if else (0) | 2019.07.10 |