Как авиационный фанат, я обычно ищу, какой именно самолет я получу для своих дальних перелетов. Начните задавать вопросы и получайте ответы: это новенький самолет ?; Подбираю ли я хорошее место ?; Есть ли у него предыдущий запланированный рейс, чтобы прилететь в мой аэропорт ?; Если да, то работает ли он вовремя ?; Если нет, сколько мне нужно ждать прибытия моего самолета ?; и так далее. При таком поиске вы можете найти 4–6-значный номер, который мы называем бортовым номером или регистрационным номером, одним из уникальных идентификаторов самолета. Если вы когда-либо делали снимок самолета, когда вы взволнованы, садясь на борт, пожалуйста, увеличьте его хвостовую часть. Вы найдете этот номер, напечатанный как на левом, так и на правом борту самолета. Нравится.
Этот уникальный номер вдохновил меня на активизацию моего проекта по науке о данных. Я считал, что этот бортовой номер может быть хорошим предиктором задержки рейсов. И я расширил этот вывод до - а что насчет производителей или моделей самолетов, можно ли узнать это по этому номеру - и могут ли это быть переменные, которые я могу использовать для своих моделей прогнозирования? Вот как я начал свой проект, исходя из этого амбициозного предположения: если существует определенная связь между самолетами и задержками, это может быть связано со стратегиями эксплуатации парка воздушных судов - будь то диверсификация или упрощение инвентаризации их парка.
Своевременная производительность с открытым исходным кодом в 29 миллионах точек данных
Набор данных о своевременности выполнения работ можно получить на Статическом веб-сайте Транспортного бюро. В моем случае я погрузился в данные за 5 последних лет с 2013 по 2017 год, и в итоге получилось 29 миллионов точек данных по всем внутренним пассажирским рейсам. Файл CSV содержит от основной информации о каждом рейсе (например, дату, запланированное время, фактическое время и т. Д.) До конкретного подробного журнала, такого как минуты задержек, причины задержек, статус рейса (отменен, задержан или перенаправлен) и т. Д.
# Since BTS webpage allows to get dataset by month, I downloaded first and merged it. import glob import pandas as pd import os, os.path # Set the file path path = './assets/rawdata/' # Make reproducible, whether the combined dataset existed or not if os.path.isfile('./assets/newdf_2013.csv') == True: newdf_2013 = pd.read_csv('./assets/newdf_2013.csv', low_memory=False) print("File existed!", newdf_2013.shape) else: # pull 2013 datasets, segmented down by months, and merge files = glob.glob(path + str(2013) + "/*.csv") df_2013 = pd.concat((pd.read_csv(f, low_memory=False) for f in files)) print("Shape of 2013 raw datasets: ", df_2013.shape)
После получения набора данных и завершения слияния убедитесь, что вы провели базовый анализ набора данных, на какие столбцы и функции вы хотите в основном обратить внимание. Здесь я выбрал около 30 функций из 110 столбцов. Сброшенные столбцы представляли собой информацию о рейсах или несколько дублированных географических данных аэропорта / рынка.
# Select only relevant columns if os.path.isfile('./assets/newdf_2013.csv') == True: print("File existed and already preprocessed") else: cols = ['Year', 'Month', 'DayofMonth', 'DayOfWeek', 'Carrier', 'FlightNum', 'TailNum', 'Origin', 'Dest', 'CRSDepTime', 'DepTime', 'DepDelay', 'TaxiOut', 'WheelsOff', 'CRSElapsedTime', 'ActualElapsedTime', 'AirTime', 'Distance', 'WheelsOn', 'TaxiIn', 'CRSArrTime', 'ArrTime', 'ArrDelay', 'Diverted', 'Cancelled', 'CancellationCode', 'NASDelay', 'SecurityDelay', 'CarrierDelay', 'LateAircraftDelay', 'WeatherDelay'] newdf_2013 = df_2013[[col for col in df_2013.columns if col in cols]] print("Shape of 2013 modified datasets: ", newdf_2013.shape)
По вычислительным причинам я делю это на данные местного рынка как для исходящих, так и для входящих рейсов. В результате получилось 2,2 миллиона точек данных.
# only select Washington Metro airport if os.path.isfile('./assets/washington.csv') == True: print("File existed and already preprocessed") was_air = pd.read_csv('./assets/washington.csv', low_memory=False) print("Washington airports dataset dimension: ", was_air.shape) else: was_airports = ['DCA', 'IAD', 'BWI'] a = newdf_2013[newdf_2013.Origin.isin(was_airports)] b = newdf_2014[newdf_2014.Origin.isin(was_airports)] c = newdf_2015[newdf_2015.Origin.isin(was_airports)] d = newdf_2016[newdf_2016.Origin.isin(was_airports)] e = newdf_2017[newdf_2017.Origin.isin(was_airports)] a_= newdf_2013[newdf_2013.Dest.isin(was_airports)] b_= newdf_2014[newdf_2014.Dest.isin(was_airports)] c_= newdf_2015[newdf_2015.Dest.isin(was_airports)] d_= newdf_2016[newdf_2016.Dest.isin(was_airports)] e_= newdf_2017[newdf_2017.Dest.isin(was_airports)] was_air = pd.concat([a, b, c, d, e, a_, b_, c_, d_, e_], ignore_index=True) print("Washington airports dataset dimension: ", was_air.shape) # save dataset for the future usage was_air.to_csv('./assets/washington.csv', index=False)
Как я уже упоминал ранее, я собирался спланировать идентификацию самолетов с указанием модели, производителя и возраста, предоставив хвостовой номер в наборе данных. В 2,2 миллиона наборов данных было найдено около 6000 уникальных конечных чисел. Поэтому я решил использовать Selenium для веб-скрапинга с flightradar24.com, известного своей службой отслеживания полетов в реальном времени. Этот сайт содержит подробный код самолета, серийный номер, возраст и дату доставки пользователям, подписавшимся на платную подписку. Следя за сайтом, после некоторых тестов с Selenium я успешно удалил информацию о тысячах самолетов. Вы можете найти больше на моем GitHub.
Когда весь набор данных подготовлен, приступим к исследовательскому анализу данных и проектированию функций. У меня есть несколько золотых самородков, которые я нашел на основе данных.
В национальной столице есть три международных / национальных аэропорта: международный аэропорт имени Тургуда Маршалла в Балтиморе / Вашингтоне (кодовое название IATA - BWI: Baltimore, MD), национальный аэропорт имени Рональда Рейгана в Вашингтоне (округ Колумбия: Арлингтон, штат Вирджиния), международный аэропорт Вашингтона Даллес (IAD: Даллес, Вирджиния) Из этих трех аэропортов наибольшее количество рейсов имеет BWI, за ним следуют DCA и IAD. Интересно, что все аэропорты показали некоторое снижение в феврале и повышение в марте. Моя догадка такая же, как и у вас, весенние каникулы!
Если учитывать полеты как в исходную, так и в исходную, первое место заняла компания Southwest, за которой следуют United, American и Delta. (Как вы можете видеть, дочерние авиалинии не были переклассифицированы, по которым они выполнялись, и поскольку в наборе данных также отдельно указаны US Airways)
Прежде чем мы скажем, какие авиалинии показали лучшие и худшие результаты - угадайте основную причину, чтобы прочитать это далеко, чтобы утолить жажду и любопытство, - давайте поговорим еще об одном техническом моменте. Я хотел использовать время отправления и прибытия, зарегистрированное в наборе данных, в качестве предиктора для моей модели. С помощью Бена Шейвера я нашел Mr. Сообщение в блоге Яна Лондона о циклическом преобразовании времени. Код и мыслительный процесс части моего проекта вдохновлен блогом, и заслуга в этом принадлежит мистеру Лондону и Бену. По сути, мы преобразуем время в синусоидальное и косинусное преобразование. После вычисления sin_time и cos_time вы можете разбить график на 24-часовые часы.
Как вы можете видеть на разноцветных часах выше, задержки рейсов привели к дополнительной внеплановой работе в аэропорту.
Вот анализ вылета и прилета рейсов, которые задержались более чем на 15 минут по сравнению с запланированным временем. На первой странице красной линией показано среднее значение отложенной ставки. На второй странице в качестве кода и сюжета указана ссылка на Mr. Фабьен Даниэль, его учебник по Kaggle , представил, как каждая авиакомпания ожидает средних минут задержки в последовательностях вылета и прибытия.
Проблемы: слишком много неизвестных значений в информации о самолетах
Хорошо, вернемся к исходным выводам и предположениям. Можно ли прогнозировать задержки рейсов с моделями и производителями самолетов? Мой короткий ответ - да, это возможно, но мой более длинный ответ - я не могу получить значимый результат в данный момент. Причина в том, что я получил слишком много информации о неизвестных самолетах с сайта flightradar24.com. Из 6000 уникальных хвостовых номеров после того, как я успешно завершил свою работу с селеновым ботом, я получил около 20% неизвестных или нулевых данных. Поэтому моя задача и новое путешествие в том, что мне нужно найти лучший источник для сбора информации о самолете на основе его бортового номера. Если у кого-то есть мысли или предложения по поводу моих амбициозных проектов, я буду более чем счастлив пообщаться с вами и поучиться у вас. Как новый специалист по данным, я всегда готов выслушать все отзывы и доработать свою работу. Всю мою текущую работу и процессы можно найти на моем GitHub. Большое спасибо за то, что прочитали это.