안녕하세요
모두를 위한 R 데이터 분석 입문 연습문제 9장 본문
library(ggmap)
register_google(key = "google api 키를 이곳에")
01 R을 이용하여 지도를 출력하시오.
(1) 서울시청을 중심으로 지도 크기는 600x600, 지도 유형은 roadmap인 지도를 출력하시오.
(2) 금강산 지역을 근방으로 지도 크기는 500x500. 지도 유형은 hybrid. zoom은 8인 지도를 출력하시오.
(3) 강남역 근방으로 지도 크기는 640x640, 지도 유형은 roadmap, zoom은 16인 지도를 출력하시오.
(4) 지도 유형은 roadmap, zoom은 9인 경도 127.397692, 위도 36.337058 지역의 지도를 출력하시오.
(5) 지도 유형은 roadmap. zoom은 10인 경도 135.502330. 위도 34.693594 지역의 지도를 출력하시오.
#(1)
# 서울 시청의 위도, 경도는 37.5663, 126.9779이고
# get_googlemap 함수는 경도, 위도 순입니다.
cen <- c(126.9779, 37.5663)
gc.cen <- data.frame(lon = 126.9779, lat = 37.5663)
map <- get_googlemap(center = cen, maptype = "roadmap", zoom = 16, marker = gc.cen)
ggmap(map)
#(2)
# 38.6567° N, 128.1050° E
cen <- c(128.1050, 38.6567)
gc.cen <- data.frame(lon = 128.1050, lat = 38.6567)
map <- get_googlemap(center = cen, maptype = "hybrid", zoom = 8, size = c(500,500), marker = gc.cen)
ggmap(map)
#(3)
# 37.5172° N, 127.0473° E
cen <- c(127.0473, 37.5172)
gc.cen <- data.frame(lon = cen[1], lat = cen[2])
map <- get_googlemap(center = cen, maptype = "roadmap", zoom = 16, size = c(640,640), marker = gc.cen)
ggmap(map)
#(4)
cen <- c(127.397692, 36.337058)
gc.cen <- data.frame(lon = cen[1], lat = cen[2])
map <- get_googlemap(center = cen, maptype = "roadmap", zoom = 9, marker = gc.cen)
ggmap(map)
#(5)
cen <- c(135.502330, 34.693594)
gc.cen <- data.frame(lon = cen[1], lat = cen[2])
map <- get_googlemap(center = cen, maptype = "roadmap", zoom = 10, marker = gc.cen)
ggmap(map)
02 R을 이용하여 서울시 한강 이남의 구청들의 위치에 마커와 구청 이름을 지도 위에 표시하시오.
names <- c("강서구청", "영등포구청", "양천구청", "구로구청", "동작구청", "금천구청", "관악구청", "강남구청", "서초구청", "송파구청", "강동구청청")
gc <- geocode(enc2utf8(names))
cen <- c(mean(gc$lon), mean(gc$lat))
df = data.frame(name = names, lon = gc$lon, lat = gc$lat)
map <- get_googlemap(center = cen, maptype = "roadmap", zoom = 11, markers = gc)
gmap <- ggmap(map)
gmap + geom_text(data = df, aes(x = lon, y = lat), size = 5, label = df$name)
03 R을 이용하여 대한민국의 광역시를 지도 위에 출력하시오. 단, 마커와 광역시 이름을 함께 표시하시오.
names <- c("부산광역시", "대구광역시", "인천광역시", "광주광역시", "대전광역시", "울산광역시")
gc <- geocode(enc2utf8(names))
cen <- c(mean(gc$lon), mean(gc$lat))
df = data.frame(name = names, lon = gc$lon, lat = gc$lat)
map <- get_googlemap(center = cen, maptype = "roadmap", zoom = 7, markers = gc)
gmap <- ggmap(map)
gmap + geom_text(data = df, aes(x = lon, y = lat), size = 5, label = df$name, col = "blue")
04 R을 이용하여 서울, 경기, 강원 지역의 국립공원 위치를 지도 상에 마커로 표시하되 국립공원의 이 름을 함께 표시하시오.(국립공원 관리공단 홈페이지: http://www.knps.or.kr/portal/main.do)
names <- c("북한산국립공원", "설악산국립공원", "오대산국립공원", "치악산국립공원", "태백산국립공원")
gc <- geocode(enc2utf8(names))
cen <- c(mean(gc$lon), mean(gc$lat))
df = data.frame(name = names, lon = gc$lon, lat = gc$lat)
map <- get_googlemap(center = cen, maptype = "roadmap", zoom = 8, markers = gc)
gmap <- ggmap(map)
gmap + geom_text(data = df, aes(x = lon, y = lat), size = 6, label = df$name, col = "blue")
05 treemap 패키지의 GNI2014 데이터셋을 이용하여 북아메리카(North America) 대륙에 있는 각 나라의 위치에 그 나라의 인구수를 원의 크기로 표시하시오(원의 색은 초록색, alpha=0.5).
library(treemap)
data("GNI2014")
myds <- data.frame(GNI2014)
myds <- myds[myds[,"continent"] == "North America",]
gc <- geocode(enc2utf8(myds$country))
cen <- c(mean(gc$lon), mean(gc$lat))
df =data.frame(name = names, lon = gc$lon, lat = gc$lat, population = myds$population
map <- get_googlemap(center = cen, maptype = "roadmap", zoom = 3)
gmap <- ggmap(map)
gmap +
geom_point(data = df, aes(x = lon, y = lat, size = population), alpha = 0.5, col = "green") +
scale_size_continuous(range = c(1, 14))
06 '2018년도 시군구별 월별 교통사고 자료'로부터 서울시의 각 구별 1년 교통사고 발생건수를 지도상 에 원의 크기로 나타내시오.
• Sonar 원의 위치는 구의 위치로 하시오.
• 원의 색은 red로 하고 투명도를 .05로 하시오.
• 자료에는 월별로 데이터가 기록되어 있는데 1년 데이터를 합산하여 이용하시오.• 서울 지역이 모두 지도에 나오도록 하시오.
TIP: 데이터 출처: 공공데이터포털(https://www.data.go.kr)에서 '교통사고통계' 검색 후 '도로교통공단_시도_시군 구별_교통사고_통계(2018)'를 다운로드하여 사용한다.
# 한빛 출판 네트워크 사이트의 예제 source 폴더에 파일이 있습니다
monthly_accident <- read.csv(file = "./source/Ch09/도로교통공단_시도_시군구별_월별_교통사고(2018).csv", encoding = 'utf-8')
Sys.setlocale("LC_ALL", "korean")
myds <- aggregate(x = monthly_accident[ monthly_accident[,"시도"] == "서울","발생건수"], by = list("시군구" = monthly_accident[monthly_accident[,"시도"] == "서울",]$시군구),
FUN = sum)
names <- myds$시군구
gc <- geocode(enc2utf8(names))
cen <- c(mean(gc$lon), mean(gc$lat))
df = data.frame(name = names, lon = gc$lon, lat = gc$lat, freq = myds$x)
map <- get_googlemap(center = cen, maptype = "roadmap", zoom = 11)
gmap <- ggmap(map)
gmap + geom_point(data = df, aes(x = lon, y = lat, size = freq), alpha = 0.5, col = "green") + scale_size_continuous(range = c(1, 14)) +
geom_text(data = df, aes(x = lon, y = lat), size = 6, label = df$name, col = "steelblue", )
# 글자는 위치 확인용으로 넣었습니다.
07 06번과 동일한 자료를 이용하여 광역시도별 1년 사망자수를 지도상에 원의 크기로 나타내시오.
• 세종시는 데이터에서 제외하시오.
• 원의 색은 black으로 하고 투명도를 .05로 하시오.
• 남한지역이 모두 지도에 나오도록 하시오.
myds <- aggregate(x = monthly_accident[monthly_accident[, "시도"] != "세종", "사망자수"],
by = list("시도" = monthly_accident[monthly_accident[, "시도"] != "세종",]$시도),
FUN = sum)
names <- myds$시도
gc <- geocode(enc2utf8(names))
cen <- c(mean(gc$lon), mean(gc$lat))
df = data.frame(name = names, lon = gc$lon, lat = gc$lat, freq = myds$x)
map <- get_googlemap(center = cen, maptype = "roadmap", zoom = 7)
gmap <- ggmap(map)
gmap + geom_point(data = df,
aes(x = lon, y = lat, size = freq), alpha = 0.3, col = "black") +
scale_size_continuous(range = c(1, 14))
# 투명도를 .05 로 하면 너무 안보여서 0.3으로 했습니다.
08 06번과 동일한 자료를 이용하여 광역시도별 7, 8월 부상자수를 지도상에 원의 크기로 나타내시오.
• 세종시는 데이터에서 제외하시오.
• 원의 색은 blue로 하고 투명도를.05로 하시오.
• 남한 지역이 모두 지도에 나오도록 하시오.
Sys.setlocale("LC_ALL", "korean")
myds <- aggregate(x = monthly_accident[monthly_accident[, "시도"] !=
"세종" & monthly_accident[, "월"] %in% c("07월", "08월"), "부상자수"],
by = list("시도" = monthly_accident[monthly_accident[, "시도"] != "세종" &
monthly_accident[, "월"] %in% c("07월", "08월"),]$시도), FUN = sum)
names <- myds$시도
gc <- geocode(enc2utf8(names))
cen <- c(mean(gc$lon), mean(gc$lat))
df = data.frame(name = names, lon = gc$lon, lat = gc$lat, freq = myds$x)
map <- get_googlemap(center = cen, maptype = "roadmap", zoom = 7)
gmap <- ggmap(map)
gmap + geom_point(data = df, aes(x = lon, y = lat, size = freq), alpha = 0.5, col = "blue") +
scale_size_continuous(range = c(1, 14))
'Study_exam > 모두를 위한 R 데이터 분석 입문 연습문제' 카테고리의 다른 글
모두를 위한 R 데이터 분석 입문 연습문제 11장 (0) | 2023.06.15 |
---|---|
모두를 위한 R 데이터 분석 입문 연습문제 10장 (0) | 2023.06.15 |
모두를 위한 R 데이터 분석 입문 연습문제 8장 (0) | 2023.06.15 |
모두를 위한 R 데이터 분석 입문 연습문제 7장 (1) | 2023.06.15 |
모두를 위한 R 데이터 분석 입문 연습문제 2장 (0) | 2023.04.27 |