3. 데이터 가공 > 3-3. 연습문제
연습문제
이번 장에서는 %>%
연산자를 통한 데이터 가공을 연습해보겠습니다.
코드를 따라 입력하면서 익숙해지시길 바랍니다.
# 사전 준비
install.packages('ggplot2')
library('ggplot2')
library('dplyr')
# 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) # 오름차순 정렬
🔎 함수 정리
- 속성 이름 변경
rename(데이터, new_name = old_name, ...)
- 분포 확인 함수
hist()
: 연속형 변수의 분포 확인barplot()
: 범주형 변수의 분포 확인- 파생변수 생성
mutate(데이터, 생성할 열이름 = 수식)
: dplyr 라이브러리를 활용- 데이터 정렬
- 오름차순 정렬:
arrange(데이터, 정렬기준 속성)
- 내림차순:
arrange(데이터, desc(정렬기준 속성))
# 문제 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))
# 데이터 불러오기
avocado <- read.csv('C:/Users/사용자명/본인의 작업 디렉토리/avocado.csv', header = TRUE, sep = ',')
# 데이터 확인하기
str(avocado)
저희가 사용할 속성은 다음과 같습니다.
열 이름(변수명) | 변수형 | 내용 |
---|---|---|
AveragePrice | num | 아보카도 평균 가격 |
Total.Volume | num | 아보카도 총 판매량 |
type | 2개 레벨의 범주형 | 유기농 여부 |
year | int | 연도 |
region | 54개 레벨의 범주형 | 관측 지역 |
연도(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)