# The Probability An Economy Seat Is An Aisle?

There are two types of people in the world, aisle seaters and window seaters. I am an aisle seater, nothing is worse than limited bathroom access on a long flight. The first thing I do when I get my ticket is check to see if I have a window seat. If not, I immediately head over to the airline counter and try to get one.

Last flight, on Turkish Airlines, I ran into a curious situation. I recieved my boarding pass with my seat number, 18C, but the ticket did not specify if C was an aisle seat or not. Making matters worse, the airline counter was swamped with a few dozen people. So I asked myself: **given only the seat letter, C, what is the probability that it is an aisle seat?**

Later, on the flight, I decided to find out.

## Preliminaries

# Import required modules import pandas as pd import numpy as np # Set plots to display in the iPython notebook %matplotlib inline

## Setup possible seat configurations

I am a pretty frequently flyer on a variety of airlines and aircraft. There are a variety of seating configurations out there, but typically they follow some basic rules:

- No window cluster of seats has more than three seats.
- On small slights with three seats, the single seat is on the left side.
- No flight has more than nine rows.

Based on these rules, here are the "typical" seating configurations from aircraft with between two and nine seats per row. A '1' codifies that a seat is an aisle seat, a '0' codifies that it is a non-aisle seat (i.e. window or middle), and 'np.nan' denotes that the aircraft has less than nine seats (this is so all the list lengths are the same).

# An aircraft with two seats per row rows2 = [1,1, np.nan, np.nan, np.nan, np.nan, np.nan, np.nan, np.nan] # An aircraft with three seats per row rows3 = [1,1,0, np.nan, np.nan, np.nan, np.nan, np.nan, np.nan,] # An aircraft with four seats per row rows4 = [0,1,1,0, np.nan, np.nan, np.nan, np.nan, np.nan] # An aircraft with five seats per row rows5 = [0,1,1,0,0, np.nan, np.nan,np.nan, np.nan] # An aircraft with six seats per row rows6 = [0,1,1,0,1,0, np.nan, np.nan, np.nan] # An aircraft with seven seats per row rows7 = [0,1,1,0,1,1,0, np.nan, np.nan] # An aircraft with eight seats per row rows8 = [0,0,1,1,1,1,0,0, np.nan] # An aircraft with nine seats per row rows9 = [0,0,1,1,0,1,1,0,0]

For example, in an aircraft with five seats per row, `rows5`

, the seating arrangement would be:

- window
- aisle
- aisle
- middle
- window
- no seat
- no seat
- no seat
- no seat

Next, I'm take advantage of pandas row summation options, but to do this I need to wrangle the data into a pandas dataframe. Essentially I am using the pandas dataframe as a matrix.

# Create a list variable of all possible aircraft configurations seating_map = [rows2, rows3, rows4, rows5, rows6, rows7, rows8, rows9]

# Create a dataframe from the seating_map variable df = pd.DataFrame(seating_map, columns=['A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I'], index=['rows2', 'rows3', 'rows4', 'rows5', 'rows6', 'rows7', 'rows8', 'rows9'])

Here is all the data we need to construct our probabilities. The columns represent individual seat letters (A, B, etc.) while the rows represent the number of seats-per-row in the aircraft.

# View the dataframe df

A | B | C | D | E | F | G | H | I | |
---|---|---|---|---|---|---|---|---|---|

rows2 | 1 | 1 | NaN | NaN | NaN | NaN | NaN | NaN | NaN |

rows3 | 1 | 1 | 0 | NaN | NaN | NaN | NaN | NaN | NaN |

rows4 | 0 | 1 | 1 | 0 | NaN | NaN | NaN | NaN | NaN |

rows5 | 0 | 1 | 1 | 0 | 0 | NaN | NaN | NaN | NaN |

rows6 | 0 | 1 | 1 | 0 | 1 | 0 | NaN | NaN | NaN |

rows7 | 0 | 1 | 1 | 0 | 1 | 1 | 0 | NaN | NaN |

rows8 | 0 | 0 | 1 | 1 | 1 | 1 | 0 | 0 | NaN |

rows9 | 0 | 0 | 1 | 1 | 0 | 1 | 1 | 0 | 0 |

## Calculate aisle probability

Because each aircraft seats-per-row configuration (i.e. row) is binary (1 if aisle, 0 if non-aisle), the probability that a seat is an aisle is simply the mean value of each seat letter (i.e. column).

# Create a list wherein each element is the mean value of a column aisle_probability = [df['A'].mean(), df['B'].mean(), df['C'].mean(), df['D'].mean(), df['E'].mean(), df['F'].mean(), df['G'].mean(), df['H'].mean(), df['I'].mean()]

# Display the variable aisle_probability

[0.25, 0.75, 0.8571428571428571, 0.33333333333333331, 0.59999999999999998, 0.75, 0.33333333333333331, 0.0, 0.0]

So there you have it, the probability that each seat letter is an aisle. However, we can make the presentation a little more intituative.

## Visualize seat letter probabilities

The most obvious visualization to convey the probabilities would be seat letters on the x-axis and probabilities on the y-axis. Panda's plot function makes that easy.

# Create a list of strings to use as the x-axis labels seats = ['Seat A', 'Seat B', 'Seat C', 'Seat D', 'Seat E', 'Seat F', 'Seat G', 'Seat H', 'Seat I']

# Plot the probabilities, using 'seats' as the index as a bar chart pd.Series(aisle_probability, index=seats).plot(kind='bar', # set y to range between 0 and 1 ylim=[0,1], # set the figure size figsize=[10,6], # set the figure title title='Probabilty of being an Aisle Seat in Economy Class')

<matplotlib.axes._subplots.AxesSubplot at 0x1078300f0>

So there we have it! If given a boarding pass with seat C you have a 86% probability of being in an aisle seat!

I hope this was helpful!