저번 지도 시각화(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)
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)
사용 데이터
차량궤적 데이터 - 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
참고 서적 / 시각화를 이용한 데이터 정보 분석- R 활용(이동수, 장인홍 (지은이) 자유아카데미)
자유아카데미 - 도서
정보분석은 다양한 자료를 통해 필요한 가치를 도출시키는 것을 말하며, 이것은 빅데이터에 기반한 4차 산업혁명 시대에 매우 중요한 의미를 지닌다. 다양한 데이터를 바탕으로 도출된 결과는
www.freeaca.com
'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 |