Goals
- geom_col( ), reorder, xlab, ylab, geom_bar
- ggplot2 : cheat sheet, geom_col vs geom_bar
- 빈도수 순서로 출력
- 선 그래프, boxplot , 하나의 차트에서 여러 개의 boxplot 만들기
- ggthemes
#ggplot2.tidyverse.org : ggplot2 홈페이지
# ggplot2를 이용한 여러가지 그래프
search()
library(dplyr) # 데이터를 가공/정제하는 패키지
# 자동차 구동방식(drv)별로 연비 차이?
df_mpg= mpg %>% group_by(drv) %>% summarise(mean_cty=mean(cty))
df_mpg
drv mean_cty
<chr> <dbl>
1 4 14.3
2 f 20.0
3 r 14.1
- geom_col :
# 어떤 변수의 크기를 막대그래프로 그려주는 함수
(예 : 성별에 따른 급여, 제조사별 평균 연비)
# geom_col을 사용할 때는 x축 변수, y축 변수 모두를 매핑시켜야 한다.
# 그래프 생성
ggplot(data=df_mpg, mapping = aes(x=drv, y= mean_cty))+ geom_col()
# x축의 데이터 순서를 y축의 값에 따라서 정렬하면
# 막대 그래프를 크기 순서로 보여줄 수 있음.
# reorder ( 정렬할 데이터, 정렬기준) 정렬기준에 변수이름 그대로 -> 오름차순 (+), 내림차순 (-)
ggplot(data=df_mpg,
mapping = aes(x = reorder(drv, mean_cty), y = mean_cty))+
geom_col()
ggplot(data = df_mpg2,
mapping = aes(x = reorder(drv, -mean_hwy),y = mean_hwy))+
geom_col()
# 구동방식별 고속도로 연비 차이?
df_mpg2 = mpg %>%
group_by(drv) %>%
summarise(mean_hwy= mean(hwy))
df_mpg2
ggplot(data = df_mpg2,
mapping = aes(x = reorder(drv, -mean_hwy),y = mean_hwy))+
geom_col() +
xlab('구동방식') +
ylab('고속도로 평균 연비(mpg)')
# geom_bar () :
# 변수의 빈도수를 막대 그래프로 그려주는 함수
# geom_bar에서 x축에 사용될 수 있는 변수 :
1) 범주형 변수 ( 예 : mpg의 class )
2) 연속적인 변수(숫자) -> 구간을 나눠서 구간 안에 포함된 갯수(빈도수)를 출력한다.
(예 : mpg의 cty, hwy)
# geom_bar()를 사용할 때는 x축 변수만 mapping 시키면 됨.
ggplot(data=mpg, mapping = aes(x = hwy)) + geom_bar()
- geom_col() VS geom_bar()
# 평균 막대 그래프 col ( )
데이터를 요약한 평균표를 먼저 만든 후 평균표를 이용해 그래프 생성 - geom_col()
# 빈도 막대 그래프 bar ( )
별도로 표를 만들지 않고 원자료를 이용해 바로 그래프 생성 - geom_bar()
- mpg 데이터를 이용해서 분석 문제를 해결해 보세요.
- Q1. 어떤 회사에서 생산한 "suv" 차종의 도시 연비가 높은지 알아보려고 합니다. "suv" 차종을 대상으로 평균 cty(도시 연비)가 가장 높은 회사 다섯 곳을 막대 그래프로 표현해 보세요. 막대는 연비 가 높은 순으로 정렬하세요.
df_mpg3 = mpg %>% filter ( class == "suv") %>%
group_by(manufacturer) %>%
summarise(avg_cty = mean(cty)) %>%
arrange(desc(avg_cty))%>%
head(5)
df_mpg3 %>%
ggplot(data = df_mpg3, mapping = aes(x= reorder(class,-avg_cty), y = avg_cty))+
geom_col()
- Q2. 자동차 중에서 어떤 class(자동차 종류)가 가장 많은지 알아보려고 합니다. 자동차 종류별 빈도를 표현한 막대 그래프를 만들어 보세요.
ggplot(data=mpg, mapping = aes(x=class)) + geom_bar()
# class 빈도수 순서대로 그래프 출력하기
ggplot(data = mpg,
mapping = aes(x = reorder(class, table(class)[class])))+ geom_bar()
= 같은 그래프 => table 함수를 이용해서 빈도수 배열(테이블)을 구한뒤 그래프 생성
df = as.data.frame(table(mpg$class))
df
ggplot(data = df,
mapping = aes(x = reorder(Var1,-Freq), y = Freq)) +
geom_col()
- 선 그래프 :
주로 시간에 따라 달라지는 그래프 출력 ( 시계열 그래프 )
# 시간에 따른 실업자 수(unemploy)의 변화
ggplot(data = economics,
mapping = aes(x = date, y = unemploy))+
geom_line()
# 시간에 따른 인구(pop) 변화
ggplot(data=economics,
mapping = aes(x = date, y = pop)) +
geom_line()
# 인구 대비 실업자수
df <- as.data.frame(economics)
# df 데이터 프레임에 인구 대비 실업자 비율 변수(unemp_ratio)를 추가
df = df %>% mutate(unemp_ratio = unemploy/pop*100)
( = df$unemp_ratio = (df$unemploy/df$pop)*100 )
ggplot(data=df,mapping = aes(y = unemp_ratio, x =date )) + geom_line()
# 시간에 따른 개인 저축률을 그래프로 작성
ggplot(data=df, mapping = aes( x = date, y = psavert)) + geom_line()
# 두 개 이상의 라인 그래프를 하나의 차트에 작성하기
# 시간(date)에 따른 실업률과 저축률을 하나의 차트에 그리자
ggplot(data=df, mapping = aes(x = date)) + # 공통 데이터/축 설정
geom_line(mapping = aes(y = unemp_ratio),color = 'red') +
geom_line(mapping = aes(y = psavert), color = 'darkblue')
# 실업률(unemp_ratio)과 평균 실업 기간(unempmed)의 관계가 있을까?
ggplot(data = df, mapping = aes(x = date)) +
geom_line(mapping = aes( y = unemp_ratio, ), color = 'red') +
geom_line(mapping = aes( y = uempmed), color = 'darkblue')
# boxplot : 기술 통계량들을 한눈에 알아볼 수 있는 그래프
# 최솟값, 1사분위값, 중앙값, 3사분위값, 최댓값
>boxplot(mpg$cty)$stats 의 결과값 :
[,1]
[1,] 9 #1) 아랫쪽 수염
[2,] 14 #2) 사각형의 아래쪽
[3,] 17 #3) 사각형 안의 선
[4,] 19 #4) 사각형의 위쪽
[5,] 26 #5) 위쪽 수염
attr(,"class")
1 #6) 이상치는 어디?
"integer"
#1) 아랫쪽 수염 : 사각형 아래쪽-1.5 IQR 값과 이상치(outlier)가 아닌 데이터의 최솟값 중 큰 값까지
#2) 사각형의 아래쪽 : 데이터들을 정렬했을 때 25%에 해당하는 값 (1Qu.)
#3) 사각형 안의 선 : 데이터들을 정렬했을 때 50%에 해당하는 값 (2Qu.)
#4) 사각형의 위쪽 : 데이터들을 정렬했을 때 75%에 해당하는 값 (3Qu.)
#5) 위쪽 수염 : 사각형 위쪽+1.5 IQR 값과 이상치(outlier)가 아닌 데이터의 최댓값 중 작은 값까지
#6) 이상치 : 사각형 +/- 1.5 * IQR 을 벗어난 값 !!
# IQR(Inter-Quartile Range) = 3Qu. - 1Qu.
>>summary에서 출력된 값 중 평균 제외한 모든 값을 나타낸다.
ggplot (data = mpg, mapping = aes(y = cty) ) + geom_boxplot( )
> table(mpg$cyl)
4 5 6 8
81 4 79 70
- 하나의 차트에서 여러 개의 boxplot 만들기ggplot(data = mpg,
mapping = aes ( x=as.factor(cyl), y=cty ) ) + geom_boxplot()
# drv(구동방식)별 cty의 boxplot
ggplot(data = mpg,
mapping = aes(x = drv, y = cty))+
geom_boxplot()
- Q1. class(자동차 종류)가 "compact", "subcompact", "suv"인 자동차의 cty(도시 연비)가 어떻게 다른지 비교해보려고 합니다. 세 차종의 cty를 나타낸 상자 그림을 만들어보세요.
df7 = mpg %>% filter(class %in% c('compact','subcompact','suv'))
ggplot(data= df7,
mapping = aes(x = class, y = cty))+geom_boxplot()
같은 결과값 -> 합치기
mpg %>% filter(class %in% c('compact','subcompact','suv')) %>%
ggplot(mapping = aes(x = class, y = cty))+geom_boxplot()
- ggthemes : 그래프 테마
install.packages('ggthemes')
library(ggthemes)
ggplot(data = mpg, mapping = aes(x=displ, y = hwy))+
geom_point() +
theme_wsj()
- 그래프 여러개 출력하기
# 실업률(unemp_ratio)과 평균 실업 기간(unempmed)의 관계가 있을까?
ggplot(data = df, mapping = aes(x = date)) +
geom_line(mapping = aes( y = unemp_ratio, ), color = 'red') +
geom_line(mapping = aes( y = uempmed), color = 'darkblue')
'R > R기초' 카테고리의 다른 글
R10_복지패널 데이터 분석 2 (0) | 2019.10.16 |
---|---|
R09_복지패널 데이터분석1 (0) | 2019.10.15 |
R07_그래프 만들기 (0) | 2019.10.10 |
R06_ 데이터 정제 (0) | 2019.10.08 |
R05_데이터 합치기 (0) | 2019.10.04 |