(통계분석) R

09.30(수) 산점도, 막대그래프, 선그래프, 상자그림 등 그래프 만들기

KSY98 2020. 9. 30. 21:14

📚해당 게시글은 '이지스 퍼블리싱' 출판, 데이터 분석가 '김영우'님이 지은 도서 "Do it! 쉽게 배우는 R 데이터 분석" 을 기반으로 작성된 게시글입니다. 저작권 문제 시 게시글을 삭제 하겠습니다 :) 

 

오늘은 앞서 분석한 함수들을 활용해 그래프 만드는 방법을 배웠다. 

그래프의 종류는 다양하지만, 산점도, 막대그래프, 선그래프, 상자 그림 등 기본적인 그래프를 생성하는 방법을 배웠다.

함수는 크게 다를 것 없어 생각보다 단순했다.

 

우선, R로 만들 수 있는 그래프는 다양하다. 데이터 분석가들이 R을 선호하는 이유 중 하나에 '우수한 그래프 기능'이 포함된다.
R에서는 2차원 그래프, 3차원 그래프, 지도 그래프, 네트워크 그래프, 시간에 따라 변화하는 모션차드, 인터랙티브 그래프 등 다양한 그래프를 생성할 수 있다.

지도그래프 등 심화 그래프(?)는 추후에 올릴 예정. 오늘은 기본에 충실해 기본적인 그래프들 생성 방법을 알아보자!

참고로, 그리프를 쉽게 만들 수 있는 패키지는 ggplot2 이다.

그래프를 만들기에 앞서 ggplot2의 레이어 구조를 이해하면 나중에 코딩할 때 쉽다.
ggplot2는 쉽게 말해, 아래 베이스부터 축 등 배경 설정 > 점/막대/선 등 그래프 추가 > 축 범위/색/표식 등 설정을 추가하는 3가지 레이어로 구성된다.

 

- 산점도 (변수 간 관계표현)

데이터를 x축과 y축에 점으로 표현한 그래프를 '산점도'라고 한다. 연속 값으로 된 두 변수의 관계를 표현할 때 사용한다.

 

 

앞으로 계속 쓰일 함수는 ggplot(data = '데이터명', aes(x='변수명', y='변수명')) 이다. (레이어 1 베이스, 축 등 설정)

dplyr 패키지의 함수들은 %>% 기호를 이용해 함수들을 나열했었다.

ggplot 패키지의 함수들은 + 기호로 함수를 연결한다.

+ geom_poin() 함수를 추가하면 데이터를 산점도로 나타낸다. (레이어 2 그래프 추가)

축 범위를 추가하고자 할 때는, xlim()ylim() 함수를 사용한다. 괄호안에는 축의 시작 범위와 끝 범위를 적어주면 된다. (레이어 3 축 범위 설정)

예를 들어, xlim(3,6)이면 x축의 변수를 3에서 6까지만 출력하고, ylim(3,5)면 y축의 변수들을 3에서 5까지만 출력한다.

 

cf.) ggplot()과 qplot() 차이

qplot()은 전처리 단계에서 데이터를 빠르게 검토하는 용도로 활용
ggplot()은 분석 결과를 보고하기 위해 그래프를 생성할 때 사용. (색, 크기, 폰트 등 세부 요소들 자유롭게 조절 가능)

 

레이어 3까지 모두 이용해 ggplot2의 midwest 데이터를 산점도로 출력

 

- 막대 그래프 (집단 간 차이 표현)

막대 그래프는 데이터의 크기를 막대의 길이로 표현한 그래프다. 성별 소득 차이처럼 집단 간 차이를 표현할 때 주로 사용한다.

 

dplyr 패키지를 이용한 '구동 방식별(drv) 평균 고속도로 연비' 데이터

 

df_mpg라는 데이터 프레임에 '구동 방식(drv)별 평균 고속도로 연비(hwy)' 데이터를 생성해 막대그래프로 출력했다.

막대그래프를 출력하는 함수는 + geom_col()이다. 

 

reorder함수를 이용해 막대그래프 크기순으로 정렬

 

reorder(x축 변수, 정렬 기준으로 삼을 변수)함수를 이용하면 막대그래프를 크기순으로 정렬할 수 있다.

여기서, '정렬 기준으로 삼을 변수' 앞에 빼기 기호(-)가 붙으면 내림차순으로 정렬된다!

실습에서는, x 축은 drv(구동 방식) 이며, mean_hwy 변수를 기준으로 내림차순으로 나열할 것이기 때문에
reorder(drv, -mean_hwy)를 사용했다. 

 

그럼, '빈도'막대 그래프는?

말 그대로, 빈도, 즉 값의 개수로 막대의 길이를 표현한 그래프이다. 빈도 막대 그래프는 y축없이 x축만 지정하고, geom_col() 대신 geom_bar()을 사용한다.

 

 

cf. ) geom_col()과 geom_bar()

평균 막대 그래프 geom_col()은 데이터를 요약한 평균표를 먼저 만든 후 이 평균표를 이용해 그래프 생성

빈도 막대 그래프 geom_bar()은 데이터를 활용하지 않고 원자료를 그대로 활용

 

suv차종을 대상으로 평균 cty가 가장 높은 회사 다섯 곳을 막대그래프로 표현
자동차 중 어떤 종류가 가장 많은지 알아보기 위한 종류별 빈도 막대 그래프

 

- 선 그래프 (시간에 따라 달라지는 데이터 표현)

 

 

선그래프는 + geom_line()을 사용한다. 

 

-상자 그림 (집단 간 분포 차이 표현하기) 

 

 

상자그림은 geom_boxplot() 를 이용한다.

상자그림은 값은 분포도를 잘 보여준다. 따라서 극단치를 찾아 내는 등의 분석에 유용하다.

상자 그림설명
상자 아래 세로선아랫수염하위 0~25% 내에 해당하는 값
상자 밑면1사분위수하위 25% 위치 값
상자 내 굵은 선2사분위수하위 50% 위치 값 (중앙값)
상자 윗면3사분위수하위 75% 위치 값
상자 위 세로선윗수염하위 75~100% 내에 해당하는 값
상자 밖 점 표식극단치사분위 범위(Q1~Q3 간 거리)의 1.5배

 

 

mpg 데이터에서 class가 compact, subcompact, suv인 자동차의 cty(도시 연비) 비교

 

지금까지와는 다르게, 오늘 한 내용은 함수가 모두 같아서 어려운 점이 없었다.

point, line, bar, col, boxplot 등만 잘 선택해서 geom_ 뒤에 붙히면 되는것ㅎ

근데 궁금한게 생겼다.. 이전 단원에서는 boxplot()$stats를 이용해 그래프 말고도 통계값을 표로 볼 수 있었는데, 

geom_boxplot()은 통계값을 표로 산출하려면 코딩이 어뜨케 되어야하는것인가..

geom_boxplot()$stats도 안되던디....흑 이거 내일 찾아봐야게따ㅠㅠ

낼부터 9단원인데 9단원부터는 실전 데이터 분석이당ㅎㅎ 단원명이 한국인의 삶을 파악하라..! 재밌겠군🤭