AI Big Data/R

파생변수 만들기

retro_blue 2020. 7. 21. 18:11
반응형

파생변수(Derived Variable)기존의 변수를 변형해 만든 변수 입니다.

 

여기 이름, 국어 점수, 역사 점수로 이루어진 데이터 프레임이 있습니다.

이름 국어 점수 역사 점수
박혁거세 91 81
온조 80 56
고주몽 64 77
왕건  79 95
이성계 100 68

여기에 국어 점수와 역사 점수의 평균을 구해 '평균 점수'라는 파생변수를 만들어 보았습니다.

이름 국어 점수 역사 점수 평균
박혁거세 91 81 86
온조 80 56 68
고주몽 64 77 70.5
왕건  79 95 87
이성계 100 68 84

 

 

# R Studio에서 기존 데이터 프레임의 변수를 조합하여 파생 변수 만들기

 

변수명 앞에 데이터 프레임명을 반복해서 입력해야 합니다.

 

# mpg 데이터를 이용하여 통합 연비 변수 만들어보기

 

mpg 데이터에는 도시 연비를 의미하는 cty, 고속도로 연비를 의미하는 hwy, 두 종류의 연비 변수가 있습니다.

이 변수들을 이용하면 도로 유형별로 각각 분석할 수 있지만, 도로 유형을 통틀어 어떤 자동차 모델의 연비가 가장 높은지는 분석할 수 없습니다.

 

따라서 하나로 통합된 연비 변수를 만들어 보겠습니다.

 

total 변수가 별도의 행에 출력되었습니다.

변수 추가 후에는 파생변수에 대한 mean() 등의 함수 이용이 가능합니다.

 

 

# 조건문을 활용해 파생변수 만들기

변수 조합 뿐만 아니라 함수를 이용해서 파생변수를 만들 수도 있습니다. 

이번에는 조건에 따라 서로 다른 값을 반환하는 '조건문 함수'를 이용해 파생변수를 만드는 방법을 알아보겠습니다.

 

이번에도 mpg 데이터를 사용하겠습니다.

전체 자동차 중에서 연비 기준을 충족해 '고연비 합격 판정'을 받은 자동차가 몇 대나 되는지 알아보는 상황을 가정해 보겠습니다.

연비가 기준치를 넘기면 합격, 넘기지 못하면 불합격을 부여하도록 변수를 만들어 보겠습니다.

 

 

1. 기준값 정하기

중앙값은 20.5, 평균은 20.15 입니다.

hist(mpg$total) # 히스토그램 생성

x축은 5 간격으로 total 변수의 값이 표현, y축에는 각 계급 구간의 빈도가 표현되어 있습니다.

total 연비의 평균은 20.15, 중앙값은 20.5.

20~25 사이에 해당하는 자동차 모델이 가장 많음.

대부분 25 이하이며, 25를 넘기는 자동차는 많지 않음.

 

연비가 20을 넘기는 자동차에 고연비 합격 판정을 내리고, 넘기지 못하면 불합격으로 분류된 변수를 만들어 보겠습니다.

 

 

2. 합격 판정 변수 만들기

조건문(Conditional Statments) 함수 : 조건에 따라 서로 다른 값을 반환하는 함수

 

ifelse()는 가장 많이 사용하는 조건문 함수 입니다.

조건, 조건에 맞는 경우에 부여할 값, 조건에 맞지 않을 때 부여할 값 순으로 코드를 작성합니다.

 

ifelse ( mpg$total >= 20, "pass", "fail" )

 

① 조건 : mpg$total >= 20

② 조건 성립 : pass

③ 조건 미성립 : fail

 

연비 20 이상일 경우 pass, 미달일 경우 fail

3. 빈도표를 통해 합격 판정 자동차의 개수 확인하기

 

table()을 이용해 빈도표를 만들어 합격한 자동차와 불합격한 자동차가 각각 몇 대인지 확인해 보겠습니다.

 

합격 판정을 받은 차랑 : 128대 / 불합격 판정을 받은 차량 : 106대

 

 

4. 막대 그래프로 빈도 표현하기

ggplot2 패키지에 내장된 qplot()은 값의 개수를 막대의 길이로 표현하는 기능을 합니다.

 

 

 

 

 

# 중첩 조건문 활용하기

 

이번에는 합격, 불합격이 아니라 A, B, C 세 종류의 연비 등급으로 분류하는 변수를 만들어 보겠습니다.

total 이 30 이상이면 A, 20~29는 B, 20 미만이면 C등급으로 분류하겠습니다.

 

등급 기준
A 30 이상
B 20~29
C 20 미만

 

세 가지 이상의 범주로 값을 부여하려면 ifelse() 안에 다시 ifelse()를 넣는 형식으로 조건문을 중첩해 작성해야 합니다.

이렇게 여러 개의 조건문을 중첩한 코드를 '중첩 조건문' 이라고 합니다.

 

이 부분은 엑셀의 if 함수와 비슷합니다.

 

첫 번째 조건에 맞지 않으면 두 번째 ifelse()를 실행해서 조건이 맞는지, 맞지 않는지에 따라 실행됩니다.

데이터를 출력하면 test 변수 오른쪽에 total 변수의 값을 기준으로 생성된 grade 변수를 확인할 수 있습니다.

 

이번엔 범주의 수를 하나 늘려 만들어보겠습니다.

 

 

 

## 연습문제

 

ggplot2 패키지에는 미국 동북중부 437개 지역의 인구통계 정보를 담은 midwest라는 데이터가 들어 있습니다.

midwest 데이터를 사용해 데이터 분석 문제를 풀어보시오.

 

Q1. ggplot2의 midwest 데이터를 데이터 프레임 형태로 불러온 다음 데이터의 특징을 파악하세요.

 

Q2. poptotal (전체인구) 변수를 total로, popasian (아시아인구) 변수를 asian 으로 수정하세요.

 

 

Q3. total, asian 변수를 이용해 '전체 인구 대비 아시아 인구 백분율' 파생변수를 만들고, 히스토그램을 만들어 도시들이 어떻게 분포하는지 살펴보세요.

 

Q4. 아시아 인구 백분율 전체 평균을 구하고, 평균을 초과하면 "large", 그 외에는 "small"을 부여하는 파생변수를 만들어 보세요.

 

Q5. "large"와 "small"에 해당하는 지역이 얼마나 되는지 빈도표와 빈도 막대 그래프를 만들어 확인해 보세요.

 

 

 

 

 


[참고자료]

(Book) Do it! 쉽게 배우는 R 데이터 분석 - 이지스퍼블리싱

Do it! 쉽게 배우는 R 데이터 분석
국내도서
저자 : 김영우
출판 : 이지스퍼블리싱 2017.07.20
상세보기

 

반응형

'AI Big Data > R' 카테고리의 다른 글

필요한 변수만 추출하기  (0) 2020.07.24
데이터 전처리  (0) 2020.07.22
변수명 바꾸기  (0) 2020.07.21
데이터 파악하기  (0) 2020.07.20
데이터 프레임 이해하기  (0) 2020.07.19