저번 Interactive Map(1)에서는 plotly 패키지를 사용하여
대전광역시 상권정보를 scattermapbox trace를 사용해 위치를 점으로 표현하고,
상권 밀집 정도를 densitymapbox trace를 사용해 밀도로 표현하였다.
https://boring9.tistory.com/21
R | ggmap | 지도 시각화(2) - line
저번 지도 시각화(1)에서는 ggmap 패키지를 사용하여 대전광역시 상권정보를 ggmap과 geom_point, stat_density2 d(ggplot2)로 위치를 점으로 표현하고, 상권 밀집 정도를 밀도와 등고선으로 표현하였다. 이번
boring9.tistory.com
이번 포스팅에서는 plotly 패키지의 scattermapbox trace를 사용하여
차량 궤적 데이터와, 항공노선을 지도 위에 그려볼 것이다.
00. 패키지 로드
## 패키지 로드
library(dplyr)
library(plotly)
library(showtext)
### 한글 폰트 설정
font_add_google("Nanum Gothic", "nanumgothic")
01. 차량 궤적 데이터
1) 데이터 불러오기
https://www.data.go.kr/data/15041797/fileData.do
한국전자통신연구원_자율주행 기술 개발을 위한 차량 주행궤적 데이터셋_20191204
본 데이터셋은 한국전자통신연구원(ETRI)에서 구축한 자율주행 기술 개발 용 차량 주행궤적 데이터셋 입니다.<br/>자차량과 전방에 위치한 인접차량의 주행궤적 정보를 담고 있으며, 데이터셋은
www.data.go.kr
- 사용 데이터는 한국전자통신연구원(ETRI)에서 구축한 자율주행 기술 개발용 차량 주행 궤적 데이터셋으로 자차량과 전방에 위치한 인접차량의 주행궤적 정보를 담고 있다.
- CSV 파일(컬럼명: 프레임 인덱스, 차량 ID, 위도, 경도, East (TM 좌표), North (TM 좌표), 차선, 차선변경여부)
data.file <- file.choose()
data.line <- read.csv(data.file, header=T)
data.line %>% head()
data.line$차량.ID <- factor(data.line$차량.ID)
2) scattermapbox를 사용하여 지도 위에 주행 궤적 시각화 하기
- scattermapbox를 사용해 선을 시각화 하기 위해서는
mode = "lines+markers"로 지정하면 된다.
## carto-positron 맵 사용
plot_ly(data.line, lat=~위도, lon=~경도) %>%
add_trace(mode='markers+lines',
type= "scattermapbox") %>%
layout(mapbox=list(style='open-street-map',
center=list(lat=36.42, lon=127.28),
zoom=10.5))
- 선 색상과 두께는 이전 plotly 선 시각화와 동일하다.
## carto-positron 맵 사용
plot_ly(data.line, lat=~위도, lon=~경도) %>%
add_trace(mode='markers+lines',
type= "scattermapbox",
size = I(5),
color = I('#F9DB24')) %>%
layout(mapbox=list(style='open-street-map',
center=list(lat=36.42, lon=127.28),
zoom=10.5),
title = "차량 주행 궤적 데이터",
font=list(family ='nanumgothic'),
margin = list(l=10, r=20, b=10, t=30, pad=0))
02. 항공노선
1) 데이터 불러오기
- 항공 노선을 지도 위에 시각화하기 위해서는 두 가지 데이터가 필요하다.
① 공항정보 데이터 : 위경도 미포함
② 항공노선 데이터 : 위경도 포함
- 위의 데이터를 결합하여 항공 노선을 지도 위에 시각화할 것이다.
### 공항정보 불러오기(위도,경도 정보 O)
url <- "https://raw.githubusercontent.com/jpatokal/openflights/master/data/airports.dat"
airport <- read.csv(url, header=F, stringsAsFactor=F)
airport <- airport[airport$V5!='', c('V3', 'V4', 'V5','V7','V8')]
names(airport) <- c("City", "Country", "IATA", "lantitude","longitude")
airport %>% head() #IATA 항공사 ID
### 항공노선 불러오기(위도, 경도 정보 X)
url <- "https://raw.githubusercontent.com/jpatokal/openflights/master/data/routes.dat"
route <- read.csv(url, header=F, stringsAsFactors=F)
route <- route[c('V1', 'V3', 'V5')]
names(route) <- c("Airline", "Departure", "Arrival")
route %>% head()
2) 데이터 전처리
- 공항정보 데이터에서 대한민국 자료 추출
airport.kr <- airport %>% filter(Country=='South Korea')
- 항공노선 데이터에서 대한민국 자료 추출
route.kr<- route %>% filter(Departure %in% airport.kr$IATA &
Arrival %in% airport.kr$IATA)
route의 변수 Departure(출발)가 airport.kr$IATA에 포함되어 있으면 행 추출을 하고,
route의 변수 Arrival(도착)가 airport.kr$IATA에 포함되어 있으면 행 추출
- 항공노선(route.kr)에 경도와 위도 생성
## 이륙 공항
library(dplyr)
from <- left_join(route.kr, airport.kr, by=c("Departure"="IATA"))
# route.kr에 있는 Departure(이륙)와 airport.kr에 있는 IATA가 같은 것만 조인
from$group <- rownames(route.kr)
from %>% head()
## 착륙 공항
to <- left_join(route.kr, airport.kr, by=c("Arrival"="IATA"))
# route.kr에 있는 Arrival와 airport.kr에 있는 IATA가 같은 것만 조인
to$group <- rownames(route.kr)
to %>% head()
- 이착륙 데이터 결합(행 결합)
air.line <- rbind(from[6:8], to[6:8])
air.line %>% head()
3) 지도 시각화
- 한국 공항 정보 지도에 뿌리기(scattermapbox)
## open-street-map 맵 사용
plot_ly(lat=~lantitude, lon=~longitude) %>%
add_trace(data = airport.kr,
mode='markers', size =4,
type= "scattermapbox",
split = ~City,
hovertext = ~City) %>% # 공항정보 점찍기
layout(mapbox=list(style='open-street-map',
center=list(lat=36, lon=127),
zoom=5),
title = "대한민국 공항 위치",
font=list(family ='nanumgothic'),
margin = list(l=10, r=20, b=10, t=30, pad=0),
showlegend = F)
- 항공 노선 추가 (scattermapbox)
## 항공 노선 추가
plot_ly(lat=~lantitude, lon=~longitude) %>%
add_trace(data = airport.kr,
mode='markers', size =4,
type= "scattermapbox",
split = ~City,
hovertext = ~City) %>%
add_trace(data =air.line,
mode='lines', line = list(shape = I("spline")),
type= "scattermapbox",
split = ~group) %>% # 항공노선 선으로 추가
layout(mapbox=list(style='open-street-map',
center=list(lat=36, lon=127),
zoom=5),
title = "대한민국 항공 노선 정보",
font=list(family ='nanumgothic'),
margin = list(l=10, r=20, b=10, t=30, pad=0),
showlegend = F)
참고 문헌(reference)
사용 데이터
차량궤적 데이터 - https://www.data.go.kr/data/15041797/fileData.do
항공노선 관련 데이터 -https://raw.githubusercontent.com/jpatokal/openflights/master/data/airports.dat
-https://raw.githubusercontent.com/jpatokal/openflights/master/data/routes.dat
참고 사이트
https://plotly.com/r/lines-on-mapbox/
Lines
Detailed examples of Lines on Mapbox including changing color, size, log axes, and more in R.
plotly.com
'R > plotly' 카테고리의 다른 글
R | plotly | Interactive Map(3) - 지도 시각화(폴리곤) (0) | 2023.02.08 |
---|---|
R | plotly | Interactive Map(1) - 지도 시각화(점, 밀도) (0) | 2023.02.07 |
R | plotly | Histogram - 히스토그램 (0) | 2023.02.03 |
R | plotly | Pie chart - 원 그래프 (0) | 2023.02.03 |
R | plotly | Line Plot - 선 그래프 (1) | 2023.02.02 |