본문 바로가기

데이터 분석

한국 복지 패널 데이터분석

 

 









 
 https://www.koweps.re.kr
 
 
 
가구의 경제활동을 연구해 정책 지원에 반영할 목적으로 발간하는 조사자료이다.
전국에서 7000여 가구를 선정해 조사한 자료로 경제활동, 생활실태, 복지욕구 등 다양한 변수를 담고있다.
이 데이터를 분석하면 대한민국 사람들이 어떻게 살아가는지 알 수 있다.
 
 
 
 
 
 


 
 
 
 
 
 
 
 
데이터 분석 준비하기 
 

install.packages("foreign")  
spss에서 작성된 파일을 불러올 수 있는 foreign 패키지
library(foreign)
foreign 패키지 로드

install.packages("dplyr")
전처리에 필요한 dplyr 패키지 설치
library(dplyr)
dplyr 패키지 로드

install.package("ggplot2")
시각화에 필요한 ggplot2 패키지 설치
library(ggplot2)
ggplot2 패키지 로드

install.package("readxl")
액셀 파일을 불러올 수 있는 readxl 패키지 설치
library(readxl)
readxl 패키지 로드

 
 
 
 
 
 
 
 
 
데이터 불러오기 
 

setwd("c://r1")
welfare <- read.spss(file = "Koweps_hpc10_2015_beta1.sav")
str(welfare)
welfare <- read.spss(file = "Koweps_hpc10_2015_beta1.sav",
                         to.data.frame = T)  
                         
to.data.frame = T   :   불러오면서 데이터 프레임으로 바꿔주세요

 
 
 
복사본 만들기 

welfare1 <- welfare

 
 
 
 
데이터 검토하기 

head(welfare1)
tail(welfare1)
View(welfare1)
dim(welfare1)       : 몇행 몇열인지 
str(welfare1)
summary(welfare1)   : 기초 통계량

 
 
 
 
 
 
변수명 바꾸기
 
rename : 내가 원하는 변수만 이름 바꾸기 
 

welfare1 <- rename(welfare,                # 원본 데이터
                  sex = h10_g3,            # 성별
                  birth = h10_g4,          # 태어난 연도
                  income = p1002_8aq1,     # 월급
                  code_job = h10_eco9,     # 직업 코드
                  code_region=h10_reg7)

 
 
 
 
 
 


 
 
 
 
 
 
 
 
데이터 분석 절차 
 
1단계 : 변수 검토 및 전처리
2단계 : 변수간 관계분석 
 
 
 
 


 
 
 
 
 
성별 변수 전처리 
 

성별에 따른 월급 차이 - 성별에 따라 월급이 다를까? 

 
 
class : 변수의 타입을 알 수 있다.
table :  각 범주에 속한 데이터가 몇개씩 있는지 확인할 수 있다.
 
 
 

class(welfare$sex)
> "numeric"

table(welfare$sex)
>   1     2
  7578   9086
이상치 확인 
이상치 결측처리 
welfare$sex <- ifelse(welfare$sex == 9, NA, welfare$sex)
9로 응답한 것은 결측치 NA 처리, 아니면 성별 값 그대로 두세요

 
 
 
 
 
 
 
 
성별 항목 이름 부여 

welfare$sex <- ifelse(welfare$sex == 1, "male", "female")
table(welfare$sex)
성별이 1이면 male, 아니면 female

 
qplot() 은 R에서 ggplot2 패키지에서 제공하는 함수 중 하나입니다.
"quick plot" 의 약자로, 데이터를 쉽고 빠르게 시각화하는데 사용됩니다.
 
 
 
 
 
 
 
 
 
 
월급 변수 전처리 
 
전처리  :  변수 안에 이상한 값이 있는지 없는지
이상한 값이 있으면 결측값으로 변경하거나, 텍스트로 변경하는 것 
 

class(welfare$income)          # 데이터형 확인 
> "numeric"

summary(welfare$income)        # 요약 통계량 
ex) 최대, 최소, 평균, 중간값, 응답하지 않은 na값의 개수 등 

qplot(welfare$income)
막대 그래프 

qplot(welfare$income) + xlim(0, 1000)
x축은 0에서 1000 구간까지만 설정

 
 
 

이상치 확인 
summary(welfare$income)   

이상치 결측치 처리 
welfare$income <- ifelse((welfare$income == 0 | welfare$income == 9999),
NA, welfare$income)

welfare$income <- ifelse(welfare$income %in% c(0, 9999), NA, welfare$income)

