쭈쌤
쭈쌤 Hello World

[R 데이터 분석,시각화] MPG 데이터 실습

크리에이티브 커먼즈 라이선스 ITPAPER(호쌤,쭈쌤)에 의해 작성된 ≪[R 데이터 분석,시각화] MPG 데이터 실습≫은(는) 크리에이티브 커먼즈 저작자표시-비영리-동일조건변경허락 4.0 국제 라이선스에 따라 이용할 수 있습니다.
이 라이선스의 범위 이외의 이용허락을 얻기 위해서는 leekh4232@gmail.com으로 문의하십시오.

[R 데이터 분석,시각화] MPG 데이터 실습

ggplot2 패키지에 포함되어 있는 예제 데이터로 1998년, 2004년, 2008년도에 미국에서 생산되는 자동차 제조회사들의 자동차의 연비,구동방식 등을 조사한 데이터입니다. 이를 활용하여 지금까지 살펴본 데이터 분석의 기본 개념들과 시각화 방법을 응용해 봅시다.

#01 패키지 및 샘플 데이터 준비

1) 패키지 가져오기

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
REPO_URL <- "https://cran.seoul.go.kr/"

# 데이터 전처리 패키지. `%>%`가 적용되는 기능을 사용하고자 할 경우
if (!require("dplyr"))     install.packages("dplyr", repos=REPO_URL)
library(dplyr)

# 시각화 패키지
if (!require("ggplot2"))     install.packages("ggplot2", repos=REPO_URL)
library(ggplot2)

# 그래프 패키지
if (!require(ggplot2)) install.packages("ggplot2", repos=REPO_URL)
library(ggplot2)

# 폰트 설정 패키지
if (!require(extrafont)) install.packages("extrafont", repos=REPO_URL)
library(extrafont)

2) mpg 데이터 가져오기

데이터프레임의 각 컬럼이 갖는 의미

컬럼이름 설명
manufacturer 제조회사
model 자동차 모델명
displ 배기량
year 생산년도
cyl 실린더 개수
trans 변속기 종류
drv 구동방식
cty 도시연비
hwy 고속도로 연비
fl 연료 종류
class 자동차 종류

연료 종류(fl)컬럼에서 사용되는 코드값.

코드 설명
c CNG (2.35) - 가스
d diesel(2.38) - 디젤
e ethanol E85 (2.11) - 에탄올 혼합연료
p premium(2.76) - 고급 휘발유
r regular(2.22) - 보통 휘발유
1
2
mpg <- as.data.frame(ggplot2::mpg)
mpg
▶ 출력결과

A data.frame: 234 × 11

