관리 메뉴

느루독서심리연구센터(010-2788-3025)

[빅데이터 통계 R 프로그램(8)] 데이터 분석 시작! (05) 연령대와 월급 본문

논문 잘 쓰는 법/통계 R 공부하자

[빅데이터 통계 R 프로그램(8)] 데이터 분석 시작! (05) 연령대와 월급

느루독서심리연구센터(010-2788-3025) 2018. 1. 30. 21:30
728x90
SMALL

이 글은 한국상담학신문(265-21-00636)에서 발행하는 글입니다.


key word: R, R Studio, 데이터 분석, 실전 데이터 분석


여러분은 나이와 월급의 데이터를 분석해 본 후 50대 무렵 300만 원 초반으로 가장 많은 월급을 받는다는 것을 알게 되었습니다. 하지만, 이 정보만으로는 한 문단을 쓰는 것에 부족함을 느꼈고, 따라서 '연령대에 따른 월급'을 새로 조사하려 합니다.


분석 절차는 다음과 같습니다.


1. 빅데이터

1. 변수 검토 및 전처리

-연령대변수


앞서 나이변수를 검토하고 전처리하는 과정에서 연도변수를 가공해 나이변수를 만들었던 것이 기억나시나요? 한국복지패널데이터에 나이 변수가 없었기 때문인데요. 연령대 변수도 같은 이유로 태어난 연도 변수를 가공해 만들어야 합니다.


먼저 연령대의 기준을 다음 표와 같이 설정합시다. 


범주

기준

초년

30세 미만

중년

30~59

노년

60세 이상


이제 다음과 같은 명령어를 통해 연령대 변수를 만들어봅시다.   

2. 빅데이터

명령어를 살펴보면, mutate라는 명령어가 있습니다. 이 명령어는 데이터를 변형해 추가하는 명령어입니다. 지금의 경우 age 데이터를 가져와 새로운 데이터인 ageg를 만드는 형태입니다. 그렇다면 ages 뒤에 써져있는 ifelse는 무슨 뜻일까요?

ifelse() 명령어는 괄호 안에 3가지의 값이 들억어가게 됩니다. 

3. 빅데이터


처음에는 판단할 조건을 적어주게 됩니다. 'age<30'의 경우' 나이의 값이 30보다 작다.'라는 조건을 써 준 것이죠. 그리고 이 조건에 따라 참과 거짓으로 갈리게 될 것입니다. 만약 조건이 참이라면 위 그림에서 참에 해당하는 그룹에 포함하고, 거짓이라면 거짓에 해당하는 그룹에 포함합니다. 


즉 위와 같이 ifelse(age<30. "young", ifelse(age<=59, "middle", "old"))를 쓴 경우는 나이가 30 미만이라면 "young"그룹에 포함하고 그렇지 않다면, 다시 59보다 작거나 같은갈가를 판단해 이하라면 "middle"그룹에 포함하고 초과라면 "old"그룹에 포함합니다. 


월급변수의 경우는 "데이터 분석 시작! (03) 성별에 따른 월급차이"를 참고해 주세요. 


2. 월급차이 분석


연령대 별로 평균 월급이 다른지 알아보기 위해 연령대별 월급 평균표를 만들어 봅시다.   


 

4. 빅데이터

분석 결과를 보면 월급 평균이 초년 163만 원, 중년 281만 원, 노년 125만 원이라는 것을 알 수 있습니다. 


명령어를 한 번 살펴봅시다. 


"fare_data %>%" :


먼저 fare_data에서 데이터를 가져와야 함을 알려줍니다. 


"filter(lis.na(income)) %>%" :


그 후 이상치를 가지지 않는 월급(income) 데이터 만을 가져오라는 의미로 필터(filter) 명령어와 not(느낌표 : !). is.na()를 조합해서 쓰고 있습니다.


이 때 is.na()느는 값이 이상치를 가질 때 TRUE라고 알려주는 명령어입니다. 이상치를 가질 때 TRUE인 값에 '아니다'라는 의미의 not을 취했기 때문에, 이상치를 가질 때 FALSE라고 알려주게 됩니다. 


즉, 이이상치는 FALSE라고 알려주는 것입니다. 이 때 필터는 괄호 안의 조건에 따라 참인 값만 가져오는 명령어입니다. 따라서 위 3가지, not(!), is.na(), filter()를 조합한 결과는 이상치가 아닌 값들만 가져오라는 명령어가 되는 것입니다. 


"group_by(ageg) %>% :


연령대 값과 월급의 값을 함께 사용해야 하기 때문에 이 두 개의 값을 묶어두는 작업이 필요합니다. 따라서 '연령대에 따라 묶어라'라는 명령어로 group_by(ageg)라는 명령어를 사용한 것입니다. 


"summarise(mean_income = mean(income))" :


안쪽의 명령어들부터 살펴봅시다. mean() 명령어는 괄호 안 값의 평균을 구하는 명령어입니다. 즉 월급(income)의 평균을 구하는 것입니다. 그 후 mean_income이라는 새로운 범례를 만들면서 이 명령어는 끝나게 됩니다. summarise라는 명령은 새새로운 범례를 만들 때 사용되는 것이기 때문입니다. 


따라서 위의 명령어를 정리하면 'fare_data에서 이상치를 가지지 않는 월급 데이터를 가져와 연령대 데이터를 범례로 연결한다. 그 후 새로운 범례로써 월급 평균을 만든다. 이렇게 만들어진 표의 이름은 ageg_income이다.'라는 명령이 되는 것입니다. 


사실 이 명령어는 저번 "데이터 분석 시작! (04) 연령에 따른 월급차이"의 명령어와 크게 다르지 않습니다. 위 글의 설명과 똑같다고 해도 무방합니다. 


다음의 결과를 알아보기 쉽도록 표의 데이터를 그래프로 옮겨 보겠습니다. 

저번 글을 참고해서 ggplot을 쓴다고 예상하실텐데요. 정답입니다! 하지만 한 가지가 더 필요합니다. 


우우선 저번 글과 같은 방법으로 그래프를 만들어 보겠습니다. 


5. 빅데이터


그래프가 정확하게 나왔습니다만, 뭔가 어색한 부분이 있습니다. 


범례를 자세히 살펴보면 middle, old, young의 순서로 정렬되어 있는 것을 알 수 있습니다. 연령대를 정확히 따지자면 young, middle, old의 순 또는 역순으로 되어야 할 것입니다. 이는 그래프를 만드는 ggplot 명령어가 막대를 변수의 앞파벳순으로 정렬하도록 기본 설정되어 있기 때문입니다. 따라서 막대를 초년, 중년, 노년의 순서대로 나타나도록 해 보겠습니다.


6. 빅데이터


방금의 명령어에서 "+ scale_x_discrete(limits = c("young", "middle", "old"))를 추가하면 됩니다. 이는 x축의 순서를 괄호안의 순서대로 하라는 명령어입니다.


표와 그래프를 보면 중년이 280만 원 정도로 가장 많은 월급을 받는다는 것을 알 수 있습니다. 노년은 125만 원 정도로 초년이 받는 163만 원보다 적습니다.


-한국상담학신문-

건강한 가족회복을 위해 최선을 다하겠습니다!

제휴 및 상담문의: 010-2788-3025


LIST
Comments