Rstudio(5) 데이터 전처리

hyukstory 혁스토리·2020년 8월 22일
0

Rstudio

목록 보기
7/16

< 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)
profile
문돌이의 고군분투 개발 공부

0개의 댓글