3. 데이터 가공 > 3-3. 연습문제

연습문제


🧭 목차

  1. midwest 데이터
  2. mpg 데이터
  3. avocado 데이터

이번 장에서는 %>% 연산자를 통한 데이터 가공을 연습해보겠습니다.

코드를 따라 입력하면서 익숙해지시길 바랍니다.

# 사전 준비
install.packages('ggplot2')
library('ggplot2')
library('dplyr')

1) midwest 데이터

# 0. 데이터 살펴보기
str(ggplot2::midwest)   # 미로딩 패키지를 불러올 때

# 1. 특정 속성(열) 추출
mid1 = midwest %>% select(county, state, poptotal, popasian)
glimpse(mid1)

# 2. 속성 이름 변경
mid1 = rename(mid1, asian = popasian, total = poptotal)
head(mid1)

# 3-1. 파생변수(새로운 속성) 생성
mid1$pct_asian = (mid1$asian / mid1$total) * 100
head(mid1)
hist(mid1$pct_asian)          # 분포 확인: 히스토그램

# 3-2. 파생변수 생성 - 조건문 활용
mid1$degree = ifelse(mid1$pct_asian > mean(mid1$pct_asian), 'large', 'small')
head(mid1)
barplot(table(mid1$degree))   # 분포 확인: 막대그래프

# 3-3. 파생변수 생성 - dplyr 라이브러리 활용
mid1 %>% mutate(pct_asian = (asian / total) * 100)
mid1 %>% mutate(degree = ifelse(pct_asian > mean(pct_asian), 'large', 'small'))

# 4. 데이터 정렬
arrange(mid1, pct_asian)      # 오름차순 정렬

🔎 함수 정리

  1. 속성 이름 변경
    • rename(데이터, new_name = old_name, ...)
  2. 분포 확인 함수
    • hist(): 연속형 변수의 분포 확인
    • barplot() : 범주형 변수의 분포 확인
  3. 파생변수 생성
    • mutate(데이터, 생성할 열이름 = 수식): dplyr 라이브러리를 활용
  4. 데이터 정렬
    • 오름차순 정렬: arrange(데이터, 정렬기준 속성)
    • 내림차순: arrange(데이터, desc(정렬기준 속성))

2) mpg 데이터

# 문제 1: copact 차량 제조사 중 통합연비(도시 + 고속도로) 평균이 가장 나쁜 곳은?

?mpg   # 데이터 살펴보기
View(mpg)

# 명령어 작성
ggplot2::mpg %>% group_by(manufacturer) %>%     # 제조사별로 그룹화
    filter(class == 'compact') %>%                  # 특정 샘플(행) 추출
    mutate(total = (hwy + cty) / 2) %>%         # 파생변수 생성
    summarise(total_mean = mean(total)) %>%     # 요약 통계함수
    arrange(total_mean) %>%               # 내림차순 정렬
    head(3)
# 문제 2: fuel type이 'r'과 'p'인 차 중, 평균 도시연비가 가장 높은 차는 어느 제조사에서 생산되는가?

mpg %>%
    filter(fl == 'r' | fl == 'p') %>%
    group_by(manufacturer) %>%
    summarise(avg = mean(cty)) %>%
    arrange(desc(avg))
# 문제 3: 1999년에 가장 많이 생산된 차종은?

mpg %>%
    filter(year == 1999) %>%
    group_by(class) %>%
    summarise(count = n()) %>%
    arrange(desc(count))

3) avocado 데이터

# 데이터 불러오기
avocado <- read.csv('C:/Users/사용자명/본인의 작업 디렉토리/avocado.csv', header = TRUE, sep = ',')

# 데이터 확인하기
str(avocado)

저희가 사용할 속성은 다음과 같습니다.

열 이름(변수명)변수형내용
AveragePricenum아보카도 평균 가격
Total.Volumenum아보카도 총 판매량
type2개 레벨의 범주형유기농 여부
yearint연도
region54개 레벨의 범주형관측 지역

연도(year), 지역(region), 유기농 여부(type)를 기준으로, 아보카도의 총 판매량과 평균 가격을 구해보겠습니다.

# 명령어에 괄호()를 씌울 경우, 저장과 출력을 동시에 할 수 있음
(avo_smry = avocado %>%
  group_by(region, year, type) %>%
  summarise(v_avg = mean(Total.Volume), p_avg = mean(AveragePrice)))

총 판매량(v_avg)을 기준으로 데이터를 정렬해 보겠습니다.

arrange(avo_smry, desc(v_avg))

상위 4개의 샘플(TotalUS)은 총합입니다. 데이터 가공 시, 데이터셋에 중간 통계값이 포함된 경우가 있으므로 주의하는 것이 좋습니다.

# 중간 통계값을 제외한 데이터 생성
(avo_smry_x = avo_smry %>%
    filter(region != 'TotalUS') %>%
    arrange(desc(v_avg)))

# 시각화 맛보기: 연도별 아보카도 총 판매량의 변화
avo_smry_x %>%
  ggplot(aes(year, v_avg, col = type)) +
  geom_line() +
  facet_wrap(~region)
마지막으로 업데이트 된 날짜:
2022년 9월 24일