본문 바로가기

좋아하는 것_매직IT/25.R

R언어에서 파생변수 만드는 방법 (feat. 리워드 비율 정하는 한가지 방법)

반응형

블로그 목적 

 - R언어에서 파생변수 만드는 방법을 공유한다.

블로그 요약

- 하나, 파생변수란 무엇인지에 대해서 알아본다.
- 둘, R언어에서 파생변수를 만드는 방법을 알아본다.
- 셋, 생성한 파생변수를 통해서 데이터를 분석및 이용해 본다.


블로그 상세 내용

우선 파생변수란 무엇일까요?
 - 파생변수(Derived Variable)라는 개념은 기존의 변수를 변형해 만드는 변수를 말하는데요...

갑자기 어느날, 우리에게 어떤 수치값을 가지고 분석해야하는 미션이 갑자기 주어져서, 그 부분을 생각해 봐야 한다고 가정해 보시죠?
"아 몰랑!! 생각하기 시로!" 하며...
 - 그냥 아무런 고민과 생각없이 나에게 주어진 변수 값을 가지고 해당 수치값을 분석하는 방법을 택할 수 있습니다. 

하지만, 우리는 모든 일들을 생각할때, 자신의 가지고 있는 편견과 고정관념을 저 멀리!! 버려야 하는데요...
(가능한 조금더 유연한 생각을 해야 되겠죠..하지만, 인간이다 보니 저도 잘 안될때가 있습니다;;; 고정관념을 버렸다고 생각했으나, 바로 뒤에 있는;;; )

아무튼..다시말해서, 유연한 생각을 통한 우리가 가진 사고의 틀을 깨게 된다면요...아래와 같은 2가지 방법도 우리는 생각할 수 있는데요..
 - 첫번째, 특정 함수를 적용해서 새변수를 만들어 분석하거나 이용한다.
 - 두번째, 기존 변수를 조합해서 새변수를 만들어 분석하거나 이용한다. 

즉, 위에서 설명한 "파생변수"를 사용해서 새로운 시각에서 해당 변수와 데이터를 분석하는 것이죠...
T.hub 랭킹을 예를 들어 보겠습니다. 
 - T.hub 랭킹을 구성하는 요소가  글쓰기 점수 , 출석 점수, 좋아요 점수 로 구성된다고 가정해보겠습니다. 
그럼 아래와 같이 간단한 표로 구성할 수 있는데요...(데이터는 무작위로, 아래와 같이 원시 데이터가 주어졌다고 가정해보겠습니다.)

별명 글쓰기 점수 출석 점수 좋아요 점수
magic1 100 30 50
magic2 90 30 100
magic3 80 28 30
magic4 70 100 70
magic5 60 26 40
magic6 50 25 10
magic7 40 24 5
magic8 30 23 20
magic9 20 22 1


위에서 설명한 것과 같이 그냥 해당 점수에 대한 변수들만 가지고, 분석을 할 수 있겠지만요...
우리는 좀더 세가지 분류된 데이터를 조합해서,
 - 합의 성격을 가진 "합 파생변수"를 만들어 볼 수 있습니다. 
 - 추가적으로 평균점수의 성격을 가진 "평균 파생변수" 또한 만들어 볼수도 있을테고요...
즉, 아래 2가지 파생변수를 추가적으로 만드는 것이죠!
 - 합 파생변수
 - 평균 파생변수

그럼, R 언어를 통해서 파생변수들을 만들어 보겠습니다.
먼저, 데이터 프레임변수를 생성해 보겠습니다.

# 데이터프레임 생성 ( 글쓰기점수(w_point) , 출석점수(a_point), 좋아요점수(l_point))
df <- data.frame(w_point = c(100,90,80,70,60,50,40,30,20),
                 a_point = c(30,30,28,100,26,25,24,23,22),
                 l_point = c(50,100,30,70,40,10,5,20,1))

그러면, R 스튜디오에서 아래와 같이, 데이터프레임이 정상적으로 생성된것을 확인할 수 있고요.