%in% c(0, 9999)은 0 또는 9999가 주어진 벡터에 포함되어 있는지 확인하는 것을 의미합니다.
결과는 TRUE 또는 FALSE로 반환됩니다.

 
| : or 
수입이 0 이거나 9999(무응답)이면 NA 처리하고, 그렇지않으면 그대로 놔둬라
'모름/무응답' 을 해당 코드에서 9999로 처리함 
 
%in% 연산자
value %in% vector 
 
벡터 요소의 멤버십 여부를 확인하는데 사용됩니다.
특정 값이 주어진 벡터에 포함되어 있는지 확인할 수 있습니다.
 
 
 
 
 
 
 
 
 
 
 
결측치 확인
is. na
 

table(is.na(welfare$income))

 
is.na()는 주어진 값이 NA(결측값)인지 여부를 확인하는 데 사용됩니다.
NA는 "Not Available"의 약자로, 데이터의 부재를 나타내는 특별한 값입니다.
is.na() 함수는 인자로 전달된 값이 NA인 경우에는 TRUE를 반환하고
NA가 아닌 경우에는 FALSE를 반환합니다.
 
 
 

x <- c(1, 2, NA, 4, NA) 
is.na(x)

위의 코드를 실행하면 [1] FALSE FALSE TRUE FALSE TRUE라는 결과가 반환됩니다.
 
 
 
 
table(is.na) 형식으로 사용하는 경우, is.na 함수의 결과인 TRUE와 FALSE의 개수를 나타내는 테이블이 생성됩니다. 이 테이블은 TRUE와 FALSE를 구분하여 각각의 개수를 표시합니다.
 

x <- c(1, 2, NA, 4, NA)
table(is.na(x))
> FALSE  TRUE 
    3     2

 
TRUE 값들이 NA의 개수, FALSE 밑에 있는 값들은 월급을 받는 애들 수
 
 
 
 
 
이렇게 두 변수의 전처리 작업을 끝내고
 
 
 
 
 
 
 


 
 
 
 
 
 
성별에 따른 월급 차이 분석하기 
 

sex_income <- welfare %>% 
filter(!is.na(income)) %>% 
group_by(sex) %>% 
summarise(mean_income = mean(income))

성별 간 임금 평균을 넣을 새로운 변수를 만들고
수입이 na가 아닌 애들만 필터링해서
성별을 그룹화 한 후 
수입의 평균을 내서 요약 통계량을 새로운 변수에 집어넣어요

 
summarise(변수1 = 통계함수1(열1), 변수2 = 통계함수2(열2), ...)
 
 
 
 
 
 

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

geom_col() : 막대 그래프

 
 
 
 
 
 
 
 
 
 


 
 
 
 
 
 
 
 
 
 
나이와 월급의 관계 - " 몇 살 때 월급을 가장 많이 받을까 ? " 
세대 간 소득격차 
 
 
 
나이 변수 검토 및 전처리 - 태어난 년도를 확인하며 나이 확인 
 
 

class(welfare$birth)         # 데이터형 확인 
> numeric

summary(welfare$birth)       # 요약 통계량 

qplot(welfare$birth)         # 막대 그래프 

summary(welfare$birth)       # 이상치 확인 (na값

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

 
 
summary 함수는 주로 데이터의 분포와 중심 경향성에 대한 요약 통계를 제공하는데 사용됩니다.
이를 통해 데이터의 이상치를 확인하는데 도움을 줄 수 있습니다.
 
summary 함수는 주어진 데이터의 최소값, 최대값, 중앙값, 1사분위수(25% 분위수), 3사분위수(75% 분위수) 등을 요약하여 제공합니다.
이러한 통계 정보를 통해 데이터의 전반적인 분포와 극단값(이상치)의 가능성을 파악할 수 있습니다.
 
 
 
 
 
 
이상치 결측 처리 

welfare$birth <- ifelse(welfare$birth == 9999, NA, welfare$birth)

table(is.na(welfare$birth))
결측치가 있는지

 
 
 
 
 
 
 
 
파생 변수 - 나이 만들기 

R에서 나이를 구하는 일반적인 공식은 "현재 연도 - 출생 연도 + 1"
2015년도에 조사되었기 때문에 2015년 당시 나이로 계산함

welfare1$age         # 새로운 변수 만들기 
welfare$age <- 2015 = welfare$birth + 1
summary(welfare1$age)
qplot(welfare1$age)

 
 
 
 
 
 
 
 
나이와 월급의 관계 분석 
나이에 따른 월급 평균표 만들기 
 
 
 

