1. Find all flights that
오늘은 flights 데이터를 분석해 봤다. 분석이라기보다는 데이터를 알아보는 것에 더 초점을 맞췄다. 전공시간을 생각해 보면 함수만 배웠지 데이터의 구조를 보고 어떤 정보를 담고 있는지 알아보는 시간은 부족했던 것 같다. 이번 기회에 flights 데이터를 집중적으로 살펴보고자 한다.
flights 데이터는 "nycflights13" 이라는 패키지안에 있는 데이터이다. 이 데이터에 대한 소개를 잠시 알아보자.
On-time data for all flights that departed NYC (i.e. JFK, LGA or EWR) in 2013
번역해보면 2013년 기준으로 뉴욕의 3개 공항에 있었던 모든 비행 데이터이다.
> flights
# A tibble: 336,776 × 19
year month day dep_time sched_dep_t…¹ dep_d…² arr_t…³ sched…⁴ arr_d…⁵ carrier flight
<int> <int> <int> <int> <int> <dbl> <int> <int> <dbl> <chr> <int>
1 2013 1 1 517 515 2 830 819 11 UA 1545
2 2013 1 1 533 529 4 850 830 20 UA 1714
3 2013 1 1 542 540 2 923 850 33 AA 1141
4 2013 1 1 544 545 -1 1004 1022 -18 B6 725
5 2013 1 1 554 600 -6 812 837 -25 DL 461
6 2013 1 1 554 558 -4 740 728 12 UA 1696
7 2013 1 1 555 600 -5 913 854 19 B6 507
8 2013 1 1 557 600 -3 709 723 -14 EV 5708
9 2013 1 1 557 600 -3 838 846 -8 B6 79
10 2013 1 1 558 600 -2 753 745 8 AA 301
# … with 336,766 more rows, 8 more variables: tailnum <chr>, origin <chr>, dest <chr>,
# air_time <dbl>, distance <dbl>, hour <dbl>, minute <dbl>, time_hour <dttm>, and
# abbreviated variable names ¹sched_dep_time, ²dep_delay, ³arr_time, ⁴sched_arr_time,
# ⁵arr_delay
# ℹ Use `print(n = ...)` to see more rows, and `colnames()` to see all variable names
데이터가 굉장히 많아서 한 번에 다 볼 수 없다. 행이 336,776개나 되며 열도 19개이다. 결국 이런 데이터를 학습하기 위해서는 R의 help 기능을 사용할 수밖에 없다. 데이터에 여러 가지 포맷이 존재했고 여러 가지 정보가 있었다. filter를 사용해 보면서 데이터에 대해서 학습해 보도록 하자.
1) Had an arrival delay of two or more hours
library(nycflights13)
library(tidyverse)
(filter(flights,arr_delay >= 2))
간단하게 도착시간이 2시간이상 딜레이 된 비행 편을 조사해 봤다. 여기서 딜레이 된 도착시간을 나타내는 포맷명은 arr_delay였다. 꽤 직관적으로 잘 표현한 것 같다.
2) Flew to Houston (IAH or HOU)
(filter(flights,dest=="IAH"|dest=="HOU"))
휴스턴으로 운항된 비행편을 찾는 문제였다. 데이터에 대한 정보 없이 이 문제를 처음 보면 당황할 수 있다. 왜냐하면 dest라는 포맷 명은 그냥 눈으로 확인할 수 없기 때문이다. ?flights를 통해서 flights데이터에 대한 사전 학습이 되어 있어야지 이 문제를 풀 수 있다. 데이터가 거대해질수록 이 과정이 중요해질 것 같다는 생각이 들었다.
3) Were operated by United, American, or Delta
(filter(flights,carrier %in% c("UA","AA","DL")))
이것도 그냥 확인 할 수 없었다. ?flights를 사용해서 풀어야 했다. 문제는 United 항공, American항공, Delta항공에서 운항된 비행 편을 찾는 것이었다. 두 번째 문제보다 더 난이도 있었던 이유는 항공사 이름이 약자로 표기되어 있는데 ?flights로는 항공사를 표현한 약자를 알 수 없었기 때문이다.
자세히 보니 flights라는 데이터 셋을 만들기 위해 다른 데이터 셋들이 사용되고 있었다. 예를 들어 비행기 기체 번호를 표현하기 위해 "planes"라는 다른 데이터 셋의 도움을 받고 있었고, 목적지와 출발지 공항 정보를 위해 "airports"라는 데이터 셋을 사용하고 있었다. 항공사 이름 약자는 "airlines"라는 데이터 셋 안에서 확인할 수 있었다.
4) Departed in summer (July, August, and September)
(filter(flights,month %in% c(7,8,9)))
R이 벡터 연산을 한다는 개념을 알고 있으면 굳이 3가지 조건을 따로 하지 않아도 된다는 것을 알 수 있다. %in%과 c()를 이용하여 쉽게 필터링하였다.
5) Arrived more than two hours late, but didn’t leave late
(filter(flights,arr_delay>=2&dep_delay<=0))
데이터 포맷의 의미와 정보를 파악할 수 있다면 쉽게 풀 수 있는 문제이다.
오늘은 filter()라는 함수를 사용해 보는 것으로 시작해 flights 데이터를 알아보는 것으로 마무리한 것 같다. 얼마나 코드를 잘 짜서 분석을 잘하느냐 보다 그 데이터가 무엇을 조사했는지, 무슨 의미를 가지고 있는지, 어떤 용도로 쓰일 수 있는지 고민해 보는 것도 굉장히 중요한 것 같다.
'R study' 카테고리의 다른 글
성동구 어느 동이 치킨&호프 집이 제일 많을까? (2) | 2023.03.10 |
---|---|
"몇 살 때 월급을 가장 많이 받을까?"(데이터 분석 연습) (2) | 2023.03.03 |
데이터 시각화(Geometric objects) (4) | 2023.02.23 |
데이터 시각화(facet) (1) | 2023.02.22 |
데이터 시각화(Aesthetic Mappings) (1) | 2023.02.22 |