본문 바로가기

R/쉽게 배우는 R 데이터분석

한국인의 삶을 파악하라! - 02

반응형

"성별에 따라 월급이 다를까??"

 

과거에 비해 여성들이 활발하게 사회 진출을 한다고는 하지만 직장에서 받는 대우에는 여전히 차별이 존재합니다. 데이터 분석을 통해 성별에 따라 월급 차이가 있는지 알아보겠습니다.

먼저 성별과 월급 두 변수를 검토하고 전처리한 뒤 변수 간의 관계를 분석하겠습니다. 분석 절차를 요약하면 아래와 같습니다.

 

1단계 : 변수 검토 빛 전처리

-성별

-월급

 

2단계 : 변수 간 관계 분석

-성별 월급 평균표 만들기

-그래프 만들기

 

1. 변수 검토하기

class()로 sex 볂수의 타입을 파악하고, table()로 각 범주에 몇 명이 있는지 알아보겠습니다. 출력 결과를 보면 sex는 numeric 타입이고 1과 2로 구성됩니다. 1은 7578명, 2는 9086명이 존재합니다.

 

> class(welfare$sex)
[1] "numeric"
> table(welfare$sex)

   1    2 
7578 9086 

 

2. 전처리

코드북을 보면 성별 변수의 값이 1이면 남자, 2면 여자를 의미한다는 것을 알 수 있습니다. 모른다고 답하거나 응답하지 않았을 경우에는 9로 코딩되어 있습니다.

이 정보를 바탕으로 데이터에 이상치가 있는지 검토하고, 분석에서 이상치를 제외할 수 있도록 NA를 부여합니다. 값이 9일 경우도 성별을 알 수 없어 분석에서 제외해야 하므로 결측 처리합니다.

 

위 table()에서 볼 수 있듯이, 1과 2만 있고 9 또는 그 외의 값은 존재하지 않습니다. 이상치가 없기 때문에 이상치를 결측 처리하는 절차를 건너뛰어도 됩니다. 만약 이상치가 발견된다면 아래와 같이 이상치를 결측 처리한 후 결측치가 제대로 만들어졌는지 확인하는절차를 거쳐야 합니다.

 

# 이상치 결측 처리
welfare$sex <- ifelse(welfare$sex == 9, NA, welfare$sex)

# 결측치 확인
table(is.na(welfare$sex))

 

sex 변수의 값은 숫자 1과 2로 되어 있습니다. 값의 의미를 이해하기 쉽도록 문자 "male"과 "female"로 바꾸고, table(), qplot()을 이용해 바꾼 값이 반영됐는지 출력 결과를 확인합니다.

 

# 성별 항목 이름 부여
welfare$sex <- ifelse(welfare$sex == 1, "male", "female")
table(welfare$sex)

female   male 
 9086   7578 
qplot(welfare$sex)

 

성별 변수의 전처리 작업이 완료됐습니다. 이제 동일한 절차로 월급 변수의 전처리 작업을 하겠습니다.

 

1. 변수 검토하기

코드북을 보면 월급은 '일한 달의 월 평균 임금'을 의미하며 1만 원 단위로 기록되어 있습니다. income 변수를 검토하고 qplot()으로 분포를 확인하겠습니다.

성별 변수는 범주 변수이기 때문에 table()로 각 범주의 빈도를 확인하면 특징을 파악할 수 있습니다. 하지만 월급 변수는 연속 변수이기 때문에 table()을 이용하면 너무 많은 항목이 출력됩니다. 연속 변수는 summary()로 요약 통계량을 확인해야 특징을 파악할 수 있습니다.

 

class(welfare$income)
[1] "numeric"

summary(welfare$income)
  Min. 1st Qu.  Median    Mean 3rd Qu.    Max.    NA's 
   0.0   122.0   192.5   241.6   316.6  2400.0   12030 
qplot(welfare$income)
...
(출력 결과 생략)

 

income은 numeric 타입이고, 0~2400만 원 사이의 값을 지니며, 122~316 만 원 사이에 가장 많이 분포하고 있습니다. 평균은 241.6 만 원, 중앙값은 평균보다 작은 192.5만 원으로, 전반적으로 낮은 값 쪽으로 치우쳐 있습니다.

qplot()은 최댓값까지 표현하도록 기본값이 설정되어 있습니다. 출력된 그래프를 보면 x축이 2500까지 있어서 대다수를 차지하는 0~1000 사이의 데이터가 잘 표현되지 않습니다. xlim()을 이용해 0~1000까지만 표현되게 설정하겠습니다.

 

qplot(welfare$income) + xlim(0,1000)

 

출력된 그래프를 보면 월급의 분포가 좀 더 잘 드러납니다. 0~250만 원 사이에 가장 많은 사람이 분포하고 그 뒤로는 점차 빈도가 감소한다는 것을 알 수 있습니다.

 

2. 전처리

코드북을 보면 월급은 1~9998 사이의 값을 지니며, 모름 또는 무응답은 9999로 코딩되어 있다는 것을 알 수 있습니다. 이 정보를 바탕으로 전처리 작업을 하겠습니다.

 

summary(welfare$income)
  Min. 1st Qu.  Median    Mean 3rd Qu.    Max.    NA's 
   0.0   122.0   192.5   241.6   316.6  2400.0   12030 

 

출력 결과를 보면 최솟값이 0, 최댓값이 2400이고, 결측치가 12030개 있습니다. 직업이 없어서 월급을 받지 않는 응답자가 있기 때문에 결측치가 존재하는 것입니다. 따라서 월급 변수를 이용하는 분석을 할 경우 먼저 결측치를 제외해야 합니다.

코드북에는 월급이 1~9998 사이의 값을 지닌다고 되어 있는데 summary() 출력 결과에 최솟값이 0으로 나타나 있습니다. 이는 이상치가 존재한다는 것을 의미하므로, 값이 0이면 결측 처리해야 합니다. 값이 0이거나 9999일 경우 결측 처리하겠습니다. 그 후 다음 단계에서 성별과 월급의 고나계를 분설할 때 결측치를 제외하고 분석하겠습니다.

 

# 이상치 결측 처리
welfare$income <- ifelse(welfare$income %in% c(0,9999), NA, welfare$income)

#결측치 확인
table(is.na(welfare$income))

FALSE  TRUE 
 4620 12044 

 

1. 성별 월급 평균표 만들기

두 변수의 전처리 작업이 완료됐으니 변수 간 관계를 분석할 차례입니다. 성별 월급 평균 표를 만들어 비교해 보겠습니다.

 

sex_income <- welfare %>%
  filter(!is.na(income)) %>%
  group_by(sex) %>%
  summarise(mean_income = mean(income))
 
sex_income
# A tibble: 2 x 2
  sex    mean_income
  <chr>        <dbl>
1 female        163.
2 male          312.

 

월급 평균이 남자는 312만 원, 여자는 163만 원으로, 평균적으로 여성보다 남성의 월급이 약 150만 원 더 많다는 것을 알 수 있습니다.

 

2. 그래프 만들기

분석 결과를 쉽게 이해할 수 있도록 앞에서 만든 성별 월급 평균표를 이용해 막대 그래프를 만들겠습니다. 출력된 그래프를 보면 남성의 월급이 여성 두배 가까이 될 정도로 많다는 것을 알 수 있습니다.

 

ggplot(data = sex_income, aes(x = sex, y = mean_income)) + geom_col()

 

반응형