GADM maps and data은 전세계 모든 국가 행정구역을 지도에 담고 있다. 이를 직접 웹사이트에서 다운로드 받아도 좋지만 GADMTools: Easy Use of 'GADM' Maps
팩키지를 사용하면 수월하게 활용이 가능하다.
maps
팩키지에 내장된 전세계 도시 정보를 바탕으로 이야기를 풀어가자.
library(countrycode)
library(GADMTools)
library(tidyverse)
library(sf)
world_cities <- maps::world.cities %>%
as_tibble()
korea_cities <- world_cities %>%
filter(str_detect(country.etc, "[Kk]orea South")) %>%
mutate(pop = pop / 10^4)
korea_cities
# A tibble: 132 x 6
name country.etc pop lat long capital
<chr> <chr> <dbl> <dbl> <dbl> <int>
1 Aewol Korea South 2.41 33.5 126. 0
2 Andong Korea South 13.0 36.6 129. 0
3 Angang Korea South 3.50 36.0 129. 0
4 Ansan Korea South 66.9 37.4 127. 0
5 Ansong Korea South 7.30 37.0 127. 0
6 Anyang Korea South 64.3 37.4 127. 0
7 Asan Korea South 10.2 36.8 127. 0
8 Changsungpo Korea South 5.71 34.9 129. 0
9 Changwon Korea South 53.6 35.3 129. 0
10 Chechon Korea South 12.3 37.1 128. 0
# ... with 122 more rows
대한민국 지도를 다운로드 받아 shapefliles/
디렉토리로 이동시킨다.
dir.create("shapefiles")
sigungu_shp <- gadm_sp_loadCountries(fileNames = 'KOR', level = 2, basefile = './shapefiles', simplify=0.01)
fs::file_move("./shapefilesKOR_adm2.rds", "shapefiles/")
다운로드 받은 shapefile을 불러와서 이를 시각화해서 제대로 다운로드 받았는지 확인한다.
sigungu_shp <- read_rds("shapefiles/shapefilesKOR_adm2.rds")
sigungu_shp$NL_NAME_1 <- iconv(sigungu_shp$NL_NAME_1, from = "CP949", to = "UTF-8", sub = NA, mark = TRUE, toRaw = FALSE)
plot(sigungu_shp)
다음으로 shapefile
을 sf
객체로 변환시킨 후에 ggplot
을 지도를 시각화하고 인구를 geom_point()
로 지도위에 올린다.
먼저 시도 지도 데이터를 다운로드 받는다.
KOSIS에서 시도별 의료인력 현황
자료를 다운로드 받아 전체 의료인수를 시도별로 정리한다.
library(readxl)
doctor_dat <- read_excel("data/시도별_의료인력_현황_20200905224937.xlsx", sheet= "데이터", skip = 3)
doctor_df <- doctor_dat %>%
select(1,2,3) %>%
set_names(c("시도", "시도명", "의사수")) %>%
arrange(desc(의사수))
doctor_df
# A tibble: 17 x 3
시도 시도명 의사수
<chr> <chr> <dbl>
1 서울 서울특별시 107232
2 경기 경기도 86060
3 부산 부산광역시 34495
4 경남 경상남도 26074
5 대구 대구광역시 23401
6 인천 인천광역시 22173
7 경북 경상북도 18267
8 광주 광주광역시 16467
9 전북 전라북도 16297
10 전남 전라남도 16040
11 대전 대전광역시 14586
12 충남 충청남도 13168
13 강원 강원도 11373
14 충북 충청북도 10654
15 울산 울산광역시 8218
16 제주 제주특별자치도 5317
17 세종 세종특별자치시 973
“시도명”을 기준변수로 삼아 지도와 의사 데이터프레임(doctor_df
)를 병합시킨다.
sido_doctor_sf <- sido_sf %>%
select(GID_0, NL_NAME_1, geometry) %>%
separate(NL_NAME_1, into = c("시도명", "구분자", "한자명"), sep =" ") %>%
mutate(`시도명` = str_remove_all(`시도명`, " ")) %>%
left_join(doctor_df, by="시도명")
sido_doctor_sf
Simple feature collection with 17 features and 6 fields
geometry type: MULTIPOLYGON
dimension: XY
bbox: xmin: 125.0818 ymin: 33.11208 xmax: 130.9404 ymax: 38.61215
CRS: +proj=longlat +datum=WGS84 +no_defs +ellps=WGS84 +towgs84=0,0,0
First 10 features:
GID_0 시도명 구분자 한자명 시도 의사수
1 KOR 부산광역시 | 釜山廣域市 부산 34495
2 KOR 충청북도 | 忠淸北道 충북 10654
3 KOR 충청남도 | 忠淸南道 충남 13168
4 KOR 대구광역시 | 大邱廣域市 대구 23401
5 KOR 대구광역시 | 大邱廣域市 대구 23401
6 KOR 강원도 | 江原道 강원 11373
7 KOR 광주광역시 | 光州廣域市 광주 16467
8 KOR 경기도 | 京畿道 경기 86060
9 KOR 경상북도 | 慶尙北道 경북 18267
10 KOR 경상남도 | 慶尙南道 경남 26074
geometry
1 MULTIPOLYGON (((128.994 34....
2 MULTIPOLYGON (((128.0172 36...
3 MULTIPOLYGON (((126.6146 36...
4 MULTIPOLYGON (((128.6879 35...
5 MULTIPOLYGON (((127.3899 36...
6 MULTIPOLYGON (((129.3262 37...
7 MULTIPOLYGON (((127.0167 35...
8 MULTIPOLYGON (((126.7274 37...
9 MULTIPOLYGON (((129.4229 36...
10 MULTIPOLYGON (((128.731 34....
ggplot
의 geom_sf()
를 사용해서 시각화를 한다. sido_doctor_sf
은 list-column으로 geometry
지도 정보를 담고 있는 데이터프레임이다.
데이터 과학자 이광춘 저작
kwangchun.lee.7@gmail.com