EMDI는 지금도 개발중

R데이터분석 : 그래프 만들기 본문

IT/R 데이터분석

R데이터분석 : 그래프 만들기

EMDI 2019. 10. 1. 13:40

* ggplot2는 그래프를 만들 때 가장 많이 사용하는 패키지.

ggplot2문법은 레이어 구조로 되어 있음. 배경을 만들고, 그 위에 그래프 형태, 마지막으로 축 범위, 색, 표식 등 설정을 추가하는 순서로 그래프를 만듦.

 

1. 산점도 - 변수 간 관계 표현하기 geom_point()

산점도 : 데이터를 x축과 y축에 점으로 표현한 그래프. 나이와 소득처럼 연속 값으로 된 두 변수의 관계를 표현할 때 사용됩니다.

library(ggplot2); // ggplot2 패키지를 사용하기 위해 로드하기

 

1) 배경설정하기

// x축은 displ(배기량) y축은 hwy(고속도로 연비)로 지정해 배경 생성

ggplot(data = mpg, aes(x=displ, y=hwy))

 

 

2) 그래프추가하기

ggplot 함수에 + 기호를 이용해 그래프 유형을 지정하는 함수 추가

※ 최근 %>% 이 기호를 많이 써서 익숙해졌겠지만, 해당 기호는 dplyr 패키지 함수들을 연결하는 기호이고,

ggplot2 패키지는 +기호로 연결

 

// 배경에 산점도 추가 geom_point() 함수

ggplot(data = mpg, aes(x=displ, y=hwy)) + geom_point();

 

3) 축 범위를 조정하는 설정 추가하기

축범위는 xlim()과 ylim()을 이용해서 지정가능

// x축 범위 3~6으로 지정, y축 범위 10~30으로 지정해보기

ggplot(data = mpg, aes(x=displ, y=hwy)) +
  geom_point() +
  xlim(3,6) +
  ylim(10,30)

// 정리하기

ggplot(data = mpg, aes(x=displ, y=hwy)) + // 데이터 축
  geom_point() +                                   // 그래프 종류
  xlim(3,6) +                                         // 세부설정
  ylim(10,30)                                         // 세부설정

 

4) 혼자해보기 - mpg 데이터와 midwest 데이터를 이용해 분석 문제 해결하기

Q1. mpg 데이터의 cty(도시연비)와 hwy(고속도로 연비) 간에 어떤 관계가 있는지 알아보려고한다.

x축은 cty, y축은 hwy로 된 산점도 만들어보기 geom_point()이용.

ggplot(data=mpg, aes(x=cty, y=hwy)) +
  geom_point();

 

Q2. 미국 지역별 인구통계 정보를 담은 ggplot2 패키지의 midwest 데이터를 이용해 전체 인구와 아시아 인구 간에 어떤관계가 있는지 알아보려고한다. x축은 poptotal(전체 인구), y축은 popasian(아시아인 인구)으로 산점도 만들기 전체인구는 50만명 이하, 아시아 인구는 1만명 이하 지역만 산점도

ggplot(data=midwest, aes(x=poptotal, y=popasian)) +
  geom_point() +
  xlim(0, 500000) +
  ylim(0, 10000)

 


2. 막대그래프 - 집단 간 차이 표현하기 geom_col()

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

 

1) 집단별 평균표 만들기

dplyr 패키지를 이용해 drv(구동 방식별) 평균 hwy(고속도로 연비)로 구성된 데이터 프레임을 만들어보기

library(dplyr) // 우선 패키지 로드하기

df_mpg <- mpg %>%
  group_by(drv) %>%                      // 구동방식별
  summarise(mean_hwy = mean(hwy)) // 고속도로연비 평균

 

2) 그래프 생성하기

ggplot(data=df_mpg, aes(x=drv, y=mean_hwy)) +
  geom_col();

 

3) 크기 순으로 정렬하기

막대는 기본적으로 범주의 알파벳 순서로 정렬이 되는데 reorder()를 사용하면 막대를 값 크기 순으로 정렬 가능하다.

ggplot(data=df_mpg, aes(x=reorder(drv, -mean_hwy) , y=mean_hwy)) + geom_col() // 1번 그림 오름차순

ggplot(data=df_mpg, aes(x=reorder(drv, mean_hwy) , y=mean_hwy)) + geom_col() // 2번 그림 내림차순

 

 

 

번외) 빈도 막대그래프 만들기 - geom_bar()

geom_col()은 값에 대한 막대그래프이지만, geom_bar는 값의 개수로 막대의 길이를 표현한 그래프이다.

ggplot(data=mpg, aes(x=drv)) + geom_bar()

** 만약 geom_col()함수를 geom_bar()함수의 형식에 적용한다면, 아래와 같이 오류난다.

* geom_col()은 요약표 / geom_bar()는 원자료

 

4) 혼자해보기 - mpg 데이터를 이용해 분석 문제를 해결하기

Q1. 어떤 회사에서 생산한 "suv" 차종의 도시 연비가 높은지 알아보려고 한다. suv 차종을 대상으로 평균 cty(도시 연비)가 가장 높은 회사 다섯 곳을 막대 그래프로 표현

 

// 내가 우선 해본 결과

geom_mpg <- mpg %>% filter(class == "suv") %>% 
  group_by(manufacturer) %>% 
  summarise(mean_cty = mean(cty)) %>% 
  arrange(desc(mean_cty)) %>% 
  head(5)

 

ggplot(data = geom_mpg, aes(x=reorder(manufacturer, -mean_cty), y=mean_cty)) + geom_col()

 

Q2. 자동차 중에서 어떤 class(자동차 종류)가 가장 많은지 알아보려고 합니다. 자동차 종류별 빈도를 표현한 막대그래프

ggplot(data=mpg,aes(x=class)) + geom_bar()

 


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

선 그래프 - 데이터를 선으로 표현한 그래프. 예를 들어 환율, 주가지수 등 경제지표가 시간에 따라 어떻게 변하는지를 선 그래프로 나타낼 수 있습니다.

 

1) 시계열 그래프 만들기

ggplot(data=economics, aes(x=date, y=unemploy)) + geom_line()

2) 혼재해보기 - economics 데이터를 이용해 분석 문제를 해결해 보시오.

Q1. pasavert(개인 저축률)가 시간에 따라 어떻게 변해 왔는지 알아보려고 합니다. 시간에 따른 개인저축률의 변화를 나타난 시계열 그래프를 만들어보세요.

 

ggplot(data=economics, aes(x=date, y=psavert)) + geom_line()


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

상자그림 : 데이터의 분포를 직사각형 상자 모양으로 표현한 그래프.

 

1) 상자 그림 만들기 

// x축을 drv, y축을 hwy로 지정한 후 상자그림으로 표현하도록 하기

ggplot(data=mpg, aes(x=drv, y=hwy)) + geom_boxplot()

 

2) 혼자해보기

Q1. class(자동차 종류)가 "compact", "subcompact", "suv"인 자동차의 cty(도시연비)가 어떻게 다른지 비교해 보려고 합니다. 세 차종의 cty를 나타낸 상자 그림 만들기

 

// 내가 풀어본 결과

box_mpg <- mpg %>% filter(class %in% c("compact", "subcompact", "suv"))
ggplot(data=box_mpg, aes(x=class, y=cty)) + geom_boxplot()

 

 

Comments