본문 바로가기
언어/R

[R-009] 패키지 - 데이터 시각화

by 천왕지짐 2023. 4. 16.
데이터 시각화는 말 그대로 데이터를 시각적으로 표현하는 것을 말한다. 즉, 그래프, 차트, 지도 등을 사용하여 데이터를 시각적으로 분석하고 이해하기 쉽게 만드는 것을 말한다. 시각화는 데이터 분석과 의사 결정에 중요한 역할을 하는데 그래프, 차트, 지도 등을 보면 경향, 패턴, 관계 등을 파악할 수 있어 이를 바탕으로 적절한 의사 결정을 할 수 있게 된다.

 

시각화 패키지로는 ggplot2, lattice, plotly, ggvis, shiny 등의 패키지가 있는데 여기에서는 ggplot2에 대해 알아보도록 하겠다.

 

이미 배운대로 패키지를 사용하려면 아래처럼 설치와 로드(메모리에 올리는)작업이 필요하다.

install.packages("ggplot2")
library(ggplot2)

 

과연 시각화를 통해 의사 결정을 쉽게 할 수 있을 지 알아보자.

 

R의 기본 데이터셋중 하나인 mtcars는 자동차의 성능과 특징에 대한 데이터를 담고 있어서 데이터 분석과 시각화를 위한 예제로 자주 사용된다. mtcars는 1974년에 Motor Trend magazine에서 발표한 32개의 자동차 모델에 대한 정보를 담고 있으며, 아래와 같은 11개의 변수를 포함하고 있다.
- mpg: 연비(miles per gallon)
- cyl: 실린더 개수(number of cylinders)
- disp: 배기량(displacement)
- hp: 마력(horsepower)
- drat: 후륜비(rear axle ratio)
- wt: 차량 무게(weight)
- qsec: 1/4 마일 달성 시간(1/4 mile time)
- vs: 엔진 형태(V/S)
- am: 변속기 종류(automatic or manual)
- gear: 기어 수(number of gears)
- carb: 기화기 개수(number of carburetors)

 

 

mtcars 데이터셋은 자동차의 성능과 특징에 대한 정보를 담고 있어서, 데이터 분석과 시각화를 위한 예시 데이터셋으로 자주 사용됩니다.

 

이 데이터를 이용하여 배기량(disp)이 커지면 연비(mpg)가 낮아지는가?에 대해 시각화해보자.

 

 

ggplot()

 

ggplot은 ggplot 사용시 필수로 들어가야 하는 함수로, 시각화할 데이터와 축을 지정한다.

- data = 데이터

- mapping = aes(x = x축 변수, y = y축 변수)

ggplot(data = mtcars, mapping = aes(x = disp, y = mpg))     # ggplot을 ggplot2라고 쓰는 오류를 범하지 말자.
ggplot(mtcars, aes(x = disp, y = mpg))     # 이렇게 써도 동일하다.

이코드는 단지 x축과 y축만 그리는 역할을 할 뿐이며 데이터를 표현하기 위해 geom_그래프 계열 함수를 써야 한다.
작성하는 방법은 ggplot() + geom_point()와 같이 사용한다. geom는 '지오메트리'라고 읽자.

 

geom_그래프 계열

- geom_point( ) : 산점도 / 산포도, 옵션 colour, pch, size

- geom_line( ) : 선 그래프, 옵션 group, linetype, size, colour
- geom_boxplot( ) : 박스플롯 
- geom_histogram( ) : 히스토그램 
- geom_bar( ) : 막대 그래프 

ggplot(mtcars, aes(x = disp, y = mpg)) + geom_point()     # 여러개의 함수를 사용할 때 + 연산자를 사용한다.

결과로, 산점도에서 배기량이 커지면 연비가 줄어드는 경향을 관찰할 수 있다.

 

 

옵션으로 색상, 모양, 크기, 넓이 등을 사용할 수 있다.

예를 들어 geom_point안에 geom_point(colour = "red", pch = 2, size = 2) 처럼 사용한다.

ggplot(mtcars, aes(x = disp, y = mpg)) + geom_point(colour = "red", pch = 2, size = 2)

- colour = "색상"

- pch = 모양 번호

- size = 크기

참고) pch 모양번호는 다음과 같이 확인해 볼 수 있다.

   - plot(1:25, pch = 0:24, cex = 2)

 

 

데이터셋중에 diamonds가 있다. 이 데이터셋으로 심화학습을 해보자.

   - carat: 다이아몬드 무게
   - cut: 컷팅의 가치
   - color: 다이아몬스 색상
   - clarity: 깨끗한 정도
   - depth: 깊이 비율, z / mean(x, y)
   - table: 가장 넓은 부분의 너비 대비 다이아몬드 꼭대기의 너비
   - price: 가격
   - x: 길이
   - y: 너비
   - z: 깊이

 

