Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |
Tags
- sklearn
- 파이썬
- Python
- langchain
- chatGPT
- fastapi #python웹개발
- pandas
- python 정렬
- 랭체인
- programmablesearchengine
- HTML
- 판다스
- 자연어분석
- 사이킷런
- 파이썬웹개발
- 판다스 데이터정렬
- fastapi
- konlpy
- 비지도학습
- 머신러닝
- deeplearning
- OpenAIAPI
- fastapi #파이썬웹개발
- pytorch
- 파이토치
- MachineLearning
- NLP
- 챗gpt
- 딥러닝
- 파이토치기본
Archives
- Today
- Total
Data Navigator
[R] 한국 복지 패널 데이타를 이용한 통계 기반 데이터 분석 본문
과목 : 04.통계 기반 데이터 분석(교과목평가)¶
변수 검토 및 전처리¶
In [17]:
library(foreign) #spss
library(dplyr)
library(ggplot2)
library(readxl) #excel
In [26]:
df <- read.spss(file='../R Test/RMD/Koweps_hpc10_2015_beta1.sav', to.data.frame= T)
Warning message in read.spss(file = "../R Test/RMD/Koweps_hpc10_2015_beta1.sav", : "../R Test/RMD/Koweps_hpc10_2015_beta1.sav: Compression bias (0) is not the usual value of 100"
In [27]:
head(df)
h10_id | h10_ind | h10_sn | h10_merkey | h_new | h10_cobf | h10_reg5 | h10_reg7 | h10_din | h10_cin | ⋯ | c1007_4aq19 | c1007_4aq20 | c1007_4aq21 | c1007_4aq22 | c1007_4aq23 | h10_pers_income1 | h10_pers_income2 | h10_pers_income3 | h10_pers_income4 | h10_pers_income5 | |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
<dbl> | <dbl> | <dbl> | <dbl> | <dbl> | <dbl> | <dbl> | <dbl> | <dbl> | <dbl> | ⋯ | <dbl> | <dbl> | <dbl> | <dbl> | <dbl> | <dbl> | <dbl> | <dbl> | <dbl> | <dbl> | |
1 | 1 | 1 | 1 | 10101 | 0 | NA | 1 | 1 | 864 | 864 | ⋯ | NA | NA | NA | NA | NA | NA | NA | NA | 0 | NA |
2 | 2 | 1 | 1 | 20101 | 0 | NA | 1 | 1 | 600 | 600 | ⋯ | NA | NA | NA | NA | NA | NA | NA | NA | 0 | NA |
3 | 3 | 1 | 1 | 30101 | 0 | NA | 1 | 1 | 1571 | 1619 | ⋯ | NA | NA | NA | NA | NA | NA | 1440 | NA | 0 | NA |
4 | 4 | 1 | 1 | 40101 | 0 | NA | 1 | 1 | 3579 | 3687 | ⋯ | NA | NA | NA | NA | NA | NA | 2400 | NA | 0 | NA |
5 | 4 | 1 | 1 | 40101 | 0 | NA | 1 | 1 | 3579 | 3687 | ⋯ | NA | NA | NA | NA | NA | NA | NA | NA | 0 | NA |
6 | 6 | 1 | 1 | 60101 | 0 | NA | 1 | 1 | 3030 | 3486 | ⋯ | NA | NA | NA | NA | NA | NA | NA | 3000 | 0 | NA |
In [28]:
str(df)
'data.frame': 16664 obs. of 957 variables: $ h10_id : num 1 2 3 4 4 6 6 6 6 6 ... $ h10_ind : num 1 1 1 1 1 1 1 1 1 1 ... $ h10_sn : num 1 1 1 1 1 1 1 1 1 1 ... $ h10_merkey : num 10101 20101 30101 40101 40101 ... $ h_new : num 0 0 0 0 0 0 0 0 0 0 ... $ h10_cobf : num NA NA NA NA NA NA NA NA NA NA ... $ h10_reg5 : num 1 1 1 1 1 1 1 1 1 1 ... $ h10_reg7 : num 1 1 1 1 1 1 1 1 1 1 ... $ h10_din : num 864 600 1571 3579 3579 ... $ h10_cin : num 864 600 1619 3687 3687 ... $ h10_flag : num 0 0 0 0 0 0 0 0 0 0 ... $ p10_wgl : num 777 960 1059 1012 1075 ... $ p10_wsl : num 0.257 0.317 0.35 0.334 0.355 ... $ p10_wgc : num 764 949 1048 992 1057 ... $ p10_wsc : num 0.252 0.314 0.346 0.328 0.349 ... $ h10_hc : num 2 2 1 1 1 1 1 1 1 1 ... $ nh1001_1 : num NA NA NA NA NA NA NA NA NA NA ... $ nh1001_2 : num NA NA NA NA NA NA NA NA NA NA ... $ h1001_1 : num 1 1 1 2 2 5 5 5 5 5 ... $ h10_pind : num 1 1 1 1 4 1 1 1 1 1 ... $ h10_pid : num 101 201 301 401 402 601 602 603 604 605 ... $ h10_g1 : num 1 1 1 1 2 1 2 3 4 5 ... $ h10_g2 : num 10 10 10 10 2 10 20 11 1 2 ... $ h10_g3 : num 2 2 1 1 2 1 2 2 1 2 ... $ h10_g4 : num 1936 1945 1948 1942 1923 ... $ h10_g6 : num 2 4 3 7 2 6 5 3 4 4 ... $ h10_g7 : num 0 5 5 3 0 5 5 1 5 5 ... $ h10_g8 : num 0 0 0 0 0 0 0 0 0 0 ... $ h10_g9 : num 0 0 0 0 0 0 0 0 0 0 ... $ h10_g10 : num 2 2 2 3 2 1 1 0 1 1 ... $ h10_g11 : num 2 2 2 1 1 1 1 1 1 1 ... $ h10_g12 : num 1 1 1 1 1 1 1 1 1 1 ... $ h1001_110 : num 1 1 1 5 5 5 5 5 5 5 ... $ h1001_5aq1 : num 0 0 0 0 0 0 0 0 0 0 ... $ h1001_5aq2 : num 0 0 0 0 0 0 0 0 0 0 ... $ h1001_5aq3 : num 0 0 0 0 0 0 0 0 0 0 ... $ h1001_5aq4 : num 0 0 0 0 0 0 0 0 0 0 ... $ h10_med1 : num 1 1 1 1 2 1 2 3 4 5 ... $ h10_med2 : num 3 4 3 3 4 3 5 2 3 3 ... $ h10_med3 : num 60 28 12 3 6 5 0 3 0 14 ... $ h10_med4 : num 0 0 0 0 0 0 5 0 0 0 ... $ h10_med5 : num 0 0 0 0 0 0 23 0 0 0 ... $ h10_med6 : num 0 0 0 0 0 0 1 0 0 0 ... $ h10_med7 : num 3 2 2 1 1 2 1 2 0 2 ... $ h10_med8 : num 0 1 0 1 1 1 1 0 0 1 ... $ h10_g9_1 : num 3 3 3 3 3 3 3 0 0 3 ... $ h10_med9 : num 8 5 7 3 15 23 1 0 0 6 ... $ h10_med10 : num 0 0 0 0 0 1 1 1 0 0 ... $ h10_eco1 : num 1 1 1 1 2 1 2 3 4 5 ... $ h10_eco2 : num 2 3 1 1 3 1 1 0 3 3 ... $ h10_eco3 : num NA NA NA NA NA NA NA NA NA NA ... $ h10_eco4 : num 9 9 2 2 9 6 9 NA 9 9 ... $ h10_eco4_1 : num NA NA NA NA NA NA NA NA NA NA ... $ h10_eco5_1 : num NA NA 1 1 NA NA NA NA NA NA ... $ h10_eco6 : num NA NA 2 2 NA NA NA NA NA NA ... $ h10_eco_7_1 : num NA NA 1 1 NA NA NA NA NA NA ... $ h10_eco_7_2 : num NA NA 2 2 NA NA NA NA NA NA ... $ h10_eco_7_3 : num NA NA 1 3 NA NA NA NA NA NA ... $ h10_eco8 : num NA NA 75 42 NA 46 NA NA NA NA ... $ h10_eco9 : num NA NA 942 762 NA 530 NA NA NA NA ... $ h10_eco10 : num NA NA 3 2 NA 1 NA NA NA NA ... $ h10_eco11 : num 10 10 NA NA 10 NA 6 NA 10 10 ... $ h10_soc1 : num 1 1 1 1 2 1 2 3 4 5 ... $ h10_soc_2 : num 0 0 0 1 0 2 0 0 0 0 ... $ h10_soc_3 : num NA NA NA NA NA 1 NA NA NA NA ... $ h10_soc_4 : num NA NA NA NA NA 2 NA NA NA NA ... $ h10_soc_5 : num NA NA NA NA NA 1 NA NA NA NA ... $ h10_soc_6 : num NA NA NA NA NA NA NA NA NA NA ... $ h10_soc_7 : num NA NA NA NA NA NA NA NA NA NA ... $ h10_soc_8 : num NA NA NA NA NA NA NA NA NA NA ... $ h10_soc_9 : num NA NA NA NA NA 0 NA NA NA NA ... $ h10_soc_10 : num NA NA NA NA NA 0 NA NA NA NA ... $ h10_soc_11 : num NA NA NA NA NA NA NA NA NA NA ... $ h10_soc8 : num 0 0 1 2 0 0 0 0 0 0 ... $ h10_soc9 : num 0 0 1 2 0 0 0 0 0 0 ... $ h10_soc11 : num 0 0 2 2 0 0 0 0 0 0 ... $ h10_soc10 : num 0 0 2 2 0 0 0 0 0 0 ... $ h10_soc_12 : num 4 4 4 4 4 4 4 4 4 4 ... $ h10_soc_13 : num 4 4 1 3 4 3 4 4 4 4 ... $ h1005_1 : num 1 1 1 1 1 1 1 1 1 1 ... $ h1005_3aq1 : num 2 2 1 2 2 2 2 2 2 2 ... $ h1005_2 : num NA NA NA NA NA NA NA NA NA NA ... $ h1005_3 : num NA NA NA NA NA NA NA NA NA NA ... $ h1005_4 : num 2 2 2 2 2 2 2 2 2 2 ... $ h1005_5 : num NA NA NA NA NA NA NA NA NA NA ... $ h1005_6 : num NA NA NA NA NA NA NA NA NA NA ... $ h1005_7 : num 0 0 0 0 0 1 1 1 1 1 ... $ nh1005_8 : num 4 3 3 3 3 3 3 3 3 3 ... $ nh1005_9 : num 5 4 3 3 3 4 4 4 4 4 ... $ h1005_3aq2 : num 0 0 0 0 0 11 11 11 11 11 ... $ h1006_aq1 : num 2 2 2 2 2 2 2 2 2 2 ... $ h1006_1 : num 2 2 2 1 1 2 2 2 2 2 ... $ h1006_2 : num 3 3 1 3 3 3 3 3 3 3 ... $ h1006_4 : num 2 3 1 3 3 3 3 3 3 3 ... $ h1006_5 : num 33 198 23 73 73 82 82 82 82 82 ... $ h1006_3 : num 2 1 3 1 1 1 1 1 1 1 ... $ h1006_6 : num 5000 60000 200 20000 20000 50700 50700 50700 50700 50700 ... $ h1006_8 : num 1 1 1 1 1 1 1 1 1 1 ... $ h1006_9 : num 88 4 88 88 88 88 88 88 88 88 ... [list output truncated] - attr(*, "variable.labels")= Named chr [1:957] "가구 패널 ID(h10_id)" "가구생성차수(h10_ind)" "가구분리일련번호(h10_sn)" "패널간 가구머지 키변수(h10_merkey)" ... ..- attr(*, "names")= chr [1:957] "h10_id" "h10_ind" "h10_sn" "h10_merkey" ...
나이와 월급의 관계 : 몇 살 때 월급을 가장 적게 또는 많이 받을까?¶
In [ ]:
In [29]:
# 분석에 필요한 컬컴의 이름 변경
df <- rename(df,
sex=h10_g3,
birth=h10_g4,
marriage=h10_g10,
religion=h10_g11,
income=p1002_8aq1,
code_job=h10_eco9,
code_region=h10_reg7)
In [30]:
head(df)
h10_id | h10_ind | h10_sn | h10_merkey | h_new | h10_cobf | h10_reg5 | code_region | h10_din | h10_cin | ⋯ | c1007_4aq19 | c1007_4aq20 | c1007_4aq21 | c1007_4aq22 | c1007_4aq23 | h10_pers_income1 | h10_pers_income2 | h10_pers_income3 | h10_pers_income4 | h10_pers_income5 | |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
<dbl> | <dbl> | <dbl> | <dbl> | <dbl> | <dbl> | <dbl> | <dbl> | <dbl> | <dbl> | ⋯ | <dbl> | <dbl> | <dbl> | <dbl> | <dbl> | <dbl> | <dbl> | <dbl> | <dbl> | <dbl> | |
1 | 1 | 1 | 1 | 10101 | 0 | NA | 1 | 1 | 864 | 864 | ⋯ | NA | NA | NA | NA | NA | NA | NA | NA | 0 | NA |
2 | 2 | 1 | 1 | 20101 | 0 | NA | 1 | 1 | 600 | 600 | ⋯ | NA | NA | NA | NA | NA | NA | NA | NA | 0 | NA |
3 | 3 | 1 | 1 | 30101 | 0 | NA | 1 | 1 | 1571 | 1619 | ⋯ | NA | NA | NA | NA | NA | NA | 1440 | NA | 0 | NA |
4 | 4 | 1 | 1 | 40101 | 0 | NA | 1 | 1 | 3579 | 3687 | ⋯ | NA | NA | NA | NA | NA | NA | 2400 | NA | 0 | NA |
5 | 4 | 1 | 1 | 40101 | 0 | NA | 1 | 1 | 3579 | 3687 | ⋯ | NA | NA | NA | NA | NA | NA | NA | NA | 0 | NA |
6 | 6 | 1 | 1 | 60101 | 0 | NA | 1 | 1 | 3030 | 3486 | ⋯ | NA | NA | NA | NA | NA | NA | NA | 3000 | 0 | NA |
In [37]:
age = 2015-df$birth
head(age)
- 79
- 70
- 67
- 73
- 92
- 53
In [35]:
df = cbind(df, age)
In [38]:
head(df$age)
- 79
- 70
- 67
- 73
- 92
- 53
나이와 임금 컬럼의 결측치 확인¶
In [40]:
table(is.na(df$age))
table(is.na(df$income))
FALSE 16664
FALSE TRUE 4634 12030
In [43]:
age_income <- df %>%
filter(!is.na(income)) %>%
group_by(age) %>%
summarise(mean_income=mean(income))
`summarise()` ungrouping output (override with `.groups` argument)
In [46]:
summary(age_income)
age mean_income Min. :19.00 Min. : 15.00 1st Qu.:36.00 1st Qu.: 98.05 Median :53.00 Median :188.25 Mean :53.04 Mean :176.75 3rd Qu.:70.00 3rd Qu.:282.47 Max. :88.00 Max. :318.68
In [49]:
head(age_income)
age | mean_income |
---|---|
<dbl> | <dbl> |
19 | 121.3000 |
20 | 105.5185 |
21 | 130.0923 |
22 | 141.7157 |
23 | 134.0877 |
24 | 144.6559 |
평균 임금이 가장 높은 나이: 52세¶
In [48]:
max(age_income)
318.677747747748
In [51]:
age_income[which(age_income$mean_income == '318.677747747748'),]
age | mean_income |
---|---|
<dbl> | <dbl> |
52 | 318.6777 |
In [52]:
min(age_income)
15
평균 임금이 가장 낮은 나이: 87세¶
In [53]:
age_income[which(age_income$mean_income == '15'),]
age | mean_income |
---|---|
<dbl> | <dbl> |
87 | 15 |
나이별 평균 임금 그래프¶
In [54]:
ggplot(data=age_income, aes(x=age, y=mean_income)) +
geom_line()
문제 2. 나이와 월급의 관계 : 지역별 연령대 비율 : 노년층이 적은 지역과 많은 지역은 어디일까?¶
노인 인구가 많은 지역: 대구경북, 노인 인구가 적은지역: 수도권 인천 경기¶
사례 고령화 사회가 되면서 노인들을 위한 시설을 마련하는 일이 점점 더 중요해지고 있습니다. 노인들을 위한 시설을 마련하려면 우선 어느 지역에 노인들이 많이 살고 있는지 알아야 합니다.지역별 연령대 비율을 분석해 노년층이 많은 지역이 어디인지 찾아보세요.
문제 1번과 같은 데이터셋을 사용하므로 age 컬럼이 추가된 df 데이터프레임을 사용하여 분석함.¶
In [59]:
str(df)
'data.frame': 16664 obs. of 958 variables: $ h10_id : num 1 2 3 4 4 6 6 6 6 6 ... $ h10_ind : num 1 1 1 1 1 1 1 1 1 1 ... $ h10_sn : num 1 1 1 1 1 1 1 1 1 1 ... $ h10_merkey : num 10101 20101 30101 40101 40101 ... $ h_new : num 0 0 0 0 0 0 0 0 0 0 ... $ h10_cobf : num NA NA NA NA NA NA NA NA NA NA ... $ h10_reg5 : num 1 1 1 1 1 1 1 1 1 1 ... $ code_region : num 1 1 1 1 1 1 1 1 1 1 ... $ h10_din : num 864 600 1571 3579 3579 ... $ h10_cin : num 864 600 1619 3687 3687 ... $ h10_flag : num 0 0 0 0 0 0 0 0 0 0 ... $ p10_wgl : num 777 960 1059 1012 1075 ... $ p10_wsl : num 0.257 0.317 0.35 0.334 0.355 ... $ p10_wgc : num 764 949 1048 992 1057 ... $ p10_wsc : num 0.252 0.314 0.346 0.328 0.349 ... $ h10_hc : num 2 2 1 1 1 1 1 1 1 1 ... $ nh1001_1 : num NA NA NA NA NA NA NA NA NA NA ... $ nh1001_2 : num NA NA NA NA NA NA NA NA NA NA ... $ h1001_1 : num 1 1 1 2 2 5 5 5 5 5 ... $ h10_pind : num 1 1 1 1 4 1 1 1 1 1 ... $ h10_pid : num 101 201 301 401 402 601 602 603 604 605 ... $ h10_g1 : num 1 1 1 1 2 1 2 3 4 5 ... $ h10_g2 : num 10 10 10 10 2 10 20 11 1 2 ... $ sex : num 2 2 1 1 2 1 2 2 1 2 ... $ birth : num 1936 1945 1948 1942 1923 ... $ h10_g6 : num 2 4 3 7 2 6 5 3 4 4 ... $ h10_g7 : num 0 5 5 3 0 5 5 1 5 5 ... $ h10_g8 : num 0 0 0 0 0 0 0 0 0 0 ... $ h10_g9 : num 0 0 0 0 0 0 0 0 0 0 ... $ marriage : num 2 2 2 3 2 1 1 0 1 1 ... $ religion : num 2 2 2 1 1 1 1 1 1 1 ... $ h10_g12 : num 1 1 1 1 1 1 1 1 1 1 ... $ h1001_110 : num 1 1 1 5 5 5 5 5 5 5 ... $ h1001_5aq1 : num 0 0 0 0 0 0 0 0 0 0 ... $ h1001_5aq2 : num 0 0 0 0 0 0 0 0 0 0 ... $ h1001_5aq3 : num 0 0 0 0 0 0 0 0 0 0 ... $ h1001_5aq4 : num 0 0 0 0 0 0 0 0 0 0 ... $ h10_med1 : num 1 1 1 1 2 1 2 3 4 5 ... $ h10_med2 : num 3 4 3 3 4 3 5 2 3 3 ... $ h10_med3 : num 60 28 12 3 6 5 0 3 0 14 ... $ h10_med4 : num 0 0 0 0 0 0 5 0 0 0 ... $ h10_med5 : num 0 0 0 0 0 0 23 0 0 0 ... $ h10_med6 : num 0 0 0 0 0 0 1 0 0 0 ... $ h10_med7 : num 3 2 2 1 1 2 1 2 0 2 ... $ h10_med8 : num 0 1 0 1 1 1 1 0 0 1 ... $ h10_g9_1 : num 3 3 3 3 3 3 3 0 0 3 ... $ h10_med9 : num 8 5 7 3 15 23 1 0 0 6 ... $ h10_med10 : num 0 0 0 0 0 1 1 1 0 0 ... $ h10_eco1 : num 1 1 1 1 2 1 2 3 4 5 ... $ h10_eco2 : num 2 3 1 1 3 1 1 0 3 3 ... $ h10_eco3 : num NA NA NA NA NA NA NA NA NA NA ... $ h10_eco4 : num 9 9 2 2 9 6 9 NA 9 9 ... $ h10_eco4_1 : num NA NA NA NA NA NA NA NA NA NA ... $ h10_eco5_1 : num NA NA 1 1 NA NA NA NA NA NA ... $ h10_eco6 : num NA NA 2 2 NA NA NA NA NA NA ... $ h10_eco_7_1 : num NA NA 1 1 NA NA NA NA NA NA ... $ h10_eco_7_2 : num NA NA 2 2 NA NA NA NA NA NA ... $ h10_eco_7_3 : num NA NA 1 3 NA NA NA NA NA NA ... $ h10_eco8 : num NA NA 75 42 NA 46 NA NA NA NA ... $ code_job : num NA NA 942 762 NA 530 NA NA NA NA ... $ h10_eco10 : num NA NA 3 2 NA 1 NA NA NA NA ... $ h10_eco11 : num 10 10 NA NA 10 NA 6 NA 10 10 ... $ h10_soc1 : num 1 1 1 1 2 1 2 3 4 5 ... $ h10_soc_2 : num 0 0 0 1 0 2 0 0 0 0 ... $ h10_soc_3 : num NA NA NA NA NA 1 NA NA NA NA ... $ h10_soc_4 : num NA NA NA NA NA 2 NA NA NA NA ... $ h10_soc_5 : num NA NA NA NA NA 1 NA NA NA NA ... $ h10_soc_6 : num NA NA NA NA NA NA NA NA NA NA ... $ h10_soc_7 : num NA NA NA NA NA NA NA NA NA NA ... $ h10_soc_8 : num NA NA NA NA NA NA NA NA NA NA ... $ h10_soc_9 : num NA NA NA NA NA 0 NA NA NA NA ... $ h10_soc_10 : num NA NA NA NA NA 0 NA NA NA NA ... $ h10_soc_11 : num NA NA NA NA NA NA NA NA NA NA ... $ h10_soc8 : num 0 0 1 2 0 0 0 0 0 0 ... $ h10_soc9 : num 0 0 1 2 0 0 0 0 0 0 ... $ h10_soc11 : num 0 0 2 2 0 0 0 0 0 0 ... $ h10_soc10 : num 0 0 2 2 0 0 0 0 0 0 ... $ h10_soc_12 : num 4 4 4 4 4 4 4 4 4 4 ... $ h10_soc_13 : num 4 4 1 3 4 3 4 4 4 4 ... $ h1005_1 : num 1 1 1 1 1 1 1 1 1 1 ... $ h1005_3aq1 : num 2 2 1 2 2 2 2 2 2 2 ... $ h1005_2 : num NA NA NA NA NA NA NA NA NA NA ... $ h1005_3 : num NA NA NA NA NA NA NA NA NA NA ... $ h1005_4 : num 2 2 2 2 2 2 2 2 2 2 ... $ h1005_5 : num NA NA NA NA NA NA NA NA NA NA ... $ h1005_6 : num NA NA NA NA NA NA NA NA NA NA ... $ h1005_7 : num 0 0 0 0 0 1 1 1 1 1 ... $ nh1005_8 : num 4 3 3 3 3 3 3 3 3 3 ... $ nh1005_9 : num 5 4 3 3 3 4 4 4 4 4 ... $ h1005_3aq2 : num 0 0 0 0 0 11 11 11 11 11 ... $ h1006_aq1 : num 2 2 2 2 2 2 2 2 2 2 ... $ h1006_1 : num 2 2 2 1 1 2 2 2 2 2 ... $ h1006_2 : num 3 3 1 3 3 3 3 3 3 3 ... $ h1006_4 : num 2 3 1 3 3 3 3 3 3 3 ... $ h1006_5 : num 33 198 23 73 73 82 82 82 82 82 ... $ h1006_3 : num 2 1 3 1 1 1 1 1 1 1 ... $ h1006_6 : num 5000 60000 200 20000 20000 50700 50700 50700 50700 50700 ... $ h1006_8 : num 1 1 1 1 1 1 1 1 1 1 ... $ h1006_9 : num 88 4 88 88 88 88 88 88 88 88 ... [list output truncated]
지역 컬럼은 code_region, 나이는 1번에서 추가한 age¶
In [60]:
str(df$code_region)
num [1:16664] 1 1 1 1 1 1 1 1 1 1 ...
In [61]:
table(df$code_region)
1 2 3 4 5 6 7 2486 3711 2785 2036 1467 1257 2922
지역코드 값을 한글로 변경¶
In [63]:
#지역 코드 데이터 프레임 생성
list_region <- data.frame(
code_region=c(1:7),
region= c('서울', '수도권(인천/경기)',
'부산/경남/울산','대구/경북',
'대전/충남','강원/충북',
'광주/전남/전북/제주도')
)
In [64]:
list_region
code_region | region |
---|---|
<int> | <chr> |
1 | 서울 |
2 | 수도권(인천/경기) |
3 | 부산/경남/울산 |
4 | 대구/경북 |
5 | 대전/충남 |
6 | 강원/충북 |
7 | 광주/전남/전북/제주도 |
left_join을 통해서 지역 코드와 매칭시켜 region 컬럼을 df 데이터 프레임에 추가¶
In [65]:
df <- left_join(df, list_region, id='code_region')
Joining, by = "code_region"
In [67]:
head(df$region)
- '서울'
- '서울'
- '서울'
- '서울'
- '서울'
- '서울'
In [69]:
# 지역 빈도 확인
table(df$region)
강원/충북 광주/전남/전북/제주도 대구/경북 1257 2922 2036 대전/충남 부산/경남/울산 서울 1467 2785 2486 수도권(인천/경기) 3711
청년, 중년, 노년층을 나누기 위해서 3개의 구간으로 연령을 나눔¶
In [70]:
df <- df %>%
mutate(agebin=ifelse(age < 30,'young',
ifelse(age<=59, 'middle','old')))
In [75]:
table(df$agebin)
middle old young 6128 6072 4464
지역별 연령별로 빈도수를 구함¶
In [77]:
region_agebin <- df %>%
group_by(region,agebin) %>%
summarise(n=n()) %>%
mutate(tot_group=sum(n)) %>%
mutate(pct=round(n/tot_group*100,2))
`summarise()` regrouping output by 'region' (override with `.groups` argument)
In [78]:
region_agebin
region | agebin | n | tot_group | pct |
---|---|---|---|---|
<chr> | <chr> | <int> | <int> | <dbl> |
강원/충북 | middle | 431 | 1257 | 34.29 |
강원/충북 | old | 532 | 1257 | 42.32 |
강원/충북 | young | 294 | 1257 | 23.39 |
광주/전남/전북/제주도 | middle | 963 | 2922 | 32.96 |
광주/전남/전북/제주도 | old | 1201 | 2922 | 41.10 |
광주/전남/전북/제주도 | young | 758 | 2922 | 25.94 |
대구/경북 | middle | 651 | 2036 | 31.97 |
대구/경북 | old | 904 | 2036 | 44.40 |
대구/경북 | young | 481 | 2036 | 23.62 |
대전/충남 | middle | 557 | 1467 | 37.97 |
대전/충남 | old | 509 | 1467 | 34.70 |
대전/충남 | young | 401 | 1467 | 27.33 |
부산/경남/울산 | middle | 992 | 2785 | 35.62 |
부산/경남/울산 | old | 1094 | 2785 | 39.28 |
부산/경남/울산 | young | 699 | 2785 | 25.10 |
서울 | middle | 1032 | 2486 | 41.51 |
서울 | old | 769 | 2486 | 30.93 |
서울 | young | 685 | 2486 | 27.55 |
수도권(인천/경기) | middle | 1502 | 3711 | 40.47 |
수도권(인천/경기) | old | 1063 | 3711 | 28.64 |
수도권(인천/경기) | young | 1146 | 3711 | 30.88 |
In [79]:
ggplot(data=region_agebin, aes(x=region, y=pct, fill=agebin))+
geom_col()+
coord_flip()
노인 인구가 많은 지역 순으로 정렬¶
In [80]:
list_order_old <- region_agebin %>%
filter(agebin=='old') %>%
arrange(pct)
In [81]:
head(region_agebin)
region | agebin | n | tot_group | pct |
---|---|---|---|---|
<chr> | <chr> | <int> | <int> | <dbl> |
강원/충북 | middle | 431 | 1257 | 34.29 |
강원/충북 | old | 532 | 1257 | 42.32 |
강원/충북 | young | 294 | 1257 | 23.39 |
광주/전남/전북/제주도 | middle | 963 | 2922 | 32.96 |
광주/전남/전북/제주도 | old | 1201 | 2922 | 41.10 |
광주/전남/전북/제주도 | young | 758 | 2922 | 25.94 |
In [82]:
order <- list_order_old$region
order
- '수도권(인천/경기)'
- '서울'
- '대전/충남'
- '부산/경남/울산'
- '광주/전남/전북/제주도'
- '강원/충북'
- '대구/경북'
In [83]:
ggplot(data = region_agebin, aes(x = region, y = pct, fill = agebin)) +
geom_col() +
coord_flip() +
scale_x_discrete(limits =order)
In [84]:
region_agebin$agebin <- factor(region_agebin$agebin, level=c('old','middle','young'))
region_agebin$agebin
- middle
- old
- young
- middle
- old
- young
- middle
- old
- young
- middle
- old
- young
- middle
- old
- young
- middle
- old
- young
- middle
- old
- young
Levels:
- 'old'
- 'middle'
- 'young'
In [85]:
ggplot(data = region_agebin, aes(x = region, y = pct, fill = agebin)) +
geom_col() +
coord_flip() +
scale_x_discrete(limits =order)
In [ ]:
DataSet : Koweps_hpc10_2015_beta1.sav (do it 한국복지패널데이타)¶
3번 문제도 위의 1,2번과 같은 데이터를 사용하므로 위의 df 데이터프레임을 사용함.¶
In [87]:
str(df)
'data.frame': 16664 obs. of 960 variables: $ h10_id : num 1 2 3 4 4 6 6 6 6 6 ... $ h10_ind : num 1 1 1 1 1 1 1 1 1 1 ... $ h10_sn : num 1 1 1 1 1 1 1 1 1 1 ... $ h10_merkey : num 10101 20101 30101 40101 40101 ... $ h_new : num 0 0 0 0 0 0 0 0 0 0 ... $ h10_cobf : num NA NA NA NA NA NA NA NA NA NA ... $ h10_reg5 : num 1 1 1 1 1 1 1 1 1 1 ... $ code_region : num 1 1 1 1 1 1 1 1 1 1 ... $ h10_din : num 864 600 1571 3579 3579 ... $ h10_cin : num 864 600 1619 3687 3687 ... $ h10_flag : num 0 0 0 0 0 0 0 0 0 0 ... $ p10_wgl : num 777 960 1059 1012 1075 ... $ p10_wsl : num 0.257 0.317 0.35 0.334 0.355 ... $ p10_wgc : num 764 949 1048 992 1057 ... $ p10_wsc : num 0.252 0.314 0.346 0.328 0.349 ... $ h10_hc : num 2 2 1 1 1 1 1 1 1 1 ... $ nh1001_1 : num NA NA NA NA NA NA NA NA NA NA ... $ nh1001_2 : num NA NA NA NA NA NA NA NA NA NA ... $ h1001_1 : num 1 1 1 2 2 5 5 5 5 5 ... $ h10_pind : num 1 1 1 1 4 1 1 1 1 1 ... $ h10_pid : num 101 201 301 401 402 601 602 603 604 605 ... $ h10_g1 : num 1 1 1 1 2 1 2 3 4 5 ... $ h10_g2 : num 10 10 10 10 2 10 20 11 1 2 ... $ sex : num 2 2 1 1 2 1 2 2 1 2 ... $ birth : num 1936 1945 1948 1942 1923 ... $ h10_g6 : num 2 4 3 7 2 6 5 3 4 4 ... $ h10_g7 : num 0 5 5 3 0 5 5 1 5 5 ... $ h10_g8 : num 0 0 0 0 0 0 0 0 0 0 ... $ h10_g9 : num 0 0 0 0 0 0 0 0 0 0 ... $ marriage : num 2 2 2 3 2 1 1 0 1 1 ... $ religion : num 2 2 2 1 1 1 1 1 1 1 ... $ h10_g12 : num 1 1 1 1 1 1 1 1 1 1 ... $ h1001_110 : num 1 1 1 5 5 5 5 5 5 5 ... $ h1001_5aq1 : num 0 0 0 0 0 0 0 0 0 0 ... $ h1001_5aq2 : num 0 0 0 0 0 0 0 0 0 0 ... $ h1001_5aq3 : num 0 0 0 0 0 0 0 0 0 0 ... $ h1001_5aq4 : num 0 0 0 0 0 0 0 0 0 0 ... $ h10_med1 : num 1 1 1 1 2 1 2 3 4 5 ... $ h10_med2 : num 3 4 3 3 4 3 5 2 3 3 ... $ h10_med3 : num 60 28 12 3 6 5 0 3 0 14 ... $ h10_med4 : num 0 0 0 0 0 0 5 0 0 0 ... $ h10_med5 : num 0 0 0 0 0 0 23 0 0 0 ... $ h10_med6 : num 0 0 0 0 0 0 1 0 0 0 ... $ h10_med7 : num 3 2 2 1 1 2 1 2 0 2 ... $ h10_med8 : num 0 1 0 1 1 1 1 0 0 1 ... $ h10_g9_1 : num 3 3 3 3 3 3 3 0 0 3 ... $ h10_med9 : num 8 5 7 3 15 23 1 0 0 6 ... $ h10_med10 : num 0 0 0 0 0 1 1 1 0 0 ... $ h10_eco1 : num 1 1 1 1 2 1 2 3 4 5 ... $ h10_eco2 : num 2 3 1 1 3 1 1 0 3 3 ... $ h10_eco3 : num NA NA NA NA NA NA NA NA NA NA ... $ h10_eco4 : num 9 9 2 2 9 6 9 NA 9 9 ... $ h10_eco4_1 : num NA NA NA NA NA NA NA NA NA NA ... $ h10_eco5_1 : num NA NA 1 1 NA NA NA NA NA NA ... $ h10_eco6 : num NA NA 2 2 NA NA NA NA NA NA ... $ h10_eco_7_1 : num NA NA 1 1 NA NA NA NA NA NA ... $ h10_eco_7_2 : num NA NA 2 2 NA NA NA NA NA NA ... $ h10_eco_7_3 : num NA NA 1 3 NA NA NA NA NA NA ... $ h10_eco8 : num NA NA 75 42 NA 46 NA NA NA NA ... $ code_job : num NA NA 942 762 NA 530 NA NA NA NA ... $ h10_eco10 : num NA NA 3 2 NA 1 NA NA NA NA ... $ h10_eco11 : num 10 10 NA NA 10 NA 6 NA 10 10 ... $ h10_soc1 : num 1 1 1 1 2 1 2 3 4 5 ... $ h10_soc_2 : num 0 0 0 1 0 2 0 0 0 0 ... $ h10_soc_3 : num NA NA NA NA NA 1 NA NA NA NA ... $ h10_soc_4 : num NA NA NA NA NA 2 NA NA NA NA ... $ h10_soc_5 : num NA NA NA NA NA 1 NA NA NA NA ... $ h10_soc_6 : num NA NA NA NA NA NA NA NA NA NA ... $ h10_soc_7 : num NA NA NA NA NA NA NA NA NA NA ... $ h10_soc_8 : num NA NA NA NA NA NA NA NA NA NA ... $ h10_soc_9 : num NA NA NA NA NA 0 NA NA NA NA ... $ h10_soc_10 : num NA NA NA NA NA 0 NA NA NA NA ... $ h10_soc_11 : num NA NA NA NA NA NA NA NA NA NA ... $ h10_soc8 : num 0 0 1 2 0 0 0 0 0 0 ... $ h10_soc9 : num 0 0 1 2 0 0 0 0 0 0 ... $ h10_soc11 : num 0 0 2 2 0 0 0 0 0 0 ... $ h10_soc10 : num 0 0 2 2 0 0 0 0 0 0 ... $ h10_soc_12 : num 4 4 4 4 4 4 4 4 4 4 ... $ h10_soc_13 : num 4 4 1 3 4 3 4 4 4 4 ... $ h1005_1 : num 1 1 1 1 1 1 1 1 1 1 ... $ h1005_3aq1 : num 2 2 1 2 2 2 2 2 2 2 ... $ h1005_2 : num NA NA NA NA NA NA NA NA NA NA ... $ h1005_3 : num NA NA NA NA NA NA NA NA NA NA ... $ h1005_4 : num 2 2 2 2 2 2 2 2 2 2 ... $ h1005_5 : num NA NA NA NA NA NA NA NA NA NA ... $ h1005_6 : num NA NA NA NA NA NA NA NA NA NA ... $ h1005_7 : num 0 0 0 0 0 1 1 1 1 1 ... $ nh1005_8 : num 4 3 3 3 3 3 3 3 3 3 ... $ nh1005_9 : num 5 4 3 3 3 4 4 4 4 4 ... $ h1005_3aq2 : num 0 0 0 0 0 11 11 11 11 11 ... $ h1006_aq1 : num 2 2 2 2 2 2 2 2 2 2 ... $ h1006_1 : num 2 2 2 1 1 2 2 2 2 2 ... $ h1006_2 : num 3 3 1 3 3 3 3 3 3 3 ... $ h1006_4 : num 2 3 1 3 3 3 3 3 3 3 ... $ h1006_5 : num 33 198 23 73 73 82 82 82 82 82 ... $ h1006_3 : num 2 1 3 1 1 1 1 1 1 1 ... $ h1006_6 : num 5000 60000 200 20000 20000 50700 50700 50700 50700 50700 ... $ h1006_8 : num 1 1 1 1 1 1 1 1 1 1 ... $ h1006_9 : num 88 4 88 88 88 88 88 88 88 88 ... [list output truncated]
종교에 따른 이혼율을 분석하므로 marriage와 religion 컬럼을 이용해 분석¶
In [89]:
table(df$religion) # 종교는 있음/없음으로 구분
1 2 8047 8617
In [90]:
table(df$marriage) #결혼은 7단계로 구분되어 있음
0 1 2 3 4 5 6 2861 8431 2117 712 84 2433 26
religion 컬럼의 값이 1이면 yes, 2면 no로 치환¶
In [91]:
df$religion <- ifelse(df$religion ==1, 'yes','no')
table(df$religion)
no yes 8617 8047
In [92]:
qplot(df$religion)
종교가 없는 사람의 비율이 다소 높음¶
marriage 컬럼의 값 중 1은 marriage, 3은 divorce로 치환하고 나머지는 NA로 처리해서 데이터 프레임에 group_marriage 추가¶
In [93]:
df$group_marriage <- ifelse(df$marriage==1,'marriage',
ifelse(df$marriage==3,'divorce',NA))
In [94]:
table(df$group_marriage)
divorce marriage 712 8431
In [96]:
qplot(df$group_marriage)
종교 유무에 따른 이혼율을 구하기 위해서 그룹을 분할¶
In [97]:
reg_mar <- df %>%
filter(!is.na(group_marriage)) %>%
group_by(religion, group_marriage) %>%
summarise(n=n()) %>%
mutate(tot_group=sum(n)) %>%
mutate(pct=round(n/tot_group*100, 1))
reg_mar
`summarise()` regrouping output by 'religion' (override with `.groups` argument)
religion | group_marriage | n | tot_group | pct |
---|---|---|---|---|
<chr> | <chr> | <int> | <int> | <dbl> |
no | divorce | 384 | 4602 | 8.3 |
no | marriage | 4218 | 4602 | 91.7 |
yes | divorce | 328 | 4541 | 7.2 |
yes | marriage | 4213 | 4541 | 92.8 |
이혼율만 따로 구하기 위해서 종교유무에 따른 이혼빈도만 가져옴¶
In [98]:
divorce <- reg_mar %>%
filter(group_marriage=='divorce') %>%
select(religion, pct)
In [99]:
divorce
religion | pct |
---|---|
<chr> | <dbl> |
no | 8.3 |
yes | 7.2 |
In [100]:
ggplot(data=divorce, aes(x=religion, y=pct))+
geom_col()
종교와 이혼율을 크게 상관이 없다.¶
In [ ]:
In [ ]:
In [ ]:
In [ ]:
In [ ]:
In [ ]:
In [ ]:
In [ ]:
In [ ]:
In [ ]:
In [ ]:
In [ ]:
'DataAnalysisProject' 카테고리의 다른 글
[NLP, 키워드 빈도 분석] 고양시 관광 관련 인스타그램 수집 자료 분석 (0) | 2021.03.28 |
---|---|
[R] 한국KBO 자료를 통한 안타(H)과 병살타(GDP)의 회귀분석 (0) | 2021.01.16 |
[R] 통계청 2013년 발표 연령, 남녀, 경력별 월급 데이터셋을 이용한 기술적 분석 (0) | 2021.01.16 |