R Studio*를 실행하고 File, New Project... 메뉴를 클릭하고 New Project Wizard 창에서 첫 번째 New Directory를 선택합니다. Project Type 창에서는 New Project를 선택합니다.
* R 4.4.3-win, RStudio 2024.12.1, RTools 4.4 버전을 기준으로 작성했습니다.
서울시 청년인구 격자별 순위 분석(R)
분석내용 PDF 다운로드
/
소스 다운로드
통계데이터센터(SDC)에서 서비스하는 청년인구 격자통계와 R Studio를 이용해서 서울시 청년인구 격자순위를 분석하는 과정을 단계별로 설명합니다.
1프로젝트 설정 및 분석 준비하기
Browse...를 눌러서 프로젝트를 저장할 폴더를 선택하고 Directory name에 서울시 청년인구 격자순위 분석 등 프로젝트명을 입력하고 Create Project를 클릭하면 프로젝트가 생성됩니다.



여기서는 C:\SGIS\R\서울시 청년인구 격자순위 분석 폴더에 분석에 필요한 경계와 통계, 분석 소스코드 파일을 저장한다고 가정합니다.

File, Open File... 메뉴에서 서울시 청년인구 격자순위 분석.R 파일을 선택해서 엽니다. File, New File, R Script 메뉴에서 새 파일을 열고 아래의 코드를 순서대로 입력해도 됩니다.

install.packages() 함수로 분석에 필요한 sf, tmap, dplyr 패키지와 의존성이 있는 패키지를 설치하고 library() 함수로 사용할 준비를 합니다. 필요한 패키지를 설치한 후에는 4~6째 줄은 다시 실행되지 않도록 주석 처리 해줍니다.
프로젝트 디렉토리( C:/SGIS/R/서울시 청년인구 격자순위 분석 )를 변수에 저장해서 통계와 경계 파일을 불러올 때 사용할 준비를 합니다. R 소스코드에서 폴더를 구분할 때는 ‘\’ 대신 ‘/’를 사용합니다.
| R Studio 창 구조 |

2서울시 경계와 겹치는 격자 경계 만들기

st_read() 함수로 서울시 시도 경계( bnd_sido_11_2024_2Q.shp ), 서울시 시군구 경계( bnd_sigungu_11_2024_2Q.shp ), 1km 다사 격자 경계( grid_다사_1K.shp )를 읽어옵니다. st_read() 함수는 geometry 등 공간정보 컬럼이 있는 데이터를 처리할 수 있습니다.

st_join() 함수로 서울시 시도 경계와 겹치는 격자 경계를 선택합니다. join 파라미터는 공간연산 종류를 지정하는데 st_intersects 외에도 다양한 공간연산을 선택할 수 있습니다. left 파라미터를 FALSE로 지정해서 inner join으로 처리했습니다.
tm_shape() 함수와 tm_borders(), tm_polygons() 함수 등을 조합해서 지도를 그립니다. 서울시 시도 경계와 격자 경계를 중첩하면 R Studio 화면 오른쪽 Plots 탭에서 아래와 같은 지도를 확인할 수 있습니다.

3청년인구 통계 선별하기

read.table() 함수로 인구통계 파일을 읽어서 colnames() 함수로 컬럼명을 의미있게 지정합니다. 청년인구 통계코드 ‘in_grp_005’에 해당하는 통계값만 별로도 저장합니다. head() 함수로 전과 후의 통계코드 종류를 출력해서 자료처리 결과를 확인할 수 있습니다.
※ 청년인구(15~34세)는 통계데이터센터(SDC)에서만 이용할 수 있습니다. SGIS 포털 자료를 내려받는 경우 in_age_005(20~24세) 등 5세 연령 인구를 이용해서 분석해보세요.
※ 통계속성 코드는 자료제공 메뉴에서 내려받을 수 있는 statistics_code.xlsx 참조
4경계와 통계 조인하고 전체 순위 계산하기

merge() 함수로 서울시와 겹치는 격자 경계와 청년인구 통계를 조인합니다. key에 해당하는 컬럼명이 다를 경우 각각 지정합니다. 조인 방법은 all.x 등 파라미터로 조정할 수 있습니다.다. mutate() 함수는 새로운 컬럼을 추가하고 select() 함수는 컬럼을 선택해서 저장하는 방법을 제공합니다. 컬럼명 앞의 ‘-’는 해당 컬럼을 제외한다는 의미입니다.
통계값이 매칭되지 않은 경우 조인된 컬럼은 ‘NA’로 저장되어 있습니다. 필요하면, 기준연도( BASE_YEAR ) 컬럼을 ‘2023’ 등으로 일괄 저장할 수 있습니다.
min_rank() 함수로 청년인구 순위를 계산합니다. desc() 함수를 이용하면 내림차순으로 정렬되어 청년인구가 가장 많은 격자가 1순위가 됩니다.
5상위 순위 계산하기

상위 순위 격자를 별도로 저장합니다. 통계값이 없는 경우 순위 컬럼에 ‘NA’가 저장되어 있기 때문에 ‘NA’가 아닌 자료만 선별하도록 is.na() 함수로 조건을 지정합니다.
격자 경계와 서울시 경계, 상위 순위 격자를 지도로 확인해 봅니다. 2개 이상의 경계는 ‘+’로 연결해서 중첩할 수 있습니다. Plots 탭에서 아래와 같은 지도를 확인할 수 있습니다.

6청년인구 단계구분도와 격자순위 시각화하기

tm_polygons() 함수와 tm_scale_intervals(), tm_legend() 함수를 함께 사용하여 단계구분도와 범례를 지도에 나타냅니다. 단계구분 색상은 색상 코드를 열거하거나 미리 정의된 색상 파레트를 지정하는 방법으로 정할 수 있습니다.
5단계 색상 예시 및 코드 | 색상 파레트 |
---|---|
#FFFFB2 #FECC5C #FD8D3C #F03B20 #BD0026 | brewer.yl_or_rd |
#EFF3FF #BDD7E7 #6BAED6 #3182BD #08519C | brewer.blues |
#EDF8FB #B2E2E2 #66C2A4 #2CA25F #006D2C | brewer.bu_gn |
상위 순위의 격자를 강조해서 표시하고 시군구 경계와 명칭을 함께 표시해서 해당 격자가 속하는 시군구를 확인할 수 있도록 했습니다.
tm_title() 함수와 tm_layout() 함수를 사용해서 지도 제목과 여백 비율 등을 지정합니다.
Plots 탭에서 아래와 같은 최종 지도를 확인할 수 있습니다.

도움말 참고하기
※ Help 창에서 함수를 검색하면 파라미터의 종류와 세부사항, 코드 작성 예시, 참고자료 등을 확인할 수 있습니다.
※ tm_shape(), ggplot() 등의 함수 도움말 페이지를 참고해서 단계구분도를 원하는 형태로 바꿔보세요.


7지도 그림과 경계파일 저장하기

분석 과정의 지도와 경계를 파일로 저장할 수 있습니다. tmap_save() 함수를 이용해서 지도를 지정된 크기와 해상도의 그림파일로 저장합니다.
| 2023년 서울시 청년인구 격자 순위 |

st_write() 함수로 통계속성이 결합된 격자경계를 .shp 파일 등으로 저장하면 다른 지도시각화 도구에서도 활용할 수 있습니다.