R 데이터 분석 실습 - mtcars 데이터, mpg 데이터, ggplot2 패키지
R에 기본 내장되어 있는 mtcars 데이터를 분석해보자.
실습에 사용할 mtcars는 1974년 자동차 트렌드에서 발췌한 내용으로
연비와 관련된 변수 11개와 자동차 모델 32 종에 대한 정보를 가지고 있습니다.
1. 데이터의 기초분석을 수행해보세요. View() 창, str() 속성, dim(), ls() 등
View(mtcars)
str(mtcars)
dim(mtcars)
ls(mtcars)
2. 데이터 분석을 위해 dplyr 패키지를 설치하고 로드해보세요.
install.packages("dplyr")
library(dplyr)
3. mtcars 데이터에서 cyl(실린더 개수) 값이 4인 자동차만 추출해보세요.
mtcars %>% filter(cyl == 4)
# select 아님, 행 추출
filter(mtcars, cyl == 4)
4. mtcars 데이터에서 cyl 값이 6보다 크거나 같고(이상), mpg(연비) 값이 20보다 큰 (초과) 행만 추출해보세요.
mtcars %>% filter(cyl >= 6 & mpg >=20)
filter(mtcars, cyl >= 6 & mpg >=20)
5. mtcars 데이터에 wt(차량의 무게)를 기준을 오름차순 정렬한 후 상위 데이터만 출력해보세요.
mtcars %>% arrange(wt) %>% head
head(arrange(mtcars,wt)
6. mtcars 데이터에서 mpg(연비)로 오름차순 정렬 후 wt로 내림차순 정렬하고 상위 데이터만 출력해보세요.
mtcars %>% arrange(mpg,desc(wt)) %>% head
7. mtcars 데이터에서 am(변속기 구분)과 gear(기어 개수) 열의 상위 데이터만 추출해보세요.
# 열의 상위 데이터 -> select
mtcars %>% select(am,gear) %>% head
head(select(mtcars, am, gear)
8. mtcars 데이터에 year 라는 생산 연도 열을 추가하고, 일괄적으로 "1974"를 추가해 보세요.
mtcars <- mtcars %>% mutate(year = "1974")
패키지를 사용한 데이터 가공 실습
ggplot2 패키지에는 미국 동북중북 437개 지역의 인구 통계 정보를 담은
midwest 라는 데이터가 들어있다.
midwest 데이터를 사용해 데이터 분석을 해보자.
1. ggplot2 의 midwest 데이터를 데이터 프레임 형태로 불러오세요.
install.packages("ggplot2")
library(ggplot2)
str(ggplot2)
midwest2 <- data.frame(ggplot2::midwest)
str(midwest2)
View(midwest2)
2. poptotal (전체 인구), popasian (아시아 인구) 변수를 이용해 '전체 인구 대비 아시아 인구 백분율' 파생 변수를 만들고
히스토그램을 만들어 도시들이 어떻게 분포하는지 살펴보자.
(아시아 인구 / 전체 인구)*100 = 백분율
midwest2 <- midwest2 %>% mutate(per1 = (popasian/poptotal)*100)
View(midwest2)
hist(midwest2)
3. 아시아 인구 백분율 전체 평균을 구하고, 평균을 초과하면 “large”, 그 외에는 “small”을 부여하는 파생변수를 만들어 보세요.
mean(midwest2$per1)
midwest2 <- midwest2 %>% mutate(group = ifelse(per1 > 0.4872462, "large", "small"))
View(midwest2)
4. “large”와 “small”에 해당하는 지역에 얼마나 되는지 빈도표와 빈도 막대 그래프를 만들어 확인해보자.
빈도표 = table, 빈도 막대 그래프 = qplot
table(midswest2$group)
qplot(midwest2$group)
5. popadults 는 해당 지역의 성인 인구, poptotal 은 전체 인구를 나타낸다.
midwest 데이터에 '전체 인구 대비 미성년 인구 백분율' 변수를 추가해보자.
(poptotal - popadults) / poptotal *100
midwest <- midwest %>% mutate2(per2 = (poptotal - popadults) / poptotal * 100)
6. 미성년 인구 백분율이 가장 높은 상위 5개 country (지역)의 미성년 인구 백분율을 출력해보자.
midwest2 %>% arrange(desc(per2)) %>% select(country, per2) %>% head(5)
7. 분류표의 기준에 따라 미성년 비율 등급 변수를 추가하고, 각 등급에 몇개의 지역이 있는지 알아보자.
분류 기준
large 40% 이상
middle 30~40% 미만
small 30% 미만
midwest <- midwest2 %>% mutate(group2 = ifelse(per2 >= 40, "large", ifelse(per2 >=30, "middle",
small")))
View(midwest2)
table(midwest$group2)
qplot(midwest$group2)
mpg 데이터
1. ggplo2 의 mpg 데이터를 데이터 프레임 형태로 불러오세요.
mpg2 <- as.data.frame(ggplot2::mpg)
str(mpg2)
2. 자동차의 배기량에 따라 고속도로 연비가 다른지 알아보려고 한다.
dispal( 배기량 ) 이 4이하인 자동차와 5이상인 자동차 중 어떤 자동차의 hwy( 고속도로 연비 )가 평균적으로 더 높은지
알아보자.
(기말고사 문제 주의)
# dispal(배기량)과 hwy(고속도로 연비)를 봐야하므로 select 대신 filter 사용
mpg_a <- mpg2 %>% filter(dispal <= 4)
View(mpg_a)
mpg_b <- mpg2 %>% filter(dispal >= 5)
View(mpg_b)
mean(mpg_a$hwy)
mean(mpg_b$hwy)
3. 자동차 제조회사에 따라 도시 연비가 다른지 알아보려고 한다.
"audi" 와 "toyota" 중 어느 제조회사의 cty( 도시연비) 가 평균적으로 높은지 알아보자.
mpg_c <- mpg2 %>% filter(manufacture == "audi")
mpg_d <- mpg2 %>% filter(manufacture == "toyota")
mean(mpg_c2$cty)
mean(mpg_d2%cty)
4. mpg2 데이터는 11개의 변수로 구성되어 있다. 이 중 일부만 추출해 활용하려고 한다.
mpg2 데이터의 class(자동차 종류), cty(도시연비) 변수를 추출해 새로운 데이터를 만드세요.
df <-mpg2 %>% select(class, cty)
View(df)
5. 자동차의 종류에 따라 도시 연비가 다른지 알아보려고 한다.
앞에서 추출한 데이터를 이용해 class(자동차 종류) 가 "suv" 인 자동차와 "compact"인 자동차 중 어떤 자동차의 cty가
더 높은지 알아보자.
df_suv <- df %>% filter(class == "suv")
df_compact %>% filter(class == "compact")
mean(df_suv$cty)
mean(df_compact$cty)
6. cty와 hwy를 더한 '합산연비' 변수를 추가하세요 (mutate 사용)
mpg2 <- mpg2 %>% mutate(tot = cty + hwy)
View(mpg2)
7. 앞에서 만든 합산연비 변수를 2로 나눠 '평균연비' 변수를 추가하세요
mpg2 <- mpg2 %>% mutate(tot_m = (cty + hyw)/2)
View(mpg2)
8. '평균연비' 변수가 가장 큰 자동차 3종의 데이터를 출력하세요.
mpg2 %>% arrange(desc(tot_m)) %>% head(3)
9. 앞에 6~8번 문제를 해결할 수 있는 하나로 연결된 dplyr 구문을 만들어보세요
mpg2 <- mpg2 %>% mutate (tot = cty + hwy, tot_m = tot/2) %>% arrange(desc(tot_m) %>% head(3)