반응형
[ 대한민국 지도 : 전국 🌏 ]
[ 대한민국 행정구역(SHP 파일) 다운로드 ]
다운로드 링크 주소 (2023년 7월 업데이트 종료)
지도 작성 수준 (시도, 시군구, 읍면동)에 따라, 해당 SHP 파일을 다운로드 받아서 사용
http://www.gisdeveloper.co.kr/?p=2332
2023년 12월 이후의 최신 행정구역(SHP) 데이터는 지오서비스웹(GEOSERVICE-WEB)의 아카이브를 통해서 다운로드 받을 수 있도록 변경
[ sf 패키지 사용 ]
# 필요한 패키지 로드
library(sf)
library(tidyverse)
# SHP 파일 읽기
map_sf <- st_read('sig.shp')
summary(map_sf)
> summary(map_sf)
SIG_CD SIG_ENG_NM SIG_KOR_NM geometry
Length:250 Length:250 Length:250 MULTIPOLYGON:250
Class :character Class :character Class :character epsg:NA : 0
Mode :character Mode :character Mode :character
#데이터 확인 (Dataframe으로 변환하여 확인)
map_sf_df <- fortify(map_sf)
map_sf_df |> head (10)
> map_sf_df |> head (10)
Simple feature collection with 10 features and 3 fields
Geometry type: MULTIPOLYGON
Dimension: XY
Bounding box: xmin: 950928.8 ymin: 1945376 xmax: 966325.5 ymax: 1966987
CRS: NA
SIG_CD SIG_ENG_NM SIG_KOR_NM geometry
1 11110 Jongno-gu \xc1\xbe\xb7α\xb8 MULTIPOLYGON (((956615.5 19...
2 11140 Jung-gu \xc1߱\xb8 MULTIPOLYGON (((957890.4 19...
3 11170 Yongsan-gu \xbf\xeb\xbb걸 MULTIPOLYGON (((953115.8 19...
4 11200 Seongdong-gu \xbc\xba\xb5\xbf\xb1\xb8 MULTIPOLYGON (((959681.1 19...
5 11215 Gwangjin-gu \xb1\xa4\xc1\xf8\xb1\xb8 MULTIPOLYGON (((964825.1 19...
6 11230 Dongdaemun-gu \xb5\xbf\xb4빮\xb1\xb8 MULTIPOLYGON (((962141.9 19...
7 11260 Jungnang-gu \xc1߶\xfb\xb1\xb8 MULTIPOLYGON (((965698.5 19...
8 11290 Seongbuk-gu \xbc\xba\xbaϱ\xb8 MULTIPOLYGON (((956787.3 19...
9 11305 Gangbuk-gu \xb0\xad\xbaϱ\xb8 MULTIPOLYGON (((956316.8 19...
10 11320 Dobong-gu \xb5\xb5\xba\xc0\xb1\xb8 MULTIPOLYGON (((957223.8 19...
#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)
> map_sf_df |> head (10)
Simple feature collection with 10 features and 3 fields
Geometry type: MULTIPOLYGON
Dimension: XY
Bounding box: xmin: 950928.8 ymin: 1945376 xmax: 966325.5 ymax: 1966987
CRS: NA
SIG_CD SIG_ENG_NM SIG_KOR_NM geometry
1 11110 Jongno-gu 종로구 MULTIPOLYGON (((956615.5 19...
2 11140 Jung-gu 중구 MULTIPOLYGON (((957890.4 19...
3 11170 Yongsan-gu 용산구 MULTIPOLYGON (((953115.8 19...
4 11200 Seongdong-gu 성동구 MULTIPOLYGON (((959681.1 19...
5 11215 Gwangjin-gu 광진구 MULTIPOLYGON (((964825.1 19...
6 11230 Dongdaemun-gu 동대문구 MULTIPOLYGON (((962141.9 19...
7 11260 Jungnang-gu 중랑구 MULTIPOLYGON (((965698.5 19...
8 11290 Seongbuk-gu 성북구 MULTIPOLYGON (((956787.3 19...
9 11305 Gangbuk-gu 강북구 MULTIPOLYGON (((956316.8 19...
10 11320 Dobong-gu 도봉구 MULTIPOLYGON (((957223.8 19...
# 좌표값 확인
coords <- st_coordinates(map_sf)
head(coords)
> head(coords)
X Y L1 L2 L3
[1,] 956615.5 1953567 1 1 1
[2,] 956621.6 1953565 1 1 1
[3,] 956626.2 1953564 1 1 1
[4,] 956638.8 1953562 1 1 1
[5,] 956659.1 1953559 1 1 1
[6,] 956661.5 1953558 1 1 1
#지도 그리기
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 | 세종특별자치시 |
CTPRVN_CD | CTP_KOR_NM | SIG_CD | SIG_KOR_NM | EMD_CD | EMD_KOR_NM |
11 | 서울특별시 | 11110 | 종로구 | 11110101 | 청운동 |
11 | 서울특별시 | 11110 | 종로구 | 11110102 | 신교동 |
11 | 서울특별시 | 11110 | 종로구 | 11110103 | 궁정동 |
11 | 서울특별시 | 11110 | 종로구 | 11110104 | 효자동 |
11 | 서울특별시 | 11110 | 종로구 | 11110105 | 창성동 |
... | ... | ... | ... | ... | ... |
상세 코드는 아래 파일 참조
[ 서울 지도 ]
서울 시도코드(CTPRVN_CD) : 11 (종로구 : 11010, 중구 11040, 용산구 11070, ...)
#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 (중구 26110, 서구 26140, ...)
울산 시도코드 : 31 (중구 31110, 남구 31140, ...)
경상남도 시도코드 : 48 (창원시 의창구 48121, 창원시 성산구 48123, ...)
#부산, 울산, 경남 지역 선택
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()
> unique(map_sf_puk$SIG_CD)
[1] "26110" "26140" "26170" "26200" "26230" "26260" "26290" "26320" "26350" "26380"
[11] "26410" "26440" "26470" "26500" "26530" "26710" "31110" "31140" "31170" "31200"
[21] "31710" "48121" "48123" "48125" "48127" "48129" "48170" "48220" "48240" "48250"
[31] "48270" "48310" "48330" "48720" "48730" "48740" "48820" "48840" "48850" "48860"
[41] "48870" "48880" "48890"
[ 광주, 전남 지도 ]
광주 시도코드 : 29 (동구 29110, 서구 29140, ...)
전라남도 시도코드 : 46 (목포시 46110, 여수시 46130, ...)
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 |> head(10)
Simple feature collection with 10 features and 4 fields
Geometry type: MULTIPOLYGON
Dimension: XY
Bounding box: xmin: 889258.2 ymin: 1556888 xmax: 1037275 ymax: 1696169
CRS: NA
SIG_CD SIG_ENG_NM SIG_KOR_NM geometry CTPRVN_CD
1 29110 Dong-gu \xb5\xbf\xb1\xb8 MULTIPOLYGON (((948104.5 16... 29
2 29140 Seo-gu \xbc\xad\xb1\xb8 MULTIPOLYGON (((944073.6 16... 29
3 29155 Nam-gu \xb3\xb2\xb1\xb8 MULTIPOLYGON (((945448.1 16... 29
4 29170 Buk-gu \xbaϱ\xb8 MULTIPOLYGON (((946750.1 16... 29
5 29200 Gwangsan-gu \xb1\xa4\xbb걸 MULTIPOLYGON (((922091.2 16... 29
6 46110 Mokpo-si \xb8\xf1\xc6\xf7\xbd\xc3 MULTIPOLYGON (((896529.2 16... 46
7 46130 Yeosu-si \xbf\xa9\xbc\xf6\xbd\xc3 MULTIPOLYGON (((983188.9 15... 46
8 46150 Suncheon-si \xbc\xf8õ\xbd\xc3 MULTIPOLYGON (((994368.8 16... 46
9 46170 Naju-si \xb3\xaa\xc1ֽ\xc3 MULTIPOLYGON (((923188.6 16... 46
10 46230 Gwangyang-si \xb1\xa4\xbe\xe7\xbd\xc3 MULTIPOLYGON (((1008722 165... 46
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 (동구 30110, 중구 30140, ...)
세종 시도코드 : 36
충청남도 시도코드 : 44 (천안시 동남구 44131, 천안시 서북구 44133, ...)
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()
728x90
'데이터 분석 (with Rstudio)' 카테고리의 다른 글
[데이터분석 관련 책] 데이터 과학자의 가설 사고 (0) | 2024.05.09 |
---|---|
[Rstudio] 대한민국 지도 그리기 (전국 지도) (0) | 2024.04.16 |
[Rstudio] 세계지도 그리기와 색칠하기 (전체, 국가별 지도) (0) | 2024.04.15 |
[Rstudio] 의회 다이어그램 with 국회의원 선거 의석 수 결과 (0) | 2024.04.12 |
[Rstudio] 루프(Loop) 반복문 - for 루프 문과 while 루프 문 (1) | 2024.03.26 |