< 5 > 데이터 전처리
5-1) 특정 값을 가진 행 추출
install.packages("sqldf")
library(sqldf)
data("warpbreaks")
m1 <- sqldf("select * from warpbreaks where tension ='L'") #tension = L 인 것만 가져오기
m2 <- sqldf("select * from warpbreaks where breaks >=50") #breaks >= 50 인 것만 가져오기
5-2) dplyr 패키지 활용
install.packages("dplyr")
library(dplyr)
%>% (ctrl + shift + m)
select() : 원하는 데이터의 변수 선택
filter() : 조건에 맞는 데이터 추출
library(readxl)
exdata1 <- read.csv("C:/TEMP/Rstudy/data/아파트_실거래가.csv", stringsAsFactor = F)
View(exdata1)
exdata1 <- rename(exdata1, addr=시군구, no=번지, apt_name=단지명, size=전용면적, amt=거래금액)
exdata1 %>% select(no) #exdata1 데이터 세트에서 no 변수만 추림
exdata1 %>% select(no, addr, size) # exdata1 데이터 세트에서 no, addr, size)
exdata1 %>% select(-addr) #exdata1 데이터 세트에서 addr 제외하고 추림
exdata1 %>% filter(size >= 84)
exdata1 %>% filter(no == 464 & size >= 80)
exdata1 %>% filter(no ==464 | size >= 80)
exdata1 %>% filter(no %in% c(464,322))
arrange() : 데이터 정렬
exdata1 %>% arrange(size) # 오름차순이 기본
exdata1 %>% arrange(desc(size)) # 내림차순
join() : 데이터 결합하기1
x = data.frame(id = c(1,2,3,4,5,6,8,10),
height = c(160,171,173,162,165,144,158,167))
x
y= data.frame(id = c(5,4,1,3,7,8,9,12),
weight = c(55,73,60,57,80,70,85,90))
y
left <- join(x, y, by= 'id') # id컬럼으로 left 조인 (x에 없는 id는 삭제)
left
inner <- join(x, y, by= 'id', type='inner') # 값이 있는 것만 조인
inner
full <- join(x, y, by= 'id', type='full') # 모든 항목 조인
full
arrange(full,id)
x_1= data.frame(num1 = c(1,1,2,2,3), num2 = c('a','b','c','d','e'),
val1 = c(10,20,30,40,50))
x_1
y_1= data.frame(num1 = c(3,2,2,1,1), num2 = c('e','d','c','b','a'),
val2 = c(500,400,300,200,100))
y_1
join(x_1, y_1, by = c('num1', 'num2')) # 두개 컬럼 기준으로 조인
exam <- read.csv("c:/TEMP/Rstudy/data/csv_exam.csv")
name <- data.frame(class = c(1,2,3,4,5),
teacher = c("kim", "lee", "park", "choi", "jung"))
left_join(exam, name, by = "class") # left_join
bind_rows() : 데이터 결합하기2
group_a <- data.frame(id = c(1,2,3,4,5),
math = c(50,60,70,80,90))
group_b <- data.frame(id = c(2,4,9,10,11),
eng = c(50,60,70,80,90))
group_all <- bind_rows(group_a, group_b) # 없는 값은 NA로 두고 나옴
group_all <- rbind(group_a, group_b) # NA 값이 있으면 실행 불가
mutate() : 파생 변수 생성
mutate()는 함수에서 새로 만든 열을 같은 함수 안에서 바로 사용할 수 있는 장점
exam %>% arrange(desc(math))
exam_1 <- exam %>%
mutate(total = math + english + science,
mean = (math + english + science)/3,
con = ifelse(mean >= 65, "합격", "과락")) %>%
head
groub_by(변수, colname) : 데이터 셋 전체를 특정 열의 그룹 단위로 묶음
summarise(변수, new_colname = 함수) : 함수 값을 새 칼럼 제목으로 만들어 나타냄
exam <- read.csv("c:/TEMP/Rstudy/data/csv_exam.csv")
exam_summarise <- exam %>% summarise(mean_math = mean(math))
exam %>%
group_by(class) %>%
summarise(mean_math = mean(math),
sum_math = sum(math),
median_math = median(math),
n = n())
distinct() : 중복값 제거
exam %>% distinct(math)
sample_n() : n개의 샘플
exam %>% sample_n(5)
Q. dplyr 조합하기 연습문제
mpg 데이터 이용 분석 문제
문제) 회사별로 "suv" 자동차의 도시 및 고속도로 통합 연비 평균을 구해 내림차순으로 정렬하고, 1~5위까지 출력하기
mpg <- as.data.frame(ggplot2::mpg)
mpg_suv <- mpg %>% group_by(manufacturer) %>% # 회사별로 분리
filter(class == "suv") %>% # SUV 추출
mutate(tot = (cty + hwy)/2) %>% # 통합 연비 변수 생성
summarise(mean_tot = mean(tot)) %>% # 통합 연비 평균만 요약
arrange(desc(mean_tot)) %>% # 내림차순 정리
head(5) #1~5위까지
문제) 어떤 회사에서 "compact"차종을 가장 많이 생산하는지 알아보려고 합니다. 각 회사별 "compact 차종 수 를 내림차순으로 정렬해 출력하세요
mpg_compact <- mpg %>%
filter(class == "compact") %>% #compact 추출
group_by(manufacturer) %>% #회사별 분리
summarise(count = n()) %>% #빈도 구하기
arrange(desc(count)) # 내림차순 정렬
mpg_compact1 <- mpg %>%
group_by(manufacturer) %>% #회사별 분리
filter(class == "compact") %>% #compact 추출
summarise(count = n()) %>% #빈도 구하기
arrange(desc(count)) # 내림차순 정렬
Q1) mpg 데이터는 11개 변수로 구성되어 있습니다. 이 중 일부만 추출해서 분석에 활용하려고 합니다. mpg 데이터에서 class(자동차 종류), cty(도시 연비) 변수를 추출해 새로운데이터를 만드세요. 새로 만든 데이터의 일부를 출력해서 두 변수로만 구성되어 있는지 확인하세요.
mpg_Q1 <- mpg %>% select(class, cty)
mpg_Q1
Q2) 자동차 종류에 따라 도시 연비가 다른지 알아보려고 합니다. 앞에서 추출한 데이터를 이용해서 class(자동차 종류)가 "suv"인 자동차와 "compact"인 자동차 중 어떤 자동차의 cty(도시연비)가 더 높은지 알아보세요.
mpg_Q2 <- mpg_Q1 %>%
group_by(class) %>%
filter(class == "suv" | class == "compact") %>%
summarise(mean_cty = mean(cty))
Q3) cty와 hwy를 활용해 '합산 연비 변수'와 '평균 연비 변수'를 추가하고 '평균 연비 변수'가 가장 높은 자동차 3종의 데이터를 출력하세요.
mpg_Q3 <- mpg %>% mutate(sum = cty + hwy,
mean = sum/2) %>%
arrange(desc(mean)) %>%
head(3)
Q4) 자동차 배기량에 따라 고속도로 연비가 다른지 알아보기.
displ(배기량)이 4이하인 자동차와 5이상인 자동차 중 어떤 자동차의 hwy(고속도로 연비)가 평균적으로 더 높은지 알아보세요
mpg_Q4_1 <- mpg %>% filter(displ <= 4)
mpg_Q4_2 <- mpg %>% filter(displ >= 5)
mean(mpg_Q4_1$hwy)
mean(mpg_Q4_2$hwy)
Q5) 자동차 제조 회사에 따라 도시 연비가 다른지 알아보기.
"audi"와 "toyota" 중 어느 manufacturer(자동차 제조회사)의 cty(도시 연비)가 평균적으로 더 높은지 알아보세요
mpg_Q5 <- mpg %>%
group_by(manufacturer) %>%
filter(manufacturer == "audi"| manufacturer == "toyota") %>%
summarise(mean_cty = mean(cty))
Q6) "chevrolet", "ford", "honda" 자동차의 고속도로 연비 평균 알아보기.
이 회사들의 고속도로 연비의 평균을 추출한 뒤 hwy 전체 평균 구해보기
mpg_Q6 <- mpg %>%
group_by(manufacturer) %>%
filter(manufacturer == "chevrolet"| manufacturer == "ford" | manufacturer == "honda") %>%
summarise(mean_hwy = mean(hwy))
mean(mpg_Q6$mean_hwy)