-
R 데이터 분석의 기초 2. 데이터 수정하기 / 변수 이름 바꾸기/ 파생 변수 생성/ 조건문 ifelse 활용 (예제 있음)머신러닝 with R 2019. 7. 16. 16:12
데이터 분석을 하는 데 있어서 가장 많은 시간을 투자해야 하는 부분이 데이터를 분석에 필요한 형태로 만드는 '데이터 전처리' 과정이다. R언어는 이러한 데이터 전처리를 위한 다양한 패키지를 제공하고 있는데,
그중, 데이터 프레임을 다루는 dplyr 패키지가 있다.
우선 dplyr 을 설치하고 로드한 후 데이터 프레임 내의 변수를 수정해보려고 한다.
ggplot2 패키지 안에 있는 mpg 데이터의 변수명은 긴 단어를 짧게 줄인 축약어로 되어 있다.
cty 변수는 도시 연비, hwy 변수는 고속도로 연비를 의미하는데, 이 변수명을 이해하기 쉬운 단어로 바꿔보자.
[데이터 변수 이름 바꾸기]
1) ggplot2 패키지의 mpg데이터의 raw데이터를 손상시키지 않고 사용할 수 있도록 불러온 뒤 복사본을 만든다.
2) 복사본 데이터를 이용해 cty는 city 라는 변수로, hwy는 highway라는 변수로 이름을 수정한다.
3) 데이터의 일부를 출력해서 변수명이 올바르게 바뀌었는지 확인한다.
#패키지 설치 및 로드 install.packages("dplyr") library(dplyr) #mpg 데이터 복사 mpg <- as.data.frame(ggplot2::mpg) mpg_new <- mpg #변수명 변경 mpg_new <- rename(mpg_new, city = cty) mpg_new <- rename(mpg_new, highway = hwy) #데이터 앞부분 출력 head(mpg_new)
[파생변수 만들기]
파생변수란, 기존의 변수를 조합하여 새로운 변수를 만들어 내는 것을 의미한다. 예를 들어 어떤 학생의 영어 점수와 수학 점수가 있을 때, 두 점수를 사용하여 평균 점수라는 새로운 변수를 만들 수 있는데, 이 변수를 파생변수라고 한다.
다음의 간단한 코드를 보면 더 빠르게 이해할 수 있다.
df <- data.frame(var1 = c(4,3,8), var2 = c(2,6,1)) df df$var_sum <- df$var1 + df$var2 df df$var_mean <- (df$var1 + df$var2)/2 df
df라는 데이터 프래임 내의 기존의 var1, var2 변수를 가지고 var_sum과 var_mean이라는 새로운 파생 변수를 만든 것을 확인할 수 있다.
이제 좀 더 심화하여 mpg 데이터를 이용해 파생변수를 만들어 보자.
mpg의 도시 연비(cty)와 고속도로 연비(hwy) 를 합하여 통합연비(total)라는 새로운 변수를 만들 수 있다.
mpg$total <- (mpg$cty + mpg$hwy)/2 head(mpg) mean(mpg$total)
통합연비를 활용하여 합격, 불합격을 판단하는 파생변수를 만들어보자.
합격과 불합격을 판정하기 위해서는 어떤 기준값이 있어야 한다. 이 기준값은 total 변수의 요약 통계량과 히스토그램을 통해 대략 정할 수 있다.
위 결과로부터 기준값을 20으로 정해 20 이상이면 합격, 20 미만이면 불합격으로 판정해 test라는 변수에 저장해보자.
이때 조건문을 사용하는데 R에서는 ifelse( )라는 함수를 사용한다.
ifelse(mpg$total >=20, "pass", "fail") #20이상이면 pass, 그렇지 않으면 fail head(mpg, 20) table(mpg$test) #연비 합격 빈도표 생성 table(mpg$test, useNA = "ifany") table(mpg$test, useNA = "always") library(ggplot2) qplot(mpg$test) #연비 합격 빈도 막대 그래프 생성
table( ) 함수에서 NA 값은 기본적으로 표시해 주지 않는다. 하지만 이때 옵션을 달아 NA 값을 표시해 줄 수 있는데, useNA = "ifany"는 NA 값이 있으면 표시해주고, 없으면 표시해 주지 않는다. 하지만 "always"일 경우에는 NA 값이 없어도 0으로 항상 표시해준다. NA 값이 없는데 굳이 표시해줄 이유는 없으므로 ifany를 주로 사용한다.
다른 언어에서와 마찬가지로 R에서도 중첩으로 조건문을 사용할 수 있다. 이를 활용하여 통합 연비의 등급 변수를 만들어 보자.
total 연비가 30 이상이면 A등급, 20~29 이면 B 등급, 그 외 (20 미만)이면 C 등급으로 매겨 보자.
mpg$grade <- ifelse(mpg$total >= 30, "A", ifelse(mpg$total >= 20, "B", "C")) tail(mpg, 20) table(mpg$grade, useNA = "ifany") qplot(mpg$grade)
[분석 도전!]
ggplot2 패키지에는 미국 동북중부 437개 지역의 인구통계 정보를 담은 midwset라는 데이터가 포함되어 있다.
이 데이터를 활용하여 데이터 분석 문제를 해결해 보자.
1) ggplot2의 midwset데이터를 데이터 프레임 형태로 불러와서 데이터의 특성을 파악해라.
midwest <- as.data.frame(ggplot2::midwest) summary(midwest) head(midwest) tail(midwest) dim(midwest) str(midwest) View(midwest)
2) poptotal (전체인구)을 total로, popasian (아시아 인구)을 asian으로 변수명을 수정해보라.
library(dplyr) midwest_new <- midwest midwest_new <- rename(midwest_new, total = poptotal) midwest_new <- rename(midwest_new, asian = popasian) head(midwest_new, 3)
3) total, asian 변수를 활용해 '전체 인구 대비 아시아 인구 백분율' 파생변수를 만들고, 히스토그램을 만들어 도시들이 어떻게 분포하는지 살펴보라.
midwest_new$ratio <- (midwest_new$asian/midwest_new$total)*100 hist(midwest_new$ratio)
4) 아시아 인구 백분율 전체 평균을 구하고 평균을 초과하면 "large", 그 외에는 "small"을 부여하는 파생 변수를 만들어 보시오.
mean(midwest_new$ratio) midwest_new$group <- ifelse(midwest_new$ratio>0.4872462, "large", "small")
5) large와 small에 해당하는 지역이 얼마나 되는지 빈도 표와 빈도 막대그래프를 만들어 확인해 보라.
table(midwest_new$group) library(ggplot2) qplot(midwest_new$group)
반응형'머신러닝 with R' 카테고리의 다른 글
자유자재로 데이터 가공하기2. 데이터 전처리/ dplyr 패키지/mpg 데이터 심화 활용 (0) 2019.07.18 자유자재로 데이터 가공하기 1. 데이터 전처리 dplyr 패키지 (0) 2019.07.17 R 데이터 분석의 기초 1. 데이터 파악하기 - head/tail/dim/View/str/summary (0) 2019.07.16 R 데이터 프레임 (Data Frame) / 엑셀, csv 데이터 불러오기 / 데이터 저장하기 / RData (.rda) 파일 (0) 2019.07.01 데이터 분석을 위한 연장 3 - 패키지(packages) (0) 2019.06.30