저번 지도 시각화(2)에서는 ggmap 패키지를 사용하여
차량 주행 궤적 데이터와 항공노선 데이터를 지도 위에 geom_line, geom_path(ggplot2)로 선(경로)으로 표현하였다.
이번 포스팅에서는 ggmap 패키지와 geom_polygon(ggplot2)을 사용하여
시도, 시군구별 shape file과 , 행정구역_시도별 인구수 데이터를 활용해 지도 위에 그려볼 것이다.
01. 대한민국 지도 폴리곤 시각화 하기
대한민국 지도를 폴리곤으로 시각화하는 방법은 두 가지이다.
① raster 패키지의 지도 데이터를 사용하여 시각화
② shape file의 지리 정보를 사용하여 시각화
1) raster 패키지를 사용해 시각화하기
대한민국 지도를 시각화 하기 위해서는 대한민국의 시군구 지리정보 데이터가 필요하다.
이 데이터는 R의 "raster" 패키지로 불러올 수 있다.
library(raster) # 시군구까지 데이터 있음
### 시도 : level=1, 시구군: level=2 / getData() 사용
### 지도 데이터 다운
korea <- getData('GADM', country='kor', level=1)
plot(korea)
class(korea) # sp
korea@data # $ 인덱스 대신 @를 사용
raster 패키지를 로드한 후, getData() 함수를 사용해 지도 데이터를 다운로드할 수 있다.
R의 내장 함수인 plot()으로 간단하게 대한민국의 지도를 시각화할 수 있고,
R의 데이터프레임에서 열 인덱싱 기호인 '$' 대신 '@'를 사용한다.
- 좌표평면 위에 geom_polygon()을 사용해 시각화
ggplot()+geom_polygon(data=korea,
aes(x=long, y=lat, group=group),
fill='white',
color='black') #라인의 색
- ggmap을 이용해 지도 위에 geom_polygon()을 사용해 시각화
ggmap(airMap)+
geom_polygon(data=korea,
aes(x=long, y=lat, group=group),
fill='white', color='black', alpha=0.5)
airMap 데이터 프레임은 저번 지도 시각화(2)를 참고하면 됨.
2) shape file의 지리 정보를 사용하여 시각화
shape file은 밑의 사이트에서 다운로드할 수 있다.
시도, 시군구, 읍면동, 리 단위까지 데이터를 얻을 수 있으며 이번 시각화에서는 시군구 데이터를 사용할 것이다.
http://www.gisdeveloper.co.kr/?p=2332
대한민국 최신 행정구역(SHP) 다운로드 – GIS Developer
www.gisdeveloper.co.kr
- shape 파일 불러오기
library(sp)
library(rgdal)
### 시도 : shp
### 시군구: SIG.shp
### read shape file
shp.file <- file.choose()
shp <- rgdal::readOGR(shp.file)
- 좌표계 변환 : UTM-K(GRS-80) 좌표계에서 WGS84 경위도 좌표계로 변환
from.crs <- "+proj=tmerc +lat_0=38 +lon_0=127.5 +k=0.9996 +x_0=1000000 +y_0=2000000 +ellps=GRS80 +units=m +no_defs"
to.crs <- "+proj=longlat +ellps=WGS84 +datum=WGS84 +no_defs"
shp <- spTransform(shp, to.crs) # 좌표계가 올바르게 변함
- 좌표평면 위에 geom_polygon()을 사용해 시군구 시각화
ggplot()+geom_polygon(data=shp,
aes(x=long, y=lat, group=group),
fill='white',color='black')
- ggmap을 이용해 지도 위에 geom_polygon()을 사용해 시군구 시각화
ggmap(airMap)+geom_polygon(data=shp,
aes(x=long, y=lat, group=group),
fill='white',
color='black', alpha=0.5) # 라인의 색
02. 시도별 인구수 지도 시각화 하기
1) 데이터 불러오기
① KOSIS에서 제공하는 행정구역(시군구) 별, 성별 인구수 데이터
② shape file 시도 데이터
- 시도 shp file 불러오기
### 시도 shp file
### read shape file
shp.file <- file.choose()
shp <- rgdal::readOGR(shp.file)
### 좌표 확인: UTM-K(GRS-80) 좌표계에서 WGS84 경위도 좌표계로 변환 ####
from.crs <- "+proj=tmerc +lat_0=38 +lon_0=127.5 +k=0.9996 +x_0=1000000 +y_0=2000000 +ellps=GRS80 +units=m +no_defs"
to.crs <- "+proj=longlat +ellps=WGS84 +datum=WGS84 +no_defs"
shp <- spTransform(shp, to.crs) # 좌표계가 올바르게 변함
- shp file 데이터 프레임으로 변환 : fortify() 함수 사용
## shp 파일을 data.frame으로 만들기 위해서 fortify() 사용
shp.df <- fortify(shp)
shp.df %>% head(50) # group 같은 지역끼리
# order 점을 연결할 순서 -> 다각형
- 인구수 데이터 불러오기
pop <- read.csv(file.choose())
pop %>% head()
pop %>% str() # 시도명 CTP_KOR_NM
2) 데이터 전처리
- 시도 shp file 데이터 프레임과 인구수 데이터 join
shp@data$id <- rownames(shp@data) # shp@data에 id 열 추가하기
shp.df.use <- left_join(shp.df, shp@data, by='id') #위경도가 포함된 shp.df와 shp@data join
shp.df.use <- shp.df.use[order(shp.df.use$id, shp.df.use$order),]
shp.df.use %>% head(30)
- shp.df.use와 인구수 데이터 join 하여 최종 데이터 셋 생성
# 인구수 join
shp_pop <- left_join(shp.df.use, pop , by ="CTP_KOR_NM") # 시도명 기준으로 left join
3) 지도시각화
- 시도별로 색상 달리하여 polygon 시각화(fill = 범주형 변수)
### polygon(시도별로 색상 다르게) : ggplot()+geom_polygon()
ggplot()+ geom_polygon(data=shp_pop,
aes(x=long, y=lat,group=group,
fill=CTP_KOR_NM),
# 시별로 색 달리 fill=CTP_KOR_NM
color='black') # 테두리 색
ggmap(airMap)+ geom_polygon(data=shp_pop,
aes(x=long, y=lat,group=group,
fill=CTP_KOR_NM),
# 시별로 색 달리 fill=CTP_KOR_NM
color='black') # 테두리 색
- 인구수에 따라 색상 달리하여 polygon 시각화 (fill = 연속형 변수)
ggplot()+ geom_polygon(data=shp_pop,
aes(x=long, y=lat, group=group,
fill=Total), color='black')+ # Total(총인구수)
scale_fill_continuous(low='yellow', high='red',
labels = scales::comma) # 범례 단위 서식 변환
ggmap(airMap)+ geom_polygon(data=shp_pop,
aes(x=long, y=lat, group=group,
fill=Total), color='black')+
scale_fill_continuous(low='yellow', high='red',
labels = scales::comma)
참고 문헌(reference)
사용 데이터
시군구 shape file - http://www.gisdeveloper.co.kr/?p=2332
대한민국 최신 행정구역(SHP) 다운로드 – GIS Developer
www.gisdeveloper.co.kr
시도별 인구수 - https://kosis.kr/statHtml/statHtml.do?orgId=101&tblId=DT_1B040A3
참고 서적 / 시각화를 이용한 데이터 정보 분석- R 활용(이동수, 장인홍 (지은이) 자유아카데미)
자유아카데미 - 도서
정보분석은 다양한 자료를 통해 필요한 가치를 도출시키는 것을 말하며, 이것은 빅데이터에 기반한 4차 산업혁명 시대에 매우 중요한 의미를 지닌다. 다양한 데이터를 바탕으로 도출된 결과는
www.freeaca.com
참고 사이트
https://lumiamitie.github.io/r/visualization/ggplot2-scale-label/
ggplot2 축 레이블 포맷 바꾸기
Data and Visualization
lumiamitie.github.io
'R > ggplot2' 카테고리의 다른 글
R | ggmap | 지도 시각화(2) - line (0) | 2023.01.26 |
---|---|
R | ggmap | 지도 시각화(1) (0) | 2023.01.25 |
R | ggplot2 | Text (geom_text) (0) | 2023.01.19 |
R | ggplot2 | Line Plot (0) | 2023.01.18 |
R | ggplot2 | Scatter Plot(산점도) (0) | 2023.01.17 |