manufacturermodeldisplyearcyltransdrvctyhwyflclass
<chr><chr><dbl><int><int><chr><chr><int><int><chr><chr>
audi a4 1.819994auto(l5) f1829pcompact
audi a4 1.819994manual(m5)f2129pcompact
audi a4 2.020084manual(m6)f2031pcompact
audi a4 2.020084auto(av) f2130pcompact
audi a4 2.819996auto(l5) f1626pcompact
audi a4 2.819996manual(m5)f1826pcompact
audi a4 3.120086auto(av) f1827pcompact
audi a4 quattro 1.819994manual(m5)41826pcompact
audi a4 quattro 1.819994auto(l5) 41625pcompact
audi a4 quattro 2.020084manual(m6)42028pcompact
audi a4 quattro 2.020084auto(s6) 41927pcompact
audi a4 quattro 2.819996auto(l5) 41525pcompact
audi a4 quattro 2.819996manual(m5)41725pcompact
audi a4 quattro 3.120086auto(s6) 41725pcompact
audi a4 quattro 3.120086manual(m6)41525pcompact
audi a6 quattro 2.819996auto(l5) 41524pmidsize
audi a6 quattro 3.120086auto(s6) 41725pmidsize
audi a6 quattro 4.220088auto(s6) 41623pmidsize
chevroletc1500 suburban 2wd5.320088auto(l4) r1420rsuv
chevroletc1500 suburban 2wd5.320088auto(l4) r1115esuv
chevroletc1500 suburban 2wd5.320088auto(l4) r1420rsuv
chevroletc1500 suburban 2wd5.719998auto(l4) r1317rsuv
chevroletc1500 suburban 2wd6.020088auto(l4) r1217rsuv
chevroletcorvette 5.719998manual(m6)r1626p2seater
chevroletcorvette 5.719998auto(l4) r1523p2seater
chevroletcorvette 6.220088manual(m6)r1626p2seater
chevroletcorvette 6.220088auto(s6) r1525p2seater
chevroletcorvette 7.020088manual(m6)r1524p2seater
chevroletk1500 tahoe 4wd 5.320088auto(l4) 41419rsuv
chevroletk1500 tahoe 4wd 5.320088auto(l4) 41114esuv
.................................
toyota toyota tacoma 4wd3.419996auto(l4) 41519rpickup
toyota toyota tacoma 4wd4.020086manual(m6)41518rpickup
toyota toyota tacoma 4wd4.020086auto(l5) 41620rpickup
volkswagengti 2.019994manual(m5)f2129rcompact
volkswagengti 2.019994auto(l4) f1926rcompact
volkswagengti 2.020084manual(m6)f2129pcompact
volkswagengti 2.020084auto(s6) f2229pcompact
volkswagengti 2.819996manual(m5)f1724rcompact
volkswagenjetta 1.919994manual(m5)f3344dcompact
volkswagenjetta 2.019994manual(m5)f2129rcompact
volkswagenjetta 2.019994auto(l4) f1926rcompact
volkswagenjetta 2.020084auto(s6) f2229pcompact
volkswagenjetta 2.020084manual(m6)f2129pcompact
volkswagenjetta 2.520085auto(s6) f2129rcompact
volkswagenjetta 2.520085manual(m5)f2129rcompact
volkswagenjetta 2.819996auto(l4) f1623rcompact
volkswagenjetta 2.819996manual(m5)f1724rcompact
volkswagennew beetle 1.919994manual(m5)f3544dsubcompact
volkswagennew beetle 1.919994auto(l4) f2941dsubcompact
volkswagennew beetle 2.019994manual(m5)f2129rsubcompact
volkswagennew beetle 2.019994auto(l4) f1926rsubcompact
volkswagennew beetle 2.520085manual(m5)f2028rsubcompact
volkswagennew beetle 2.520085auto(s6) f2029rsubcompact
volkswagenpassat 1.819994manual(m5)f2129pmidsize
volkswagenpassat 1.819994auto(l5) f1829pmidsize
volkswagenpassat 2.020084auto(s6) f1928pmidsize
volkswagenpassat 2.020084manual(m6)f2129pmidsize
volkswagenpassat 2.819996auto(l5) f1626pmidsize
volkswagenpassat 2.819996manual(m5)f1826pmidsize
volkswagenpassat 3.620086auto(s6) f1726pmidsize

#02. 기술통계

1) 데이터 내용 확인하기

mpg 데이터의 크기 확인

1
dim(mpg)
▶ 출력결과
1
2
1. 234
2. 11
a) 데이터의 일부 확인하기
상위 5건 확인
1
head(mpg, 5)
▶ 출력결과

A data.frame: 5 × 11

manufacturermodeldisplyearcyltransdrvctyhwyflclass
<chr><chr><dbl><int><int><chr><chr><int><int><chr><chr>
audia41.819994auto(l5) f1829pcompact
audia41.819994manual(m5)f2129pcompact
audia42.020084manual(m6)f2031pcompact
audia42.020084auto(av) f2130pcompact
audia42.819996auto(l5) f1626pcompact
하위 5건 확인
1
tail(mpg, 5)
▶ 출력결과

A data.frame: 5 × 11

manufacturermodeldisplyearcyltransdrvctyhwyflclass
<chr><chr><dbl><int><int><chr><chr><int><int><chr><chr>
230volkswagenpassat2.020084auto(s6) f1928pmidsize
231volkswagenpassat2.020084manual(m6)f2129pmidsize
232volkswagenpassat2.819996auto(l5) f1626pmidsize
233volkswagenpassat2.819996manual(m5)f1826pmidsize
234volkswagenpassat3.620086auto(s6) f1726pmidsize

2) 데이터 요약 정보를 통해 기술통계값 확인하기