두번째, 글쓰기점수(w_point) + 출석점수(a_point) + 좋아요 점수(l_point) 를 합산한 파생변수를 만들어 보겠습니다. 

# 합 변수(sum_point) 생성
df$sum_point <- df$w_point + df$a_point + df$l_point

그러면, R 스튜디오에서 아래와 같이, 합 파생변수(sum_point)를 확인할 수 있습니다. 


세번째, 글쓰기점수(w_point) + 출석점수(a_point) + 좋아요 점수(l_point) 의 평균 점수를 구한 파생변수를 만들어 보겠습니다. 

# 평균을 구한 파생변수(mean_point) 생성
df$mean_point <- (df$w_point + df$a_point + df$l_point)/3

그러면, R 스튜디오에서 아래와 같이, 평균 파생변수(mean_point)를 확인할 수 있습니다. 

위 결과값을 보고나서, 저는 갑자기 중간값이 궁금해졌습니다. !!
(물론, 지금은 변수 값이 적어서, 눈으로  쓰으윽(?) 하면 바로 126이구나 알수 있지만요...하지만 데이터가 엄청많다고 가정한다면...눈으로 하다보면,, 눈이 빠질지도...;;;;)

즉, 친절하게도 R 에서는 중간값을 바로 알 수 있는 함수를 지원합니다. 
 - 바로 summary() 하는 함수죠...바로 사용해서 중간값을 찾아보겠습니다.

#변수의 요약 통계량을 출력
summary(df$sum_point)

해당 명령을 실행시키면 바로 한눈에 중간값을 알수 있습니다. (물론, min / max 값도 바로 알수 있죠!!)

바로 126 이라고 알려주네요...!!

추가적으로, 합 파생변수의 히스토그램을 생성해 볼까요?
 - 히스토그램이란, 값의 빈도를 막대길이로 표현한 그래프를 말합니다. 
 - 즉, 히스토그램을 보면 어떤 값을 지닌 데이터가 많은지 전반적인 분포를 알수 있습니다. 

역시, R 에서는 히스토그램을 바로 그려주는 함수를 지원합니다. 
 - 바로 hist() 라는 함수이죠...바로 히스토그램을 그려보겠습니다. 

# 합 파생변수의 히스토그램 그리기
hist(df$sum_point)

해당 명령을 실행시키면, R스튜디오 오른쪽 아래 Plots 창에 출력이 됩니다. 
(쓰으윽, 보니깐요...합산 포인트가 50~100점대가 3개로 가장 빈도가 많군요...)

여기서 잠깐, 데이터 분석관련 제가 알게된 사실을 중간 고백(?) 해보도록 하겠습니다. 
 - 하나, 합산 포인트의 중간값은 126 이다
 - 둘, 합산 포인트의 빈도가 가장 높은 구간은 50~100점대이다.
 - 셋, 합산 포인트의 빈도가 가장 낮은 구간은 0~50 점대, 150~200점대 이다...
라는 사실을 알게 되었습니다.
(만약 데이터가 엄청많다고 한다면, R 언어를 알고 있으면 바로 위의 정보는 쉽게 알수 있겠네요...감사하게도요!!)

이어서, 갑자기 제가 하고 싶은게 불현듯, 떠올랐습니다.
(점수가 있으면, 포상을 하고 싶은생각이!! ^^;) 
그런데, 포상의 기준을 어떻게 잡아야 할까요?? (참고로, T.hub 는 350점을 기준으로 잡고 있습니다. )
그런데 무작정 350점을 포상 커트라인으로 잡으려고 봤더니...
헉..ㅋ 아무도 없네요....(포상금액이 굳었네요....;;; .. 이러면 안되겠죠? 어느정도 예산이 있으면 사용해야 하니깐요..)

그럼, 이제 저만의 기준을 잡아야할것 같은데..어떻게 할지 고민을 좀 해봅니다. (고민중....)
고민을 해보니, 예산을 생각해서 위에서 구한 중간값 126 보다는 높아야할것 같아보이고요..

