본문 바로가기
카테고리 없음

R을 활용한 국내 인구동향 : 데이터 불러오기, 전처리, 요약, 시각화, 결론

by aostory77 2025. 2. 13.

 R 코드: 국내 인구동향 조사


# KOSIS(통계청)에서 데이터를 통계표에서 설정하여  다운받아 사용합니다.

 

  • 통계표(연도·항목) 설정합니다. ( 인구동향데이터 다운로드 )
  • 엑셀(또는 CSV) 다운로드 후, CSV로 저장합니다.

population.csv
0.00MB

 

#########################
# 1) 데이터 불러오기
#########################


# 연도(year), 조사망률(cdr), 합계출산률(tfr), 혼인건수(marn), 기대수명(life_expec)
# CSV 파일을 같은 작업 디렉터리(data)에 넣고 경로설정합니다.

setwd(c:/data)
stdata  <- read_csv("population.csv")

# 데이터 확인
head(stdata)

데이터 확인
데이터 확인


########################
# 2) 데이터 전처리
########################

 

# 3.1 결측치(Missing Value) 확인합니다.
> colSums(is.na(stdata))
      year        cdr        tfr       marn life_expec 
         0          0          0          0          0 

# 3.3 자료형 확인합니다.
> str(stdata)
'data.frame':   54 obs. of  5 variables:
 $ year      : int  1970 1971 1972 1973 1974 1975 1976 1977 1978 1979 ...
 $ cdr       : num  8 7.2 6.3 7.8 7.2 7.7 7.4 6.8 6.8 6.4 ...
 $ tfr       : num  4.53 4.54 4.12 4.07 3.77 3.43 3 2.99 2.64 2.9 ...
 $ marn      : int  295137 239457 244780 259112 259604 283226 285910 303156 343013 353824 ...
 $ life_expec: num  62.3 62.7 63.1 63.5 63.9 64.2 64.6 65 65.3 65.6 ...


######################
# 3) 요약 통계 및 파악
######################

 


# 4.1 연도를 10년단위로 묶어줍니다.(파생변수 생성)
stdata$year_c <- cut(stdata$year, breaks=c(1969,1980,1990,2000,2010,2020,2030),
             include.lowest=T, right=F, 
             labels=c("1970s","1980s","1990s","2000s","2010s","2020s"))

> head(stdata)
  year cdr  tfr   marn life_expec year_c
1 1970 8.0 4.53 295137       62.3  1970s
2 1971 7.2 4.54 239457       62.7  1970s
3 1972 6.3 4.12 244780       63.1  1970s
4 1973 7.8 4.07 259112       63.5  1970s
5 1974 7.2 3.77 259604       63.9  1970s


# 4.2 10년단위 연도별 요약
> tapply(stdata$tfr, stdata$year_c, mean)  #합계출산율
 1970s       1980s     1990s      2000s     2010s      2020s 
 3.5990    1.9460     1.5984    1.2139    1.1517     0.7860 


> tapply(stdata$life_expec, stdata$year_c, mean)  #기대수명
 1970s      1980s       1990s      2000s       2010s      2020s 
64.020      68.640     73.640     78.020     81.810      83.325 


> tapply(stdata$cdr, stdata$year_c, mean)  #조사망률
1970s      1980s     1990s      2000s      2010s      2020s 
7.160       6.070      5.350      5.070       5.410       6.575 

 

 

#  연도별 상관계수
> cor(stdata[ , c(1,2,3,4,5)])
                        year               cdr                       tfr                marn                life_expec
year            1.0000000     -0.5543008     -0.86542787       -0.37869728     0.9955878
cdr             -0.5543008     1.0000000       0.73866267       -0.35559345     -0.6197167
tfr              -0.8654279      0.7386627      1.00000000        -0.03352064     -0.8800023
marn         -0.3786973     -0.3555934     -0.03352064       1.00000000       -0.3252700
life_expec  0.9955878     -0.6197167     -0.88000233       -0.32527000      1.0000000

 


#######################
# 4) 시각화
#######################


# 5.1 연도별 조망률, 합계출산율, 혼인건수, 기대수명에 대한 산점도
plot(stdata[ , c(1,2,3,4,5)])plot(stdata[ , c(1,2,3,4,5)])

연도별 각 항목 산점도
연도별 각 항목 산점도


# 5.2 10년단위별 조망률, 합계출산율, 혼인건수, 기대수명의 그래프

barplot(tapply(stdata$tfr, stdata$year_c, mean),
        main="연도별 합계출산률")

barplot(tapply(stdata$cdr, stdata$year_c, mean),
        main="연도별 조사망률")

barplot(tapply(stdata$marn, stdata$year_c, mean),
        main="연도별 혼인건수")

barplot(tapply(stdata$life_expec, stdata$year_c, mean),
        main="연도별 기대수명")

10년단위별 각 요소 그래프
10년단위별 합계출산률, 조사망률, 혼인건수, 기대수명

 


###################
# 5) 결론 및 활용
###################


# 연도별 출산률과 사망률을 살펴보면, 일반적으로 출산률이 하락하는 추세를 보이는 반면
# 사망률은 점진적으로 상승하는 모습을 보입니다. 이러한 변화는 고령화 현상의 심화,
# 혼인율 및 사회경제적 요인 등에서  기인할 수 있습니다.
#
# - 출산률이 낮아지면, 향후 노동력 부족 문제나 인구 구조 불균형 등이 발생할 가능성이 높습니다.
# - 사망률이 상승한다는 것은 인구가 고령화되면서 자연스럽게 사망자 수가 늘어날 수 있음을 시사합니다.
#
# 결과적으로 전체 인구 규모가 일정 수준에서 정체되거나 감소하는 추세를 보일 수 있으며,
# 이는 복지 정책, 고용 정책, 교육 제도 등에 큰 영향을 미칠 수 있습니다.