1
summary(mpg)
▶ 출력결과
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
 manufacturer          model               displ            year
 Length:234         Length:234         Min.   :1.600   Min.   :1999
 Class :character   Class :character   1st Qu.:2.400   1st Qu.:1999
 Mode  :character   Mode  :character   Median :3.300   Median :2004
                                       Mean   :3.472   Mean   :2004
                                       3rd Qu.:4.600   3rd Qu.:2008
                                       Max.   :7.000   Max.   :2008
      cyl           trans               drv                 cty
 Min.   :4.000   Length:234         Length:234         Min.   : 9.00
 1st Qu.:4.000   Class :character   Class :character   1st Qu.:14.00
 Median :6.000   Mode  :character   Mode  :character   Median :17.00
 Mean   :5.889                                         Mean   :16.86
 3rd Qu.:8.000                                         3rd Qu.:19.00
 Max.   :8.000                                         Max.   :35.00
      hwy             fl               class
 Min.   :12.00   Length:234         Length:234
 1st Qu.:18.00   Class :character   Class :character
 Median :24.00   Mode  :character   Mode  :character
 Mean   :23.44
 3rd Qu.:27.00
 Max.   :44.00

확인결과

도수 분포표와 히스토그램으로 데이터 분포를 확인해야 하는 값들
  • 제조회사, 모델명, 변속기 종류, 구동방식, 연료 종류, 자동차 종류
사분위수와 상자그림으로 데이터 분포를 확인해야 하는 값들
  • 배기량, 생산년도, 실린더 개수, 도시연비, 고속도로 연비

(이 중에서 생산년도와 실린더 개수는 데이터 값의 종류가 매우 적으므로 반드시 확인할 필요는 없다.)

3) 상자그림을 통한 데이터 분포 확인하기

그래프의 기본 크기 설정 및 불필요한 경고 메시지 출력 끄기

1
options(repr.plot.width=5, repr.plot.height=5, warn=-1)

배기량에 대한 상자그림

1
2
3
boxplot(mpg$displ,
       col=c('#1d9df2'),
       names=c('displ'))
▶ 출력결과

png

도시연비와 고속도로 연비에 대한 상자그림

1
2
3
boxplot(mpg$cty, mpg$hwy,
       col=c('#ffff00', '#ff6600'),
       names=c('cty','hwy'))
▶ 출력결과

png

4) 데이터 빈도 확인하기

제조회사, 모델명, 변속기 종류, 구동방식, 연료 종류, 자동차 종류

1
table(mpg$manufacturer)    # 제조회사
▶ 출력결과
1
2
3
4
5
6
      audi  chevrolet      dodge       ford      honda    hyundai       jeep
        18         19         37         25          9         14          8
land rover    lincoln    mercury     nissan    pontiac     subaru     toyota
         4          3          4         13          5         14         34
volkswagen
        27
1
table(mpg$model)           # 자동차 모델명
▶ 출력결과
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
           4runner 4wd                     a4             a4 quattro
                     6                      7                      8
            a6 quattro                 altima     c1500 suburban 2wd
                     3                      6                      5
                 camry           camry solara            caravan 2wd
                     7                      7                     11
                 civic                corolla               corvette
                     9                      5                      5
     dakota pickup 4wd            durango 4wd         expedition 2wd
                     9                      7                      3
          explorer 4wd        f150 pickup 4wd           forester awd
                     6                      7                      6
    grand cherokee 4wd             grand prix                    gti
                     8                      5                      5
           impreza awd                  jetta        k1500 tahoe 4wd
                     8                      9                      4
land cruiser wagon 4wd                 malibu                 maxima
                     2                      5                      3
       mountaineer 4wd                mustang          navigator 2wd
                     4                      9                      3
            new beetle                 passat         pathfinder 4wd
                     6                      7                      4
   ram 1500 pickup 4wd            range rover                 sonata
                    10                      4                      7
               tiburon      toyota tacoma 4wd
                     7                      7
1
table(mpg$trans)           # 변속기 종류
▶ 출력결과
1
2
3
4
  auto(av)   auto(l3)   auto(l4)   auto(l5)   auto(l6)   auto(s4)   auto(s5)
         5          2         83         39          6          3          3
  auto(s6) manual(m5) manual(m6)
        16         58         19
1
table(mpg$drv)             # 구동방식
▶ 출력결과
1
2
  4   f   r
103 106  25
1
table(mpg$fl)              # 연료 종류
▶ 출력결과
1
2
  c   d   e   p   r
  1   5   8  52 168
