R | plotly | Interactive Map(2) - 지도 시각화(선)

2023. 2. 7. 13:58·R/plotly

 

 

저번  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를 사용하여 

차량 궤적 데이터와, 항공노선을 지도 위에 그려볼 것이다.

 

plotly_map2_line.html
5.04MB


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
'R/plotly' 카테고리의 다른 글
  • R | plotly | Interactive Map(3) - 지도 시각화(폴리곤)
  • R | plotly | Interactive Map(1) - 지도 시각화(점, 밀도)
  • R | plotly | Histogram - 히스토그램
  • R | plotly | Pie chart - 원 그래프
갬보리
갬보리
제발 코드정리좀 하자 (R, SQL, SAS, Python , etc...)
  • 갬보리
    보딩코
    갬보리
  • 전체
    오늘
    어제
    • 분류 전체보기 (50) N
      • R (32)
        • dplyr (7)
        • preprocessing (2)
        • EDA (0)
        • ggplot2 (10)
        • plotly (11)
        • leaflet (2)
      • SQL (15)
      • SAS (0)
      • Python (1)
        • preprocessing (0)
        • Library (0)
      • ETC (2) N
        • ML (1) N
  • hELLO· Designed By정상우.v4.10.3
갬보리
R | plotly | Interactive Map(2) - 지도 시각화(선)
상단으로

티스토리툴바