Flights Data Exploration

Preliminary Wrangling

This dataset reports flights in the United States, including carriers, arrival and departure delays, and reasons for delays, for 2008.

Variable descriptions

--- Name Description
1 Year 2008
2 Month 1-12
3 DayofMonth 1-31
4 DayOfWeek 1 (Monday) - 7 (Sunday)
5 DepTime actual departure time (local, hhmm)
6 CRSDepTime scheduled departure time (local, hhmm)
7 ArrTime actual arrival time (local, hhmm)
8 CRSArrTime scheduled arrival time (local, hhmm)
9 UniqueCarrier unique carrier code
10 FlightNum flight number
11 TailNum plane tail number
12 ActualElapsedTime in minutes
13 CRSElapsedTime in minutes
14 AirTime in minutes
15 ArrDelay arrival delay, in minutes
16 DepDelay departure delay, in minutes
17 Origin origin IATA airport code
18 Dest destination IATA airport code
19 Distance in miles
20 TaxiIn taxi in time, in minutes
21 TaxiOut taxi out time in minutes
22 Cancelled was the flight cancelled?
23 CancellationCode reason for cancellation (A = carrier, B = weather, C = NAS, D = security)
24 Diverted 1 = yes, 0 = no
25 CarrierDelay in minutes
26 WeatherDelay in minutes
27 NASDelay in minutes
28 SecurityDelay in minutes
29 LateAircraftDelay in minutes
In [1]:
# import all packages and set plots to be embedded inline
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
import seaborn as sb
import calendar

%matplotlib inline
In [2]:
# load 2008 dataset into a pandas dataframe, print statistics.
df_2008s = pd.read_csv('2008.csv')
In [4]:
print(df_2008s.shape)
(7009728, 29)
In [140]:
# Due to size of data set, we will initially use a sample of the data sets to find issues with the data.
#df_2008.sample(10000).to_csv('sampled_10000.csv')
In [7]:
#df_2008s = pd.read_csv('sampled_10000.csv')
In [142]:
#df_2008s.shape
Out[142]:
(10000, 30)
In [5]:
# check data types of each column
df_2008s.dtypes
Out[5]:
Year                   int64
Month                  int64
DayofMonth             int64
DayOfWeek              int64
DepTime              float64
CRSDepTime             int64
ArrTime              float64
CRSArrTime             int64
UniqueCarrier         object
FlightNum              int64
TailNum               object
ActualElapsedTime    float64
CRSElapsedTime       float64
AirTime              float64
ArrDelay             float64
DepDelay             float64
Origin                object
Dest                  object
Distance               int64
TaxiIn               float64
TaxiOut              float64
Cancelled              int64
CancellationCode      object
Diverted               int64
CarrierDelay         float64
WeatherDelay         float64
NASDelay             float64
SecurityDelay        float64
LateAircraftDelay    float64
dtype: object
In [6]:
# visually assess the data set.
df_2008s.head(10)
Out[6]:
Year Month DayofMonth DayOfWeek DepTime CRSDepTime ArrTime CRSArrTime UniqueCarrier FlightNum ... TaxiIn TaxiOut Cancelled CancellationCode Diverted CarrierDelay WeatherDelay NASDelay SecurityDelay LateAircraftDelay
0 2008 1 3 4 2003.0 1955 2211.0 2225 WN 335 ... 4.0 8.0 0 NaN 0 NaN NaN NaN NaN NaN
1 2008 1 3 4 754.0 735 1002.0 1000 WN 3231 ... 5.0 10.0 0 NaN 0 NaN NaN NaN NaN NaN
2 2008 1 3 4 628.0 620 804.0 750 WN 448 ... 3.0 17.0 0 NaN 0 NaN NaN NaN NaN NaN
3 2008 1 3 4 926.0 930 1054.0 1100 WN 1746 ... 3.0 7.0 0 NaN 0 NaN NaN NaN NaN NaN
4 2008 1 3 4 1829.0 1755 1959.0 1925 WN 3920 ... 3.0 10.0 0 NaN 0 2.0 0.0 0.0 0.0 32.0
5 2008 1 3 4 1940.0 1915 2121.0 2110 WN 378 ... 4.0 10.0 0 NaN 0 NaN NaN NaN NaN NaN
6 2008 1 3 4 1937.0 1830 2037.0 1940 WN 509 ... 3.0 7.0 0 NaN 0 10.0 0.0 0.0 0.0 47.0
7 2008 1 3 4 1039.0 1040 1132.0 1150 WN 535 ... 7.0 7.0 0 NaN 0 NaN NaN NaN NaN NaN
8 2008 1 3 4 617.0 615 652.0 650 WN 11 ... 6.0 19.0 0 NaN 0 NaN NaN NaN NaN NaN
9 2008 1 3 4 1620.0 1620 1639.0 1655 WN 810 ... 3.0 6.0 0 NaN 0 NaN NaN NaN NaN NaN

10 rows × 29 columns

In [145]:
# describe data set to further analyze the data
df_2008s.describe()
Out[145]:
Year Month DayofMonth DayOfWeek DepTime CRSDepTime ArrTime CRSArrTime FlightNum ActualElapsedTime ... Distance TaxiIn TaxiOut Cancelled Diverted CarrierDelay WeatherDelay NASDelay SecurityDelay LateAircraftDelay
count 7009728.0 7.009728e+06 7.009728e+06 7.009728e+06 6.873482e+06 7.009728e+06 6.858079e+06 7.009728e+06 7.009728e+06 6.855029e+06 ... 7.009728e+06 6.858079e+06 6.872670e+06 7.009728e+06 7.009728e+06 1.524735e+06 1.524735e+06 1.524735e+06 1.524735e+06 1.524735e+06
mean 2008.0 6.375130e+00 1.572801e+01 3.924182e+00 1.333830e+03 1.326086e+03 1.481258e+03 1.494801e+03 2.224200e+03 1.273224e+02 ... 7.263870e+02 6.860852e+00 1.645305e+01 1.960618e-02 2.463006e-03 1.577206e+01 3.039031e+00 1.716462e+01 7.497434e-02 2.077098e+01
std 0.0 3.406737e+00 8.797068e+00 1.988259e+00 4.780689e+02 4.642509e+02 5.052251e+02 4.826728e+02 1.961716e+03 7.018731e+01 ... 5.621018e+02 4.933649e+00 1.133280e+01 1.386426e-01 4.956753e-02 4.009912e+01 1.950287e+01 3.189495e+01 1.837940e+00 3.925964e+01
min 2008.0 1.000000e+00 1.000000e+00 1.000000e+00 1.000000e+00 0.000000e+00 1.000000e+00 0.000000e+00 1.000000e+00 1.200000e+01 ... 1.100000e+01 0.000000e+00 0.000000e+00 0.000000e+00 0.000000e+00 0.000000e+00 0.000000e+00 0.000000e+00 0.000000e+00 0.000000e+00
25% 2008.0 3.000000e+00 8.000000e+00 2.000000e+00 9.280000e+02 9.250000e+02 1.107000e+03 1.115000e+03 6.220000e+02 7.700000e+01 ... 3.250000e+02 4.000000e+00 1.000000e+01 0.000000e+00 0.000000e+00 0.000000e+00 0.000000e+00 0.000000e+00 0.000000e+00 0.000000e+00
50% 2008.0 6.000000e+00 1.600000e+01 4.000000e+00 1.325000e+03 1.320000e+03 1.512000e+03 1.517000e+03 1.571000e+03 1.100000e+02 ... 5.810000e+02 6.000000e+00 1.400000e+01 0.000000e+00 0.000000e+00 0.000000e+00 0.000000e+00 6.000000e+00 0.000000e+00 0.000000e+00
75% 2008.0 9.000000e+00 2.300000e+01 6.000000e+00 1.728000e+03 1.715000e+03 1.909000e+03 1.907000e+03 3.518000e+03 1.570000e+02 ... 9.540000e+02 8.000000e+00 1.900000e+01 0.000000e+00 0.000000e+00 1.600000e+01 0.000000e+00 2.100000e+01 0.000000e+00 2.600000e+01
max 2008.0 1.200000e+01 3.100000e+01 7.000000e+00 2.400000e+03 2.359000e+03 2.400000e+03 2.400000e+03 9.743000e+03 1.379000e+03 ... 4.962000e+03 3.080000e+02 4.290000e+02 1.000000e+00 1.000000e+00 2.436000e+03 1.352000e+03 1.357000e+03 3.920000e+02 1.316000e+03

8 rows × 24 columns

What is the structure of your dataset?