1
table(mpg$class)           # 자동차 종류
▶ 출력결과
1
2
   2seater    compact    midsize    minivan     pickup subcompact        suv
         5         47         41         11         33         35         62

5) 문제

Q1) 자동차 배기량에 따라 고속도로 연비가 다른지 알아보려고 한다. displ(배기량)이 4 이하인 자동차와 5 이상인 자동차 중 어떤 자동차의 hwy(고속도로 연비)가 평균적으로 더 높은지 알아보시오.

1
2
3
4
mpg_a <- mpg %>% filter(displ <= 4)    # displ 4 이하 추출
mpg_b <- mpg %>% filter(displ >= 5)    # displ 5 이상 추출
mean(mpg_a$hwy)                        # displ 4 이하 hwy 평균
mean(mpg_b$hwy)                        # displ 5 이상 hwy 평균
▶ 출력결과
1
2
25.9631901840491
18.0789473684211

Q2) 자동차 제조 회사에 따라 도시 연비가 다른지 알아보려고 한다. “audi”와 “toyota” 중 어느 manufacturer(자동차 제조 회사)의 cty(도시연비)가 평균적으로 더 높은지 알아보시오.

1
2
3
4
mpg_audi <- mpg %>% filter(manufacturer == "audi")      # 아우디 추출
mpg_toyota <- mpg %>% filter(manufacturer == "toyota")  # 토요타 추출
mean(mpg_audi$cty)    # 아우디의 도시연비 평균
mean(mpg_toyota$cty)  # 토요타의 도시연비 평균
▶ 출력결과
1
2
17.6111111111111
18.5294117647059

Q3) “chevrolet”, “ford”, “honda” 자동차의 고속도로 연비 평균을 알아보려고 한다. 이 회사들의 데이터를 추출한 후 hwy 전체 평균을 확인하시오.

1
2
mpg_new <- mpg %>% filter(manufacturer %in% c("chevrolet", "ford", "honda"))
mean(mpg_new$hwy)  # 아우디의 고속도로연비 평균
▶ 출력결과
1
22.5094339622642

#02. 데이터 전처리

mpg 데이터의 fl 변수는 자동차에 사용하는 연료(fuel)를 의미한다. (각 연료 이름의 첫 글자만 저장.)

mpg 데이터에는 연료 종류를 나타낸 fl 변수는 있지만 연료 가격을 나타낸 변수는 없다.

다음의 가격정보를 이용해 mpg 데이터에 price_fl(연료가격) 변수를 추가하라.

코드 종류 가격
c 가스 2.35 달러
d 디젤 2.38 달러
e 에탄올 혼합연료 2.11 달러
p 고급 휘발유 2.76 달러
r 보통 휘발유 2.22 달러

추가한 결과에서 model, fl, price_fl 추출하여 출력하세요.

1) mpg에 연료 가격 변수 추가

연료 가격 정보 만들기

1
2
3
4
5
연료 <- data.frame( fl = c("c", "d", "e", "p", "r"),
                    price_fl = c(2.35, 2.38, 2.11, 2.76, 2.22),
                    stringsAsFactors=FALSE)

연료
▶ 출력결과

A data.frame: 5 × 2

flprice_fl
<chr><dbl>
c2.35
d2.38
e2.11
p2.76
r2.22

mpg에 연료 가격 변수 추가

1
2
가격추가mpg <- left_join(mpg, 연료, by = "fl")
가격추가mpg
▶ 출력결과

A data.frame: 234 × 12

