새소식

R/ggplot2

R | ggmap | 지도 시각화(2) - line

  • -

 

 

 

저번 지도 시각화(1)에서는 ggmap 패키지를 사용하여

대전광역시 상권정보를 ggmap과 geom_point, stat_density2 d(ggplot2)로 위치를 점으로 표현하고, 

상권 밀집 정도를 밀도와 등고선으로 표현하였다. 

 

이번 포스팅에서는 역시 ggmap 패키지geom_line(ggplot2)을 사용하여

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

 

 

 

 

 


 

 

01. 차량 궤적 데이터 (ggmap + geom_line)

 

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) ggplot 좌표 위에 주행 궤적 line 그리기

 

- 주행 궤적이 어떤지 파악하기 위해서 먼저 ggplot 좌표 위에 line을 그려 보았다. 

ggplot()+
   geom_line(data=data.line, aes(x=경도, y=위도, colour=차량.ID))

 

 

 

3)  ggmap에 주행 궤적 line 그리기

 

- 지도 다운로드 및 표시 

boxLocation <- fn_lon_lat_box(127.30, 36.42, 6)
krMap <- get_map(boxLocation) 

# 지도표시
ggmap(krMap)

 

 

- geom_line을 사용하여 주행 궤적 그리기

ggmap(krMap)+
   geom_line(data=data.line, 
             aes(x=경도, y=위도, colour=차량.ID),
             size=2)

 

 

 

- geom_path을 사용하여 주행 궤적 그리기

ggmap(krMap)+
   geom_path(data=data.line,
             aes(x=경도, y=위도, colour=차량.ID),
             size=2)

 

geom_line으로 그린 선과 동일하게 그려진다.

 

 

 


 

 

 

02. 항공노선 (ggmap + geom_line)

 

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) 지도 시각화 

 

- 한국 공항 정보 지도에 뿌리기(geom_point)

### 지도 다운로드
airMap <- get_map(fn_lon_lat_box(128,36,300))
map <- ggmap(airMap)

map <- map + geom_point(data=airport.kr, aes(x=longitude, y=lantitude))
map

 

 

- 직선으로 표현(이륙, 착륙 정보 변수를 하나의 열로 지정해야 함.)

map + geom_path(data=air.line,
                aes(x=longitude, y=lantitude, group=group))

 

 

- 곡선으로 표현(이륙, 착륙 정보 각각의 열로 지정해야함.)

## 자료 생성
air.line.2 <- data.frame(from[6:8], to[6:8])
air.line.2 %>% head() # [1:3] 출발 [4:6] 도착

 

 

## 항공노선 추가 - geom_curve
map + geom_curve(data=air.line.2,
                aes(x=longitude, y=lantitude,
                    xend=longitude.1, yend=lantitude.1),
                curvature=0.2)+
      coord_cartesian()

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 


 

 

참고 문헌(reference)

더보기

'R > ggplot2' 카테고리의 다른 글

R | ggmap | 지도 시각화(3) - polygon  (0) 2023.01.27
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
Contents