06-1 데이터 전처리 - 원하는 형태로 데이터 가공하기
dplyr 패키지 ( 전처리 작업에 가장 많이 사용 )
125p dply함수
dplyr함수 | 기능 |
filter() | 행 추출 |
select() | 열 추출 |
arrange() | 정렬 |
mutate() | 변수 추가 |
summarise() | 통계치 산출 |
group_by() | 집단별로 나누기 |
left_join() | 데이터 합치기(열) |
bind_join() | 데이터 합치기(행) |
126p - 132 p - 조건에 맞는 데이터 추출하기
library(dplyr) #라이브러리 할당
exam <- read.csv("D:/rclass/csv_exam.csv") #데이터 불러오기
exam
#단축키 [ ctrl + shift + m ] = [ %>% ]
exam %>% filter(class == 1) # dplyr패키지는 %>% 이용해서 함수 사용
# class가 1인 행만 추출
exam %>% filter(class==2) # class가 2인 행만 추출
exam %>% filter(class !=1 ) # 1반이 아닌경우
exam %>% filter(class != 3) # 3반이 아닌 경우
exam %>% filter(math > 50) # 수학 점수가 50점을 초과한 경우
exam %>% filter(math < 50) # 수학 점수가 50점 미만인 경우
exam %>% filter(english >= 80) # 영어 점수가 80점 이상인 경우
exam %>% filter(english <= 80) # 영어 점수가 80점 이하인 경우
exam %>% filter(class ==1 & math >= 50) # 1반이면서 수학점수가 50점 이상인 경우
exam %>% filter(class ==2 & english >= 80) # 2반이면서 영어점수가 80점 이상인 경우
exam %>% filter(math >= 90 | english >= 90) # 수학 점수가 90점 이상이거나 영어점수가 90점 이상인 경우
exam %>% filter(english < 90 | science < 50) # 영어 점수가 90점 미만이거나 과학 점수가 50점 미만인 경우
exam %>% filter(class == 1 | class == 3 | class == 5) # 1반, 3반, 5반에 해당하면 추출
exam %>% filter(class %in% c(1,3,5)) # 1반, 3반, 5반에 해당하면 추출
- 데이터명 %>% filter ( 변수명 조건 ) : 조건에 맞는 행 추출
132p - 138p 추출하기
# 추출한 행으로 데이터 만들기
class1 <- exam %>% filter(class == 1) # class가 1인 행 추출, class1에 할당
class2 <- exam %>% filter(class == 2) # class가 2인 행 추출, class2에 할당
mean(class1$math)
mean(class2$math)
#필요한 변수만 추출하기
exam %>% select(math)
exam %>% select(english)
exam %>% select(class, math, english)
exam %>% select(-math)
exam %>% select(-math, -english)
# dplyr 함수 조합하기
# filter()와 select() 조합하기
exam %>% filter(class == 1) %>% select(english)
# 가독성 있게 줄 바꾸기
exam %>%
filter(class == 1) %>% # class가 1인 행 추출
select(english) # english 추출
# 일부만 추출하기
exam %>%
select(id, math) %>% # id, math 추출
head() # 앞부분 6행까지 추출
exam %>%
select(id, math) %>% # id, math 추출
head(10) # 앞부분 10행까지 추출
- 데이터명 %>% select ( 변수명 ) : 필요한 변수 추출
- 데이터명 %>% select ( -변수명 ) : 불필요한 변수 제거
139p - 141p 순서대로 정렬하기
# 순서대로 정렬하기
exam %>% arrange(math) # math 오름차순 정렬
exam %>% arrange(desc(math)) # math 내림차순 정렬
exam %>% arrange(class, math) # class 및 math 오름차순 정렬
- 데이터명 %>% arrange ( 변수명 ) : 오름차순 정렬
142p - 144p 파생변수 추가하기
# 파생변수 추가하기
exam %>%
mutate(total = math + english + science) %>% # 총합 변수 추가
head # 일부 추출
exam %>%
mutate(total = math + english + science) %>% # 총합 변수 추가
mean = (math + english + science)/3 %>% # 총평균 변수 추가
head # 일부 추출
exam %>%
mutate(test = ifelse(science >= 60, "pass", "fail")) %>%
head
exam %>%
mutate(total = math + english + science) %>%
arrange(total) %>%
head
- mutate : 파생변수 만드는 함수
145p - 148p 집단별로 요약하기
summarise()에 자주 사용하는 요약 통계량 함수
- mean() 평균
- sd() 표준편차
- sum() 합계
- median() 중앙값
- min() 최솟값
- max() 최댓값
- n() 빈도
# 집단별로 요약하기
exam %>% summarise(mean_math = mean(math))
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())
- group_by() : 집단 나누기
예제
회사별로 "suv" 자동차의 도시 및 고속도로 통합 연비 평균을 구해 내림차순으로 정렬하고, 1~5위까지 출력하기
- 회사별로 분리 group_by()
- suv 추출 filter()
- 통합 연비 변수 생성 mutate()
- 통합 연비 평균 산출 summarise()
- 내림차순 정렬 arrange()
- 1~5까지 출력 head()
# 회사별로 "suv" 자동차의 도시 및 고속도로 통합 연비 평균을 구해 내림차순으로 정렬하고, 1~5위까지 출력하기
mpg %>%
group_by(manufacturer) %>%
filter(class == "suv") %>%
mutate(tot = (cty+hwy)/2) %>%
summarise(mean_tot = mean(tot)) %>%
arrange(desc(mean_tot)) %>%
head(5)
151p-157p 데이터 합치기
# 데이터 합치기
rm(list = ls()) # 다 지우기기
# 중간고사 데이터 생성
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))
test1
test2
ls()
str(test2)
left_join(test1, test2, by="id") # id를 기준으로 합치기
name <- data.frame(class = c(1, 2, 3, 4, 5),
teacher = c("kim", "lee", "park", "choi", "jung"))
name
exam_new <- left_join(exam, name, by = "class") # class를 기준으로 exam_new에 할당
exam
# 세로로 합치기
# 학생 1-5 시험 데이터 생성
group_a <- data.frame(id = c(1, 2, 3, 4, 5),
test = c(60, 80, 70, 90, 85))
# 학생 6-10 시험 데이터 생성
group_b <- data.frame(id = c(6, 7, 8, 9, 10),
test = c(70, 83, 65, 95, 80))
group_a
group_b
group_all <- bind_rows(group_a, group_b)
group_all
- left_join() : by를 기준으로 합치기
7장 데이터 정제
162p - 168p결측치 정제하기
# 결측치 정제하기
df <- data.frame(sex = c("M", "F", NA, "M", "F"),
score = c(5, 4, 3, 4, NA))
df
is.na(df) # 결측치 확인 (결측치면 TRUE 관측치면 FALSE 출력)
table(is.na(df)) # 결측치 빈도 출력 (TRUE와 FALSE의 갯수 출력)
table(is.na(df$sex)) # sex 결측치 빈도 출력
table(is.na(df$score)) # score 결측치 빈도 출력
mean(df$score) # 평균 산출
sum(df$score) # 합계 산출
library(dplyr)
df %>% filter(is.na(score)) # score가 NA인 데이터만 출력
df %>% filter(!is.na(score)) # score 결측치 제거
df_nomiss <- df %>% filter(!is.na(score)) # score 결측치 제거
mean(df_nomiss$score) # score 평균 산출
sum(df_nomiss$score) # score 합계 산출
df_nomiss <- df %>% filter(!is.na(score) & ! is.na(sex)) # score,sex 결측치 제거
df_nomiss # 출력
# 결측치가 하나라도 있으면 제거하기
df_nomiss2 <- na.omit(df) # 모든 변수에 결측치 없는 데이터 추출
df_nomiss2 # 출력
# 함수의 결측치 제외기능 사용하기
mean(df$score, na.rm = T) # 결측치 제외하고 평균 산출
sum(df$score, na.rm = T) # 결측치 제외하고 합계 산출
exam <- read.csv("D:/rclass/csv_exam.csv") # 데이터 불러오기
exam[c(3,8,15), "math"] <- NA # 3, 8, 15행의 math에 NA 할당
exam %>% summarise(mean_math = mean(math)) # math 평균 산출
# math 결측치 제외하고 평균 산출
exam %>% summarise(mean_math = mean(math, na.rm = T))
exam %>% summarise(mean_math = mean(math, na.rm = T), # 평균 산출
sum_math = sum(math, na.rm = T), # 합계 산출
median_math = median(math, na.rm = T)) # 중앙값 산출
- is.na() : 결측치 유무 (TRUE, FALSE)
- df_nomiss <- df %>% filter( ! is.na (score) & ! is.na (sex)) : score,sex 결측치 제거
- na.omit() : 모든 변수에 결측치 없는 데이터 행만 추출 ( 필요한 데이터도 지워질 수 있어서 조심 )
- 옵션(na.rm = T) : 결측치 제외
169p - 170p 평균값으로 결측치 대체하기
# 평균값으로 결측치 대체하기
mean(exam$math, na.rm = T ) # 결측치 제외하고 math 평균 산출 # 55출력
exam$math <- ifelse(is.na(exam$math), 55, exam$math) # math가 NA면 55로 대체
table(is.na(exam$math)) # 결측치 빈도표 생성
mean(exam$math)
- 결측치 대체법 1 : 평균을 구해서 결측치를 평균으로 대체 ( 결측치가 많은 경우 )
'인공지능 > R' 카테고리의 다른 글
R - 지도시각화 (0) | 2021.06.08 |
---|---|
R - 인터렉티브 (0) | 2021.06.08 |
R (4) (0) | 2021.06.04 |
R 데이터프레임, 데이터 분석 기초 (0) | 2021.06.02 |
R 설치, 변수, 함수, 패키지 이해 (0) | 2021.06.01 |