1. filtering 연습문제1 - 도착 시간이 1시간 넘게 연착된 비행기?
패키지를 설치하고 부착, 이후 flights 데이터프레임을 확인합니다
총 336,766개의 데이터가 있습니다.
도착시간이 1시간 넘게 지연된 경우를 filter 함수를 통해 구하면
a <- flights %>% filter(arr_delay > 60) ; a
총 27,789의 행이 필터링되었습니다. 전체 336,766번의 비행 중 27,789번은 1시간 넘게 도착이 지연되었음을 확인할 수 있습니다.
2. arrange 연습문제1 - 가장 오래 연착해 출발하거나 도착한 비행기는?
arrange 함수를 사용해 출발이 가장 많이 지연되었거나, 도착이 가장 많이 지연되었던 경우를 구합니다.
1. 출발이 가장 많이 지연되었던 비행기
b1 <- flights %>% arrange(desc(dep_delay)) ; head(b1)
내림차순 정렬을 했으므로 dep_delay의 값이 가장 큰 순서대로 정렬됩니다.
첫째 행의 1301분 지연된 기체 N384HA (HA 51편)가 가장 출발이 많이 지연된 비행기입니다
2, 도착이 가장 많이 지연되었던 비행기
b2 <- flights %>% arrange(desc(arr_delay)) ; head(b2)
가장 많이 연착된 비행기 역시 기체 N384HA (HA 51편)비행기인 것을 확인할 수 있습니다.
3. select 연습문제2 - “time”을 포함하는 변수들을 모두 선택하려면?
특정 키워드를 포함하는 변수들을 선택하려면 select와 contais를 사용합니다.
c1 <- flights %>% select(contains("time")) ; head(c1)
칼럼명에 time이 포함된 변수는 dep_time, sched_dep_time, arr_time, sched_arr_time, air_time, time_hour 로 총 6개입니다
4. mutate 연습문제1 - 문제1: (arr_delay 데이터가 없다고 가정하고) 도착시간이 가장 오래 지연된 케이스를 10가지, 오래된 순서로 고른다면 ?
arr_delay 데이터가 없는 상태에서 진행하기 위해 해당 변수를 flights 데이터프레임에서 제거한 새로운 데이터프레임을 만듭니다.
도착이 얼마나 지연되었는지를 구하기 위해서는 mutate를 사용해 실제 도착시간에서 예정 도착시간을 뺀 값들을 새로운 변수로 생성합니다.
먼저 arr_delay 칼럼을 삭제한 데이터프레임을 만들고, 도착지연시간 계산을 위해 실제 도착시간과 예상 도착시간의 결측치들을 제거합니다
flights2 <- flights %>%
select(- arr_delay) %>%
filter(!is.na(arr_time) , !is.na(sched_arr_time)) ; flights2
먼저 데이터 정보를 찾아보다가 확인한 바로는,
계산에 필요한 flights 데이터셋의 arr_time, ached_arr_time 변수의 표기형식은 HHMM 형식입니다. 즉, 1234 이면 1234분이 아니라 12시 34분입니다. 정확한 계산을 위해 해당 칼럼들을 모두 분 단위로 바꾼 새 변수들을 생성합니다.
HHMM으로 표기된 arr_time, sched_arr_time 변수를 100으로 나눈 값은 시간, 나머지는 분이 됩니다. 100으로 나눈 값에 60을 곱하면 분으로 환산할 수 있으므로, ((변수 / 100)의 몫) * 60과 (변수/100)의 나머지를 더하면 실제 도착시간과 예정 도착시간을 분 단위으로 환산할 수 있습니다.
여기서 주의할 점이, 날짜가 자정을 넘겨 0010, 0100 등으로 표기된 경우 분으로 환산하면 실제로는 날짜를 넘겨 도착했으나 계산 시 더 빠르게 도착한 것으로 계산될 수가 있습니다. 정확한 계산을 위해서는 출발과 도착 날짜까지 필요하지만 해당 데이터프레임에는 출발, 도착날짜 칼럼이 없으므로 모든 항공편의 출발과 도착 날짜가 같다는 가정 하에 계산을 진행하였습니다.
먼저, 실제 도착시간과 예정 도착시간을 분 단위로 환산한 arr_time_minutes과 sched_arr_time_minutes을 생성합니다. mutate를 사용해 실제도착시간 - 예상도착시간 = 도착지연시간 수식으로 새로운 칼럼을 생성합니다.
d1 <- flights2 %>%
mutate(
arr_time_minutes = (arr_time %/% 100) * 60 + (arr_time %% 100),
sched_arr_time_minutes = (sched_arr_time %/% 100) * 60 + (sched_arr_time %% 100),
arrdelay = arr_time_minutes - sched_arr_time_minutes) ; d1
새로 생성된 arrdelay 변수를 맨 앞으로 가져온 뒤, 내림차순으로 정렬합니다. 그 다음 상위 10개 행만 출력합니다
d2 <- d1 %>% select(arrdelay , everything()) %>% arrange(desc(arrdelay)) ; head(d2 , 10)
가장 도착이 많이 지연된 항공편 Top 10
1. N258JB 기체 (B6 30편)
2. N323JB 기체 (B6 30편)
3. N198 JB 기체 (B6 128편)
4. N238JB 기체 (B6 234편)
5. N784JB 기체 (B6 97편)
6. N709TW 기체 (DL 1543편)
7. N442UA 기체 (UA 624편)
8. N368JB 기체 (B6 30편)
9. N351JB 기체 (B6 30편)
10. N226JB 기체 (B6 486편)
전체 코드