Notes
# 지도 위에 통계 값들 표시하기
rm(list=ls())
#ggplot2::map_data() 함수가 지도 데이터를 처리하기 위해 필요한 패키지
install.packages('maps')
install.packages('ggplot2')
install.packages('mapproj')
library(ggplot2)
search()
asia_map = map_data(map = 'world', region = c('North Korea','South Korea',
'Japan', "China",'India'))
korea_map =map_data(map = 'world', region = c('North Korea','South Korea'))
asia_map2 = map_data(map = 'world', region = c('North Korea','South Korea',
'Japan', "China",'India','Russia'))
str(asia_map)
tail(asia_map2)
long lat group order region subregion
13366 58.13457 81.82798 176 13366 Russia Ostrov Rudolfa
13367 59.26181 81.85419 176 13367 Russia Ostrov Rudolfa
13368 59.40849 81.82544 176 13368 Russia Ostrov Rudolfa
#longitude(경도) : 영국의 그리니치 천문대를 기준으로 동/서방향 좌표
#latituide(위도) : 적도를 기준으로 남/북 방향 좌표
#group : 함께 연결한 위도/경도 점들의 그룹(나라, 주, 도시, ...)
#order : 위도, 경도 점들을 연결할 순서
#region : 지역 이름
#ggplot2 패키지를 사용할 때
#data 파라미터는 위도/경도 정보를 가지고 있는 map 데이터를 전달
#x축 파라미터 = 경도(long)
#y축 매핑 파라미터 = 위도(lat)
#그래프의 종류 : 다각형 그래프(polygon)
#coord_map(): 간격 조정
ggplot(data = asia_map,
mapping = aes(x = long, y = lat,group = group, fill = region)) + geom_polygon()+ coord_map()
ggplot(data = asia_map2,
mapping = aes(x = long, y = lat,group = group,fill = region)) + geom_polygon()+ coord_map('polyconic')
지도가 휘어 보여지게 됨
ggplot(data = korea_map,
mapping = aes(x = long, y = lat,group = group,fill = region)) + geom_polygon(color='black')+ coord_map() # 검정테두리가 생성
#미국 지도
us_state = map_data(map='state')
str(us_state)
head(us_state)
ggplot(data=us_state,
mapping = aes(x= long, y= lat, group = group, fill = region))+
geom_polygon(color = 'black', fill = 'gray')+ coord_map() # 전부 회색으로 칠
미국 범죄율 데이터를 미국지도에 적용
library(dplyr) # 데이터 전처리
search()
# 데이터 프레임 확인
# USArrests: R에서 제공하는 학습용 데이터 프레임
str(USArrests)
head(USArrests)
tail(USArrests)
# USArrests 데이터 프레임에는 미국 주(state)의 이름들이
# 각 행의 이름으로 설정되어 있음.
# us_map 데이터 프레임과 조인하기 위해서는 주 이름들이 변수가 되어야 함. -> tibble 라이브러리
library(tibble)
us_crime <- rownames_to_column(USArrests, var = 'state')
str(us_crime)
head(us_crime)
state Murder Assault UrbanPop Rape
1 Alabama 13.2 236 58 21.2
2 Alaska 10.0 263 48 44.5
3 Arizona 8.1 294 80 31.0
# 미국 주 이름을 표시하는
# us_state의 region 변수는 소문자로만 되어 있고,
# us_crime의 state의 변수는 첫 글자가 대문자로 되어있다.
us_crime$state <- tolower(us_crime$state)
# 지도/범죄를 합친 데이터 프레임(join)
state_crime <- left_join(us_state, us_crime, by = c('region'='state'))
head(state_crime)
long lat group order region subregion Murder Assault UrbanPop Rape
1 -87.46201 30.38968 1 1 alabama <NA> 13.2 236 58 21.2
2 -87.48493 30.37249 1 2 alabama <NA> 13.2 236 58 21.2
3 -87.52503 30.37249 1 3 alabama <NA> 13.2 236 58 21.2
4 -87.53076 30.33239 1 4 alabama <NA> 13.2 236 58 21.2
5 -87.57087 30.32665 1 5 alabama <NA> 13.2 236 58 21.2
6 -87.58806 30.32665 1 6 alabama <NA> 13.2 236 58 21.2
#주별 살인 범죄율 # 아래 그림에서는 진할수록 범죄율이 낮음.
ggplot(data = state_crime, mapping = aes(x = long, y = lat, group = group,fill = Murder))+
geom_polygon(color = 'black')+ coord_map()
# 진한색이 범죄율이 높도록 수정 : 위의 Murder -> -Murder 로 수정 또는 scale_fill_continuous 사용
ggplot(data = state_crime, mapping = aes(x = long, y = lat, group = group,fill = Murder))+
geom_polygon(color = 'black')+ coord_map() + scale_fill_continuous(low = 'white', high = 'darkred')
# 단계구분도 Choropoleth map 이용
# 지도위에 통계 값들을 색깔로 구분해서 표현하는 방법
# 인구, 질병, 범죄 ...
# data와 map 파라미터를 알아서 join해서 지도를 그려준다.
install.packages('ggiraphExtra')
library(ggiraphExtra)
ggChoropleth(data = us_crime, mapping = aes(fill = Murder, map_id = state),
map = us_state)
# ggChropleth()함수의 변수들
# data = 통계값이 들어있는 데이터 프레임(ex미국 주별 범죄율)
# map = 지도(위도, 경도, 지역, 그룹, ... )정보 데이터 프레임
# mapping
# 1) map_id = data와 map을 join할 수 있는 변수 이름
# map의 region과 일치되는 데이터의 변수
# 2) fill = 지도의 각 그룹을 색깔로 채울 변수
# 3) inetactive =
interactive = T 적용시 : 마우스를 올리면 데이터가 표시됨.
ggChoropleth(data = us_crime, map = us_state,
mapping =aes(fill = Murder, map_id = state),
interactive = T)
# 문자 인코딩, 변환 관련 기능 패키지
install.packages('stringi') # ICU(International Component of Unicode)
# 개발자 도구 패키지
install.packages('devtools')
# 깃허브에서 패키지 다운받기
# install.packages() : R 공식 홈페이지(패키지 저장소)에서 다운로드
# devtools::install_github():
github.com 사이트에서 다운로드
library(kormaps2014)
library(ggplot2)
library(dplyr)
library(ggiraphExtra)
search()
# kormaps2014 패키지에 있는 인구 조사 데이터 프레임
# str(korpop1)
# 데이터 프레임의 컬럼 이름들이 한글이어서 결과가 제대로 보이지 않음
str(changeCode(korpop1))
#kormaps2014::changeCode(): 데이터 프레임의 한글 컬럼(변수) 이름을 처리해준다.
> head(korpop1)
C행정구역별_읍면동 행정구역별_읍면동 <ec>떆<ec>젏 총인구_명 남자_명 여자_명 내국인_계_명
5 '11 <ec>꽌<ec>슱<ed>듅蹂꾩떆 2015 9904312 4859535 5044777 9567196
455 '21 遺\u0080<ec>궛愿묒뿭<ec>떆 2015 3448737 1701347 1747390 3404667
681 '22 <eb><8c>\u0080援ш킅<ec>뿭<ec>떆 2015 2466052 1228511 1237541 2436770
832 '23 <ec>씤泥쒓킅<ec>뿭<ec>떆 2015 2890451 1455017 1435434 2822601
> head(changeCode(korpop1))
C행정구역별_읍면동 행정구역별_읍면동 시점 총인구_명 남자_명 여자_명 내국인_계_명 내국인_남자_명 내국인_여자_명
5 '11 서울특별시 2015 9904312 4859535 5044777 9567196 4694317 4872879
455 '21 부산광역시 2015 3448737 1701347 1747390 3404667 1675339 1729328
681 '22 대구광역시 2015 2466052 1228511 1237541 2436770 1211219 1225551
# 한글로 되어있는 컬럼들은 에러가 발생할 수 있어서 영어로 변경
korpop1 <- rename(korpop1, name = 행정구역별_읍면동, pop = 총인구_명)
ggChoropleth(data = korpop1, map = kormap1,
mapping = aes(fill = pop, map_id = code), interactive = T )
ggChoropleth(data = korpop1, map = kormap1,
mapping = aes(fill = pop, map_id = code, tooltip = name), interactive = T ) # 행정구역번호가 행정구역이름으로 표시됨
# 결핵 환자 숫자 데이터 프레임
head(changeCode(tbc))
ggChoropleth(data = tbc, map = kormap1,
mapping = aes(fill= NewPts, map_id = code))