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

Rstudio로 대한민국 전국 및 지역별 지도 그리기 방법과 팁!

by 월드2@ 2024. 6. 21.

Rstudio로 대한민국 전국 및 지역별 지도 그리기 방법과 팁!

대한민국 행정구역(SHP 파일) 다운로드

대한민국의 행정구역 데이터를 활용하여 지도를 작성하고 싶으신가요? 그렇다면 SHP 파일을 다운로드 받아 사용해보세요. 2023년 7월 업데이트가 종료된 최신 SHP 파일은 아래 링크에서 다운로드할 수 있습니다.

행정구역 SHP 파일 다운로드

2023년 12월 이후의 최신 행정구역(SHP) 데이터는 지오서비스웹(GEOSERVICE-WEB)의 아카이브를 통해 다운로드 받을 수 있습니다.

지오서비스웹 아카이브

sf 패키지 사용

R의 sf 패키지를 사용하여 SHP 파일을 읽고, 데이터를 시각화하는 방법을 소개합니다.

## 필요한 패키지 로드
library(sf)
library(tidyverse)

## SHP 파일 읽기
map_sf <- st_read('sig.shp')

summary(map_sf)

위 코드를 실행하면 SHP 파일의 요약 정보를 확인할 수 있습니다.

## 데이터 확인 (Dataframe으로 변환하여 확인)
map_sf_df <- fortify(map_sf)
map_sf_df |> head(10)

데이터를 확인한 후, 한글 인코딩 문제를 해결하기 위해 iconv 함수를 사용합니다.

## KOR_NM 변환
map_sf_df$SIG_KOR_NM <- iconv(map_sf_df$SIG_KOR_NM, from='CP949', to='UTF-8', sub=NA, mark=TRUE, toRaw=FALSE)

map_sf_df |> head(10)

좌표값을 확인하고, 지도를 그려봅니다.

## 좌표값 확인
coords <- st_coordinates(map_sf)
head(coords)

## 지도 그리기
map_sf |> 
  ggplot() + geom_sf()

map_sf |>
  ggplot() +
  geom_sf(aes(fill = SIG_CD), show.legend = FALSE) +
  ggtitle("Seoul Map") +
  theme_void()

대한민국 지도 지역별 🌏

지역 (시도, 시군구, 읍면동) 코드

대한민국 행정구역 SHP 파일의 지역 구분 코드는 아래와 같습니다.

CTPRVN_CD CTP_KOR_NM CTPRVN_CD CTP_KOR_NM CTPRVN_CD CTP_KOR_NM
11 서울특별시 41 경기도 50 제주특별자치도
26 부산광역시 43 충청북도 51 강원특별자치도
27 대구광역시 44 충청남도    
28 인천광역시 45 전라북도    
29 광주광역시 46 전라남도    
30 대전광역시 47 경상북도    
31 울산광역시 48 경상남도    
36 세종특별자치시        

상세 코드는 아래 파일을 참조하세요.

상세 코드 파일 다운로드

서울 지도

서울의 시도코드는 11입니다. 종로구, 중구, 용산구 등 서울의 각 구의 코드를 사용하여 서울 지역만 선택해보겠습니다.

## SHP 파일에서 서울지역만 선택
map_sf_seoul <- map_sf |> 
  filter(str_detect(SIG_CD, "^11"))

## 서울 지도 그리기
map_sf_seoul |>
  ggplot() +
  geom_sf(aes(fill = SIG_CD), show.legend = FALSE) +
  ggtitle("Seoul Map") +
  theme_void()

부산, 울산, 경남 지도

부산, 울산, 경남 지역의 시도코드는 각각 26, 31, 48입니다. 이 코드를 사용하여 해당 지역만 선택해보겠습니다.

## 부산, 울산, 경남 지역 선택
map_sf_puk <- map_sf |> 
  filter(str_detect(SIG_CD, "^26") | str_detect(SIG_CD, "^31") | str_detect(SIG_CD, "^48"))

## 시도 코드 확인
unique(map_sf_puk$SIG_CD)

## 부산, 울산, 경남 지역 지도 그리기
map_sf_puk |>
  ggplot() +
  geom_sf(aes(fill = SIG_CD), show.legend = FALSE) +
  ggtitle("부산/울산/경남 지도") +
  theme_void()

광주, 전남 지도

광주와 전남 지역의 시도코드는 각각 29, 46입니다. 이 코드를 사용하여 해당 지역만 선택해보겠습니다.

map_sf_kj <- map_sf |> 
  filter(str_detect(SIG_CD, "^29")  | str_detect(SIG_CD, "^46"))

map_sf_kj_df <- fortify(map_sf_kj)

map_sf_kj_df$CTPRVN_CD <- substr(map_sf_kj_df$SIG_CD, 1, 2)

map_sf_kj_df |> head(10)

map_sf_kj_df |>
  ggplot() +
  geom_sf(aes(fill = CTPRVN_CD), show.legend = FALSE) +
  scale_fill_manual(values = c("29" = "darkblue", "46" = "skyblue")) +  
  ggtitle("광주/전남 지도") +
  theme_void()

대전, 세종, 충남 지도

대전, 세종, 충남 지역의 시도코드는 각각 30, 36, 44입니다. 이 코드를 사용하여 해당 지역만 선택해보겠습니다.

map_sf_dsc <- map_sf |> 
  filter(str_detect(SIG_CD, "^30") | str_detect(SIG_CD, "^36") | str_detect(SIG_CD, "^44"))

map_sf_dsc |>
  ggplot() +
  geom_sf(aes(fill = SIG_KOR_NM)) +
  ggtitle("대전/세종/충남 지도") +
  theme_void()

이렇게 다양한 지역의 지도를 쉽게 그릴 수 있습니다. 각 지역의 시도코드를 활용하여 원하는 지역의 지도를 만들어보세요!

01234567891011121314