manufacturermodeldisplyearcyltransdrvctyhwyflclassprice_fl
<chr><chr><dbl><int><int><chr><chr><int><int><chr><chr><dbl>
audi a4 1.819994auto(l5) f1829pcompact2.76
audi a4 1.819994manual(m5)f2129pcompact2.76
audi a4 2.020084manual(m6)f2031pcompact2.76
audi a4 2.020084auto(av) f2130pcompact2.76
audi a4 2.819996auto(l5) f1626pcompact2.76
audi a4 2.819996manual(m5)f1826pcompact2.76
audi a4 3.120086auto(av) f1827pcompact2.76
audi a4 quattro 1.819994manual(m5)41826pcompact2.76
audi a4 quattro 1.819994auto(l5) 41625pcompact2.76
audi a4 quattro 2.020084manual(m6)42028pcompact2.76
audi a4 quattro 2.020084auto(s6) 41927pcompact2.76
audi a4 quattro 2.819996auto(l5) 41525pcompact2.76
audi a4 quattro 2.819996manual(m5)41725pcompact2.76
audi a4 quattro 3.120086auto(s6) 41725pcompact2.76
audi a4 quattro 3.120086manual(m6)41525pcompact2.76
audi a6 quattro 2.819996auto(l5) 41524pmidsize2.76
audi a6 quattro 3.120086auto(s6) 41725pmidsize2.76
audi a6 quattro 4.220088auto(s6) 41623pmidsize2.76
chevroletc1500 suburban 2wd5.320088auto(l4) r1420rsuv 2.22
chevroletc1500 suburban 2wd5.320088auto(l4) r1115esuv 2.11
chevroletc1500 suburban 2wd5.320088auto(l4) r1420rsuv 2.22
chevroletc1500 suburban 2wd5.719998auto(l4) r1317rsuv 2.22
chevroletc1500 suburban 2wd6.020088auto(l4) r1217rsuv 2.22
chevroletcorvette 5.719998manual(m6)r1626p2seater2.76
chevroletcorvette 5.719998auto(l4) r1523p2seater2.76
chevroletcorvette 6.220088manual(m6)r1626p2seater2.76
chevroletcorvette 6.220088auto(s6) r1525p2seater2.76
chevroletcorvette 7.020088manual(m6)r1524p2seater2.76
chevroletk1500 tahoe 4wd 5.320088auto(l4) 41419rsuv 2.22
chevroletk1500 tahoe 4wd 5.320088auto(l4) 41114esuv 2.11
....................................
toyota toyota tacoma 4wd3.419996auto(l4) 41519rpickup 2.22
toyota toyota tacoma 4wd4.020086manual(m6)41518rpickup 2.22
toyota toyota tacoma 4wd4.020086auto(l5) 41620rpickup 2.22
volkswagengti 2.019994manual(m5)f2129rcompact 2.22
volkswagengti 2.019994auto(l4) f1926rcompact 2.22
volkswagengti 2.020084manual(m6)f2129pcompact 2.76
volkswagengti 2.020084auto(s6) f2229pcompact 2.76
volkswagengti 2.819996manual(m5)f1724rcompact 2.22
volkswagenjetta 1.919994manual(m5)f3344dcompact 2.38
volkswagenjetta 2.019994manual(m5)f2129rcompact 2.22
volkswagenjetta 2.019994auto(l4) f1926rcompact 2.22
volkswagenjetta 2.020084auto(s6) f2229pcompact 2.76
volkswagenjetta 2.020084manual(m6)f2129pcompact 2.76
volkswagenjetta 2.520085auto(s6) f2129rcompact 2.22
volkswagenjetta 2.520085manual(m5)f2129rcompact 2.22
volkswagenjetta 2.819996auto(l4) f1623rcompact 2.22
volkswagenjetta 2.819996manual(m5)f1724rcompact 2.22
volkswagennew beetle 1.919994manual(m5)f3544dsubcompact2.38
volkswagennew beetle 1.919994auto(l4) f2941dsubcompact2.38
volkswagennew beetle 2.019994manual(m5)f2129rsubcompact2.22
volkswagennew beetle 2.019994auto(l4) f1926rsubcompact2.22
volkswagennew beetle 2.520085manual(m5)f2028rsubcompact2.22
volkswagennew beetle 2.520085auto(s6) f2029rsubcompact2.22
volkswagenpassat 1.819994manual(m5)f2129pmidsize 2.76
volkswagenpassat 1.819994auto(l5) f1829pmidsize 2.76
volkswagenpassat 2.020084auto(s6) f1928pmidsize 2.76
volkswagenpassat 2.020084manual(m6)f2129pmidsize 2.76
volkswagenpassat 2.819996auto(l5) f1626pmidsize 2.76
volkswagenpassat 2.819996manual(m5)f1826pmidsize 2.76
volkswagenpassat 3.620086auto(s6) f1726pmidsize 2.76

model, fl, price_fl만 추출

1
가격추가mpg %>% select(model, fl, price_fl)
▶ 출력결과

A data.frame: 234 × 3