There are 7,009,728 flights in this dataset with 25 features (Year, Month, Day of Month, Day Of Week, Actual Departure Time, Scheduled Departure Time, Actual Arrival Time, Scheduled Arrival Time, Unique Carrier Code, Flight Number, Plane Tail Number, Actual Elapsed Time, Scheduled Elapsed Time, Air Time, Arrival Delay, Departure Delay, Origin, Destination, Distance, Taxi in time, Taxi Out Time, Cancelled, Reason For Cancellation (A = carrier, B = weather, C = NAS, D = security), Diverted, Carrier Delay, Weather Delay, NAS Delay, Security Delay, Late Aircraft Delay.

What is/are the main feature(s) of interest in your dataset?

I am most interested in figuring out what features are best for predicting the likelihood a flight is delayed or cancelled. I am also interested in the proportion of delays and cancellations for day of week and month of year.

What features in the dataset do you think will help support your investigation into your feature(s) of interest?

I expect that weather delays and number of flights will have the strongest effect on delay or cancellation. This means that the CancellationCode column and each of the delay columns will be of interest. To calculate the number of flights, I plan to use the .value_counts() on the Month and DayOfWeek columns.

Univariate Exploration

Make sure that I am converting numbers to days/months correctly.

In [7]:
days = list(calendar.day_name)
days_abbr = list(calendar.day_abbr)
print(days, days_abbr)
month = list(calendar.month_name)
month_abbr = list(calendar.month_abbr)
print(month, month_abbr)
print(calendar.month_abbr[1])
exit()
['Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday', 'Sunday'] ['Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat', 'Sun']
['', 'January', 'February', 'March', 'April', 'May', 'June', 'July', 'August', 'September', 'October', 'November', 'December'] ['', 'Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec']
Jan

Total Flights by Month

In [8]:
# create new data set based on Month value counts
df_2008s_month_value_counts = df_2008s.Month.value_counts().reset_index()
df_2008s_month_value_counts.columns = ["Month", "Total_Flights"]
df_2008s_month_value_counts = df_2008s_month_value_counts.sort_values(by=['Month'])
df_2008s_month_value_counts['Month'] = df_2008s_month_value_counts['Month'].apply(lambda x: calendar.month_abbr[x])
print(df_2008s_month_value_counts)
df_flights_by_month = df_2008s_month_value_counts.reset_index()
df_flights_by_month = df_flights_by_month.drop(columns=['index'])
df_flights_by_month
   Month  Total_Flights
5    Jan         605765
7    Feb         569236
1    Mar         616090
6    Apr         598126
4    May         606293
3    Jun         608665
0    Jul         627931
2    Aug         612279
10   Sep         540908
8    Oct         556205
11   Nov         523272
9    Dec         544958
Out[8]:
Month Total_Flights
0 Jan 605765
1 Feb 569236
2 Mar 616090
3 Apr 598126
4 May 606293
5 Jun 608665
6 Jul 627931
7 Aug 612279
8 Sep 540908
9 Oct 556205
10 Nov 523272
11 Dec 544958
In [9]:
# Plot
ax = df_2008s_month_value_counts.plot(kind='bar', x='Month', y='Total_Flights', color = 'teal', legend=False, figsize= (15,8))
plt.xticks(range(0,12),df_2008s_month_value_counts["Month"])
plt.title("Total Flights by Month")
plt.ylabel("Total Flights")
plt.xlabel("")
plt.show();

Most flights occur in the months of July and August. The months that had the least flights are in the months between September and December.

Total Flights by Day of Week

In [10]:
# create new data set based on DayOfWeek value counts
df_2008s_day_value_counts = df_2008s.DayOfWeek.value_counts().reset_index()
df_2008s_day_value_counts.columns = ["DayOfWeek", "Total_Flights"]
df_2008s_day_value_counts = df_2008s_day_value_counts.sort_values(by=['DayOfWeek'])
df_2008s_day_value_counts['DayOfWeek'] = df_2008s_day_value_counts['DayOfWeek'].apply(lambda x: calendar.day_abbr[x-1])
print(df_2008s_day_value_counts)
df_day_value_counts = df_2008s_day_value_counts.reset_index()
df_day_value_counts = df_day_value_counts.drop(columns=['index'])
df_day_value_counts
  DayOfWeek  Total_Flights
1       Mon        1036201
4       Tue        1032049
0       Wed        1039665
3       Thu        1032224
2       Fri        1035166
6       Sat         857536
5       Sun         976887
Out[10]:
DayOfWeek Total_Flights
0 Mon 1036201
1 Tue 1032049
2 Wed 1039665
3 Thu 1032224
4 Fri 1035166
5 Sat 857536
6 Sun 976887
In [11]:
# Plot
ax = df_2008s_day_value_counts.plot(kind='bar', x='DayOfWeek', y='Total_Flights', color = 'teal', legend=False, figsize = (15,8))
plt.xticks(range(0,7),df_2008s_day_value_counts["DayOfWeek"])
plt.title("Total Flights by Day of Week")
plt.ylabel("Total Flights")
plt.xlabel("")
plt.show;

Most flights occur on Wednesdays. Saturdays have the least number of flights.

Total Flights by Day of Year

In [4]:
# create date column
df_dvc2 = df_2008s
df_dvc2['Date']=df_dvc2['Year'].astype(str)+'/'+df_dvc2['Month'].astype(str)+'/'+df_dvc2['DayofMonth'].astype(str)
df_dvc2 = df_dvc2.Date.value_counts().reset_index()
df_dvc2.columns = ["Day", "Total_Flights"]
df_dvc2['Date'] = pd.to_datetime(df_dvc2['Day'], format='%Y/%m/%d')
df_dvc2 = df_dvc2.sort_values(by=['Day'])
print(df_dvc2)
           Day  Total_Flights       Date
200   2008/1/1          19187 2008-01-01
128  2008/1/10          20305 2008-01-10
118  2008/1/11          20349 2008-01-11
337  2008/1/12          16572 2008-01-12
205  2008/1/13          18947 2008-01-13
142  2008/1/14          20178 2008-01-14
187  2008/1/15          19504 2008-01-15
171  2008/1/16          19768 2008-01-16
134  2008/1/17          20277 2008-01-17
119  2008/1/18          20348 2008-01-18
340  2008/1/19          16255 2008-01-19
19    2008/1/2          20954 2008-01-02
243  2008/1/20          18653 2008-01-20
150  2008/1/21          20133 2008-01-21
186  2008/1/22          19505 2008-01-22
170  2008/1/23          19771 2008-01-23
138  2008/1/24          20258 2008-01-24
124  2008/1/25          20314 2008-01-25
339  2008/1/26          16282 2008-01-26
208  2008/1/27          18922 2008-01-27
144  2008/1/28          20149 2008-01-28
188  2008/1/29          19498 2008-01-29
21    2008/1/3          20937 2008-01-03
172  2008/1/30          19767 2008-01-30
137  2008/1/31          20266 2008-01-31
23    2008/1/4          20929 2008-01-04
285   2008/1/5          18069 2008-01-05
165   2008/1/6          19897 2008-01-06
120   2008/1/7          20347 2008-01-07
176   2008/1/8          19604 2008-01-08
..         ...            ...        ...
202   2008/9/1          18977 2008-09-01
254  2008/9/10          18457 2008-09-10
210  2008/9/11          18895 2008-09-11
203  2008/9/12          18977 2008-09-12
355  2008/9/13          14583 2008-09-13
300  2008/9/14          17818 2008-09-14
225  2008/9/15          18832 2008-09-15
286  2008/9/16          18060 2008-09-16
255  2008/9/17          18442 2008-09-17
213  2008/9/18          18877 2008-09-18
206  2008/9/19          18944 2008-09-19
198   2008/9/2          19293 2008-09-02
356  2008/9/20          14569 2008-09-20
301  2008/9/21          17773 2008-09-21
227  2008/9/22          18819 2008-09-22
287  2008/9/23          18056 2008-09-23
257  2008/9/24          18429 2008-09-24
218  2008/9/25          18856 2008-09-25
207  2008/9/26          18939 2008-09-26
358  2008/9/27          14548 2008-09-27
302  2008/9/28          17764 2008-09-28
228  2008/9/29          18817 2008-09-29
238   2008/9/3          18729 2008-09-03
290  2008/9/30          18035 2008-09-30
204   2008/9/4          18961 2008-09-04
201   2008/9/5          19021 2008-09-05
353   2008/9/6          14643 2008-09-06
299   2008/9/7          17850 2008-09-07
220   2008/9/8          18855 2008-09-08
282   2008/9/9          18089 2008-09-09

[366 rows x 3 columns]
In [20]:
# Plot
month_names = []
for i in range(1,13):
    month_names.append(calendar.month_abbr[i])

ax = df_dvc2.plot(kind='line', x='Day', y='Total_Flights', color = 'teal', legend=False, figsize = (16,10))
plt.xticks([0,31,60,91,121,152,182,213,244,274,305,335,366], month_names)
ax.xaxis.grid(True)
plt.title("Total Flights by Day of Year")
plt.ylabel("Total Flights")
plt.xlabel("Month of Year")
plt.show();

Flights appear to be more frequent from May through November and in January.

In [16]:
# Plot
ax = df_dvc2.plot(kind='line', x='Day', y='Total_Flights', color = 'teal', legend=False, figsize = (16,10))
plt.xticks(range(0,365,7), range(1,53))
ax.xaxis.grid(True)
plt.title("Total Flights by Day of Year")
plt.ylabel("Total Flights")
plt.xlabel("Week of Year")
plt.show();

Flight frequency fluctuates on a day by day basis throughout each week of the year.

Percentage of Flights that are Cancelled

In [6]:
# find all unique entries in 'Cancelled' column
df_2008s.Cancelled.unique()
Out[6]:
array([0, 1])
In [14]:
# create data set with 'Cancelled' value counts
df_cancelled = df_2008s['Cancelled'].value_counts()
df_cancelled = df_cancelled.reset_index()
df_cancelled
Out[14]:
index Cancelled
0 0 6872294
1 1 137434
In [15]:
# Calculate percent of flight cancellations
cancelled_percent = df_cancelled.Cancelled[1] / (df_cancelled.Cancelled[0] + df_cancelled.Cancelled[1]) * 100
cancelled_percent = str(round(cancelled_percent, 2)) + "%"
cancelled_percent
Out[15]:
'1.96%'
In [16]:
not_cancelled_percent = df_cancelled.Cancelled[0] / (df_cancelled.Cancelled[0] + df_cancelled.Cancelled[1]) * 100
not_cancelled_percent = str(round(not_cancelled_percent, 2)) + "%"
not_cancelled_percent
Out[16]:
'98.04%'
In [17]:
# Plot
df_cancelled.Cancelled.plot(kind= 'pie', labels = ['Not Cancelled (' + not_cancelled_percent + ')', 'Cancelled (' + cancelled_percent + ')'], figsize=(8,8))
plt.title("Percentage of Flights that are Cancelled")
plt.ylabel("");

1.96% of all flights are cancelled. That is almost two flights per one hundred.

Causes of Flight Cancellations

In [17]:
# Mean Cancellations
df_2008s.Cancelled.mean()
Out[17]:
0.019606181580797428
In [3]:
# Cancellations by Cancellation Code
df_2008s['CancellationCode'].value_counts()
Out[3]:
B    54904
A    54330
C    28188
D       12
Name: CancellationCode, dtype: int64
In [19]:
# Replace codes with cause of cancellation
df_2008s['CancellationCode'].replace({'A': 'carrier', 'B': 'weather', 'C': 'NAS', 'D': 'security'}, inplace = True)
In [21]:
# A = carrier, B = weather, C = NAS, D = security
df_2008s['CancellationCode'].value_counts().plot(kind= 'bar', color = 'teal', figsize=(8,8))
plt.title("Causes of Flight Cancellations")
plt.ylabel("Count")
plt.xlabel("Type of Cancellation")
plt.show();

The most common cause of flight cancellations is weather, followed closely by carrier delays. There are only 12 flights cancelled due to security.

Length of Carrier Delays

In [22]:
# Query 'CarrierDelay' to only select entries that are neither NaN or 0.
df_cd_1 = df_2008s.query('CarrierDelay != "NaN"')
df_cd_1 = df_cd_1.query('CarrierDelay != "0.0"')
df_cd_1
Out[22]:
Year Month DayofMonth DayOfWeek DepTime CRSDepTime ArrTime CRSArrTime UniqueCarrier FlightNum ... TaxiOut Cancelled CancellationCode Diverted CarrierDelay WeatherDelay NASDelay SecurityDelay LateAircraftDelay Date
0 2008 1 3 4 2003.0 1955 2211.0 2225 WN 335 ... 8.0 0 NaN 0 NaN NaN NaN NaN NaN 2008/1/3
1 2008 1 3 4 754.0 735 1002.0 1000 WN 3231 ... 10.0 0 NaN 0 NaN NaN NaN NaN NaN 2008/1/3
2 2008 1 3 4 628.0 620 804.0 750 WN 448 ... 17.0 0 NaN 0 NaN NaN NaN NaN NaN 2008/1/3
3 2008 1 3 4 926.0 930 1054.0 1100 WN 1746 ... 7.0 0 NaN 0 NaN NaN NaN NaN NaN 2008/1/3
4 2008 1 3 4 1829.0 1755 1959.0 1925 WN 3920 ... 10.0 0 NaN 0 2.0 0.0 0.0 0.0 32.0 2008/1/3
5 2008 1 3 4 1940.0 1915 2121.0 2110 WN 378 ... 10.0 0 NaN 0 NaN NaN NaN NaN NaN 2008/1/3
6 2008 1 3 4 1937.0 1830 2037.0 1940 WN 509 ... 7.0 0 NaN 0 10.0 0.0 0.0 0.0 47.0 2008/1/3
7 2008 1 3 4 1039.0 1040 1132.0 1150 WN 535 ... 7.0 0 NaN 0 NaN NaN NaN NaN NaN 2008/1/3
8 2008 1 3 4 617.0 615 652.0 650 WN 11 ... 19.0 0 NaN 0 NaN NaN NaN NaN NaN 2008/1/3
9 2008 1 3 4 1620.0 1620 1639.0 1655 WN 810 ... 6.0 0 NaN 0 NaN NaN NaN NaN NaN 2008/1/3
10 2008 1 3 4 706.0 700 916.0 915 WN 100 ... 19.0 0 NaN 0 NaN NaN NaN NaN NaN 2008/1/3
11 2008 1 3 4 1644.0 1510 1845.0 1725 WN 1333 ... 8.0 0 NaN 0 8.0 0.0 0.0 0.0 72.0 2008/1/3
12 2008 1 3 4 1426.0 1430 1426.0 1425 WN 829 ... 12.0 0 NaN 0 NaN NaN NaN NaN NaN 2008/1/3
13 2008 1 3 4 715.0 715 720.0 710 WN 1016 ... 21.0 0 NaN 0 NaN NaN NaN NaN NaN 2008/1/3
14 2008 1 3 4 1702.0 1700 1651.0 1655 WN 1827 ... 10.0 0 NaN 0 NaN NaN NaN NaN NaN 2008/1/3
15 2008 1 3 4 1029.0 1020 1021.0 1010 WN 2272 ... 9.0 0 NaN 0 NaN NaN NaN NaN NaN 2008/1/3
16 2008 1 3 4 1452.0 1425 1640.0 1625 WN 675 ... 8.0 0 NaN 0 3.0 0.0 0.0 0.0 12.0 2008/1/3
17 2008 1 3 4 754.0 745 940.0 955 WN 1144 ... 16.0 0 NaN 0 NaN NaN NaN NaN NaN 2008/1/3
19 2008 1 3 4 1416.0 1325 1512.0 1435 WN 54 ... 5.0 0 NaN 0 12.0 0.0 0.0 0.0 25.0 2008/1/3
20 2008 1 3 4 706.0 705 807.0 810 WN 68 ... 7.0 0 NaN 0 NaN NaN NaN NaN NaN 2008/1/3
21 2008 1 3 4 1657.0 1625 1754.0 1735 WN 623 ... 5.0 0 NaN 0 7.0 0.0 0.0 0.0 12.0 2008/1/3
22 2008 1 3 4 1900.0 1840 1956.0 1950 WN 717 ... 5.0 0 NaN 0 NaN NaN NaN NaN NaN 2008/1/3
23 2008 1 3 4 1039.0 1030 1133.0 1140 WN 1244 ... 5.0 0 NaN 0 NaN NaN NaN NaN NaN 2008/1/3
24 2008 1 3 4 801.0 800 902.0 910 WN 2101 ... 5.0 0 NaN 0 NaN NaN NaN NaN NaN 2008/1/3
25 2008 1 3 4 1520.0 1455 1619.0 1605 WN 2553 ... 7.0 0 NaN 0 NaN NaN NaN NaN NaN 2008/1/3
26 2008 1 3 4 1422.0 1255 1657.0 1610 WN 188 ... 6.0 0 NaN 0 40.0 0.0 0.0 0.0 7.0 2008/1/3
27 2008 1 3 4 1954.0 1925 2239.0 2235 WN 1754 ... 7.0 0 NaN 0 NaN NaN NaN NaN NaN 2008/1/3
28 2008 1 3 4 636.0 635 921.0 945 WN 2275 ... 13.0 0 NaN 0 NaN NaN NaN NaN NaN 2008/1/3
29 2008 1 3 4 734.0 730 958.0 1020 WN 550 ... 8.0 0 NaN 0 NaN NaN NaN NaN NaN 2008/1/3
30 2008 1 3 4 2107.0 1945 2334.0 2230 WN 362 ... 7.0 0 NaN 0 5.0 0.0 0.0 0.0 59.0 2008/1/3
... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ...
7009691 2008 12 13 6 1602.0 1605 1702.0 1708 DL 1596 ... 16.0 0 NaN 0 NaN NaN NaN NaN NaN 2008/12/13
7009692 2008 12 13 6 555.0 600 735.0 724 DL 1597 ... 20.0 0 NaN 0 NaN NaN NaN NaN NaN 2008/12/13
7009693 2008 12 13 6 2136.0 2140 2313.0 2324 DL 1599 ... 22.0 0 NaN 0 NaN NaN NaN NaN NaN 2008/12/13
7009694 2008 12 13 6 1337.0 1342 1443.0 1450 DL 1600 ... 14.0 0 NaN 0 NaN NaN NaN NaN NaN 2008/12/13
7009695 2008 12 13 6 612.0 610 845.0 900 DL 1601 ... 13.0 0 NaN 0 NaN NaN NaN NaN NaN 2008/12/13
7009697 2008 12 13 6 2114.0 2118 2217.0 2222 DL 1604 ... 19.0 0 NaN 0 NaN NaN NaN NaN NaN 2008/12/13
7009698 2008 12 13 6 1625.0 1635 1744.0 1758 DL 1605 ... 21.0 0 NaN 0 NaN NaN NaN NaN NaN 2008/12/13
7009700 2008 12 13 6 1842.0 1845 1953.0 2006 DL 1610 ... 11.0 0 NaN 0 NaN NaN NaN NaN NaN 2008/12/13
7009701 2008 12 13 6 1528.0 1500 1720.0 1642 DL 1611 ... 29.0 0 NaN 0 16.0 0.0 10.0 0.0 12.0 2008/12/13
7009702 2008 12 13 6 1531.0 1522 1822.0 1823 DL 1612 ... 14.0 0 NaN 0 NaN NaN NaN NaN NaN 2008/12/13
7009703 2008 12 13 6 1910.0 1910 2017.0 2016 DL 1612 ... 24.0 0 NaN 0 NaN NaN NaN NaN NaN 2008/12/13
7009704 2008 12 13 6 1441.0 1445 1604.0 1622 DL 1613 ... 10.0 0 NaN 0 NaN NaN NaN NaN NaN 2008/12/13
7009705 2008 12 13 6 921.0 830 1112.0 1008 DL 1616 ... 21.0 0 NaN 0 51.0 0.0 13.0 0.0 0.0 2008/12/13
7009706 2008 12 13 6 1435.0 1440 1701.0 1704 DL 1618 ... 10.0 0 NaN 0 NaN NaN NaN NaN NaN 2008/12/13
7009707 2008 12 13 6 1750.0 1755 2010.0 2015 DL 1618 ... 20.0 0 NaN 0 NaN NaN NaN NaN NaN 2008/12/13
7009708 2008 12 13 6 706.0 710 850.0 837 DL 1619 ... 32.0 0 NaN 0 NaN NaN NaN NaN NaN 2008/12/13
7009710 2008 12 13 6 1250.0 1220 1617.0 1552 DL 1621 ... 18.0 0 NaN 0 3.0 0.0 0.0 0.0 22.0 2008/12/13
7009711 2008 12 13 6 1033.0 1041 1255.0 1303 DL 1622 ... 15.0 0 NaN 0 NaN NaN NaN NaN NaN 2008/12/13
7009712 2008 12 13 6 840.0 843 1025.0 1021 DL 1624 ... 46.0 0 NaN 0 NaN NaN NaN NaN NaN 2008/12/13
7009713 2008 12 13 6 810.0 815 1504.0 1526 DL 1625 ... 17.0 0 NaN 0 NaN NaN NaN NaN NaN 2008/12/13
7009714 2008 12 13 6 547.0 545 646.0 650 DL 1627 ... 13.0 0 NaN 0 NaN NaN NaN NaN NaN 2008/12/13
7009716 2008 12 13 6 936.0 936 1114.0 1119 DL 1630 ... 24.0 0 NaN 0 NaN NaN NaN NaN NaN 2008/12/13
7009718 2008 12 13 6 1007.0 847 1149.0 1010 DL 1631 ... 32.0 0 NaN 0 1.0 0.0 19.0 0.0 79.0 2008/12/13
7009720 2008 12 13 6 756.0 800 1032.0 1026 DL 1633 ... 17.0 0 NaN 0 NaN NaN NaN NaN NaN 2008/12/13
7009722 2008 12 13 6 749.0 750 901.0 859 DL 1636 ... 11.0 0 NaN 0 NaN NaN NaN NaN NaN 2008/12/13
7009723 2008 12 13 6 1002.0 959 1204.0 1150 DL 1636 ... 45.0 0 NaN 0 NaN NaN NaN NaN NaN 2008/12/13
7009724 2008 12 13 6 834.0 835 1021.0 1023 DL 1637 ... 23.0 0 NaN 0 NaN NaN NaN NaN NaN 2008/12/13
7009725 2008 12 13 6 655.0 700 856.0 856 DL 1638 ... 12.0 0 NaN 0 NaN NaN NaN NaN NaN 2008/12/13
7009726 2008 12 13 6 1251.0 1240 1446.0 1437 DL 1639 ... 13.0 0 NaN 0 NaN NaN NaN NaN NaN 2008/12/13
7009727 2008 12 13 6 1110.0 1103 1413.0 1418 DL 1641 ... 11.0 0 NaN 0 NaN NaN NaN NaN NaN 2008/12/13

6155615 rows × 30 columns

In [22]:
df_cd_1.describe().CarrierDelay
Out[22]:
count    670622.000000
mean         35.859571
std          54.180292
min           1.000000
25%           9.000000
50%          19.000000
75%          41.000000
max        2436.000000
Name: CarrierDelay, dtype: float64
In [23]:
# Create bins of carrier delay lengths using information from the cell above.
bin_edges = [1, 9, 19, 41, 2436]
bin_names = ['1-8', '9-18', '19-39', '40-1951']
df_cd_1['CDGroup'] = pd.cut(df_cd_1['CarrierDelay'], bin_edges, labels=bin_names)
df_cd_1
Out[23]:
Year Month DayofMonth DayOfWeek DepTime CRSDepTime ArrTime CRSArrTime UniqueCarrier FlightNum ... Cancelled CancellationCode Diverted CarrierDelay WeatherDelay NASDelay SecurityDelay LateAircraftDelay Date CDGroup
0 2008 1 3 4 2003.0 1955 2211.0 2225 WN 335 ... 0 NaN 0 NaN NaN NaN NaN NaN 2008/1/3 NaN
1 2008 1 3 4 754.0 735 1002.0 1000 WN 3231 ... 0 NaN 0 NaN NaN NaN NaN NaN 2008/1/3 NaN
2 2008 1 3 4 628.0 620 804.0 750 WN 448 ... 0 NaN 0 NaN NaN NaN NaN NaN 2008/1/3 NaN
3 2008 1 3 4 926.0 930 1054.0 1100 WN 1746 ... 0 NaN 0 NaN NaN NaN NaN NaN 2008/1/3 NaN
4 2008 1 3 4 1829.0 1755 1959.0 1925 WN 3920 ... 0 NaN 0 2.0 0.0 0.0 0.0 32.0 2008/1/3 1-8
5 2008 1 3 4 1940.0 1915 2121.0 2110 WN 378 ... 0 NaN 0 NaN NaN NaN NaN NaN 2008/1/3 NaN
6 2008 1 3 4 1937.0 1830 2037.0 1940 WN 509 ... 0 NaN 0 10.0 0.0 0.0 0.0 47.0 2008/1/3 9-18
7 2008 1 3 4 1039.0 1040 1132.0 1150 WN 535 ... 0 NaN 0 NaN NaN NaN NaN NaN 2008/1/3 NaN
8 2008 1 3 4 617.0 615 652.0 650 WN 11 ... 0 NaN 0 NaN NaN NaN NaN NaN 2008/1/3 NaN
9 2008 1 3 4 1620.0 1620 1639.0 1655 WN 810 ... 0 NaN 0 NaN NaN NaN NaN NaN 2008/1/3 NaN
10 2008 1 3 4 706.0 700 916.0 915 WN 100 ... 0 NaN 0 NaN NaN NaN NaN NaN 2008/1/3 NaN
11 2008 1 3 4 1644.0 1510 1845.0 1725 WN 1333 ... 0 NaN 0 8.0 0.0 0.0 0.0 72.0 2008/1/3 1-8
12 2008 1 3 4 1426.0 1430 1426.0 1425 WN 829 ... 0 NaN 0 NaN NaN NaN NaN NaN 2008/1/3 NaN
13 2008 1 3 4 715.0 715 720.0 710 WN 1016 ... 0 NaN 0 NaN NaN NaN NaN NaN 2008/1/3 NaN
14 2008 1 3 4 1702.0 1700 1651.0 1655 WN 1827 ... 0 NaN 0 NaN NaN NaN NaN NaN 2008/1/3 NaN
15 2008 1 3 4 1029.0 1020 1021.0 1010 WN 2272 ... 0 NaN 0 NaN NaN NaN NaN NaN 2008/1/3 NaN
16 2008 1 3 4 1452.0 1425 1640.0 1625 WN 675 ... 0 NaN 0 3.0 0.0 0.0 0.0 12.0 2008/1/3 1-8
17 2008 1 3 4 754.0 745 940.0 955 WN 1144 ... 0 NaN 0 NaN NaN NaN NaN NaN 2008/1/3 NaN
19 2008 1 3 4 1416.0 1325 1512.0 1435 WN 54 ... 0 NaN 0 12.0 0.0 0.0 0.0 25.0 2008/1/3 9-18
20 2008 1 3 4 706.0 705 807.0 810 WN 68 ... 0 NaN 0 NaN NaN NaN NaN NaN 2008/1/3 NaN
21 2008 1 3 4 1657.0 1625 1754.0 1735 WN 623 ... 0 NaN 0 7.0 0.0 0.0 0.0 12.0 2008/1/3 1-8
22 2008 1 3 4 1900.0 1840 1956.0 1950 WN 717 ... 0 NaN 0 NaN NaN NaN NaN NaN 2008/1/3 NaN
23 2008 1 3 4 1039.0 1030 1133.0 1140 WN 1244 ... 0 NaN 0 NaN NaN NaN NaN NaN 2008/1/3 NaN
24 2008 1 3 4 801.0 800 902.0 910 WN 2101 ... 0 NaN 0 NaN NaN NaN NaN NaN 2008/1/3 NaN
25 2008 1 3 4 1520.0 1455 1619.0 1605 WN 2553 ... 0 NaN 0 NaN NaN NaN NaN NaN 2008/1/3 NaN
26 2008 1 3 4 1422.0 1255 1657.0 1610 WN 188 ... 0 NaN 0 40.0 0.0 0.0 0.0 7.0 2008/1/3 19-39
27 2008 1 3 4 1954.0 1925 2239.0 2235 WN 1754 ... 0 NaN 0 NaN NaN NaN NaN NaN 2008/1/3 NaN
28 2008 1 3 4 636.0 635 921.0 945 WN 2275 ... 0 NaN 0 NaN NaN NaN NaN NaN 2008/1/3 NaN
29 2008 1 3 4 734.0 730 958.0 1020 WN 550 ... 0 NaN 0 NaN NaN NaN NaN NaN 2008/1/3 NaN
30 2008 1 3 4 2107.0 1945 2334.0 2230 WN 362 ... 0 NaN 0 5.0 0.0 0.0 0.0 59.0 2008/1/3 1-8
... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ...
7009691 2008 12 13 6 1602.0 1605 1702.0 1708 DL 1596 ... 0 NaN 0 NaN NaN NaN NaN NaN 2008/12/13 NaN
7009692 2008 12 13 6 555.0 600 735.0 724 DL 1597 ... 0 NaN 0 NaN NaN NaN NaN NaN 2008/12/13 NaN
7009693 2008 12 13 6 2136.0 2140 2313.0 2324 DL 1599 ... 0 NaN 0 NaN NaN NaN NaN NaN 2008/12/13 NaN
7009694 2008 12 13 6 1337.0 1342 1443.0 1450 DL 1600 ... 0 NaN 0 NaN NaN NaN NaN NaN 2008/12/13 NaN
7009695 2008 12 13 6 612.0 610 845.0 900 DL 1601 ... 0 NaN 0 NaN NaN NaN NaN NaN 2008/12/13 NaN
7009697 2008 12 13 6 2114.0 2118 2217.0 2222 DL 1604 ... 0 NaN 0 NaN NaN NaN NaN NaN 2008/12/13 NaN
7009698 2008 12 13 6 1625.0 1635 1744.0 1758 DL 1605 ... 0 NaN 0 NaN NaN NaN NaN NaN 2008/12/13 NaN
7009700 2008 12 13 6 1842.0 1845 1953.0 2006 DL 1610 ... 0 NaN 0 NaN NaN NaN NaN NaN 2008/12/13 NaN
7009701 2008 12 13 6 1528.0 1500 1720.0 1642 DL 1611 ... 0 NaN 0 16.0 0.0 10.0 0.0 12.0 2008/12/13 9-18
7009702 2008 12 13 6 1531.0 1522 1822.0 1823 DL 1612 ... 0 NaN 0 NaN NaN NaN NaN NaN 2008/12/13 NaN
7009703 2008 12 13 6 1910.0 1910 2017.0 2016 DL 1612 ... 0 NaN 0 NaN NaN NaN NaN NaN 2008/12/13 NaN
7009704 2008 12 13 6 1441.0 1445 1604.0 1622 DL 1613 ... 0 NaN 0 NaN NaN NaN NaN NaN 2008/12/13 NaN
7009705 2008 12 13 6 921.0 830 1112.0 1008 DL 1616 ... 0 NaN 0 51.0 0.0 13.0 0.0 0.0 2008/12/13 40-1951
7009706 2008 12 13 6 1435.0 1440 1701.0 1704 DL 1618 ... 0 NaN 0 NaN NaN NaN NaN NaN 2008/12/13 NaN
7009707 2008 12 13 6 1750.0 1755 2010.0 2015 DL 1618 ... 0 NaN 0 NaN NaN NaN NaN NaN 2008/12/13 NaN
7009708 2008 12 13 6 706.0 710 850.0 837 DL 1619 ... 0 NaN 0 NaN NaN NaN NaN NaN 2008/12/13 NaN
7009710 2008 12 13 6 1250.0 1220 1617.0 1552 DL 1621 ... 0 NaN 0 3.0 0.0 0.0 0.0 22.0 2008/12/13 1-8
7009711 2008 12 13 6 1033.0 1041 1255.0 1303 DL 1622 ... 0 NaN 0 NaN NaN NaN NaN NaN 2008/12/13 NaN
7009712 2008 12 13 6 840.0 843 1025.0 1021 DL 1624 ... 0 NaN 0 NaN NaN NaN NaN NaN 2008/12/13 NaN
7009713 2008 12 13 6 810.0 815 1504.0 1526 DL 1625 ... 0 NaN 0 NaN NaN NaN NaN NaN 2008/12/13 NaN
7009714 2008 12 13 6 547.0 545 646.0 650 DL 1627 ... 0 NaN 0 NaN NaN NaN NaN NaN 2008/12/13 NaN
7009716 2008 12 13 6 936.0 936 1114.0 1119 DL 1630 ... 0 NaN 0 NaN NaN NaN NaN NaN 2008/12/13 NaN
7009718 2008 12 13 6 1007.0 847 1149.0 1010 DL 1631 ... 0 NaN 0 1.0 0.0 19.0 0.0 79.0 2008/12/13 NaN
7009720 2008 12 13 6 756.0 800 1032.0 1026 DL 1633 ... 0 NaN 0 NaN NaN NaN NaN NaN 2008/12/13 NaN
7009722 2008 12 13 6 749.0 750 901.0 859 DL 1636 ... 0 NaN 0 NaN NaN NaN NaN NaN 2008/12/13 NaN
7009723 2008 12 13 6 1002.0 959 1204.0 1150 DL 1636 ... 0 NaN 0 NaN NaN NaN NaN NaN 2008/12/13 NaN
7009724 2008 12 13 6 834.0 835 1021.0 1023 DL 1637 ... 0 NaN 0 NaN NaN NaN NaN NaN 2008/12/13 NaN
7009725 2008 12 13 6 655.0 700 856.0 856 DL 1638 ... 0 NaN 0 NaN NaN NaN NaN NaN 2008/12/13 NaN
7009726 2008 12 13 6 1251.0 1240 1446.0 1437 DL 1639 ... 0 NaN 0 NaN NaN NaN NaN NaN 2008/12/13 NaN
7009727 2008 12 13 6 1110.0 1103 1413.0 1418 DL 1641 ... 0 NaN 0 NaN NaN NaN NaN NaN 2008/12/13 NaN

6155615 rows × 31 columns

In [24]:
# value counts for each bin
df_cd_1['CDGroup'].value_counts()
Out[24]:
19-39      166325
40-1951    165839
1-8        161825
9-18       155361
Name: CDGroup, dtype: int64
In [25]:
# Plot
df_cd_1['CDGroup'].value_counts(sort = False).plot(kind= 'bar', color = 'teal', figsize=(8,8))
plt.title("Length of Carrier Delay")
plt.ylabel("Count")
plt.xlabel("Length of Delay (min)")
plt.show();

Carrier delays are most commonly 19-39 minutes long.

Length of Weather Delays

In [26]:
# Query 'WeatherDelay' to only select entries that are neither NaN or 0.
df_wd_1 = df_2008s.query('WeatherDelay != "NaN"')
df_wd_1 = df_wd_1.query('WeatherDelay != "0.0"')
df_wd_1
Out[26]:
Year Month DayofMonth DayOfWeek DepTime CRSDepTime ArrTime CRSArrTime UniqueCarrier FlightNum ... TaxiOut Cancelled CancellationCode Diverted CarrierDelay WeatherDelay NASDelay SecurityDelay LateAircraftDelay Date
0 2008 1 3 4 2003.0 1955 2211.0 2225 WN 335 ... 8.0 0 NaN 0 NaN NaN NaN NaN NaN 2008/1/3
1 2008 1 3 4 754.0 735 1002.0 1000 WN 3231 ... 10.0 0 NaN 0 NaN NaN NaN NaN NaN 2008/1/3
2 2008 1 3 4 628.0 620 804.0 750 WN 448 ... 17.0 0 NaN 0 NaN NaN NaN NaN NaN 2008/1/3
3 2008 1 3 4 926.0 930 1054.0 1100 WN 1746 ... 7.0 0 NaN 0 NaN NaN NaN NaN NaN 2008/1/3
5 2008 1 3 4 1940.0 1915 2121.0 2110 WN 378 ... 10.0 0 NaN 0 NaN NaN NaN NaN NaN 2008/1/3
7 2008 1 3 4 1039.0 1040 1132.0 1150 WN 535 ... 7.0 0 NaN 0 NaN NaN NaN NaN NaN 2008/1/3
8 2008 1 3 4 617.0 615 652.0 650 WN 11 ... 19.0 0 NaN 0 NaN NaN NaN NaN NaN 2008/1/3
9 2008 1 3 4 1620.0 1620 1639.0 1655 WN 810 ... 6.0 0 NaN 0 NaN NaN NaN NaN NaN 2008/1/3
10 2008 1 3 4 706.0 700 916.0 915 WN 100 ... 19.0 0 NaN 0 NaN NaN NaN NaN NaN 2008/1/3
12 2008 1 3 4 1426.0 1430 1426.0 1425 WN 829 ... 12.0 0 NaN 0 NaN NaN NaN NaN NaN 2008/1/3
13 2008 1 3 4 715.0 715 720.0 710 WN 1016 ... 21.0 0 NaN 0 NaN NaN NaN NaN NaN 2008/1/3
14 2008 1 3 4 1702.0 1700 1651.0 1655 WN 1827 ... 10.0 0 NaN 0 NaN NaN NaN NaN NaN 2008/1/3
15 2008 1 3 4 1029.0 1020 1021.0 1010 WN 2272 ... 9.0 0 NaN 0 NaN NaN NaN NaN NaN 2008/1/3
17 2008 1 3 4 754.0 745 940.0 955 WN 1144 ... 16.0 0 NaN 0 NaN NaN NaN NaN NaN 2008/1/3
20 2008 1 3 4 706.0 705 807.0 810 WN 68 ... 7.0 0 NaN 0 NaN NaN NaN NaN NaN 2008/1/3
22 2008 1 3 4 1900.0 1840 1956.0 1950 WN 717 ... 5.0 0 NaN 0 NaN NaN NaN NaN NaN 2008/1/3
23 2008 1 3 4 1039.0 1030 1133.0 1140 WN 1244 ... 5.0 0 NaN 0 NaN NaN NaN NaN NaN 2008/1/3
24 2008 1 3 4 801.0 800 902.0 910 WN 2101 ... 5.0 0 NaN 0 NaN NaN NaN NaN NaN 2008/1/3
25 2008 1 3 4 1520.0 1455 1619.0 1605 WN 2553 ... 7.0 0 NaN 0 NaN NaN NaN NaN NaN 2008/1/3
27 2008 1 3 4 1954.0 1925 2239.0 2235 WN 1754 ... 7.0 0 NaN 0 NaN NaN NaN NaN NaN 2008/1/3
28 2008 1 3 4 636.0 635 921.0 945 WN 2275 ... 13.0 0 NaN 0 NaN NaN NaN NaN NaN 2008/1/3
29 2008 1 3 4 734.0 730 958.0 1020 WN 550 ... 8.0 0 NaN 0 NaN NaN NaN NaN NaN 2008/1/3
31 2008 1 3 4 1008.0 1005 1234.0 1255 WN 543 ... 6.0 0 NaN 0 NaN NaN NaN NaN NaN 2008/1/3
32 2008 1 3 4 712.0 710 953.0 1000 WN 1112 ... 14.0 0 NaN 0 NaN NaN NaN NaN NaN 2008/1/3
33 2008 1 3 4 1312.0 1300 1546.0 1550 WN 1397 ... 7.0 0 NaN 0 NaN NaN NaN NaN NaN 2008/1/3
34 2008 1 3 4 1449.0 1430 1715.0 1720 WN 3398 ... 6.0 0 NaN 0 NaN NaN NaN NaN NaN 2008/1/3
35 2008 1 3 4 1634.0 1555 1859.0 1845 WN 3480 ... 6.0 0 NaN 0 NaN NaN NaN NaN NaN 2008/1/3
36 2008 1 3 4 831.0 830 935.0 955 WN 300 ... 7.0 0 NaN 0 NaN NaN NaN NaN NaN 2008/1/3
38 2008 1 3 4 1127.0 1105 1235.0 1230 WN 1837 ... 5.0 0 NaN 0 NaN NaN NaN NaN NaN 2008/1/3
39 2008 1 3 4 1424.0 1355 1531.0 1520 WN 2871 ... 6.0 0 NaN 0 NaN NaN NaN NaN NaN 2008/1/3
... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ...
7009688 2008 12 13 6 1856.0 1855 2057.0 2056 DL 1592 ... 24.0 0 NaN 0 NaN NaN NaN NaN NaN 2008/12/13
7009689 2008 12 13 6 1134.0 1134 1833.0 1855 DL 1594 ... 13.0 0 NaN 0 NaN NaN NaN NaN NaN 2008/12/13
7009690 2008 12 13 6 1146.0 1150 1326.0 1329 DL 1595 ... 16.0 0 NaN 0 NaN NaN NaN NaN NaN 2008/12/13
7009691 2008 12 13 6 1602.0 1605 1702.0 1708 DL 1596 ... 16.0 0 NaN 0 NaN NaN NaN NaN NaN 2008/12/13
7009692 2008 12 13 6 555.0 600 735.0 724 DL 1597 ... 20.0 0 NaN 0 NaN NaN NaN NaN NaN 2008/12/13
7009693 2008 12 13 6 2136.0 2140 2313.0 2324 DL 1599 ... 22.0 0 NaN 0 NaN NaN NaN NaN NaN 2008/12/13
7009694 2008 12 13 6 1337.0 1342 1443.0 1450 DL 1600 ... 14.0 0 NaN 0 NaN NaN NaN NaN NaN 2008/12/13
7009695 2008 12 13 6 612.0 610 845.0 900 DL 1601 ... 13.0 0 NaN 0 NaN NaN NaN NaN NaN 2008/12/13
7009697 2008 12 13 6 2114.0 2118 2217.0 2222 DL 1604 ... 19.0 0 NaN 0 NaN NaN NaN NaN NaN 2008/12/13
7009698 2008 12 13 6 1625.0 1635 1744.0 1758 DL 1605 ... 21.0 0 NaN 0 NaN NaN NaN NaN NaN 2008/12/13
7009700 2008 12 13 6 1842.0 1845 1953.0 2006 DL 1610 ... 11.0 0 NaN 0 NaN NaN NaN NaN NaN 2008/12/13
7009702 2008 12 13 6 1531.0 1522 1822.0 1823 DL 1612 ... 14.0 0 NaN 0 NaN NaN NaN NaN NaN 2008/12/13
7009703 2008 12 13 6 1910.0 1910 2017.0 2016 DL 1612 ... 24.0 0 NaN 0 NaN NaN NaN NaN NaN 2008/12/13
7009704 2008 12 13 6 1441.0 1445 1604.0 1622 DL 1613 ... 10.0 0 NaN 0 NaN NaN NaN NaN NaN 2008/12/13
7009706 2008 12 13 6 1435.0 1440 1701.0 1704 DL 1618 ... 10.0 0 NaN 0 NaN NaN NaN NaN NaN 2008/12/13
7009707 2008 12 13 6 1750.0 1755 2010.0 2015 DL 1618 ... 20.0 0 NaN 0 NaN NaN NaN NaN NaN 2008/12/13
7009708 2008 12 13 6 706.0 710 850.0 837 DL 1619 ... 32.0 0 NaN 0 NaN NaN NaN NaN NaN 2008/12/13
7009711 2008 12 13 6 1033.0 1041 1255.0 1303 DL 1622 ... 15.0 0 NaN 0 NaN NaN NaN NaN NaN 2008/12/13
7009712 2008 12 13 6 840.0 843 1025.0 1021 DL 1624 ... 46.0 0 NaN 0 NaN NaN NaN NaN NaN 2008/12/13
7009713 2008 12 13 6 810.0 815 1504.0 1526 DL 1625 ... 17.0 0 NaN 0 NaN NaN NaN NaN NaN 2008/12/13
7009714 2008 12 13 6 547.0 545 646.0 650 DL 1627 ... 13.0 0 NaN 0 NaN NaN NaN NaN NaN 2008/12/13
7009716 2008 12 13 6 936.0 936 1114.0 1119 DL 1630 ... 24.0 0 NaN 0 NaN NaN NaN NaN NaN 2008/12/13
7009717 2008 12 13 6 657.0 600 904.0 749 DL 1631 ... 34.0 0 NaN 0 0.0 57.0 18.0 0.0 0.0 2008/12/13
7009720 2008 12 13 6 756.0 800 1032.0 1026 DL 1633 ... 17.0 0 NaN 0 NaN NaN NaN NaN NaN 2008/12/13
7009722 2008 12 13 6 749.0 750 901.0 859 DL 1636 ... 11.0 0 NaN 0 NaN NaN NaN NaN NaN 2008/12/13
7009723 2008 12 13 6 1002.0 959 1204.0 1150 DL 1636 ... 45.0 0 NaN 0 NaN NaN NaN NaN NaN 2008/12/13
7009724 2008 12 13 6 834.0 835 1021.0 1023 DL 1637 ... 23.0 0 NaN 0 NaN NaN NaN NaN NaN 2008/12/13
7009725 2008 12 13 6 655.0 700 856.0 856 DL 1638 ... 12.0 0 NaN 0 NaN NaN NaN NaN NaN 2008/12/13
7009726 2008 12 13 6 1251.0 1240 1446.0 1437 DL 1639 ... 13.0 0 NaN 0 NaN NaN NaN NaN NaN 2008/12/13
7009727 2008 12 13 6 1110.0 1103 1413.0 1418 DL 1641 ... 11.0 0 NaN 0 NaN NaN NaN NaN NaN 2008/12/13

5584978 rows × 30 columns

In [27]:
df_wd_1.describe().WeatherDelay
Out[27]:
count    99985.000000
mean        46.344122
std         61.591248
min          1.000000
25%         11.000000
50%         25.000000
75%         57.000000
max       1352.000000
Name: WeatherDelay, dtype: float64
In [28]:
# Create bins of weather delay lengths using information from the cell above.
bin_edges = [1, 11, 25, 57, 1352]
bin_names = ['1-10', '11-24', '25-56', '57-1352']
df_wd_1['WDGroup'] = pd.cut(df_wd_1['WeatherDelay'], bin_edges, labels=bin_names)
df_wd_1
Out[28]:
Year Month DayofMonth DayOfWeek DepTime CRSDepTime ArrTime CRSArrTime UniqueCarrier FlightNum ... Cancelled CancellationCode Diverted CarrierDelay WeatherDelay NASDelay SecurityDelay LateAircraftDelay Date WDGroup
0 2008 1 3 4 2003.0 1955 2211.0 2225 WN 335 ... 0 NaN 0 NaN NaN NaN NaN NaN 2008/1/3 NaN
1 2008 1 3 4 754.0 735 1002.0 1000 WN 3231 ... 0 NaN 0 NaN NaN NaN NaN NaN 2008/1/3 NaN
2 2008 1 3 4 628.0 620 804.0 750 WN 448 ... 0 NaN 0 NaN NaN NaN NaN NaN 2008/1/3 NaN
3 2008 1 3 4 926.0 930 1054.0 1100 WN 1746 ... 0 NaN 0 NaN NaN NaN NaN NaN 2008/1/3 NaN
5 2008 1 3 4 1940.0 1915 2121.0 2110 WN 378 ... 0 NaN 0 NaN NaN NaN NaN NaN 2008/1/3 NaN
7 2008 1 3 4 1039.0 1040 1132.0 1150 WN 535 ... 0 NaN 0 NaN NaN NaN NaN NaN 2008/1/3 NaN
8 2008 1 3 4 617.0 615 652.0 650 WN 11 ... 0 NaN 0 NaN NaN NaN NaN NaN 2008/1/3 NaN
9 2008 1 3 4 1620.0 1620 1639.0 1655 WN 810 ... 0 NaN 0 NaN NaN NaN NaN NaN 2008/1/3 NaN
10 2008 1 3 4 706.0 700 916.0 915 WN 100 ... 0 NaN 0 NaN NaN NaN NaN NaN 2008/1/3 NaN
12 2008 1 3 4 1426.0 1430 1426.0 1425 WN 829 ... 0 NaN 0 NaN NaN NaN NaN NaN 2008/1/3 NaN
13 2008 1 3 4 715.0 715 720.0 710 WN 1016 ... 0 NaN 0 NaN NaN NaN NaN NaN 2008/1/3 NaN
14 2008 1 3 4 1702.0 1700 1651.0 1655 WN 1827 ... 0 NaN 0 NaN NaN NaN NaN NaN 2008/1/3 NaN
15 2008 1 3 4 1029.0 1020 1021.0 1010 WN 2272 ... 0 NaN 0 NaN NaN NaN NaN NaN 2008/1/3 NaN
17 2008 1 3 4 754.0 745 940.0 955 WN 1144 ... 0 NaN 0 NaN NaN NaN NaN NaN 2008/1/3 NaN
20 2008 1 3 4 706.0 705 807.0 810 WN 68 ... 0 NaN 0 NaN NaN NaN NaN NaN 2008/1/3 NaN
22 2008 1 3 4 1900.0 1840 1956.0 1950 WN 717 ... 0 NaN 0 NaN NaN NaN NaN NaN 2008/1/3 NaN
23 2008 1 3 4 1039.0 1030 1133.0 1140 WN 1244 ... 0 NaN 0 NaN NaN NaN NaN NaN 2008/1/3 NaN
24 2008 1 3 4 801.0 800 902.0 910 WN 2101 ... 0 NaN 0 NaN NaN NaN NaN NaN 2008/1/3 NaN
25 2008 1 3 4 1520.0 1455 1619.0 1605 WN 2553 ... 0 NaN 0 NaN NaN NaN NaN NaN 2008/1/3 NaN
27 2008 1 3 4 1954.0 1925 2239.0 2235 WN 1754 ... 0 NaN 0 NaN NaN NaN NaN NaN 2008/1/3 NaN
28 2008 1 3 4 636.0 635 921.0 945 WN 2275 ... 0 NaN 0 NaN NaN NaN NaN NaN 2008/1/3 NaN
29 2008 1 3 4 734.0 730 958.0 1020 WN 550 ... 0 NaN 0 NaN NaN NaN NaN NaN 2008/1/3 NaN
31 2008 1 3 4 1008.0 1005 1234.0 1255 WN 543 ... 0 NaN 0 NaN NaN NaN NaN NaN 2008/1/3 NaN
32 2008 1 3 4 712.0 710 953.0 1000 WN 1112 ... 0 NaN 0 NaN NaN NaN NaN NaN 2008/1/3 NaN
33 2008 1 3 4 1312.0 1300 1546.0 1550 WN 1397 ... 0 NaN 0 NaN NaN NaN NaN NaN 2008/1/3 NaN
34 2008 1 3 4 1449.0 1430 1715.0 1720 WN 3398 ... 0 NaN 0 NaN NaN NaN NaN NaN 2008/1/3 NaN
35 2008 1 3 4 1634.0 1555 1859.0 1845 WN 3480 ... 0 NaN 0 NaN NaN NaN NaN NaN 2008/1/3 NaN
36 2008 1 3 4 831.0 830 935.0 955 WN 300 ... 0 NaN 0 NaN NaN NaN NaN NaN 2008/1/3 NaN
38 2008 1 3 4 1127.0 1105 1235.0 1230 WN 1837 ... 0 NaN 0 NaN NaN NaN NaN NaN 2008/1/3 NaN
39 2008 1 3 4 1424.0 1355 1531.0 1520 WN 2871 ... 0 NaN 0 NaN NaN NaN NaN NaN 2008/1/3 NaN
... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ...
7009688 2008 12 13 6 1856.0 1855 2057.0 2056 DL 1592 ... 0 NaN 0 NaN NaN NaN NaN NaN 2008/12/13 NaN
7009689 2008 12 13 6 1134.0 1134 1833.0 1855 DL 1594 ... 0 NaN 0 NaN NaN NaN NaN NaN 2008/12/13 NaN
7009690 2008 12 13 6 1146.0 1150 1326.0 1329 DL 1595 ... 0 NaN 0 NaN NaN NaN NaN NaN 2008/12/13 NaN
7009691 2008 12 13 6 1602.0 1605 1702.0 1708 DL 1596 ... 0 NaN 0 NaN NaN NaN NaN NaN 2008/12/13 NaN
7009692 2008 12 13 6 555.0 600 735.0 724 DL 1597 ... 0 NaN 0 NaN NaN NaN NaN NaN 2008/12/13 NaN
7009693 2008 12 13 6 2136.0 2140 2313.0 2324 DL 1599 ... 0 NaN 0 NaN NaN NaN NaN NaN 2008/12/13 NaN
7009694 2008 12 13 6 1337.0 1342 1443.0 1450 DL 1600 ... 0 NaN 0 NaN NaN NaN NaN NaN 2008/12/13 NaN
7009695 2008 12 13 6 612.0 610 845.0 900 DL 1601 ... 0 NaN 0 NaN NaN NaN NaN NaN 2008/12/13 NaN
7009697 2008 12 13 6 2114.0 2118 2217.0 2222 DL 1604 ... 0 NaN 0 NaN NaN NaN NaN NaN 2008/12/13 NaN
7009698 2008 12 13 6 1625.0 1635 1744.0 1758 DL 1605 ... 0 NaN 0 NaN NaN NaN NaN NaN 2008/12/13 NaN
7009700 2008 12 13 6 1842.0 1845 1953.0 2006 DL 1610 ... 0 NaN 0 NaN NaN NaN NaN NaN 2008/12/13 NaN
7009702 2008 12 13 6 1531.0 1522 1822.0 1823 DL 1612 ... 0 NaN 0 NaN NaN NaN NaN NaN 2008/12/13 NaN
7009703 2008 12 13 6 1910.0 1910 2017.0 2016 DL 1612 ... 0 NaN 0 NaN NaN NaN NaN NaN 2008/12/13 NaN
7009704 2008 12 13 6 1441.0 1445 1604.0 1622 DL 1613 ... 0 NaN 0 NaN NaN NaN NaN NaN 2008/12/13 NaN
7009706 2008 12 13 6 1435.0 1440 1701.0 1704 DL 1618 ... 0 NaN 0 NaN NaN NaN NaN NaN 2008/12/13 NaN
7009707 2008 12 13 6 1750.0 1755 2010.0 2015 DL 1618 ... 0 NaN 0 NaN NaN NaN NaN NaN 2008/12/13 NaN
7009708 2008 12 13 6 706.0 710 850.0 837 DL 1619 ... 0 NaN 0 NaN NaN NaN NaN NaN 2008/12/13 NaN
7009711 2008 12 13 6 1033.0 1041 1255.0 1303 DL 1622 ... 0 NaN 0 NaN NaN NaN NaN NaN 2008/12/13 NaN
7009712 2008 12 13 6 840.0 843 1025.0 1021 DL 1624 ... 0 NaN 0 NaN NaN NaN NaN NaN 2008/12/13 NaN
7009713 2008 12 13 6 810.0 815 1504.0 1526 DL 1625 ... 0 NaN 0 NaN NaN NaN NaN NaN 2008/12/13 NaN
7009714 2008 12 13 6 547.0 545 646.0 650 DL 1627 ... 0 NaN 0 NaN NaN NaN NaN NaN 2008/12/13 NaN
7009716 2008 12 13 6 936.0 936 1114.0 1119 DL 1630 ... 0 NaN 0 NaN NaN NaN NaN NaN 2008/12/13 NaN
7009717 2008 12 13 6 657.0 600 904.0 749 DL 1631 ... 0 NaN 0 0.0 57.0 18.0 0.0 0.0 2008/12/13 25-56
7009720 2008 12 13 6 756.0 800 1032.0 1026 DL 1633 ... 0 NaN 0 NaN NaN NaN NaN NaN 2008/12/13 NaN
7009722 2008 12 13 6 749.0 750 901.0 859 DL 1636 ... 0 NaN 0 NaN NaN NaN NaN NaN 2008/12/13 NaN
7009723 2008 12 13 6 1002.0 959 1204.0 1150 DL 1636 ... 0 NaN 0 NaN NaN NaN NaN NaN 2008/12/13 NaN
7009724 2008 12 13 6 834.0 835 1021.0 1023 DL 1637 ... 0 NaN 0 NaN NaN NaN NaN NaN 2008/12/13 NaN
7009725 2008 12 13 6 655.0 700 856.0 856 DL 1638 ... 0 NaN 0 NaN NaN NaN NaN NaN 2008/12/13 NaN
7009726 2008 12 13 6 1251.0 1240 1446.0 1437 DL 1639 ... 0 NaN 0 NaN NaN NaN NaN NaN 2008/12/13 NaN
7009727 2008 12 13 6 1110.0 1103 1413.0 1418 DL 1641 ... 0 NaN 0 NaN NaN NaN NaN NaN 2008/12/13 NaN

5584978 rows × 31 columns

In [29]:
# value counts for each bin
df_wd_1['WDGroup'].value_counts()
Out[29]:
11-24      25013
25-56      24816
57-1352    24790
1-10       23497
Name: WDGroup, dtype: int64
In [30]:
# Plot
df_wd_1['WDGroup'].value_counts(sort = False).plot(kind= 'bar', color = 'teal', figsize=(8,8))
plt.title("Length of Weather Delay")
plt.ylabel("Count")
plt.xlabel("Length of Delay (min)")
plt.show();

Weather delays are most commonly 11-24 minutes long.

Length of NAS Delays

In [31]:
# Query 'NASDelay' to only select entries that are neither NaN or 0.
df_nd_1 = df_2008s.query('NASDelay != "NaN"')
df_nd_1 = df_nd_1.query('NASDelay != "0.0"')
df_nd_1
Out[31]:
Year Month DayofMonth DayOfWeek DepTime CRSDepTime ArrTime CRSArrTime UniqueCarrier FlightNum ... TaxiOut Cancelled CancellationCode Diverted CarrierDelay WeatherDelay NASDelay SecurityDelay LateAircraftDelay Date
0 2008 1 3 4 2003.0 1955 2211.0 2225 WN 335 ... 8.0 0 NaN 0 NaN NaN NaN NaN NaN 2008/1/3
1 2008 1 3 4 754.0 735 1002.0 1000 WN 3231 ... 10.0 0 NaN 0 NaN NaN NaN NaN NaN 2008/1/3
2 2008 1 3 4 628.0 620 804.0 750 WN 448 ... 17.0 0 NaN 0 NaN NaN NaN NaN NaN 2008/1/3
3 2008 1 3 4 926.0 930 1054.0 1100 WN 1746 ... 7.0 0 NaN 0 NaN NaN NaN NaN NaN 2008/1/3
5 2008 1 3 4 1940.0 1915 2121.0 2110 WN 378 ... 10.0 0 NaN 0 NaN NaN NaN NaN NaN 2008/1/3
7 2008 1 3 4 1039.0 1040 1132.0 1150 WN 535 ... 7.0 0 NaN 0 NaN NaN NaN NaN NaN 2008/1/3
8 2008 1 3 4 617.0 615 652.0 650 WN 11 ... 19.0 0 NaN 0 NaN NaN NaN NaN NaN 2008/1/3
9 2008 1 3 4 1620.0 1620 1639.0 1655 WN 810 ... 6.0 0 NaN 0 NaN NaN NaN NaN NaN 2008/1/3
10 2008 1 3 4 706.0 700 916.0 915 WN 100 ... 19.0 0 NaN 0 NaN NaN NaN NaN NaN 2008/1/3
12 2008 1 3 4 1426.0 1430 1426.0 1425 WN 829 ... 12.0 0 NaN 0 NaN NaN NaN NaN NaN 2008/1/3
13 2008 1 3 4 715.0 715 720.0 710 WN 1016 ... 21.0 0 NaN 0 NaN NaN NaN NaN NaN 2008/1/3
14 2008 1 3 4 1702.0 1700 1651.0 1655 WN 1827 ... 10.0 0 NaN 0 NaN NaN NaN NaN NaN 2008/1/3
15 2008 1 3 4 1029.0 1020 1021.0 1010 WN 2272 ... 9.0 0 NaN 0 NaN NaN NaN NaN NaN 2008/1/3
17 2008 1 3 4 754.0 745 940.0 955 WN 1144 ... 16.0 0 NaN 0 NaN NaN NaN NaN NaN 2008/1/3
20 2008 1 3 4 706.0 705 807.0 810 WN 68 ... 7.0 0 NaN 0 NaN NaN NaN NaN NaN 2008/1/3
22 2008 1 3 4 1900.0 1840 1956.0 1950 WN 717 ... 5.0 0 NaN 0 NaN NaN NaN NaN NaN 2008/1/3
23 2008 1 3 4 1039.0 1030 1133.0 1140 WN 1244 ... 5.0 0 NaN 0 NaN NaN NaN NaN NaN 2008/1/3
24 2008 1 3 4 801.0 800 902.0 910 WN 2101 ... 5.0 0 NaN 0 NaN NaN NaN NaN NaN 2008/1/3
25 2008 1 3 4 1520.0 1455 1619.0 1605 WN 2553 ... 7.0 0 NaN 0 NaN NaN NaN NaN NaN 2008/1/3
27 2008 1 3 4 1954.0 1925 2239.0 2235 WN 1754 ... 7.0 0 NaN 0 NaN NaN NaN NaN NaN 2008/1/3
28 2008 1 3 4 636.0 635 921.0 945 WN 2275 ... 13.0 0 NaN 0 NaN NaN NaN NaN NaN 2008/1/3
29 2008 1 3 4 734.0 730 958.0 1020 WN 550 ... 8.0 0 NaN 0 NaN NaN NaN NaN NaN 2008/1/3
31 2008 1 3 4 1008.0 1005 1234.0 1255 WN 543 ... 6.0 0 NaN 0 NaN NaN NaN NaN NaN 2008/1/3
32 2008 1 3 4 712.0 710 953.0 1000 WN 1112 ... 14.0 0 NaN 0 NaN NaN NaN NaN NaN 2008/1/3
33 2008 1 3 4 1312.0 1300 1546.0 1550 WN 1397 ... 7.0 0 NaN 0 NaN NaN NaN NaN NaN 2008/1/3
34 2008 1 3 4 1449.0 1430 1715.0 1720 WN 3398 ... 6.0 0 NaN 0 NaN NaN NaN NaN NaN 2008/1/3
35 2008 1 3 4 1634.0 1555 1859.0 1845 WN 3480 ... 6.0 0 NaN 0 NaN NaN NaN NaN NaN 2008/1/3
36 2008 1 3 4 831.0 830 935.0 955 WN 300 ... 7.0 0 NaN 0 NaN NaN NaN NaN NaN 2008/1/3
38 2008 1 3 4 1127.0 1105 1235.0 1230 WN 1837 ... 5.0 0 NaN 0 NaN NaN NaN NaN NaN 2008/1/3
39 2008 1 3 4 1424.0 1355 1531.0 1520 WN 2871 ... 6.0 0 NaN 0 NaN NaN NaN NaN NaN 2008/1/3
... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ...
7009695 2008 12 13 6 612.0 610 845.0 900 DL 1601 ... 13.0 0 NaN 0 NaN NaN NaN NaN NaN 2008/12/13
7009696 2008 12 13 6 945.0 948 1127.0 1055 DL 1601 ... 61.0 0 NaN 0 0.0 0.0 32.0 0.0 0.0 2008/12/13
7009697 2008 12 13 6 2114.0 2118 2217.0 2222 DL 1604 ... 19.0 0 NaN 0 NaN NaN NaN NaN NaN 2008/12/13
7009698 2008 12 13 6 1625.0 1635 1744.0 1758 DL 1605 ... 21.0 0 NaN 0 NaN NaN NaN NaN NaN 2008/12/13
7009700 2008 12 13 6 1842.0 1845 1953.0 2006 DL 1610 ... 11.0 0 NaN 0 NaN NaN NaN NaN NaN 2008/12/13
7009701 2008 12 13 6 1528.0 1500 1720.0 1642 DL 1611 ... 29.0 0 NaN 0 16.0 0.0 10.0 0.0 12.0 2008/12/13
7009702 2008 12 13 6 1531.0 1522 1822.0 1823 DL 1612 ... 14.0 0 NaN 0 NaN NaN NaN NaN NaN 2008/12/13
7009703 2008 12 13 6 1910.0 1910 2017.0 2016 DL 1612 ... 24.0 0 NaN 0 NaN NaN NaN NaN NaN 2008/12/13
7009704 2008 12 13 6 1441.0 1445 1604.0 1622 DL 1613 ... 10.0 0 NaN 0 NaN NaN NaN NaN NaN 2008/12/13
7009705 2008 12 13 6 921.0 830 1112.0 1008 DL 1616 ... 21.0 0 NaN 0 51.0 0.0 13.0 0.0 0.0 2008/12/13
7009706 2008 12 13 6 1435.0 1440 1701.0 1704 DL 1618 ... 10.0 0 NaN 0 NaN NaN NaN NaN NaN 2008/12/13
7009707 2008 12 13 6 1750.0 1755 2010.0 2015 DL 1618 ... 20.0 0 NaN 0 NaN NaN NaN NaN NaN 2008/12/13
7009708 2008 12 13 6 706.0 710 850.0 837 DL 1619 ... 32.0 0 NaN 0 NaN NaN NaN NaN NaN 2008/12/13
7009711 2008 12 13 6 1033.0 1041 1255.0 1303 DL 1622 ... 15.0 0 NaN 0 NaN NaN NaN NaN NaN 2008/12/13
7009712 2008 12 13 6 840.0 843 1025.0 1021 DL 1624 ... 46.0 0 NaN 0 NaN NaN NaN NaN NaN 2008/12/13
7009713 2008 12 13 6 810.0 815 1504.0 1526 DL 1625 ... 17.0 0 NaN 0 NaN NaN NaN NaN NaN 2008/12/13
7009714 2008 12 13 6 547.0 545 646.0 650 DL 1627 ... 13.0 0 NaN 0 NaN NaN NaN NaN NaN 2008/12/13
7009715 2008 12 13 6 848.0 850 1024.0 1005 DL 1628 ... 44.0 0 NaN 0 0.0 0.0 19.0 0.0 0.0 2008/12/13
7009716 2008 12 13 6 936.0 936 1114.0 1119 DL 1630 ... 24.0 0 NaN 0 NaN NaN NaN NaN NaN 2008/12/13
7009717 2008 12 13 6 657.0 600 904.0 749 DL 1631 ... 34.0 0 NaN 0 0.0 57.0 18.0 0.0 0.0 2008/12/13
7009718 2008 12 13 6 1007.0 847 1149.0 1010 DL 1631 ... 32.0 0 NaN 0 1.0 0.0 19.0 0.0 79.0 2008/12/13
7009719 2008 12 13 6 638.0 640 808.0 753 DL 1632 ... 26.0 0 NaN 0 0.0 0.0 15.0 0.0 0.0 2008/12/13
7009720 2008 12 13 6 756.0 800 1032.0 1026 DL 1633 ... 17.0 0 NaN 0 NaN NaN NaN NaN NaN 2008/12/13
7009721 2008 12 13 6 612.0 615 923.0 907 DL 1635 ... 23.0 0 NaN 0 0.0 0.0 16.0 0.0 0.0 2008/12/13
7009722 2008 12 13 6 749.0 750 901.0 859 DL 1636 ... 11.0 0 NaN 0 NaN NaN NaN NaN NaN 2008/12/13
7009723 2008 12 13 6 1002.0 959 1204.0 1150 DL 1636 ... 45.0 0 NaN 0 NaN NaN NaN NaN NaN 2008/12/13
7009724 2008 12 13 6 834.0 835 1021.0 1023 DL 1637 ... 23.0 0 NaN 0 NaN NaN NaN NaN NaN 2008/12/13
7009725 2008 12 13 6 655.0 700 856.0 856 DL 1638 ... 12.0 0 NaN 0 NaN NaN NaN NaN NaN 2008/12/13
7009726 2008 12 13 6 1251.0 1240 1446.0 1437 DL 1639 ... 13.0 0 NaN 0 NaN NaN NaN NaN NaN 2008/12/13
7009727 2008 12 13 6 1110.0 1103 1413.0 1418 DL 1641 ... 11.0 0 NaN 0 NaN NaN NaN NaN NaN 2008/12/13

6413024 rows × 30 columns

In [32]:
df_nd_1.describe().NASDelay
Out[32]:
count    928031.000000
mean         28.201106
std          36.880101
min           1.000000
25%           8.000000
50%          18.000000
75%          31.000000
max        1357.000000
Name: NASDelay, dtype: float64
In [33]:
# Create bins for NAS delay length based on information on the cell above
bin_edges = [1, 8, 18, 31, 1357]
bin_names = ['1-7', '8-17', '18-30', '31-1357']
df_nd_1['NDGroup'] = pd.cut(df_nd_1['NASDelay'], bin_edges, labels=bin_names)
df_nd_1
Out[33]:
Year Month DayofMonth DayOfWeek DepTime CRSDepTime ArrTime CRSArrTime UniqueCarrier FlightNum ... Cancelled CancellationCode Diverted CarrierDelay WeatherDelay NASDelay SecurityDelay LateAircraftDelay Date NDGroup
0 2008 1 3 4 2003.0 1955 2211.0 2225 WN 335 ... 0 NaN 0 NaN NaN NaN NaN NaN 2008/1/3 NaN
1 2008 1 3 4 754.0 735 1002.0 1000 WN 3231 ... 0 NaN 0 NaN NaN NaN NaN NaN 2008/1/3 NaN
2 2008 1 3 4 628.0 620 804.0 750 WN 448 ... 0 NaN 0 NaN NaN NaN NaN NaN 2008/1/3 NaN
3 2008 1 3 4 926.0 930 1054.0 1100 WN 1746 ... 0 NaN 0 NaN NaN NaN NaN NaN 2008/1/3 NaN
5 2008 1 3 4 1940.0 1915 2121.0 2110 WN 378 ... 0 NaN 0 NaN NaN NaN NaN NaN 2008/1/3 NaN
7 2008 1 3 4 1039.0 1040 1132.0 1150 WN 535 ... 0 NaN 0 NaN NaN NaN NaN NaN 2008/1/3 NaN
8 2008 1 3 4 617.0 615 652.0 650 WN 11 ... 0 NaN 0 NaN NaN NaN NaN NaN 2008/1/3 NaN
9 2008 1 3 4 1620.0 1620 1639.0 1655 WN 810 ... 0 NaN 0 NaN NaN NaN NaN NaN 2008/1/3 NaN
10 2008 1 3 4 706.0 700 916.0 915 WN 100 ... 0 NaN 0 NaN NaN NaN NaN NaN 2008/1/3 NaN
12 2008 1 3 4 1426.0 1430 1426.0 1425 WN 829 ... 0 NaN 0 NaN NaN NaN NaN NaN 2008/1/3 NaN
13 2008 1 3 4 715.0 715 720.0 710 WN 1016 ... 0 NaN 0 NaN NaN NaN NaN NaN 2008/1/3 NaN
14 2008 1 3 4 1702.0 1700 1651.0 1655 WN 1827 ... 0 NaN 0 NaN NaN NaN NaN NaN 2008/1/3 NaN
15 2008 1 3 4 1029.0 1020 1021.0 1010 WN 2272 ... 0 NaN 0 NaN NaN NaN NaN NaN 2008/1/3 NaN
17 2008 1 3 4 754.0 745 940.0 955 WN 1144 ... 0 NaN 0 NaN NaN NaN NaN NaN 2008/1/3 NaN
20 2008 1 3 4 706.0 705 807.0 810 WN 68 ... 0 NaN 0 NaN NaN NaN NaN NaN 2008/1/3 NaN
22 2008 1 3 4 1900.0 1840 1956.0 1950 WN 717 ... 0 NaN 0 NaN NaN NaN NaN NaN 2008/1/3 NaN
23 2008 1 3 4 1039.0 1030 1133.0 1140 WN 1244 ... 0 NaN 0 NaN NaN NaN NaN NaN 2008/1/3 NaN
24 2008 1 3 4 801.0 800 902.0 910 WN 2101 ... 0 NaN 0 NaN NaN NaN NaN NaN 2008/1/3 NaN
25 2008 1 3 4 1520.0 1455 1619.0 1605 WN 2553 ... 0 NaN 0 NaN NaN NaN NaN NaN 2008/1/3 NaN
27 2008 1 3 4 1954.0 1925 2239.0 2235 WN 1754 ... 0 NaN 0 NaN NaN NaN NaN NaN 2008/1/3 NaN
28 2008 1 3 4 636.0 635 921.0 945 WN 2275 ... 0 NaN 0 NaN NaN NaN NaN NaN 2008/1/3 NaN
29 2008 1 3 4 734.0 730 958.0 1020 WN 550 ... 0 NaN 0 NaN NaN NaN NaN NaN 2008/1/3 NaN
31 2008 1 3 4 1008.0 1005 1234.0 1255 WN 543 ... 0 NaN 0 NaN NaN NaN NaN NaN 2008/1/3 NaN
32 2008 1 3 4 712.0 710 953.0 1000 WN 1112 ... 0 NaN 0 NaN NaN NaN NaN NaN 2008/1/3 NaN
33 2008 1 3 4 1312.0 1300 1546.0 1550 WN 1397 ... 0 NaN 0 NaN NaN NaN NaN NaN 2008/1/3 NaN
34 2008 1 3 4 1449.0 1430 1715.0 1720 WN 3398 ... 0 NaN 0 NaN NaN NaN NaN NaN 2008/1/3 NaN
35 2008 1 3 4 1634.0 1555 1859.0 1845 WN 3480 ... 0 NaN 0 NaN NaN NaN NaN NaN 2008/1/3 NaN
36 2008 1 3 4 831.0 830 935.0 955 WN 300 ... 0 NaN 0 NaN NaN NaN NaN NaN 2008/1/3 NaN
38 2008 1 3 4 1127.0 1105 1235.0 1230 WN 1837 ... 0 NaN 0 NaN NaN NaN NaN NaN 2008/1/3 NaN
39 2008 1 3 4 1424.0 1355 1531.0 1520 WN 2871 ... 0 NaN 0 NaN NaN NaN NaN NaN 2008/1/3 NaN
... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ...
7009695 2008 12 13 6 612.0 610 845.0 900 DL 1601 ... 0 NaN 0 NaN NaN NaN NaN NaN 2008/12/13 NaN
7009696 2008 12 13 6 945.0 948 1127.0 1055 DL 1601 ... 0 NaN 0 0.0 0.0 32.0 0.0 0.0 2008/12/13 31-1357
7009697 2008 12 13 6 2114.0 2118 2217.0 2222 DL 1604 ... 0 NaN 0 NaN NaN NaN NaN NaN 2008/12/13 NaN
7009698 2008 12 13 6 1625.0 1635 1744.0 1758 DL 1605 ... 0 NaN 0 NaN NaN NaN NaN NaN 2008/12/13 NaN
7009700 2008 12 13 6 1842.0 1845 1953.0 2006 DL 1610 ... 0 NaN 0 NaN NaN NaN NaN NaN 2008/12/13 NaN
7009701 2008 12 13 6 1528.0 1500 1720.0 1642 DL 1611 ... 0 NaN 0 16.0 0.0 10.0 0.0 12.0 2008/12/13 8-17
7009702 2008 12 13 6 1531.0 1522 1822.0 1823 DL 1612 ... 0 NaN 0 NaN NaN NaN NaN NaN 2008/12/13 NaN
7009703 2008 12 13 6 1910.0 1910 2017.0 2016 DL 1612 ... 0 NaN 0 NaN NaN NaN NaN NaN 2008/12/13 NaN
7009704 2008 12 13 6 1441.0 1445 1604.0 1622 DL 1613 ... 0 NaN 0 NaN NaN NaN NaN NaN 2008/12/13 NaN
7009705 2008 12 13 6 921.0 830 1112.0 1008 DL 1616 ... 0 NaN 0 51.0 0.0 13.0 0.0 0.0 2008/12/13 8-17
7009706 2008 12 13 6 1435.0 1440 1701.0 1704 DL 1618 ... 0 NaN 0 NaN NaN NaN NaN NaN 2008/12/13 NaN
7009707 2008 12 13 6 1750.0 1755 2010.0 2015 DL 1618 ... 0 NaN 0 NaN NaN NaN NaN NaN 2008/12/13 NaN
7009708 2008 12 13 6 706.0 710 850.0 837 DL 1619 ... 0 NaN 0 NaN NaN NaN NaN NaN 2008/12/13 NaN
7009711 2008 12 13 6 1033.0 1041 1255.0 1303 DL 1622 ... 0 NaN 0 NaN NaN NaN NaN NaN 2008/12/13 NaN
7009712 2008 12 13 6 840.0 843 1025.0 1021 DL 1624 ... 0 NaN 0 NaN NaN NaN NaN NaN 2008/12/13 NaN
7009713 2008 12 13 6 810.0 815 1504.0 1526 DL 1625 ... 0 NaN 0 NaN NaN NaN NaN NaN 2008/12/13 NaN
7009714 2008 12 13 6 547.0 545 646.0 650 DL 1627 ... 0 NaN 0 NaN NaN NaN NaN NaN 2008/12/13 NaN
7009715 2008 12 13 6 848.0 850 1024.0 1005 DL 1628 ... 0 NaN 0 0.0 0.0 19.0 0.0 0.0 2008/12/13 18-30
7009716 2008 12 13 6 936.0 936 1114.0 1119 DL 1630 ... 0 NaN 0 NaN NaN NaN NaN NaN 2008/12/13 NaN
7009717 2008 12 13 6 657.0 600 904.0 749 DL 1631 ... 0 NaN 0 0.0 57.0 18.0 0.0 0.0 2008/12/13 8-17
7009718 2008 12 13 6 1007.0 847 1149.0 1010 DL 1631 ... 0 NaN 0 1.0 0.0 19.0 0.0 79.0 2008/12/13 18-30
7009719 2008 12 13 6 638.0 640 808.0 753 DL 1632 ... 0 NaN 0 0.0 0.0 15.0 0.0 0.0 2008/12/13 8-17
7009720 2008 12 13 6 756.0 800 1032.0 1026 DL 1633 ... 0 NaN 0 NaN NaN NaN NaN NaN 2008/12/13 NaN
7009721 2008 12 13 6 612.0 615 923.0 907 DL 1635 ... 0 NaN 0 0.0 0.0 16.0 0.0 0.0 2008/12/13 8-17
7009722 2008 12 13 6 749.0 750 901.0 859 DL 1636 ... 0 NaN 0 NaN NaN NaN NaN NaN 2008/12/13 NaN
7009723 2008 12 13 6 1002.0 959 1204.0 1150 DL 1636 ... 0 NaN 0 NaN NaN NaN NaN NaN 2008/12/13 NaN
7009724 2008 12 13 6 834.0 835 1021.0 1023 DL 1637 ... 0 NaN 0 NaN NaN NaN NaN NaN 2008/12/13 NaN
7009725 2008 12 13 6 655.0 700 856.0 856 DL 1638 ... 0 NaN 0 NaN NaN NaN NaN NaN 2008/12/13 NaN
7009726 2008 12 13 6 1251.0 1240 1446.0 1437 DL 1639 ... 0 NaN 0 NaN NaN NaN NaN NaN 2008/12/13 NaN
7009727 2008 12 13 6 1110.0 1103 1413.0 1418 DL 1641 ... 0 NaN 0 NaN NaN NaN NaN NaN 2008/12/13 NaN

6413024 rows × 31 columns

In [34]:
# value counts for each bin
df_nd_1['NDGroup'].value_counts()
Out[34]:
8-17       250920
31-1357    229166
18-30      213381
1-7        200499
Name: NDGroup, dtype: int64
In [35]:
# Plot
df_nd_1['NDGroup'].value_counts(sort = False).plot(kind= 'bar', color = 'teal', figsize=(8,8))
plt.title("Length of NAS Delay")
plt.ylabel("Count")
plt.xlabel("Length of Delay (min)")
plt.show();

NAS delays are most commonly 8-17 minutes long.

Length of Security Delays

In [36]:
# Query 'SecurityDelay' to only select entries that are neither NaN or 0.
df_sd_1 = df_2008s.query('SecurityDelay != "NaN"')
df_sd_1 = df_sd_1.query('SecurityDelay != "0.0"')
df_sd_1
Out[36]:
Year Month DayofMonth DayOfWeek DepTime CRSDepTime ArrTime CRSArrTime UniqueCarrier FlightNum ... TaxiOut Cancelled CancellationCode Diverted CarrierDelay WeatherDelay NASDelay SecurityDelay LateAircraftDelay Date
0 2008 1 3 4 2003.0 1955 2211.0 2225 WN 335 ... 8.0 0 NaN 0 NaN NaN NaN NaN NaN 2008/1/3
1 2008 1 3 4 754.0 735 1002.0 1000 WN 3231 ... 10.0 0 NaN 0 NaN NaN NaN NaN NaN 2008/1/3
2 2008 1 3 4 628.0 620 804.0 750 WN 448 ... 17.0 0 NaN 0 NaN NaN NaN NaN NaN 2008/1/3
3 2008 1 3 4 926.0 930 1054.0 1100 WN 1746 ... 7.0 0 NaN 0 NaN NaN NaN NaN NaN 2008/1/3
5 2008 1 3 4 1940.0 1915 2121.0 2110 WN 378 ... 10.0 0 NaN 0 NaN NaN NaN NaN NaN 2008/1/3
7 2008 1 3 4 1039.0 1040 1132.0 1150 WN 535 ... 7.0 0 NaN 0 NaN NaN NaN NaN NaN 2008/1/3
8 2008 1 3 4 617.0 615 652.0 650 WN 11 ... 19.0 0 NaN 0 NaN NaN NaN NaN NaN 2008/1/3
9 2008 1 3 4 1620.0 1620 1639.0 1655 WN 810 ... 6.0 0 NaN 0 NaN NaN NaN NaN NaN 2008/1/3
10 2008 1 3 4 706.0 700 916.0 915 WN 100 ... 19.0 0 NaN 0 NaN NaN NaN NaN NaN 2008/1/3
12 2008 1 3 4 1426.0 1430 1426.0 1425 WN 829 ... 12.0 0 NaN 0 NaN NaN NaN NaN NaN 2008/1/3
13 2008 1 3 4 715.0 715 720.0 710 WN 1016 ... 21.0 0 NaN 0 NaN NaN NaN NaN NaN 2008/1/3
14 2008 1 3 4 1702.0 1700 1651.0 1655 WN 1827 ... 10.0 0 NaN 0 NaN NaN NaN NaN NaN 2008/1/3
15 2008 1 3 4 1029.0 1020 1021.0 1010 WN 2272 ... 9.0 0 NaN 0 NaN NaN NaN NaN NaN 2008/1/3
17 2008 1 3 4 754.0 745 940.0 955 WN 1144 ... 16.0 0 NaN 0 NaN NaN NaN NaN NaN 2008/1/3
20 2008 1 3 4 706.0 705 807.0 810 WN 68 ... 7.0 0 NaN 0 NaN NaN NaN NaN NaN 2008/1/3
22 2008 1 3 4 1900.0 1840 1956.0 1950 WN 717 ... 5.0 0 NaN 0 NaN NaN NaN NaN NaN 2008/1/3
23 2008 1 3 4 1039.0 1030 1133.0 1140 WN 1244 ... 5.0 0 NaN 0 NaN NaN NaN NaN NaN 2008/1/3
24 2008 1 3 4 801.0 800 902.0 910 WN 2101 ... 5.0 0 NaN 0 NaN NaN NaN NaN NaN 2008/1/3
25 2008 1 3 4 1520.0 1455 1619.0 1605 WN 2553 ... 7.0 0 NaN 0 NaN NaN NaN NaN NaN 2008/1/3
27 2008 1 3 4 1954.0 1925 2239.0 2235 WN 1754 ... 7.0 0 NaN 0 NaN NaN NaN NaN NaN 2008/1/3
28 2008 1 3 4 636.0 635 921.0 945 WN 2275 ... 13.0 0 NaN 0 NaN NaN NaN NaN NaN 2008/1/3
29 2008 1 3 4 734.0 730 958.0 1020 WN 550 ... 8.0 0 NaN 0 NaN NaN NaN NaN NaN 2008/1/3
31 2008 1 3 4 1008.0 1005 1234.0 1255 WN 543 ... 6.0 0 NaN 0 NaN NaN NaN NaN NaN 2008/1/3
32 2008 1 3 4 712.0 710 953.0 1000 WN 1112 ... 14.0 0 NaN 0 NaN NaN NaN NaN NaN 2008/1/3
33 2008 1 3 4 1312.0 1300 1546.0 1550 WN 1397 ... 7.0 0 NaN 0 NaN NaN NaN NaN NaN 2008/1/3
34 2008 1 3 4 1449.0 1430 1715.0 1720 WN 3398 ... 6.0 0 NaN 0 NaN NaN NaN NaN NaN 2008/1/3
35 2008 1 3 4 1634.0 1555 1859.0 1845 WN 3480 ... 6.0 0 NaN 0 NaN NaN NaN NaN NaN 2008/1/3
36 2008 1 3 4 831.0 830 935.0 955 WN 300 ... 7.0 0 NaN 0 NaN NaN NaN NaN NaN 2008/1/3
38 2008 1 3 4 1127.0 1105 1235.0 1230 WN 1837 ... 5.0 0 NaN 0 NaN NaN NaN NaN NaN 2008/1/3
39 2008 1 3 4 1424.0 1355 1531.0 1520 WN 2871 ... 6.0 0 NaN 0 NaN NaN NaN NaN NaN 2008/1/3
... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ...
7009687 2008 12 13 6 1057.0 1100 1230.0 1228 DL 1591 ... 15.0 0 NaN 0 NaN NaN NaN NaN NaN 2008/12/13
7009688 2008 12 13 6 1856.0 1855 2057.0 2056 DL 1592 ... 24.0 0 NaN 0 NaN NaN NaN NaN NaN 2008/12/13
7009689 2008 12 13 6 1134.0 1134 1833.0 1855 DL 1594 ... 13.0 0 NaN 0 NaN NaN NaN NaN NaN 2008/12/13
7009690 2008 12 13 6 1146.0 1150 1326.0 1329 DL 1595 ... 16.0 0 NaN 0 NaN NaN NaN NaN NaN 2008/12/13
7009691 2008 12 13 6 1602.0 1605 1702.0 1708 DL 1596 ... 16.0 0 NaN 0 NaN NaN NaN NaN NaN 2008/12/13
7009692 2008 12 13 6 555.0 600 735.0 724 DL 1597 ... 20.0 0 NaN 0 NaN NaN NaN NaN NaN 2008/12/13
7009693 2008 12 13 6 2136.0 2140 2313.0 2324 DL 1599 ... 22.0 0 NaN 0 NaN NaN NaN NaN NaN 2008/12/13
7009694 2008 12 13 6 1337.0 1342 1443.0 1450 DL 1600 ... 14.0 0 NaN 0 NaN NaN NaN NaN NaN 2008/12/13
7009695 2008 12 13 6 612.0 610 845.0 900 DL 1601 ... 13.0 0 NaN 0 NaN NaN NaN NaN NaN 2008/12/13
7009697 2008 12 13 6 2114.0 2118 2217.0 2222 DL 1604 ... 19.0 0 NaN 0 NaN NaN NaN NaN NaN 2008/12/13
7009698 2008 12 13 6 1625.0 1635 1744.0 1758 DL 1605 ... 21.0 0 NaN 0 NaN NaN NaN NaN NaN 2008/12/13
7009700 2008 12 13 6 1842.0 1845 1953.0 2006 DL 1610 ... 11.0 0 NaN 0 NaN NaN NaN NaN NaN 2008/12/13
7009702 2008 12 13 6 1531.0 1522 1822.0 1823 DL 1612 ... 14.0 0 NaN 0 NaN NaN NaN NaN NaN 2008/12/13
7009703 2008 12 13 6 1910.0 1910 2017.0 2016 DL 1612 ... 24.0 0 NaN 0 NaN NaN NaN NaN NaN 2008/12/13
7009704 2008 12 13 6 1441.0 1445 1604.0 1622 DL 1613 ... 10.0 0 NaN 0 NaN NaN NaN NaN NaN 2008/12/13
7009706 2008 12 13 6 1435.0 1440 1701.0 1704 DL 1618 ... 10.0 0 NaN 0 NaN NaN NaN NaN NaN 2008/12/13
7009707 2008 12 13 6 1750.0 1755 2010.0 2015 DL 1618 ... 20.0 0 NaN 0 NaN NaN NaN NaN NaN 2008/12/13
7009708 2008 12 13 6 706.0 710 850.0 837 DL 1619 ... 32.0 0 NaN 0 NaN NaN NaN NaN NaN 2008/12/13
7009711 2008 12 13 6 1033.0 1041 1255.0 1303 DL 1622 ... 15.0 0 NaN 0 NaN NaN NaN NaN NaN 2008/12/13
7009712 2008 12 13 6 840.0 843 1025.0 1021 DL 1624 ... 46.0 0 NaN 0 NaN NaN NaN NaN NaN 2008/12/13
7009713 2008 12 13 6 810.0 815 1504.0 1526 DL 1625 ... 17.0 0 NaN 0 NaN NaN NaN NaN NaN 2008/12/13
7009714 2008 12 13 6 547.0 545 646.0 650 DL 1627 ... 13.0 0 NaN 0 NaN NaN NaN NaN NaN 2008/12/13
7009716 2008 12 13 6 936.0 936 1114.0 1119 DL 1630 ... 24.0 0 NaN 0 NaN NaN NaN NaN NaN 2008/12/13
7009720 2008 12 13 6 756.0 800 1032.0 1026 DL 1633 ... 17.0 0 NaN 0 NaN NaN NaN NaN NaN 2008/12/13
7009722 2008 12 13 6 749.0 750 901.0 859 DL 1636 ... 11.0 0 NaN 0 NaN NaN NaN NaN NaN 2008/12/13
7009723 2008 12 13 6 1002.0 959 1204.0 1150 DL 1636 ... 45.0 0 NaN 0 NaN NaN NaN NaN NaN 2008/12/13
7009724 2008 12 13 6 834.0 835 1021.0 1023 DL 1637 ... 23.0 0 NaN 0 NaN NaN NaN NaN NaN 2008/12/13
7009725 2008 12 13 6 655.0 700 856.0 856 DL 1638 ... 12.0 0 NaN 0 NaN NaN NaN NaN NaN 2008/12/13
7009726 2008 12 13 6 1251.0 1240 1446.0 1437 DL 1639 ... 13.0 0 NaN 0 NaN NaN NaN NaN NaN 2008/12/13
7009727 2008 12 13 6 1110.0 1103 1413.0 1418 DL 1641 ... 11.0 0 NaN 0 NaN NaN NaN NaN NaN 2008/12/13

5491195 rows × 30 columns

In [37]:
df_sd_1.describe().SecurityDelay
Out[37]:
count    6202.000000
mean       18.432119
std        22.185362
min         1.000000
25%         7.000000
50%        13.000000
75%        22.000000
max       392.000000
Name: SecurityDelay, dtype: float64
In [38]:
# Create bins of security delay lengths using information from the cell above.
bin_edges = [1, 7, 13, 22, 392]
bin_names = ['1-6', '7-12', '13-21', '22-392']
df_sd_1['SDGroup'] = pd.cut(df_sd_1['SecurityDelay'], bin_edges, labels=bin_names)
df_sd_1
Out[38]:
Year Month DayofMonth DayOfWeek DepTime CRSDepTime ArrTime CRSArrTime UniqueCarrier FlightNum ... Cancelled CancellationCode Diverted CarrierDelay WeatherDelay NASDelay SecurityDelay LateAircraftDelay Date SDGroup
0 2008 1 3 4 2003.0 1955 2211.0 2225 WN 335 ... 0 NaN 0 NaN NaN NaN NaN NaN 2008/1/3 NaN
1 2008 1 3 4 754.0 735 1002.0 1000 WN 3231 ... 0 NaN 0 NaN NaN NaN NaN NaN 2008/1/3 NaN
2 2008 1 3 4 628.0 620 804.0 750 WN 448 ... 0 NaN 0 NaN NaN NaN NaN NaN 2008/1/3 NaN
3 2008 1 3 4 926.0 930 1054.0 1100 WN 1746 ... 0 NaN 0 NaN NaN NaN NaN NaN 2008/1/3 NaN
5 2008 1 3 4 1940.0 1915 2121.0 2110 WN 378 ... 0 NaN 0 NaN NaN NaN NaN NaN 2008/1/3 NaN
7 2008 1 3 4 1039.0 1040 1132.0 1150 WN 535 ... 0 NaN 0 NaN NaN NaN NaN NaN 2008/1/3 NaN
8 2008 1 3 4 617.0 615 652.0 650 WN 11 ... 0 NaN 0 NaN NaN NaN NaN NaN 2008/1/3 NaN
9 2008 1 3 4 1620.0 1620 1639.0 1655 WN 810 ... 0 NaN 0 NaN NaN NaN NaN NaN 2008/1/3 NaN
10 2008 1 3 4 706.0 700 916.0 915 WN 100 ... 0 NaN 0 NaN NaN NaN NaN NaN 2008/1/3 NaN
12 2008 1 3 4 1426.0 1430 1426.0 1425 WN 829 ... 0 NaN 0 NaN NaN NaN NaN NaN 2008/1/3 NaN
13 2008 1 3 4 715.0 715 720.0 710 WN 1016 ... 0 NaN 0 NaN NaN NaN NaN NaN 2008/1/3 NaN
14 2008 1 3 4 1702.0 1700 1651.0 1655 WN 1827 ... 0 NaN 0 NaN NaN NaN NaN NaN 2008/1/3 NaN
15 2008 1 3 4 1029.0 1020 1021.0 1010 WN 2272 ... 0 NaN 0 NaN NaN NaN NaN NaN 2008/1/3 NaN
17 2008 1 3 4 754.0 745 940.0 955 WN 1144 ... 0 NaN 0 NaN NaN NaN NaN NaN 2008/1/3 NaN
20 2008 1 3 4 706.0 705 807.0 810 WN 68 ... 0 NaN 0 NaN NaN NaN NaN NaN 2008/1/3 NaN
22 2008 1 3 4 1900.0 1840 1956.0 1950 WN 717 ... 0 NaN 0 NaN NaN NaN NaN NaN 2008/1/3 NaN
23 2008 1 3 4 1039.0 1030 1133.0 1140 WN 1244 ... 0 NaN 0 NaN NaN NaN NaN NaN 2008/1/3 NaN
24 2008 1 3 4 801.0 800 902.0 910 WN 2101 ... 0 NaN 0 NaN NaN NaN NaN NaN 2008/1/3 NaN
25 2008 1 3 4 1520.0 1455 1619.0 1605 WN 2553 ... 0 NaN 0 NaN NaN NaN NaN NaN 2008/1/3 NaN
27 2008 1 3 4 1954.0 1925 2239.0 2235 WN 1754 ... 0 NaN 0 NaN NaN NaN NaN NaN 2008/1/3 NaN
28 2008 1 3 4 636.0 635 921.0 945 WN 2275 ... 0 NaN 0 NaN NaN NaN NaN NaN 2008/1/3 NaN
29 2008 1 3 4 734.0 730 958.0 1020 WN 550 ... 0 NaN 0 NaN NaN NaN NaN NaN 2008/1/3 NaN
31 2008 1 3 4 1008.0 1005 1234.0 1255 WN 543 ... 0 NaN 0 NaN NaN NaN NaN NaN 2008/1/3 NaN
32 2008 1 3 4 712.0 710 953.0 1000 WN 1112 ... 0 NaN 0 NaN NaN NaN NaN NaN 2008/1/3 NaN
33 2008 1 3 4 1312.0 1300 1546.0 1550 WN 1397 ... 0 NaN 0 NaN NaN NaN NaN NaN 2008/1/3 NaN
34 2008 1 3 4 1449.0 1430 1715.0 1720 WN 3398 ... 0 NaN 0 NaN NaN NaN NaN NaN 2008/1/3 NaN
35 2008 1 3 4 1634.0 1555 1859.0 1845 WN 3480 ... 0 NaN 0 NaN NaN NaN NaN NaN 2008/1/3 NaN
36 2008 1 3 4 831.0 830 935.0 955 WN 300 ... 0 NaN 0 NaN NaN NaN NaN NaN 2008/1/3 NaN
38 2008 1 3 4 1127.0 1105 1235.0 1230 WN 1837 ... 0 NaN 0 NaN NaN NaN NaN NaN 2008/1/3 NaN
39 2008 1 3 4 1424.0 1355 1531.0 1520 WN 2871 ... 0 NaN 0 NaN NaN NaN NaN NaN 2008/1/3 NaN
... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ...
7009687 2008 12 13 6 1057.0 1100 1230.0 1228 DL 1591 ... 0 NaN 0 NaN NaN NaN NaN NaN 2008/12/13 NaN
7009688 2008 12 13 6 1856.0 1855 2057.0 2056 DL 1592 ... 0 NaN 0 NaN NaN NaN NaN NaN 2008/12/13 NaN
7009689 2008 12 13 6 1134.0 1134 1833.0 1855 DL 1594 ... 0 NaN 0 NaN NaN NaN NaN NaN 2008/12/13 NaN
7009690 2008 12 13 6 1146.0 1150 1326.0 1329 DL 1595 ... 0 NaN 0 NaN NaN NaN NaN NaN 2008/12/13 NaN
7009691 2008 12 13 6 1602.0 1605 1702.0 1708 DL 1596 ... 0 NaN 0 NaN NaN NaN NaN NaN 2008/12/13 NaN
7009692 2008 12 13 6 555.0 600 735.0 724 DL 1597 ... 0 NaN 0 NaN NaN NaN NaN NaN 2008/12/13 NaN
7009693 2008 12 13 6 2136.0 2140 2313.0 2324 DL 1599 ... 0 NaN 0 NaN NaN NaN NaN NaN 2008/12/13 NaN
7009694 2008 12 13 6 1337.0 1342 1443.0 1450 DL 1600 ... 0 NaN 0 NaN NaN NaN NaN NaN 2008/12/13 NaN
7009695 2008 12 13 6 612.0 610 845.0 900 DL 1601 ... 0 NaN 0 NaN NaN NaN NaN NaN 2008/12/13 NaN
7009697 2008 12 13 6 2114.0 2118 2217.0 2222 DL 1604 ... 0 NaN 0 NaN NaN NaN NaN NaN 2008/12/13 NaN
7009698 2008 12 13 6 1625.0 1635 1744.0 1758 DL 1605 ... 0 NaN 0 NaN NaN NaN NaN NaN 2008/12/13 NaN
7009700 2008 12 13 6 1842.0 1845 1953.0 2006 DL 1610 ... 0 NaN 0 NaN NaN NaN NaN NaN 2008/12/13 NaN
7009702 2008 12 13 6 1531.0 1522 1822.0 1823 DL 1612 ... 0 NaN 0 NaN NaN NaN NaN NaN 2008/12/13 NaN
7009703 2008 12 13 6 1910.0 1910 2017.0 2016 DL 1612 ... 0 NaN 0 NaN NaN NaN NaN NaN 2008/12/13 NaN
7009704 2008 12 13 6 1441.0 1445 1604.0 1622 DL 1613 ... 0 NaN 0 NaN NaN NaN NaN NaN 2008/12/13 NaN
7009706 2008 12 13 6 1435.0 1440 1701.0 1704 DL 1618 ... 0 NaN 0 NaN NaN NaN NaN NaN 2008/12/13 NaN
7009707 2008 12 13 6 1750.0 1755 2010.0 2015 DL 1618 ... 0 NaN 0 NaN NaN NaN NaN NaN 2008/12/13 NaN
7009708 2008 12 13 6 706.0 710 850.0 837 DL 1619 ... 0 NaN 0 NaN NaN NaN NaN NaN 2008/12/13 NaN
7009711 2008 12 13 6 1033.0 1041 1255.0 1303 DL 1622 ... 0 NaN 0 NaN NaN NaN NaN NaN 2008/12/13 NaN
7009712 2008 12 13 6 840.0 843 1025.0 1021 DL 1624 ... 0 NaN 0 NaN NaN NaN NaN NaN 2008/12/13 NaN
7009713 2008 12 13 6 810.0 815 1504.0 1526 DL 1625 ... 0 NaN 0 NaN NaN NaN NaN NaN 2008/12/13 NaN
7009714 2008 12 13 6 547.0 545 646.0 650 DL 1627 ... 0 NaN 0 NaN NaN NaN NaN NaN 2008/12/13 NaN
7009716 2008 12 13 6 936.0 936 1114.0 1119 DL 1630 ... 0 NaN 0 NaN NaN NaN NaN NaN 2008/12/13 NaN
7009720 2008 12 13 6 756.0 800 1032.0 1026 DL 1633 ... 0 NaN 0 NaN NaN NaN NaN NaN 2008/12/13 NaN
7009722 2008 12 13 6 749.0 750 901.0 859 DL 1636 ... 0 NaN 0 NaN NaN NaN NaN NaN 2008/12/13 NaN
7009723 2008 12 13 6 1002.0 959 1204.0 1150 DL 1636 ... 0 NaN 0 NaN NaN NaN NaN NaN 2008/12/13 NaN
7009724 2008 12 13 6 834.0 835 1021.0 1023 DL 1637 ... 0 NaN 0 NaN NaN NaN NaN NaN 2008/12/13 NaN
7009725 2008 12 13 6 655.0 700 856.0 856 DL 1638 ... 0 NaN 0 NaN NaN NaN NaN NaN 2008/12/13 NaN
7009726 2008 12 13 6 1251.0 1240 1446.0 1437 DL 1639 ... 0 NaN 0 NaN NaN NaN NaN NaN 2008/12/13 NaN
7009727 2008 12 13 6 1110.0 1103 1413.0 1418 DL 1641 ... 0 NaN 0 NaN NaN NaN NaN NaN 2008/12/13 NaN

5491195 rows × 31 columns

In [39]:
# value counts for each bin
df_sd_1['SDGroup'].value_counts()
Out[39]:
1-6       1630
13-21     1509
22-392    1443
7-12      1416
Name: SDGroup, dtype: int64
In [40]:
# Plot
df_sd_1['SDGroup'].value_counts(sort = False).plot(kind= 'bar', color = 'teal', figsize=(8,8))
plt.title("Length of Security Delay")
plt.ylabel("Count")
plt.xlabel("Length of Delay (min)")
plt.show();

Security delays are most commonly 1-6 minutes long.

Length of Late Aircraft Delays

In [41]:
# Query 'LateAircraftDelay' to only select entries that are neither NaN or 0.
df_ld_1 = df_2008s.query('LateAircraftDelay != "NaN"')
df_ld_1 = df_ld_1.query('LateAircraftDelay != "0.0"')
df_ld_1
Out[41]:
Year Month DayofMonth DayOfWeek DepTime CRSDepTime ArrTime CRSArrTime UniqueCarrier FlightNum ... TaxiOut Cancelled CancellationCode Diverted CarrierDelay WeatherDelay NASDelay SecurityDelay LateAircraftDelay Date
0 2008 1 3 4 2003.0 1955 2211.0 2225 WN 335 ... 8.0 0 NaN 0 NaN NaN NaN NaN NaN 2008/1/3
1 2008 1 3 4 754.0 735 1002.0 1000 WN 3231 ... 10.0 0 NaN 0 NaN NaN NaN NaN NaN 2008/1/3
2 2008 1 3 4 628.0 620 804.0 750 WN 448 ... 17.0 0 NaN 0 NaN NaN NaN NaN NaN 2008/1/3
3 2008 1 3 4 926.0 930 1054.0 1100 WN 1746 ... 7.0 0 NaN 0 NaN NaN NaN NaN NaN 2008/1/3
4 2008 1 3 4 1829.0 1755 1959.0 1925 WN 3920 ... 10.0 0 NaN 0 2.0 0.0 0.0 0.0 32.0 2008/1/3
5 2008 1 3 4 1940.0 1915 2121.0 2110 WN 378 ... 10.0 0 NaN 0 NaN NaN NaN NaN NaN 2008/1/3
6 2008 1 3 4 1937.0 1830 2037.0 1940 WN 509 ... 7.0 0 NaN 0 10.0 0.0 0.0 0.0 47.0 2008/1/3
7 2008 1 3 4 1039.0 1040 1132.0 1150 WN 535 ... 7.0 0 NaN 0 NaN NaN NaN NaN NaN 2008/1/3
8 2008 1 3 4 617.0 615 652.0 650 WN 11 ... 19.0 0 NaN 0 NaN NaN NaN NaN NaN 2008/1/3
9 2008 1 3 4 1620.0 1620 1639.0 1655 WN 810 ... 6.0 0 NaN 0 NaN NaN NaN NaN NaN 2008/1/3
10 2008 1 3 4 706.0 700 916.0 915 WN 100 ... 19.0 0 NaN 0 NaN NaN NaN NaN NaN 2008/1/3
11 2008 1 3 4 1644.0 1510 1845.0 1725 WN 1333 ... 8.0 0 NaN 0 8.0 0.0 0.0 0.0 72.0 2008/1/3
12 2008 1 3 4 1426.0 1430 1426.0 1425 WN 829 ... 12.0 0 NaN 0 NaN NaN NaN NaN NaN 2008/1/3
13 2008 1 3 4 715.0 715 720.0 710 WN 1016 ... 21.0 0 NaN 0 NaN NaN NaN NaN NaN 2008/1/3
14 2008 1 3 4 1702.0 1700 1651.0 1655 WN 1827 ... 10.0 0 NaN 0 NaN NaN NaN NaN NaN 2008/1/3
15 2008 1 3 4 1029.0 1020 1021.0 1010 WN 2272 ... 9.0 0 NaN 0 NaN NaN NaN NaN NaN 2008/1/3
16 2008 1 3 4 1452.0 1425 1640.0 1625 WN 675 ... 8.0 0 NaN 0 3.0 0.0 0.0 0.0 12.0 2008/1/3
17 2008 1 3 4 754.0 745 940.0 955 WN 1144 ... 16.0 0 NaN 0 NaN NaN NaN NaN NaN 2008/1/3
18 2008 1 3 4 1323.0 1255 1526.0 1510 WN 4 ... 9.0 0 NaN 0 0.0 0.0 0.0 0.0 16.0 2008/1/3
19 2008 1 3 4 1416.0 1325 1512.0 1435 WN 54 ... 5.0 0 NaN 0 12.0 0.0 0.0 0.0 25.0 2008/1/3
20 2008 1 3 4 706.0 705 807.0 810 WN 68 ... 7.0 0 NaN 0 NaN NaN NaN NaN NaN 2008/1/3
21 2008 1 3 4 1657.0 1625 1754.0 1735 WN 623 ... 5.0 0 NaN 0 7.0 0.0 0.0 0.0 12.0 2008/1/3
22 2008 1 3 4 1900.0 1840 1956.0 1950 WN 717 ... 5.0 0 NaN 0 NaN NaN NaN NaN NaN 2008/1/3
23 2008 1 3 4 1039.0 1030 1133.0 1140 WN 1244 ... 5.0 0 NaN 0 NaN NaN NaN NaN NaN 2008/1/3
24 2008 1 3 4 801.0 800 902.0 910 WN 2101 ... 5.0 0 NaN 0 NaN NaN NaN NaN NaN 2008/1/3
25 2008 1 3 4 1520.0 1455 1619.0 1605 WN 2553 ... 7.0 0 NaN 0 NaN NaN NaN NaN NaN 2008/1/3
26 2008 1 3 4 1422.0 1255 1657.0 1610 WN 188 ... 6.0 0 NaN 0 40.0 0.0 0.0 0.0 7.0 2008/1/3
27 2008 1 3 4 1954.0 1925 2239.0 2235 WN 1754 ... 7.0 0 NaN 0 NaN NaN NaN NaN NaN 2008/1/3
28 2008 1 3 4 636.0 635 921.0 945 WN 2275 ... 13.0 0 NaN 0 NaN NaN NaN NaN NaN 2008/1/3
29 2008 1 3 4 734.0 730 958.0 1020 WN 550 ... 8.0 0 NaN 0 NaN NaN NaN NaN NaN 2008/1/3
... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ...
7009692 2008 12 13 6 555.0 600 735.0 724 DL 1597 ... 20.0 0 NaN 0 NaN NaN NaN NaN NaN 2008/12/13
7009693 2008 12 13 6 2136.0 2140 2313.0 2324 DL 1599 ... 22.0 0 NaN 0 NaN NaN NaN NaN NaN 2008/12/13
7009694 2008 12 13 6 1337.0 1342 1443.0 1450 DL 1600 ... 14.0 0 NaN 0 NaN NaN NaN NaN NaN 2008/12/13
7009695 2008 12 13 6 612.0 610 845.0 900 DL 1601 ... 13.0 0 NaN 0 NaN NaN NaN NaN NaN 2008/12/13
7009697 2008 12 13 6 2114.0 2118 2217.0 2222 DL 1604 ... 19.0 0 NaN 0 NaN NaN NaN NaN NaN 2008/12/13
7009698 2008 12 13 6 1625.0 1635 1744.0 1758 DL 1605 ... 21.0 0 NaN 0 NaN NaN NaN NaN NaN 2008/12/13
7009699 2008 12 13 6 1254.0 1221 1420.0 1359 DL 1609 ... 13.0 0 NaN 0 0.0 0.0 0.0 0.0 21.0 2008/12/13
7009700 2008 12 13 6 1842.0 1845 1953.0 2006 DL 1610 ... 11.0 0 NaN 0 NaN NaN NaN NaN NaN 2008/12/13
7009701 2008 12 13 6 1528.0 1500 1720.0 1642 DL 1611 ... 29.0 0 NaN 0 16.0 0.0 10.0 0.0 12.0 2008/12/13
7009702 2008 12 13 6 1531.0 1522 1822.0 1823 DL 1612 ... 14.0 0 NaN 0 NaN NaN NaN NaN NaN 2008/12/13
7009703 2008 12 13 6 1910.0 1910 2017.0 2016 DL 1612 ... 24.0 0 NaN 0 NaN NaN NaN NaN NaN 2008/12/13
7009704 2008 12 13 6 1441.0 1445 1604.0 1622 DL 1613 ... 10.0 0 NaN 0 NaN NaN NaN NaN NaN 2008/12/13
7009706 2008 12 13 6 1435.0 1440 1701.0 1704 DL 1618 ... 10.0 0 NaN 0 NaN NaN NaN NaN NaN 2008/12/13
7009707 2008 12 13 6 1750.0 1755 2010.0 2015 DL 1618 ... 20.0 0 NaN 0 NaN NaN NaN NaN NaN 2008/12/13
7009708 2008 12 13 6 706.0 710 850.0 837 DL 1619 ... 32.0 0 NaN 0 NaN NaN NaN NaN NaN 2008/12/13
7009709 2008 12 13 6 1552.0 1520 1735.0 1718 DL 1620 ... 7.0 0 NaN 0 0.0 0.0 0.0 0.0 17.0 2008/12/13
7009710 2008 12 13 6 1250.0 1220 1617.0 1552 DL 1621 ... 18.0 0 NaN 0 3.0 0.0 0.0 0.0 22.0 2008/12/13
7009711 2008 12 13 6 1033.0 1041 1255.0 1303 DL 1622 ... 15.0 0 NaN 0 NaN NaN NaN NaN NaN 2008/12/13
7009712 2008 12 13 6 840.0 843 1025.0 1021 DL 1624 ... 46.0 0 NaN 0 NaN NaN NaN NaN NaN 2008/12/13
7009713 2008 12 13 6 810.0 815 1504.0 1526 DL 1625 ... 17.0 0 NaN 0 NaN NaN NaN NaN NaN 2008/12/13
7009714 2008 12 13 6 547.0 545 646.0 650 DL 1627 ... 13.0 0 NaN 0 NaN NaN NaN NaN NaN 2008/12/13
7009716 2008 12 13 6 936.0 936 1114.0 1119 DL 1630 ... 24.0 0 NaN 0 NaN NaN NaN NaN NaN 2008/12/13
7009718 2008 12 13 6 1007.0 847 1149.0 1010 DL 1631 ... 32.0 0 NaN 0 1.0 0.0 19.0 0.0 79.0 2008/12/13
7009720 2008 12 13 6 756.0 800 1032.0 1026 DL 1633 ... 17.0 0 NaN 0 NaN NaN NaN NaN NaN 2008/12/13
7009722 2008 12 13 6 749.0 750 901.0 859 DL 1636 ... 11.0 0 NaN 0 NaN NaN NaN NaN NaN 2008/12/13
7009723 2008 12 13 6 1002.0 959 1204.0 1150 DL 1636 ... 45.0 0 NaN 0 NaN NaN NaN NaN NaN 2008/12/13
7009724 2008 12 13 6 834.0 835 1021.0 1023 DL 1637 ... 23.0 0 NaN 0 NaN NaN NaN NaN NaN 2008/12/13
7009725 2008 12 13 6 655.0 700 856.0 856 DL 1638 ... 12.0 0 NaN 0 NaN NaN NaN NaN NaN 2008/12/13
7009726 2008 12 13 6 1251.0 1240 1446.0 1437 DL 1639 ... 13.0 0 NaN 0 NaN NaN NaN NaN NaN 2008/12/13
7009727 2008 12 13 6 1110.0 1103 1413.0 1418 DL 1641 ... 11.0 0 NaN 0 NaN NaN NaN NaN NaN 2008/12/13

6184411 rows × 30 columns

In [42]:
df_ld_1.describe().LateAircraftDelay
Out[42]:
count    699418.000000
mean         45.280851
std          47.436874
min           1.000000
25%          16.000000
50%          29.000000
75%          58.000000
max        1316.000000
Name: LateAircraftDelay, dtype: float64
In [43]:
# Create bins of late aircraft delay lengths using information from the cell above.
bin_edges = [1, 11, 25, 57, 1352]
bin_names = ['1-10', '11-24', '25-56', '57-1352']
df_ld_1['LDGroup'] = pd.cut(df_ld_1['LateAircraftDelay'], bin_edges, labels=bin_names)
df_ld_1
Out[43]:
Year Month DayofMonth DayOfWeek DepTime CRSDepTime ArrTime CRSArrTime UniqueCarrier FlightNum ... Cancelled CancellationCode Diverted CarrierDelay WeatherDelay NASDelay SecurityDelay LateAircraftDelay Date LDGroup
0 2008 1 3 4 2003.0 1955 2211.0 2225 WN 335 ... 0 NaN 0 NaN NaN NaN NaN NaN 2008/1/3 NaN
1 2008 1 3 4 754.0 735 1002.0 1000 WN 3231 ... 0 NaN 0 NaN NaN NaN NaN NaN 2008/1/3 NaN
2 2008 1 3 4 628.0 620 804.0 750 WN 448 ... 0 NaN 0 NaN NaN NaN NaN NaN 2008/1/3 NaN
3 2008 1 3 4 926.0 930 1054.0 1100 WN 1746 ... 0 NaN 0 NaN NaN NaN NaN NaN 2008/1/3 NaN
4 2008 1 3 4 1829.0 1755 1959.0 1925 WN 3920 ... 0 NaN 0 2.0 0.0 0.0 0.0 32.0 2008/1/3 25-56
5 2008 1 3 4 1940.0 1915 2121.0 2110 WN 378 ... 0 NaN 0 NaN NaN NaN NaN NaN 2008/1/3 NaN
6 2008 1 3 4 1937.0 1830 2037.0 1940 WN 509 ... 0 NaN 0 10.0 0.0 0.0 0.0 47.0 2008/1/3 25-56
7 2008 1 3 4 1039.0 1040 1132.0 1150 WN 535 ... 0 NaN 0 NaN NaN NaN NaN NaN 2008/1/3 NaN
8 2008 1 3 4 617.0 615 652.0 650 WN 11 ... 0 NaN 0 NaN NaN NaN NaN NaN 2008/1/3 NaN
9 2008 1 3 4 1620.0 1620 1639.0 1655 WN 810 ... 0 NaN 0 NaN NaN NaN NaN NaN 2008/1/3 NaN
10 2008 1 3 4 706.0 700 916.0 915 WN 100 ... 0 NaN 0 NaN NaN NaN NaN NaN 2008/1/3 NaN
11 2008 1 3 4 1644.0 1510 1845.0 1725 WN 1333 ... 0 NaN 0 8.0 0.0 0.0 0.0 72.0 2008/1/3 57-1352
12 2008 1 3 4 1426.0 1430 1426.0 1425 WN 829 ... 0 NaN 0 NaN NaN NaN NaN NaN 2008/1/3 NaN
13 2008 1 3 4 715.0 715 720.0 710 WN 1016 ... 0 NaN 0 NaN NaN NaN NaN NaN 2008/1/3 NaN
14 2008 1 3 4 1702.0 1700 1651.0 1655 WN 1827 ... 0 NaN 0 NaN NaN NaN NaN NaN 2008/1/3 NaN
15 2008 1 3 4 1029.0 1020 1021.0 1010 WN 2272 ... 0 NaN 0 NaN NaN NaN NaN NaN 2008/1/3 NaN
16 2008 1 3 4 1452.0 1425 1640.0 1625 WN 675 ... 0 NaN 0 3.0 0.0 0.0 0.0 12.0 2008/1/3 11-24
17 2008 1 3 4 754.0 745 940.0 955 WN 1144 ... 0 NaN 0 NaN NaN NaN NaN NaN 2008/1/3 NaN
18 2008 1 3 4 1323.0 1255 1526.0 1510 WN 4 ... 0 NaN 0 0.0 0.0 0.0 0.0 16.0 2008/1/3 11-24
19 2008 1 3 4 1416.0 1325 1512.0 1435 WN 54 ... 0 NaN 0 12.0 0.0 0.0 0.0 25.0 2008/1/3 11-24
20 2008 1 3 4 706.0 705 807.0 810 WN 68 ... 0 NaN 0 NaN NaN NaN NaN NaN 2008/1/3 NaN
21 2008 1 3 4 1657.0 1625 1754.0 1735 WN 623 ... 0 NaN 0 7.0 0.0 0.0 0.0 12.0 2008/1/3 11-24
22 2008 1 3 4 1900.0 1840 1956.0 1950 WN 717 ... 0 NaN 0 NaN NaN NaN NaN NaN 2008/1/3 NaN
23 2008 1 3 4 1039.0 1030 1133.0 1140 WN 1244 ... 0 NaN 0 NaN NaN NaN NaN NaN 2008/1/3 NaN
24 2008 1 3 4 801.0 800 902.0 910 WN 2101 ... 0 NaN 0 NaN NaN NaN NaN NaN 2008/1/3 NaN
25 2008 1 3 4 1520.0 1455 1619.0 1605 WN 2553 ... 0 NaN 0 NaN NaN NaN NaN NaN 2008/1/3 NaN
26 2008 1 3 4 1422.0 1255 1657.0 1610 WN 188 ... 0 NaN 0 40.0 0.0 0.0 0.0 7.0 2008/1/3 1-10
27 2008 1 3 4 1954.0 1925 2239.0 2235 WN 1754 ... 0 NaN 0 NaN NaN NaN NaN NaN 2008/1/3 NaN
28 2008 1 3 4 636.0 635 921.0 945 WN 2275 ... 0 NaN 0 NaN NaN NaN NaN NaN 2008/1/3 NaN
29 2008 1 3 4 734.0 730 958.0 1020 WN 550 ... 0 NaN 0 NaN NaN NaN NaN NaN 2008/1/3 NaN
... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ...
7009692 2008 12 13 6 555.0 600 735.0 724 DL 1597 ... 0 NaN 0 NaN NaN NaN NaN NaN 2008/12/13 NaN
7009693 2008 12 13 6 2136.0 2140 2313.0 2324 DL 1599 ... 0 NaN 0 NaN NaN NaN NaN NaN 2008/12/13 NaN
7009694 2008 12 13 6 1337.0 1342 1443.0 1450 DL 1600 ... 0 NaN 0 NaN NaN NaN NaN NaN 2008/12/13 NaN
7009695 2008 12 13 6 612.0 610 845.0 900 DL 1601 ... 0 NaN 0 NaN NaN NaN NaN NaN 2008/12/13 NaN
7009697 2008 12 13 6 2114.0 2118 2217.0 2222 DL 1604 ... 0 NaN 0 NaN NaN NaN NaN NaN 2008/12/13 NaN
7009698 2008 12 13 6 1625.0 1635 1744.0 1758 DL 1605 ... 0 NaN 0 NaN NaN NaN NaN NaN 2008/12/13 NaN
7009699 2008 12 13 6 1254.0 1221 1420.0 1359 DL 1609 ... 0 NaN 0 0.0 0.0 0.0 0.0 21.0 2008/12/13 11-24
7009700 2008 12 13 6 1842.0 1845 1953.0 2006 DL 1610 ... 0 NaN 0 NaN NaN NaN NaN NaN 2008/12/13 NaN
7009701 2008 12 13 6 1528.0 1500 1720.0 1642 DL 1611 ... 0 NaN 0 16.0 0.0 10.0 0.0 12.0 2008/12/13 11-24
7009702 2008 12 13 6 1531.0 1522 1822.0 1823 DL 1612 ... 0 NaN 0 NaN NaN NaN NaN NaN 2008/12/13 NaN
7009703 2008 12 13 6 1910.0 1910 2017.0 2016 DL 1612 ... 0 NaN 0 NaN NaN NaN NaN NaN 2008/12/13 NaN
7009704 2008 12 13 6 1441.0 1445 1604.0 1622 DL 1613 ... 0 NaN 0 NaN NaN NaN NaN NaN 2008/12/13 NaN
7009706 2008 12 13 6 1435.0 1440 1701.0 1704 DL 1618 ... 0 NaN 0 NaN NaN NaN NaN NaN 2008/12/13 NaN
7009707 2008 12 13 6 1750.0 1755 2010.0 2015 DL 1618 ... 0 NaN 0 NaN NaN NaN NaN NaN 2008/12/13 NaN
7009708 2008 12 13 6 706.0 710 850.0 837 DL 1619 ... 0 NaN 0 NaN NaN NaN NaN NaN 2008/12/13 NaN
7009709 2008 12 13 6 1552.0 1520 1735.0 1718 DL 1620 ... 0 NaN 0 0.0 0.0 0.0 0.0 17.0 2008/12/13 11-24
7009710 2008 12 13 6 1250.0 1220 1617.0 1552 DL 1621 ... 0 NaN 0 3.0 0.0 0.0 0.0 22.0 2008/12/13 11-24
7009711 2008 12 13 6 1033.0 1041 1255.0 1303 DL 1622 ... 0 NaN 0 NaN NaN NaN NaN NaN 2008/12/13 NaN
7009712 2008 12 13 6 840.0 843 1025.0 1021 DL 1624 ... 0 NaN 0 NaN NaN NaN NaN NaN 2008/12/13 NaN
7009713 2008 12 13 6 810.0 815 1504.0 1526 DL 1625 ... 0 NaN 0 NaN NaN NaN NaN NaN 2008/12/13 NaN
7009714 2008 12 13 6 547.0 545 646.0 650 DL 1627 ... 0 NaN 0 NaN NaN NaN NaN NaN 2008/12/13 NaN
7009716 2008 12 13 6 936.0 936 1114.0 1119 DL 1630 ... 0 NaN 0 NaN NaN NaN NaN NaN 2008/12/13 NaN
7009718 2008 12 13 6 1007.0 847 1149.0 1010 DL 1631 ... 0 NaN 0 1.0 0.0 19.0 0.0 79.0 2008/12/13 57-1352
7009720 2008 12 13 6 756.0 800 1032.0 1026 DL 1633 ... 0 NaN 0 NaN NaN NaN NaN NaN 2008/12/13 NaN
7009722 2008 12 13 6 749.0 750 901.0 859 DL 1636 ... 0 NaN 0 NaN NaN NaN NaN NaN 2008/12/13 NaN
7009723 2008 12 13 6 1002.0 959 1204.0 1150 DL 1636 ... 0 NaN 0 NaN NaN NaN NaN NaN 2008/12/13 NaN
7009724 2008 12 13 6 834.0 835 1021.0 1023 DL 1637 ... 0 NaN 0 NaN NaN NaN NaN NaN 2008/12/13 NaN
7009725 2008 12 13 6 655.0 700 856.0 856 DL 1638 ... 0 NaN 0 NaN NaN NaN NaN NaN 2008/12/13 NaN
7009726 2008 12 13 6 1251.0 1240 1446.0 1437 DL 1639 ... 0 NaN 0 NaN NaN NaN NaN NaN 2008/12/13 NaN
7009727 2008 12 13 6 1110.0 1103 1413.0 1418 DL 1641 ... 0 NaN 0 NaN NaN NaN NaN NaN 2008/12/13 NaN

6184411 rows × 31 columns

In [44]:
# value counts for each bin
df_ld_1['LDGroup'].value_counts()
Out[44]:
25-56      211870
11-24      201440
57-1352    176008
1-10       101935
Name: LDGroup, dtype: int64
In [45]:
# Plot
df_ld_1['LDGroup'].value_counts(sort = False).plot(kind= 'bar', color = 'teal', figsize=(8,8))
plt.title("Length of Late Aircraft Delay")
plt.ylabel("Count")
plt.xlabel("Length of Delay (min)")
plt.show();

Late aircraft delays are most commonly 25-56 minutes long.

Total Destinations

In [46]:
# create value counts data set for 'Dest' column
df_dest = df_2008s['Dest'].value_counts()
df_dest = df_dest.reset_index()
In [47]:
#df_dest.to_csv('dest.csv', index=False)
In [21]:
%%HTML 
<div class='tableauPlaceholder' id='viz1555730357000' style='position: relative'><noscript><a href='#'><img alt=' ' src='https:&#47;&#47;public.tableau.com&#47;static&#47;images&#47;To&#47;TotalDomesticFlightsintheU_S_in2008&#47;Dashboard1&#47;1_rss.png' style='border: none' /></a></noscript><object class='tableauViz'  style='display:none;'><param name='host_url' value='https%3A%2F%2Fpublic.tableau.com%2F' /> <param name='embed_code_version' value='3' /> <param name='site_root' value='' /><param name='name' value='TotalDomesticFlightsintheU_S_in2008&#47;Dashboard1' /><param name='tabs' value='no' /><param name='toolbar' value='yes' /><param name='static_image' value='https:&#47;&#47;public.tableau.com&#47;static&#47;images&#47;To&#47;TotalDomesticFlightsintheU_S_in2008&#47;Dashboard1&#47;1.png' /> <param name='animate_transition' value='yes' /><param name='display_static_image' value='yes' /><param name='display_spinner' value='yes' /><param name='display_overlay' value='yes' /><param name='display_count' value='yes' /></object></div>                <script type='text/javascript'>                    var divElement = document.getElementById('viz1555730357000');                    var vizElement = divElement.getElementsByTagName('object')[0];                    vizElement.style.minWidth='420px';vizElement.style.maxWidth='1650px';vizElement.style.width='100%';vizElement.style.minHeight='587px';vizElement.style.maxHeight='887px';vizElement.style.height=(divElement.offsetWidth*0.75)+'px';                    var scriptElement = document.createElement('script');                    scriptElement.src = 'https://public.tableau.com/javascripts/api/viz_v1.js';                    vizElement.parentNode.insertBefore(scriptElement, vizElement);                </script>

Of the features you investigated, were there any unusual distributions? Did you perform any operations on the data to tidy, adjust, or change the form of the data? If so, why did you do this?

Total Flights by Day of Year

Due to working with such a large data set, I initially used a sample of the data set (10,000 entries) to visualize my data. Doing this, I was unable to see an obvious pattern in the visualization of total flights by day of year. However, when I used the full data set, I was able to group the data into four sections of the year where the number of flights were similar. Using the full data set paints a clearer picture as to how flights are distributed throughout the year.

Bivariate Exploration

Cancellation cf. Month

In [7]:
# average cancellations
df_2008s.Cancelled.mean()
Out[7]:
0.019606181580797428
In [49]:
# average cancellations by month
df_cancelled_month = df_2008s.groupby(['Month'])['Cancelled'].mean()
In [50]:
# Convert to new data set
df_cancelled_month = df_cancelled_month.reset_index()
In [51]:
# convert numbered months to letter months
df_cancelled_month['Month'] = df_cancelled_month['Month'].apply(lambda x: calendar.month_abbr[x])
In [52]:
# plot
df_cancelled_month.plot(kind='bar', x='Month', y='Cancelled', color = 'teal', legend=False, figsize= (15,8))
plt.title("Average Flight Cancellations by Month")
plt.ylabel("Cancellations")
plt.xlabel("Month")
plt.show();