데이터분석 with R_데이터 전처리

김유림·2021년 9월 5일
0

R

목록 보기
3/5
post-thumbnail

영원히 고통 받는 INFP의 메모장입니다
> feat. 국비교육

백신 맞고 잠시 지쳤던 이번주,,⭐️ 오늘 하루 달려본다 R ~ !!!
쉽게 배우는 R 데이터 분석 교재로 복습합니다

🔍 조건에 맞는 데이터 찾기

which(조건)
x <- c(1,2,3,4,5)
which(x %% 2 == 0) # 짝수의 '위치값 출력'
x[which(x %% 2 == 0)] # 짝수의 '값 자체 출력'
# x[which가 반환한 위치 값이 들어가게 됨] -> 값을 출력!
---
a <- array(11:20, dim=c(3,4))
which(a %% 2 == 0, arr.ind = TRUE)
# 위치 값을 인덱스 번호 형태가 아닌 행 • 열 형태로 반환
# 행렬과 배열에서만 적용할 수 있다
---
which.max() / which.min()
최댓값의 인덱스 / 최솟값의 인덱스

📌 데이터 구조

nrow() 함수 -> 행의 개수를 확인하는 함수
ncol() 함수 -> 열의 개수를 확인하는 함수
---
# 데이터 변환하는 함수
as.vector() / as.matrix() / as.list() / as.data.frame()
## 리스트를 벡터로 변환할 때는 unlist() 를 사용한다
---
# 열 이름 변경
names(데이터셋) <- c(이름s)
colnames(데이터셋) <- c(이름s)

dplyr 패키지

dplyr 패키지에는 전처리 작업에 유용한 함수가 많이 제공된다

filter() : 행 추출
select() : 열 추출
arrange() : 정렬
mutate() : 변수 추가
summarise() : 통계치 산출
group_by() : 집단별로 나누기
left_join() : 데이터 열 합치기
bind_rows() : 데이터 행 합치기

📌 dplyr 활용 - 행

쉽게 배우는 R 데이터 분석 교재로 복습합니다

# 교재에서 제공하는 데이터셋을 활용했습니다
exam <- read.csv("csv_exam.csv")
exam %>% filter(class==1)
exam %>% filter(class !=3)
# ctrl + shift + M 로 파이프 연산자를 쉽게 입력할 수 있다

exam %>% filter(math > 50)
# 수학 점수가 50점 이상인 행만 추출
# %>% 연산자로 연결되기 때문에 exam$math 와 같이 쓰지 않아도 된다

exam %>% filter(class == 1 & math >= 50)
exam %>% filter(math >= 90 | english >= 90)
# 조건이 여러 개인 경우 & 이나 | 사용한다

exam %>% filter(class %in% c(1,3,5))
# %in% 과 c() 함수를 사용하는 방법도 있다

class1 <- exam %>% filter(class == 1)
mean(class1$math)
class2 <- exam %>% filter(class == 2)
mean(class2$math)
# filter 함수를 통해 추출한 값을 변수에 넣으면
# 조건에 맞는 값만 담고 있는 변수를 만들 수 있다

📌dplyr 활용 - 열

# select() 함수 
exam %>% select(math)
exam %>% select(class,math,english)

# 변수 제외하기
exam %>% select(-math)
# math를 제외한 데이터를 추출

📌dplyr 활용 - 조합

exam %>% filter(class == 1) %>% select(english)
# class 가 1인 학생들의 영어 성적만을 추출한다

exam %>% 
  select(id,math) %>% 
  head
# id, math 열 데이터의 앞 6개만 추출한다

exam %>% arrange(math)
exam %>% arrange(desc(math))
# 정렬하기
# desc 는 내림차순

📌dplyr 활용 - 파생변수

exam %>% mutate(total = math + english + science) %>% 
  arrange(total) %>% head
# mutate 함수 통해 파생변수 추출
# 기존 데이터셋에는 영향X
# 변수에 값을 넣어야한다

📌dplyr 활용 - 그룹

exam %>% 
  group_by(class) %>% 
  summarise(mean_math = mean(math))
# 반별 수학과목의 평균

exam %>% 
  group_by(class) %>% 
  summarise(mean_math = mean(math),
            sum_math = sum(math),
            median_math = median(math),
            n = n())
# 그룹별 요약 통계량을 한 번에 볼 수 있다
# n() 은 빈도를 나타내는 함수 -> 각 그룹 내 데이터 수를 알 수 있다

mpg %>% 
  group_by(manufacturer,drv) %>% 
  summarise(mean_cty = mean(cty)) %>% 
  head(10)
# 제조사 & 구동 방식별 cty 평균 10개 출력

📌dplyr 활용 - 데이터 합치기

test1 <- data.frame(id = c(1,2,3,4,5),
                    midterm = c(60,80,70,90,85))

test2 <- data.frame(id = c(1,2,3,4,5),
                    final = c(70,83,65,95,80))

total <- left_join(test1,test2,by='id')
# test1 과 test2가 공통으로 갖고 있는 id 를 기준으로 열 합치기

group_a <- data.frame(id = c(1,2,3,4,5),
                      test = c(60,80,70,90,85))
group_b <- data.frame(id = c(6,7,8,9,10),
                      test = c(70,83,65,95,80))

group_all <- bind_rows(group_a,group_b)
# 같은 데이터 구조를 갖고 있는 group_a 와 group_b 행 합치기
# 만약 group_b 의 열 이름이 group_a와 다르다면 rename 후 합친다
profile
Hallo welt!

0개의 댓글