modelflprice_fl
<chr><chr><dbl>
a4 p2.76
a4 p2.76
a4 p2.76
a4 p2.76
a4 p2.76
a4 p2.76
a4 p2.76
a4 quattro p2.76
a4 quattro p2.76
a4 quattro p2.76
a4 quattro p2.76
a4 quattro p2.76
a4 quattro p2.76
a4 quattro p2.76
a4 quattro p2.76
a6 quattro p2.76
a6 quattro p2.76
a6 quattro p2.76
c1500 suburban 2wdr2.22
c1500 suburban 2wde2.11
c1500 suburban 2wdr2.22
c1500 suburban 2wdr2.22
c1500 suburban 2wdr2.22
corvette p2.76
corvette p2.76
corvette p2.76
corvette p2.76
corvette p2.76
k1500 tahoe 4wd r2.22
k1500 tahoe 4wd e2.11
.........
toyota tacoma 4wdr2.22
toyota tacoma 4wdr2.22
toyota tacoma 4wdr2.22
gti r2.22
gti r2.22
gti p2.76
gti p2.76
gti r2.22
jetta d2.38
jetta r2.22
jetta r2.22
jetta p2.76
jetta p2.76
jetta r2.22
jetta r2.22
jetta r2.22
jetta r2.22
new beetle d2.38
new beetle d2.38
new beetle r2.22
new beetle r2.22
new beetle r2.22
new beetle r2.22
passat p2.76
passat p2.76
passat p2.76
passat p2.76
passat p2.76
passat p2.76
passat p2.76

#04. 데이터 정제

1) 결측치 정제

mpg 데이터에서 구동방식(drv)별 고속도로 연비(hwy) 평균 알아보기.

문제 설정을 위해 아래와 같이 임의의 결측치를 생성하고 진행하세요.

1
2
3
# mpg에서 임의의 결측치 만들기
# -> 65,124,131,153,212번째 행의 hwy 값에 NA 설정
mpg[c(65,124,131,153,212), "hwy"] <- NA

Q1) 분석을 하기 전에 두 변수에 결측치가 있는지 확인해야 한다. 구동방식 변수와 고속도로 연비 변수에 결측치가 몇 개 있는지 알아보아라.

구동방식에 대한 결측치 확인
1
table(is.na(mpg$drv))
▶ 출력결과
1
2
FALSE
  234
고속도로 연비에 대한 결측치 확인
1
table(is.na(mpg$hwy))
▶ 출력결과
1
2
FALSE  TRUE
  229     5

Q2) filter()를 이용해 hwy 변수의 결측치를 제외하고, 어떤 구동 방식의 hwy 평균이 높은지 알아보아라. 단, 하나의 dplyr 구문으로 작성하시오.

1
2
3
4
5
6
7
mpg %>%
    # 고속도로 연비에서 결측치를 제외
    filter(!is.na(hwy))  %>%
    # 구동방식별
    group_by(drv) %>%
    # 고속도로 연비 평균
    summarise(mean_hwy = mean(hwy))
▶ 출력결과

A tibble: 3 × 2

drvmean_hwy
<chr><dbl>
419.24242
f28.20000
r21.00000

3) 이상치 정제

mpg 데이터에서 구동방식별 고속도로 연비 평균과 도시 연비 평균을 극단치를 제외하고 확인하시오.

각 연비별 이상치 확인

상자그림과 함께 상자그림의 상태값을 함께 출력하여 극단치 경계값을 찾아야 한다.

1
boxplot(mpg$hwy, mpg$cty)$stats
▶ 출력결과
1
2
3
4
5
6
7
8
9
10
1. 12
2. 18
3. 25
4. 27
5. 37
6. 9
7. 14
8. 17
9. 19
10. 26

png

이상치 제거하기

원본 데이터프레임을 복사하고 시작
1
이상치제거 <- mpg
이상치 데이터를 결측치로 변경후 상자그림으로 이상치가 없음을 확인
1
2
3
이상치제거$hwy[이상치제거$hwy > 37] <- NA
이상치제거$cty[이상치제거$cty > 26] <- NA
boxplot(이상치제거$cty, 이상치제거$hwy)
▶ 출력결과

png

변환된 결측치를 제외하고 구동방식별 평균 연비 산출

집계함수를 사용하면서 na.rm=TRUE 파라미터를 적용하면 결측치를 제외하고 집계를 수행한다.