음, summary 와 히스토그램을 판단근거로위의 180 점 정도를 기준으로 잡으면 될것 같아보입니다. !! (결정했습니다 !! 180점)

그럼, 눈으로?? 아니죠 지금은 데이터가 적기때문에 가능하지만..(데이터가 엄청많다면...포상자 구하려다가 퇴근못하겠죠..ㅋ)
여기서 저는 생각합니다. "포상 합격 판정 파생변수"를 만들어야 겠군요! 라고요...

R언어에는 조건에 따라 서로 다른 값을 반환하는 함수를 "조건문 함수(Conditional Statments)" 라고 부르는데요..
 - 바로 ifelse() 조건문 함수입니다. 

드디어 특정함수를 통해서, 파생변수를 만드는 순간이 왔네요...ㅎ

아래 소스코드가 들어가면 될것 같습니다. 

# 함수를 통한 포상합격판정 파생변수 만들기
df$reward_result <- ifelse(df$sum_point >= 180, "true", "false")

해당 명령을 실행시키면, 아래와 같이 바로 포상을 줄 사람이 결정되어 나옵니다. (3명, 1 / 2 / 4)

그럼, "포상 합격 판정 파생변수"도 만들어 봤으니, 포상을 받는 사람과 받지못하는 사람의 비율도 바로 추출해 볼까요?
 - 바로 table() 함수를 사용하면 됩니다. 

table(df$reward_result)

해당 명령을 실행시키면, 아래와 같이 바로 결과가 튀어(?) 나옵니다. (6:3 비율이군요)

그리고, ggplot2 라이브러리를 로드 해서, 막대그래프도 한번 생성해 보겠습니다. 

# 데이터를 시각화하기 위한 ggplot2 라이브러리 설치
.libPaths("E:/0.dev/15.dev-r-project/Library")
install.packages("ggplot2")
library(ggplot2)

# 포상관련 빈도 막대그래프
qplot(df$reward_result)

해당 명령을 실행시키면, 아래와 같이 "막대그래프"를 확인해 볼 수 있습니다. (역시 그래프를 보니 텍스트보다는 더욱 인지가 잘되네요..)

아무튼, 오늘 블로그에서 전달할 내용은 여기 까지고요...

결론 

이제까지 R언어에서 파생변수를 만드는 방법을 간략하게 진행해 봤는데요....
정리해보면..
 - 하나, 파생변수(Derived Variable)라는 개념은 기존의 변수를 변형해 만드는 변수를 말합니다. 
 - 둘, 우리는 모든 일들을 생각할때, 자신의 가지고 있는 편견과 고정관념을 저 멀리!! 버려야 합니다. (더 좋은방법을 고민해보고 찾아야겠죠^^)
 - 셋, R언어 사용법을 쉽게 전달하기 위해서, 포상이라는 시나리오를 만들어봤는데요..(힘든과정이겠네요...)

그럼에도 불구하고 항상 포상해주시는 T.hub 집사님께 항상 감사합니다.  

이글을 읽으시고, 실행해보시는 분들이 도움이 많이 되시길 진심으로 기원해봅니다. 

오늘도 마지막까지 제 글을 끝까지 읽어주셔서 진심으로 감사드리고, 제 글이 조금이라도 여러분의 각자의 삶을 살아가시는데 도움이 되셨길 기원합니다.
앞으로도 더욱 좋은 블로그를 남기는 제가 되도록 노력하겠습니다.

그리고, 제 글을 읽으시면 말이 됩니다.

항상 말에는 반드시 삶을 움직이는 힘이 있습니다.

제가 열심히 정성스럽게 정리한 저만의 지식과 1일 1블로그하는 제 블로그에 담긴 글들을 통해서,

여러분들의 삶과 운명을 반드시 조각하고 움직이시길 기원합니다.

이상입니다. 감사합니다.

300x250