R로 만드는 데이터시각화 :: ggmap - 항공노선 시각화
인상깊었던 TED 강의 중하나가 바로
[Aaron Koblin: Visualizing ourselves ... with crowd-sourced data]였습니다.
[사진: 아론코블린 홈페이지]
아론코블린이 TED강연에서 보여준 시각화입니다.
이 시각화 직관적으로 미 항공노선의 패턴을 이해할 수 있는데요~
일일이 공항의 이름, 비행기 출도착 시간, 횟수 등을 들여다보지 않아도
'미국 항공의 비행패턴'에 대해 살펴볼 수 있도록 해줍니다.^^
그런데 최근 R공부를 하던 중, 한 블로그에서
이와 관련한 예제를 보게 되었습니다.
[wsyang.com 블로그]
이 블로그에서는 openflights.org 라는 사이트도 함께 소개해주었는데요~
전 세계 공항, 항공노선 등에 대한 정보를 담고 있는 사이트였습니다.^^
[wsyang.com 블로그]
결과물의 모습인데요~
친절하게도 포스팅에 사용된 코드를 함께 공개해주었습니다!
정말 감사함을 느끼며 복사 + 불어넣기 + 실행이아닌
한줄 한줄 코드를 직접 타이핑을 해가며 공부를 했습니다.
*****
이번 포스팅은 앞서 말한대로
wsyang.com에서 소개하는 예제를 바탕으로 진행된다는 것을
분명히해봅니다!
*****
1. 데이터 다운로드
블로그에서 소개해준 사이트에서 직접 다운로드 받았습니다.
aiport의 정보와 route의 정보파일입니다.
데이터를 다운로드 받았다면
R-Studio를 실행해줍니다.
2. 패키지 로드
이번 예제에서 활용할 패키지는
'ggmap'입니다.
library(ggmap)
[설치가 안되었다면 install.packages("ggmap")]
3. 코드 작성
airport <- read.csv("airports.dat", sep=",", header=F, stringsAsFactor = F)
route <- read.csv("routes.dat", sep=",", header=F, stringsAsFactor = F)
데이터를 불러온다음 확인해보면,
열의 이름이 아래와같이 V1,V2…이런 식으로 부여되어있습니다.
이중에서 불필요한 정보를 제거하고, 시각화에 필요한 열만 가져와야겠습니다.
airport <- airport[airport$V5!='', c('V3', 'V4', 'V5', 'V7', 'V8')]
좀전과 다르게 지정한 열들만으로 airport가 구성되었습니다.
이번에는 V3, V4등으로 되어있는 열 제목을
변경해줍니다.
names(airport) <- c("City", "Country", "IATA", "lantitude", "longitude")
변경 결과는 아래와 같습니다.
시각화를 위한 적절한 형식으로 변경이 되었습니다^^
마찬가지로 route도 동일한 방법으로 다듬어줍니다.
route <- route[c('V1', 'V3', 'V5')]
names(route) <- c("Airline", "Departure", "Arrival")
마찬가지로 잘 정리가 되었습니다.
airport.krjp <- subset(airport, Country %in% c("South Korea", "Japan"))
route.krjp <- subset(route, (Departure %in% airport.krjp$IATA & Arrival %in% airport.krjp$IATA))
첫 번째 줄은, 한국공항과 일본공항만 선택합니다.
두 번째 줄은, 두 공항을 오가는 노선만을 선택합니다.
findposition <- function(IATA) {
find <- airport.krjp$IATA==IATA
x <- airport.krjp['find','longitude']
y <- airport.krjp['find', 'lantitude']
return(data.frame(x,y)) }
각 노선의 출발/도착 지점의 위도와 경도를 구합니다.
from <- lapply(route.krjp$Departure, findposition)
from <- do.call('rbind', from)
from$group <- c(1:nrow(from))
names(from) <- c("longitude",'lantitude','group')
출발공항의 위도와 경도를 구하는 부분입니다.
to <- lapply(route.krjp$Arrival, findposition)
to <- do.call('rbind', to)
to$group <- c(1:nrow(to))
names(to) <- c('longitude','lantitude','group')
data.line <- rbind(from,to)
착륙공항의 위도와 경도를 구하는 부분입니다.
Arriving.freq <- data.frame(table(route.krjp$Arrival))
names(Arriving.freq) <- c('IATA', 'Freq')
airport.krjp <- merge(airport.krjp, Arriving.freq, by = c("IATA"), all=T)
airport.lkrjp <- airport.krjp[order(airport.krjp$Freq, decreasing=T),]
항공노선의 착륙도수를 구하는 부분입니다.
4. 지도 그리기
map <- ggmap(get_googlemap(center = c(lon=134, lat=36),
zoom=5, maptype='roadmap', color='bw', scale='2'), extent='device')
map + geom_point(data=airport.krjp, aes(x=longitude, y=lantitude, size=Freq),
colour = 'gray10', alpha=0.3) +
geom_line(data=data.line, aes(x=longitude, y=lantitude, group=group),
size=0.2, alpha=.1, color = '#816960') +
scale_size(range=c(0,15)) + theme(legend.position="none")
이렇게 입력하면 아래와같은 결과 창을 보실 수 있습니다.
마지막으로 일러스트레이터로 보정을 해보겠습니다^^
'시각화 > R' 카테고리의 다른 글
▶R로만드는 데이터시각화 : 기본예제 - 데이터다루기 factor와 vector (0) | 2014.04.04 |
---|---|
▶R로만드는 데이터시각화 :: ggplot 기초 - iris 시각화 (1) | 2014.04.01 |
▶R로만드는 데이터시각화 :: ggmap응용 - 서울의 도서관 시각화 (7) | 2014.03.27 |
▶R로만드는 데이터시각화 :: ggplot 기초 - 기본개념 (0) | 2014.03.20 |
▶R로만드는 데이터시각화 :: 오류해결방법 :: rJava 에러 (1) | 2014.03.19 |