‘한국복지패널데이터’ 분석 프로젝트 : 한국인의 삶을 파악하라!'
1. '한국복지패널데이터' 분석 준비하기
한국복지패널데이터
• 한국보건사회연구원 발간
• 가구의 경제활동을 연구해 정책 지원에 반영할 목적
• 2006~2015년까지 전국에서 7000여 가구를 선정해 매년 추적 조사
• 경제활동, 생활실태, 복지욕구 등 수천 개 변수에 대한 정보로 구성
(참고- 하기 데이터는 실습용으로 2015년 데이터임)
데이터 분석 준비하기
패키지 준비하기
• foreign 패키지 설치
• SPSS 파일 로드
• 전처리
• 시각화
• 엑셀 파일 불러오기
데이터 준비하기
데이터 검토하기 : head() / tail() / View() / dim() / str() / summary()
• 대규모 데이터는 변수가 많고 변수명이 코드로 되어 있어서 전체 데이터 구조를 한눈에 파악하기 어려움
• 변수명을 쉬운 단어로 바꾼 후 분석에 사용할 변수들 각각 파악해야 함
변수명 바꾸기 : rename()
library(foreign) # SPSS 파일 로드
library(dplyr) # 전처리
library(ggplot2) # 시각화
library(readxl) # 엑셀 파일 불러오기
raw_welfare <- read.spss("./data/Koweps_hpc10_2015_beta1.sav",
to.data.frame = T) #데이터 파일 불러오기
welfare <- raw_welfare #복사본 만들기
str(welfare)
summary(welfare)
welfare <- rename(welfare,
sex=h10_g3,
birth=h10_g4,
marriage=h10_g10,
religion=h10_g11,
income=p1002_8aq1,
code_job=h10_eco9,
code_region=h10_reg7) #변수명 재설정
데이터 분석 절차
• 1단계. 변수 검토 및 전처리
• 2단계. 변수 간 관계 분석
===================================
2. 성별에 따른 월급 차이
- "성별에 따라 월급이 다를까?"
분석 절차
2-1. 변수 검토및 전처리
• 성별 변수 검토(class() / table() / welfare$sex) 및 전처리 (이상치 확인 / 이상치를 결측치로 처리 / 결측치 확인 / 성별 항목 이름 부여)
• 월급 변수 검토(class() / summary() / welfare$income) 및 전처리 (이상치 확인 / 이상치를 결측치로 처리 / 결측치 확인)
2-2. 성별과 월급 변수 간 관계 분석
• 성별 월급 평균표 만들기
• 그래프 만들기
===================================
3. 나이와 월급의 관계
- "몇 살 때 월급을 가장 많이 받을까?"
분석 절차
3-1. 변수 검토 및 전처리
• 나이 변수(class() / summary() / welfare$birth) 검토 및 전처리하기 (이상치 확인 / 이상치를 결측치로 처리 / 결측치 확인 / 파생변수 만들기 - 나이)
• 월급 변수 검토 및 전처리하기
3-2. 나이와 월급 변수 간 관계 분석
• 나이에 따른 월급 평균표 만들기
• 그래프 만들기
#성별 변수 검토 및 전처리
class(welfare$sex)
table(welfare$sex)
welfare$sex <- ifelse(welfare$sex ==9, NA, welfare$sex)
table(is.na(welfare$sex))
welfare$sex <- ifelse(welfare$sex==1, "male", "female")
table(welfare$sex)
qplot(welfare$sex)
#월급 변수 검토 및 전처리
class(welfare$income)
summary(welfare$income)
qplot(welfare$income)
qplot(welfare$income) + xlim(0,1000)
summary(welfare$income)
welfare$income <- ifelse(welfare$income %in% c(0,9999), NA, welfare$income)
table(is.na(welfare$income))
#성별 월급 평균표 만들기
sex_income <- welfare %>%
filter(!is.na(income)) %>%
group_by(sex) %>%
summarise(mean_income = mean(income))
ggplot(data=sex_income, aes(x=sex, y=mean_income)) + geom_col()
#나이와 월급의 관계
class(welfare$birth)
summary(welfare$birth)
qplot(welfare$birth)
summary(welfare$birth)
table(is.na(welfare$birth))
welfare$birth <- ifelse(welfare$birth == 9999, NA, welfare$birth)
table(is.na(welfare$birth))
welfare$age <- 2015 - welfare$birth +1
summary(welfare$age)
qplot(welfare$age)
#나이와 월급의 관계 분석하기
age_income <- welfare %>%
filter(!is.na(income)) %>%
group_by(age) %>%
summarise(mean_income = mean(income))
head(age_income)
ggplot(data=age_income, aes(x=age,y=mean_income))+geom_line()
===================================
4. 연령대에 따른 월급 차이
- "어떤 연령대의 월급이 가장 많을까?"
분석 절차
4-1. 변수 검토 및 전처리
• 연령대 변수 검토 및 전처리하기 (파생변수 만들기 - 연령대)
• 월급 변수 검토 및 전처리하기
4-2. 연령대와 월급 변수 간 관계 분석
• 연령대별 월급 평균표 만들기
• 그래프 만들기 (막대 정렬 : 초년, 중년, 노년 나이 순)
===================================
5. 연령대 및 성별 월급 차이
- "성별 월급 차이는 연령대별로 다를까?"
분석 절차
5-1. 변수 검토 및 전처리
• 연령대
• 성별
• 월급
5-2. 연령대, 설별, 월급 변수 간 관계 분석
• 연령대 및 성별 월급 평균표 만들기
• 그래프 만들기 (성별 막대 분리)
#변수 - 연령대, 월급 // 변수간 관계분석 - 연령대별 월급 평균표 만들기, 그래프
#연령대 변수 검토 및 전처리하기
#파생변수 만들기 - 연령대
welfare <- welfare %>%
mutate(ageg = ifelse(age <30, "young",
ifelse(age <=59, "middle", "old"))) #이중조건문
table(welfare$ageg) #알파벳순 정렬됨
qplot(welfare$ageg)
#월급 변수 검토 및 전처리하기
ageg_income <- welfare %>%
filter(!is.na(income)) %>%
group_by(ageg) %>%
summarise(mean_income=mean(income))
ageg_income
#연령대 및 월급 변수 간 관계 분석 (막대정렬: 초년,중년,노년 나이순)
ggplot(data=ageg_income, aes(x=ageg, y=mean_income))+geom_col()+
scale_x_discrete(limits=c("young", "middle", "old")) #x축 그룹 변수 순서 변경 지정
#연령대 및 성별 월급 차이
## 성별 월급 차이는 연령대별로 다를까?
#연령대 및 성별 월급 평균표 만들기
sex_income <- welfare %>%
filter(!is.na(income)) %>%
group_by(ageg, sex) %>%
summarise(mean_income = mean(income))
#그래프 만들기
ggplot(data=sex_income, aes(x = ageg, y=mean_income, fill=sex))+
geom_col(position = "dodge") +
scale_x_discrete(limits=c("young", "middle", "old"))
#geom_col(position="dodge") 옵션 추가하여 막대 분리 가능.
#나이 및 성별 월급 차이 분석하기
age_income <- welfare %>%
filter(!is.na(income)) %>%
group_by(age, sex) %>%
summarise(mean_income=mean(income))
ggplot(age_income, aes(x=age, y=mean_income, col=sex))+
geom_line()
===================================
6. 직업별 월급 차이
- "어떤 직업이 월급을 가장 많이 받을까?"
분석 절차
6-1. 변수 검토(class() / table() / welfare$code_job) 및 전처리
• 직업분류코드 목록 불러오기 => welfare에 직업명 결합
• 월급
6-2. 변수 간 관계 분석
• 직업별 월급 평균표 만들기
• 그래프 만들기 (상위 10개 추출, 하위 10위 추출 : arrange(), head(), tail())
===================================
7. 성별 직업 빈도
- "성별로 어떤 직업이 가장 많을까?"
분석 절차
7-1. 변수 검토 및 전처리
• 성별
• 직업
7-2. 변수 간 관계 분석
• 성별 직업 빈도표 만들기 (남성 직업 빈도 상위 10개 추출, 여성 직업 빈도 상위 10개 추출)
• 그래프 만들기 (남성 직업 빈도 상위 10개 직업, 여성 직업 빈도 상위 10개 직업)
#변수 : 직업코드, 직업명, 월급
#1)직업별 월급 평균표 만들기
#2)그래프 시각화
class(welfare$code_job)
table(welfare$code_job)
#직업분류 코드 목록 불러오기
library(readxl)
list_job <- read_excel("./data/Koweps_Codebook.xlsx", col_names = T, sheet=2) #col_names=T 컬럼 이름까지 가져오기
#직업코드 기준으로 직업명 데이터 병합하기
welfare <- left_join(welfare, list_job, id="code_job")
welfare %>%
filter(!is.na(income)) %>%
group_by(code_job, job) %>%
summarise(mean_income= mean(income))
#직업별 월급 차이
job_income <- welfare %>%
filter(!is.na(income)) %>%
group_by(job) %>%
summarise(mean_income = mean(income))
#상위 10개 추출
top10 <- job_income %>%
arrange(desc(mean_income)) %>%
head(10)
#그래프만들기
ggplot(data = top10, aes(x = job, y = mean_income)) +
geom_col() +
coord_flip() #X축과 Y축 변환
ggplot(data = top10, aes(x = reorder(job, mean_income), y = mean_income)) +
geom_col() +
coord_flip() #reorder 변수값 정렬 순서 변경
#하위 10위 추출
bottom10 <- job_income %>%
arrange(mean_income) %>%
head(10)
#그래프
ggplot(data = bottom10, aes(x = reorder(job, -mean_income), y= mean_income)) +
geom_col() +
coord_flip() +
ylim(0, 850)
#성별 직업 빈도
# - 성별로 어떤 직업이 가장 많을까?
# 변수 : 성별, 직업
# 변수간 관계 분석 : 성별 직업 빈도표 만들기
job_male <- welfare %>%
filter(!is.na(job) & sex == "male") %>%
group_by(job) %>%
summarise(n=n()) %>%
arrange(desc(n)) %>%
head(10)
ggplot(data = job_male, aes(x= reorder(job, n), y= n)) +
geom_col()+
coord_flip()
===================================
8. 종교 유무에 따른 이혼율
- "종교가 있는 사람들이 이혼을 덜 할까?
분석 절차
1. 변수 검토 및 전처리
• 종교 (종교 유무 이름 부여)
• 혼인 상태 (이혼 여부 변수 만들기)
2. 변수 간 관계 분석
• 종교 유무에 따른 이혼율 표 만들기 (count() 활용 / 이혼율 표 만들기 (이혼 추출))
• 그래프 만들기
• 연령대 및 종교 유무에 따른 이혼율 분석하기
• 연령대별 이혼율 표 만들기
• 연령대별 이혼율 그래프 만들기
• 연령대 및 종교 유무에 따른 이혼율 표 만들기
• 연령대 및 종교 유무에 따른 이혼율 그래프 만들기
#변수: 종교유무, 혼인상태
#변수간 관계 분석 : 종교유무에 따른 이혼율 표 만들기
class(welfare$religion)
table(welfare$religion)
welfare$religion <- ifelse(welfare$religion==1, "yes", "no")
table(welfare$religion)
#혼인 상태 변수 검토
class(welfare$marriage)
table(welfare$marriage)
#이혼여부 변수 만들기
welfare$group_marriage <- ifelse(welfare$marriage==1, "marriage",
ifelse(welfare$marriage==3, "divorce", NA))
table(welfare$group_marriage)
table(is.na(welfare$group_marriage))
qplot(welfare$group_marriage, na.rm=T)
qplot(welfare$group_marriage)
#종교 유무에 따른 이혼율 표 만들기
religion_marriage <- welfare %>%
filter(!is.na(group_marriage)) %>%
group_by(religion, group_marriage) %>%
summarise(n=n()) %>%
mutate(tot_group= sum(n)) %>%
mutate(prc = round(n/tot_group*100, 1))
#count() 활용
religion_marriage <- welfare %>%
filter(!is.na(group_marriage)) %>%
count(religion, group_marriage) %>%
group_by(religion) %>%
mutate(pct = round(n/sum(n)*100, 1))
#이혼 추출 #이혼율표 만들기
divorce <- religion_marriage %>%
filter(group_marriage=="divorce") %>%
select(religion, pct)
#그래프만들기
ggplot(data = divorce, aes(x = religion, y= pct)) + geom_col()
#연령대 및 종교 유무에 따르 이혼율 분석하기
#연령대별 이혼율 표 만들기
ageg_marriage <- welfare %>%
filter(!is.na(group_marriage)) %>%
group_by(ageg, group_marriage) %>%
summarise(n=n()) %>%
mutate(tot_group = sum(n)) %>%
mutate(prc = round(n/tot_group*100, 1))
#count 활용
aege_marriage <- welfare %>%
filter(!is.na(group_marriage)) %>%
count(ageg, group_marriage) %>%
group_by(ageg) %>%
mutate(pct = round(n/sum(n)*100, 1))
#연령대별 이혼율 그래프 만들기 (초년 제외, 이혼 추출)
ageg_divorce <- ageg_marriage %>%
filter(ageg !="young" & group_marriage=="divorce") %>%
select(ageg, prc)
#그래프 만들기
ggplot(data=ageg_divorce, aes(x=ageg, y=prc)) +geom_col()
#연령대 및 종교 유무에 따른 이혼율 표 만들기
#연령대, 종교유무, 결혼상태별 비율표 만들기 (초년제외)
ageg_religion_marriage <- welfare %>%
filter(!is.na(group_marriage) & ageg!="young") %>%
count(ageg, religion, group_marriage) %>%
group_by(ageg, religion) %>%
mutate(prc = round(n/sum(n)*100, 1))
ageg_religion_marriage <- welfare %>%
filter(!is.na(group_marriage) & ageg!="young") %>%
group_by(ageg, religion, group_marriage) %>%
summarise(n=n()) %>%
mutate(tot_group=sum(n)) %>%
mutate(prc= round(n/tot_group*100, 1))
#연령대 및 종교 유무별 이혼율표 만들기
df_divorce <- ageg_religion_marriage %>%
filter(group_marriage=="divorce") %>%
select(ageg, religion, prc)
#그래프 그리기
ggplot(df_divorce, aes(x=ageg, y=prc, fill=religion)) +
geom_col(position="dodge")
===================================
9. 지역별 연령대 비율
- "노년층이 많은 지역은 어디일까?"
분석 절차
1. 변수 검토 및 전처리
• 지역 변수 검토 및 전처리하기 (지역 코드 목록 만들기 => welfare에 지역명 변수 추가)
• 연령대
2. 변수 간 관계 분석
• 지역별 연령대 비율표 만들기
• 그래프 만들기 (막대 정렬하기 : 노년층 비율 높은 순 / 연령대 순으로 막대 색깔 나열하기
#변수 - 지역, 연령대
#변수간 관계 분석 - 지역별 연령대 비율표 만들기
#지역별 변수 검토 및 전처리
class(welfare$code_region)
table(welfare$code_region)
#지역코드 목록 만들기
list_region <- data.frame(code_region = c(1:7),
region=c("서울",
"수도권(인천/경기)",
"부산/경남/울산",
"대구/경북",
"대전/충남",
"강원/충북",
"광주/전남/전북/제주도"))
#welfare에 지역변수 추가
welfare <- left_join(welfare, list_region, id="code_region")
welfare %>%
select(code_region, region) %>%
head
#지역별 연령대 비율표 만들기
region_ageg <- welfare %>%
group_by(region, ageg) %>%
summarise(n=n()) %>%
mutate(tot_group=sum(n)) %>%
mutate(pct=round(n/tot_group, 2))
head(region_ageg)
#count() 활용
region_ageg <- welfare %>%
count(region, ageg) %>%
group_by(region) %>%
mutate(pct= round(n/sum(n)*100,2))
#그래프 만들기
ggplot(region_ageg, aes(x=region, y=pct, fill=ageg)) +
geom_col() +
coord_flip()
#막대정렬하기 :노년층 비율 높은순
list_order_old <- region_ageg %>%
filter(ageg=="old") %>%
arrange(pct)
#지역명 순서 변수 만들기
order <- list_order_old$region
order
#그래프 그리기
ggplot(data=region_ageg, aes(x=region, y=pct, fill=ageg))+
geom_col()+
coord_flip()+
scale_x_discrete(limits=order)
#연령대 순으로 막대 색깔 나열하기
class(region_ageg$ageg)
levels(region_ageg$ageg)
region_ageg$ageg <- factor(region_ageg$ageg,
level = c("old","middle","young"))
class(region_ageg$ageg)
levels(region_ageg$ageg)
#그래프그리기
ggplot(data = region_ageg, aes(x=region, y=pct, fill=ageg))+
geom_col() +
coord_flip()+
scale_x_discrete(limits=order)
'인공지능 개발자 양성 과정' 카테고리의 다른 글
[0420] MySQL과 모바일 웹으로 만나는 '데이터베이스의 정석' (1) (0) | 2022.04.21 |
---|---|
[0419] 데이터 분석 실습 - 한국 프로야구 선수별 기록분석 (0) | 2022.04.19 |
[0419] 데이터 분석 실습 - 서대문구 치킨집 많은 동은? (0) | 2022.04.19 |
[0419] 데이터 분석 실습 - 홍대입구 주변 아파트 시세 (0) | 2022.04.19 |
[0412] R 프로그래밍 익히기 (0) | 2022.04.13 |