age_income <- welfare1 %>% 
filter(!is.na(income) %>% 
group_by(age) %>% 
summarise(mean_income = mean(income))

!is.na(income) :  수입 0

나이별 수입을 넣어줄 새로운 변수를 생성하고
수입이 있는 애들을 필터링 해준 후에
나이별로 그룹으로 묶어주고 
수입의 평균을 구해서 변수에 넣어줍니다.

 

head(age_income)
앞에서 6개만 보여주세요

geom_line() : 꺾은 선 그래프 
ggplot(age_income, aes(x = age, y = mean(age_income)) + geom_line()

 
 
 
 
 
 
 
 
연령대에  따른 월급 차이 - " 어떤 연령대의 월급이 가장 많을까? "
 
 
연령대 변수 전처리 - 파생 변수 만들기 
 

welfare1 <- welfare1 %>%
mutate(ageg = ifelse(age < 30, "young",         # ageg 새로운 열 생성 
ifelse(age <= 59, "middle", "old")))

table(welfare$ageg)
> middle   old    young
  6049    6281    4334
 
qplot(welfare$ageg)

 
 
 
 
mutate(data, . . .) 
 
mutate() 함수는 'dplyr' 패키지에 포함되어 있습니다.
이 함수는 데이터 프레임의 열을 변환하거나 새로운 열을 추가하기 위해 사용됩니다.
 
. . . 부분은 새로운 열을 생성하거나 기존의 열을 변환하기 위한 명령어들을 나열합니다.
각 명령어는 '새로운 열 이름 = 변환 또는 생성 명령어' 형식으로 작성됩니다.
 
 
 
 
 
 
 
 
연령대에 따른 월급 차이 분석하기 
 

ageg_income <- welfare1 %>% 
filter(!is.na(income)) %>% 
group_by(ageg) %>%
summarise(mean_income = mean(income))

aged_income

 

ggplot(aged_income, aes(x = ageg, y = mean_income)) + geom_col()

 
 
 
 
 
 
 
그래프가 나이순으로 정렬되도록 설정 

ggplot(ageg_income, aes(x = ageg, y = mean_income)) + geom_col() +
sclae_x_discrete(limits = c("young", "middle", "old"))

 
scale_x_discrete() 는 ggplot2 패키지에서 사용되는 함수입니다.
이 함수는 x축의 범주형 변수를 지정된 범주 순서로 제한하는데 사용됩니다.
 
위의 코드에서는 x 축의 범주형 변수인 "age"의 순서를 "young", "middle", "old"로 제한합니다.
이에 따라 그래프의 x 축에는 해당 순서대로 범주가 표시됩니다.
 
 
 
 
 
 
 
 
 
연령대 및 성별 월급 차이 
 
성별 월급 차이는 연령대별로 다를까?
 
 
 
 
연령대 및 성별 월급 평균표 만들기 
 

sex_income <- welfare1 %>% 
filter(!is.na(income)) %>% 
group_by(ageg, sex) %>% 
summarise(mean_income = mean(income))

sex_income

 
 
 
 
 
 
 
 
그래프 만들기 
 

ggplot(sex_income, aes(x = ageg, y = mean_income, fill = sex) +
geom_col() + scale_x_discrete(limits = c("young", "middle", "old"))

fill = sex : 성별에 따라 다른 색으로 그래프 그리기

 

position = "dodge"
막대기를 옆으로 나란히 분리할 수 있음

ggplot(sex_income, aes(x = ageg, y = mean_income, fill = sex)) +
geom_col(position = "dodge") + 
scale_x_discrete(limits = c("young", "middle", "old"))

 
 
 
 
 
 
 
 
 
나이 및 성별 월급 차이 분석하기 
 
 
성별 연령별 월급 평균표 
 
 

sex_age <- welfare1 >%>
filter(!is.na(income)) %>%
group_by(age, sex) %>% 
summarise(mean_income = mean(income)

head(sex_age)

 
 
 
 
 
 
 
 
그래프 만들기
 

막대 그래프에서 색깔을 다르게 구분할떄는 fill 을 이용함
선 그래프일때는 col = 다르게 할 변수 

ggplot(sex_age, aes(x = age, y = mea_income, col = sex)) +
geom_line()

 
 
 
 
 
 
 


 
 
 
 
 
 
 

총 정리 

 
 
 
1. 분석에 필요한 변수를 검토한다. 
검토하는 과정 중에는 이상치, 결측치가 있는지 확인
 
2. 이런 것들을 제거하는 전처리 과정 
 
3. 실제 필요한 변수가 없다면 파생 변수 만들기 
ifelse
 
4. 전처리 과정 완료 후, 변수 간의 관계 분석
 
5. 평균표 데이터 만들기 
필터 - 그룹화 - 썸머리 
 
6. 이렇게 출력화된 데이터로 그래프 그리기 
ggplot