1
2
3
4
이상치제거 %>%
  group_by(drv) %>%
  summarise(고속도로평균연비 = mean(hwy, na.rm=TRUE),
            도시평균연비 = mean(cty, na.rm=TRUE))
▶ 출력결과

A tibble: 3 × 3

drv고속도로평균연비도시평균연비
<chr><dbl><dbl>
419.2424214.33010
f27.7647119.44554
r21.0000014.08000

#05. 데이터 시각화

1) 그래프 생성을 위한 기본 준비

나눔고딕 폰트를 검색하여 설치하기

1
font_import(pattern = 'NanumGothic')
▶ 출력결과
1
2
3
4
5
6
Importing fonts may take a few minutes, depending on the number of fonts and the speed of the system.
Continue? [y/n]  y

Scanning ttf files in C:\WINDOWS\Fonts ...
Extracting .afm files from .ttf files...
C:\Windows\Fonts\NanumGothic.ttf : NanumGothic already registered in fonts database. Skipping.

설치된 폰트들 로드하기

1
2
3
loadfonts(device="win")
# mac의 경우 `device="win"` 생략
# loadfonts()
▶ 출력결과
1
NanumGothic already registered with windowsFonts().

그래프 기본 크기 및 불필요한 경고 메시지 끄기

1
options(repr.plot.width=15, repr.plot.height=9, warn=-1)

2) 문제

q1) mpg 데이터에서 “구동 방식별 평균 고속도로 연비”를 그래프로 표현하시오.

이상치와 결측치에 대한 데이터 정제 작업은 이미 완료 되었다고 가정합니다.

구동 방식별 평균 고속도로 연비 구하기
1
2
3
4
5
6
df <- mpg %>%
        # 구동방식별로 그룹화
        group_by(drv) %>%
        # 그룹별로 평균 고속도로 연비
        summarise(mean_hwy = mean(hwy, na.rm=TRUE))
df
▶ 출력결과

A tibble: 3 × 2

drvmean_hwy
<chr><dbl>
419.24242
f28.20000
r21.00000
평균 막대 그래프 생성하기
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
ggplot(data=df) +
    # 평균 막대 그래프
    geom_col(aes(x=drv, y=mean_hwy, fill=drv)) +
    # 배경을 흰색으로 설정
    theme_bw() +
    # 그래프 타이틀 설정
    ggtitle("구동 방식별 평균 고속도로 연비") +
    # x축 제목 설정
    xlab("구동방식") +
    # y축 제목 설정
    ylab("연비") +
    # y축 간격 및 데이터에 대한 세자리 콤마 적용
    scale_y_continuous(breaks=seq(0, 50, 5))  +
    # 각 텍스트의 색상, 크기, 각도, 글꼴 설정
    theme(plot.title=element_text(family="NanumGothic", color="#0066ff", size=25, face="bold", hjust=0.5),
          axis.title.x=element_text(family="NanumGothic", color="#999999", size=18, face="bold"),
          axis.title.y=element_text(family="NanumGothic", color="#999999", size=18, face="bold"),
          axis.text.x=element_text(family="NanumGothic", color="#000000", size=16, angle=0),
          axis.text.y=element_text(family="NanumGothic", color="#000000", size=16, angle=0)) +
    # 범주 설정
    theme(legend.title = element_blank(),
          legend.text = element_text(family="NanumGothic", face="bold", size=15, color="#330066"),
          legend.key = element_rect(color="red", fill="white"),
          legend.key.size = unit(1,"cm"),
          legend.box.background = element_rect(fill="skyblue"),
          legend.box.margin = margin(6, 6, 6, 6),
          legend.position = c(0.95, 0.85))
▶ 출력결과

png