변수중에 carat이 커지면 price가 올라가는지에 대해 그래프를 그려보자.  그리고 그래프를 확인한 후 같은 carat인데도 가격이 천차만별인 이유에 대해 생각해 보자.

 

1) Data, Aesthetics, Geometrics : 산점도 표시하기

ggplot(diamonds, aes(x = carat, y = price)) + geom_point()

2) color : cut에 따라 점의 색깔 다르게 표현하기

gplot(diamonds, aes(x = carat, y = price)) + geom_point(aes(color = cut))

각 범주에 대해 서로 다른 색상이 자동으로 지정되는 것임. cut 대신 x로 테스트해보기 바란다.

 

3) facet : 하위 집합으로 나누어 시각화 하기

ggplot(diamonds,aes(x = carat, y = price)) +  geom_point() + facet_grid(. ~ cut)

물결 표시(~)를 통해 하위 집합으로 나누고자 하는 변수를 선택할 수 있다. cut 대신 color로 테스트해보기 바란다.

 

4)  Statistics : 통계값 나타내기

ggplot(diamonds, aes(x = cut, y = carat)) +   stat_summary_bin(fun.y = 'mean', geom = 'bar') 

stat_summary_ 함수는 데이터를 요약하고 통계 계산을 수행하여 그래프를 그리는 데 사용된다. 

stat_summary_bin의 옵션

   - fun.y: y 축 값을 계산하는 함수를 지정한다. 기본값은 평균(mean)이다.

     (fun.y 대신 다른 함수를 사용하여 중앙값(median), 분위수, 표준편차 등을 계산할 수도 있다. )
   - fun.ymax: y 축 값의 상한선을 계산하는 함수를 지정한다. 기본값은 최대값(max)이다.
   - fun.ymin: y 축 값의 하한선을 계산하는 함수를 지정한다. 기본값은 최소값(min)이다.
   - fun.args: fun.y, fun.ymax, fun.ymin에서 사용하는 함수의 인수를 지정한다.
   - binwidth: 막대 그래프의 너비를 지정한다. 기본값은 1이다.
   - bins: 막대 그래프의 개수를 지정한다. 기본값은 30이다.
   - geom: 그래프의 유형을 지정한다. 기본값은 막대 그래프(bar)이다. point로하면 점그래프가 그려진다.
   - position: 그래프의 위치를 지정한다. 기본값은 stack이다.

 

ggplot(diamonds, aes(x = cut, y = carat)) + stat_summary_bin(fun.y = 'mean', geom = 'bar', aes(fill = cut))도 사용해 보기 바란다.

 

5) Coordinates : 좌표계, 데이터를 표시하는 방법

ggplot(diamonds, aes(x = carat, y = price)) + geom_point(aes(color = cut)) + coord_cartesian(xlim = c(0, 3), ylim = c(0, 20000))

Coordinates는 좌표를 의미하며 coord_*() 함수를 이용하여 x축 혹은 y축 정보를 변형할 수 있다. 

- coord_cartesian() 함수를 통해 x축과 y축 범위를 지정해 줄 수 있다. xlim과 ylim 내부에 범위의 최소 및 최댓값을 지정해주면, 해당 범위의 데이터만을 보여준다.

 - coord_flip() 함수는 x축과 y축을 뒤집어 표현 즉, x축과 y 축을 서로 바꾸어 표현한다.

   참고, ggplot(diamonds, aes(x = carat, y = price)) + geom_boxplot(aes(group = cut))

 

6) Theme : 차트의 제목, 축 제목 및 단위, 범례 등을 꾸미는 역할

ggplot(diamonds, aes(x = carat, y = price)) +  geom_point(aes(color = cut)) +
  theme_bw() +
  labs(title = 'Relation between Carat & Price', x = 'Carat', y = 'Price') +
  theme(legend.position = 'bottom',
        panel.grid.major.x = element_blank(),
        panel.grid.minor.x = element_blank(),
        panel.grid.major.y = element_blank(),
        panel.grid.minor.y = element_blank()
  ) +
  scale_y_continuous(
    labels = function(x) {
      paste0('$', 
             format(x, big.mark = ','))
    })

   - theme_bw() 함수를 통해 배경을 흰색으로 설정한다.
   - labs() 함수를 통해 그래프의 제목 및 x축, y축 제목을 변경한다.
   - theme() 함수 내 legend.position을 통해 범례를 하단으로 이동한다.
   - theme() 함수 내 panel.grid를 통해 격자를 제거한다.
   - scale_y_continuous() 함수를 통해 y축에서 천원 단위로 콤마(,)를 붙여주며, 이를 달러($) 표시와 합쳐준다.

 

 

 

 

참고) https://kkokkilkon.tistory.com/17

https://kilhwan.github.io/rprogramming/ch-visualization.html

댓글