q2) 자동차 중에서 어떤 class(자동차 종류)가 가장 많은지 알아보려고 한다. 자동차 종류별 빈도를 표현한 막대 그래프를 표현하시오.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
ggplot(data = mpg) +
    # 빈도 막대 그래프
    geom_bar(aes(x=class, fill=class)) +
    # 배경을 흰색으로 설정
    theme_bw() +
    # 그래프 타이틀 설정
    ggtitle('자동차 종류별 빈도') +
    # x축 제목 설정
    xlab("종류") +
    # y축 제목 설정
    ylab("빈도") +
    # y축 간격 및 데이터에 대한 세자리 콤마 적용
    scale_y_continuous(breaks=seq(0, 70, 5))  +
    # 각 텍스트의 색상, 크기, 각도, 글꼴 설정
    theme(plot.title=element_text(family="NanumGothic", color="#0066ff", size=25, face="bold", hjust=0.5),
          axis.title.x=element_text(family="NanumGothic", color="#999999", size=18, face="bold"),
          axis.title.y=element_text(family="NanumGothic", color="#999999", size=18, face="bold"),
          axis.text.x=element_text(family="NanumGothic", color="#000000", size=16, angle=0),
          axis.text.y=element_text(family="NanumGothic", color="#000000", size=16, angle=0)) +
    # 범주 설정
    theme(legend.title = element_blank(),
          legend.text = element_text(family="NanumGothic", face="bold", size=15, color="#330066"),
          legend.key = element_rect(color="red", fill="white"),
          legend.key.size = unit(1,"cm"),
          legend.box.background = element_rect(fill="skyblue"),
          legend.box.margin = margin(6, 6, 6, 6),
          legend.position = 'top')
▶ 출력결과

png

q3) 어떤 회사에서 생산한 “suv” 차종의 도시연비(cty)가 높은지 알아보려 한다. “suv” 차종을 대상으로 평균 cty가 가장 높은 회사 다섯곳을 막대 그래프로 표현하시오.
상위 5곳에 대한 평균표 작성
1
2
3
4
5
6
7
8
9
10
11
12
df <- mpg %>%
        # 차종이 suv인 데이터만 추출
        filter(class == "suv") %>%
        # 제조사별로 그룹핑
        group_by(manufacturer) %>%
        # 그룹별로 평균 도시 연비 산출
        summarise(mean_cty = mean(cty)) %>%
        # 역순정렬 -> 높은순으로 정렬함
        arrange(desc(mean_cty)) %>%
        # 상위 5곳
        head(5)
df
▶ 출력결과

A tibble: 5 × 2

manufacturermean_cty
<chr><dbl>
subaru 18.83333
toyota 14.37500
nissan 13.75000
jeep 13.50000
mercury13.25000
평균 막대 그래프
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
ggplot(data=df) +
    geom_col(aes(x=manufacturer, y=mean_cty, fill=manufacturer)) +
    # 배경을 흰색으로 설정
    theme_bw() +
    # 그래프 타이틀 설정
    ggtitle('suv차종별 평균 도시 연비') +
    # x축 제목 설정
    xlab("차종") +
    # y축 제목 설정
    ylab("연비") +
    # y축 간격 및 데이터에 대한 세자리 콤마 적용
    scale_y_continuous(breaks=seq(0, 70, 5)) +
    # 각 텍스트의 색상, 크기, 각도, 글꼴 설정
    theme(plot.title=element_text(family="NanumGothic", color="#0066ff", size=25, face="bold", hjust=0.5),
          axis.title.x=element_text(family="NanumGothic", color="#999999", size=18, face="bold"),
          axis.title.y=element_text(family="NanumGothic", color="#999999", size=18, face="bold"),
          axis.text.x=element_text(family="NanumGothic", color="#000000", size=16, angle=0),
          axis.text.y=element_text(family="NanumGothic", color="#000000", size=16, angle=0)) +
    # 범주 설정
    theme(legend.title = element_blank(),
          legend.text = element_text(family="NanumGothic", face="bold", size=15, color="#330066"),
          legend.key = element_rect(color="red", fill="white"),
          legend.key.size = unit(1,"cm"),
          legend.box.background = element_rect(fill="skyblue"),
          legend.box.margin = margin(6, 6, 6, 6),
          legend.position = 'top')
▶ 출력결과

png

Rating:

크리에이티브 커먼즈 라이선스 ITPAPER(호쌤,쭈쌤)에 의해 작성된 ≪[R 데이터 분석,시각화] MPG 데이터 실습≫은(는) 크리에이티브 커먼즈 저작자표시-비영리-동일조건변경허락 4.0 국제 라이선스에 따라 이용할 수 있습니다.
이 라이선스의 범위 이외의 이용허락을 얻기 위해서는 leekh4232@gmail.com으로 문의하십시오.

comments powered by Disqus