{
"cells": [
{
"cell_type": "code",
"execution_count": 1,
"metadata": {
"tags": [
"remove_input"
]
},
"outputs": [],
"source": [
"path_data = '../../../../data/'\n",
"\n",
"import numpy as np\n",
"import pandas as pd\n",
"\n",
"%matplotlib inline\n",
"import matplotlib.pyplot as plt\n",
"plt.style.use('fivethirtyeight')\n",
"\n",
"import warnings\n",
"warnings.filterwarnings('ignore')"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### Variability ###\n",
"The mean tells us where a histogram balances. But in almost every histogram we have seen, the values spread out on both sides of the mean. How far from the mean can they be? To answer this question, we will develop a measure of **variability about the mean**.\n",
"\n",
"We will start by describing how to calculate the measure. Then we will see why it is a good measure to calcualte."
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### The Rough Size of Deviations from Average ###\n",
"For simplicity, we will begin our calcuations in the context of a simple array `any_numbers` consisting of just four values. As you will see, our method will extend easily to any other array of values."
]
},
{
"cell_type": "code",
"execution_count": 2,
"metadata": {},
"outputs": [],
"source": [
"any_numbers = np.array([1, 2, 2, 10])"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"The goal is to measure roughly how far off the numbers are from their average. To do this, we first need the average: "
]
},
{
"cell_type": "code",
"execution_count": 3,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"3.75"
]
},
"execution_count": 3,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"# Step 1. The average.\n",
"\n",
"mean = np.mean(any_numbers)\n",
"mean"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Next, let's find out how far each value is from the mean. These are called the *deviations from the average*. A \"deviation from average\" is just a value minus the average. The table `calculation_steps` displays the results."
]
},
{
"cell_type": "code",
"execution_count": 4,
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"
\n",
"\n",
"
\n",
" \n",
"
\n",
"
\n",
"
Value
\n",
"
Deviation from Average
\n",
"
\n",
" \n",
" \n",
"
\n",
"
0
\n",
"
1
\n",
"
-2.75
\n",
"
\n",
"
\n",
"
1
\n",
"
2
\n",
"
-1.75
\n",
"
\n",
"
\n",
"
2
\n",
"
2
\n",
"
-1.75
\n",
"
\n",
"
\n",
"
3
\n",
"
10
\n",
"
6.25
\n",
"
\n",
" \n",
"
\n",
"
"
],
"text/plain": [
" Value Deviation from Average\n",
"0 1 -2.75\n",
"1 2 -1.75\n",
"2 2 -1.75\n",
"3 10 6.25"
]
},
"execution_count": 4,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"# Step 2. The deviations from average.\n",
"\n",
"deviations = any_numbers - mean\n",
"calculation_steps = pd.DataFrame(\n",
" {'Value':any_numbers,\n",
" 'Deviation from Average':deviations}\n",
" )\n",
"calculation_steps"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Some of the deviations are negative; those correspond to values that are below average. Positive deviations correspond to above-average values.\n",
"\n",
"To calculate roughly how big the deviations are, it is natural to compute the mean of the deviations. But something interesting happens when all the deviations are added together:"
]
},
{
"cell_type": "code",
"execution_count": 5,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"0.0"
]
},
"execution_count": 5,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"np.sum(deviations)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"The positive deviations exactly cancel out the negative ones. This is true of all lists of numbers, no matter what the histogram of the list looks like: **the sum of the deviations from average is zero.** \n",
"\n",
"Since the sum of the deviations is 0, the mean of the deviations will be 0 as well:"
]
},
{
"cell_type": "code",
"execution_count": 6,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"0.0"
]
},
"execution_count": 6,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"np.mean(deviations)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Because of this, the mean of the deviations is not a useful measure of the size of the deviations. What we really want to know is roughly how big the deviations are, regardless of whether they are positive or negative. So we need a way to eliminate the signs of the deviations.\n",
"\n",
"There are two time-honored ways of losing signs: the **absolute value**, and the **square**. It turns out that taking the square constructs a measure with extremely powerful properties, some of which we will study in this course.\n",
"\n",
"So let's eliminate the signs by squaring all the deviations. Then we will take the mean of the squares:"
]
},
{
"cell_type": "code",
"execution_count": 7,
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"
\n",
"\n",
"
\n",
" \n",
"
\n",
"
\n",
"
Value
\n",
"
Deviation from Average
\n",
"
Squared Deviations from Average
\n",
"
\n",
" \n",
" \n",
"
\n",
"
0
\n",
"
1
\n",
"
-2.75
\n",
"
7.5625
\n",
"
\n",
"
\n",
"
1
\n",
"
2
\n",
"
-1.75
\n",
"
3.0625
\n",
"
\n",
"
\n",
"
2
\n",
"
2
\n",
"
-1.75
\n",
"
3.0625
\n",
"
\n",
"
\n",
"
3
\n",
"
10
\n",
"
6.25
\n",
"
39.0625
\n",
"
\n",
" \n",
"
\n",
"
"
],
"text/plain": [
" Value Deviation from Average Squared Deviations from Average\n",
"0 1 -2.75 7.5625\n",
"1 2 -1.75 3.0625\n",
"2 2 -1.75 3.0625\n",
"3 10 6.25 39.0625"
]
},
"execution_count": 7,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"# Step 3. The squared deviations from average\n",
"\n",
"squared_deviations = deviations ** 2\n",
"calculation_steps['Squared Deviations from Average'] = squared_deviations\n",
"calculation_steps"
]
},
{
"cell_type": "code",
"execution_count": 8,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"13.1875"
]
},
"execution_count": 8,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"# Step 4. Variance = the mean squared deviation from average\n",
"\n",
"variance = np.mean(squared_deviations)\n",
"variance"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"**Variance:** The mean squared deviation calculated above is called the *variance* of the values. \n",
"\n",
"While the variance does give us an idea of spread, it is not on the same scale as the original variable as its units are the square of the original. This makes interpretation very difficult. \n",
"\n",
"So we return to the original scale by taking the positive square root of the variance:"
]
},
{
"cell_type": "code",
"execution_count": 9,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"3.6314597615834874"
]
},
"execution_count": 9,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"# Step 5.\n",
"# Standard Deviation: root mean squared deviation from average\n",
"# Steps of calculation: 5 4 3 2 1\n",
"\n",
"sd = variance ** 0.5\n",
"sd"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### Standard Deviation ###\n",
"\n",
"The quantity that we have just computed is called the *standard deviation* of the list, and is abbreviated as SD. It measures roughly how far the numbers on the list are from their average.\n",
"\n",
"**Definition.** The SD of a list is defined as the *root mean square of deviations from average*. That's a mouthful. But read it from right to left and you have the sequence of steps in the calculation.\n",
"\n",
"**Computation.** The five steps described above result in the SD. You can also use the function ``np.std`` to compute the SD of values in an array:"
]
},
{
"cell_type": "code",
"execution_count": 10,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"3.6314597615834874"
]
},
"execution_count": 10,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"np.std(any_numbers)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### Working with the SD ###\n",
"\n",
"To see what we can learn from the SD, let's move to a more interesting dataset than `any_numbers`. The table `nba13` contains data on the players in the National Basketball Association (NBA) in 2013. For each player, the table records the position at which the player usually played, his height in inches, his weight in pounds, and his age in years."
]
},
{
"cell_type": "code",
"execution_count": 11,
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"
\n",
"\n",
"
\n",
" \n",
"
\n",
"
\n",
"
Name
\n",
"
Position
\n",
"
Height
\n",
"
Weight
\n",
"
Age in 2013
\n",
"
\n",
" \n",
" \n",
"
\n",
"
0
\n",
"
DeQuan Jones
\n",
"
Guard
\n",
"
80
\n",
"
221
\n",
"
23
\n",
"
\n",
"
\n",
"
1
\n",
"
Darius Miller
\n",
"
Guard
\n",
"
80
\n",
"
235
\n",
"
23
\n",
"
\n",
"
\n",
"
2
\n",
"
Trevor Ariza
\n",
"
Guard
\n",
"
80
\n",
"
210
\n",
"
28
\n",
"
\n",
"
\n",
"
3
\n",
"
James Jones
\n",
"
Guard
\n",
"
80
\n",
"
215
\n",
"
32
\n",
"
\n",
"
\n",
"
4
\n",
"
Wesley Johnson
\n",
"
Guard
\n",
"
79
\n",
"
215
\n",
"
26
\n",
"
\n",
"
\n",
"
...
\n",
"
...
\n",
"
...
\n",
"
...
\n",
"
...
\n",
"
...
\n",
"
\n",
"
\n",
"
500
\n",
"
Joel Anthony
\n",
"
Center
\n",
"
81
\n",
"
245
\n",
"
31
\n",
"
\n",
"
\n",
"
501
\n",
"
Bismack Biyombo
\n",
"
Center
\n",
"
81
\n",
"
229
\n",
"
21
\n",
"
\n",
"
\n",
"
502
\n",
"
Luis Scola
\n",
"
Center
\n",
"
81
\n",
"
245
\n",
"
33
\n",
"
\n",
"
\n",
"
503
\n",
"
Lavoy Allen
\n",
"
Center
\n",
"
81
\n",
"
225
\n",
"
24
\n",
"
\n",
"
\n",
"
504
\n",
"
Boris Diaw
\n",
"
Center
\n",
"
80
\n",
"
235
\n",
"
31
\n",
"
\n",
" \n",
"
\n",
"
505 rows × 5 columns
\n",
"
"
],
"text/plain": [
" Name Position Height Weight Age in 2013\n",
"0 DeQuan Jones Guard 80 221 23\n",
"1 Darius Miller Guard 80 235 23\n",
"2 Trevor Ariza Guard 80 210 28\n",
"3 James Jones Guard 80 215 32\n",
"4 Wesley Johnson Guard 79 215 26\n",
".. ... ... ... ... ...\n",
"500 Joel Anthony Center 81 245 31\n",
"501 Bismack Biyombo Center 81 229 21\n",
"502 Luis Scola Center 81 245 33\n",
"503 Lavoy Allen Center 81 225 24\n",
"504 Boris Diaw Center 80 235 31\n",
"\n",
"[505 rows x 5 columns]"
]
},
"execution_count": 11,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"nba13 = pd.read_csv(path_data + 'nba2013.csv')\n",
"nba13"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Here is a histogram of the players' heights."
]
},
{
"cell_type": "code",
"execution_count": 12,
"metadata": {},
"outputs": [
{
"data": {
"image/png": "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\n",
"text/plain": [
"
"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"unit = ''\n",
"\n",
"fig, ax = plt.subplots(figsize=(8,5))\n",
"\n",
"ax.hist(nba13['Height'], bins=np.arange(68, 88, 1), density=True, color='blue', alpha=0.8, ec='white', zorder=5)\n",
"\n",
"y_vals = ax.get_yticks()\n",
"\n",
"y_label = 'Percent per ' + (unit if unit else 'unit')\n",
"\n",
"x_label = 'Height'\n",
"\n",
"ax.set_yticklabels(['{:g}'.format(x * 100) for x in y_vals])\n",
"\n",
"plt.ylabel(y_label)\n",
"\n",
"plt.xlabel(x_label)\n",
"\n",
"plt.title('');\n",
"\n",
"plt.show()"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"It is no surprise that NBA players are tall! Their average height is just over 79 inches (6'7\"), about 10 inches taller than the average height of men in the United States."
]
},
{
"cell_type": "code",
"execution_count": 13,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"79.06534653465347"
]
},
"execution_count": 13,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"mean_height = np.mean(nba13['Height'])\n",
"mean_height"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"About how far off are the players' heights from the average? This is measured by the SD of the heights, which is about 3.45 inches."
]
},
{
"cell_type": "code",
"execution_count": 14,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"3.450597183027555"
]
},
"execution_count": 14,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"sd_height = np.std(nba13['Height'])\n",
"sd_height"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"The towering center Hasheem Thabeet of the Oklahoma City Thunder was the tallest player at a height of 87 inches."
]
},
{
"cell_type": "code",
"execution_count": 15,
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"
\n",
"\n",
"
\n",
" \n",
"
\n",
"
\n",
"
Name
\n",
"
Position
\n",
"
Height
\n",
"
Weight
\n",
"
Age in 2013
\n",
"
\n",
" \n",
" \n",
"
\n",
"
413
\n",
"
Hasheem Thabeet
\n",
"
Center
\n",
"
87
\n",
"
263
\n",
"
26
\n",
"
\n",
"
\n",
"
414
\n",
"
Roy Hibbert
\n",
"
Center
\n",
"
86
\n",
"
278
\n",
"
26
\n",
"
\n",
"
\n",
"
415
\n",
"
Alex Len
\n",
"
Center
\n",
"
85
\n",
"
255
\n",
"
20
\n",
"
\n",
" \n",
"
\n",
"
"
],
"text/plain": [
" Name Position Height Weight Age in 2013\n",
"413 Hasheem Thabeet Center 87 263 26\n",
"414 Roy Hibbert Center 86 278 26\n",
"415 Alex Len Center 85 255 20"
]
},
"execution_count": 15,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"nba13.sort_values(by=['Height'], ascending=False).head(3)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Thabeet was about 8 inches above the average height."
]
},
{
"cell_type": "code",
"execution_count": 16,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"7.934653465346528"
]
},
"execution_count": 16,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"87 - mean_height"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"That's a deviation from average, and it is about 2.3 times the standard deviation:"
]
},
{
"cell_type": "code",
"execution_count": 17,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"2.299501519439792"
]
},
"execution_count": 17,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"(87 - mean_height)/sd_height"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"In other words, the height of the tallest player was about 2.3 SDs above average.\n",
"\n",
"At 69 inches tall, Isaiah Thomas was one of the two shortest NBA players in 2013. His height was about 2.9 SDs below average."
]
},
{
"cell_type": "code",
"execution_count": 18,
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"
\n",
"\n",
"
\n",
" \n",
"
\n",
"
\n",
"
Name
\n",
"
Position
\n",
"
Height
\n",
"
Weight
\n",
"
Age in 2013
\n",
"
\n",
" \n",
" \n",
"
\n",
"
201
\n",
"
Nate Robinson
\n",
"
Guard
\n",
"
69
\n",
"
180
\n",
"
29
\n",
"
\n",
"
\n",
"
200
\n",
"
Isaiah Thomas
\n",
"
Guard
\n",
"
69
\n",
"
185
\n",
"
24
\n",
"
\n",
"
\n",
"
199
\n",
"
Phil Pressey
\n",
"
Guard
\n",
"
71
\n",
"
175
\n",
"
22
\n",
"
\n",
" \n",
"
\n",
"
"
],
"text/plain": [
" Name Position Height Weight Age in 2013\n",
"201 Nate Robinson Guard 69 180 29\n",
"200 Isaiah Thomas Guard 69 185 24\n",
"199 Phil Pressey Guard 71 175 22"
]
},
"execution_count": 18,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"nba13.sort_values(by=['Height']).head(3)"
]
},
{
"cell_type": "code",
"execution_count": 19,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"-2.916986828877584"
]
},
"execution_count": 19,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"(69 - mean_height)/sd_height"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"What we have observed is that the tallest and shortest players were both just a few SDs away from the average height. This is an example of why the SD is a useful measure of spread. No matter what the shape of the histogram, the average and the SD together tell you a lot about where the histogram is situated on the number line."
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### First main reason for measuring spread by the SD\n",
"\n",
"**Informal statement.** In all numerical data sets, the bulk of the entries are within the range \"average $\\pm$ a few SDs\".\n",
"\n",
"For now, resist the desire to know exactly what fuzzy words like \"bulk\" and \"few\" mean. We wil make them precise later in this section. Let's just examine the statement in the context of some more examples."
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"We have already seen that *all* of the heights of the NBA players were in the range \"average $\\pm$ 3 SDs\". \n",
"\n",
"What about the ages? Here is a histogram of the distribution, along with the mean and SD of the ages."
]
},
{
"cell_type": "code",
"execution_count": 20,
"metadata": {},
"outputs": [
{
"data": {
"image/png": "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7NDo0aO1a9cu2Ww22Ww27dq1S3fddZd27NihBx980KfFDRo0SFu2bNHmzZudP127dlVSUpI2b95s+KwMAAD4czF8njQpKUk//vijrFarPvroI0mSxWKRw+GQxWLR5MmTNXLkSJ8WFxkZWe6uo/r166tJkybq2LGjT48FAADMo1oXelNSUjRixAi9++67ys3NlcPhUJs2bTR48GDFxcX5qUQAAABXhgJMSUmJ7rzzTo0cOVJ33323HnnkEX/X5dZ7770XsGMDAIDgYGgOTEREhHbv3q2yMs9vjQQAAPAVw5N4r732Wm3ZssWftQAAABhiOMA8//zz2rlzp55++mnl5uZWeDs1AABATTA8ibd79+5yOBxatGiRFi1apDp16qhevXou21gsFh05csTnRQIAAPyR4QBz++23y2Kx+LMWAAAAQwwHmCVLlvizDgAAAMMMz4EBAAAIFtUKMAcPHtSjjz6qLl26KDY2Vp999pkk6eTJk3r88ce1a9cuf9QIAADgwvAlpO+++0633nqr7Ha7rrrqKh08eND5XJioqCht27ZNNptNCxcu9FuxAAAAUjUCzDPPPKNGjRrp448/VkhIiOLj413W9+vXT2+//bav6wMAACjH8CWkLVu2aOzYsbrkkksqvBspNjZWR48e9WlxAAAAFTF8Bqa0tFQNGjRwu/706dMKCQnxSVEAai+LJUTbt4d73N5ur9Y7agGYlOHf9I4dO2rz5s26//77y61zOBx699131aVLF1/WBqAWOnFCslo9/5+hlBSHD6sBEKwMX0IaP3683nnnHc2ePVunTp2SJNntdn3//fe677779NVXXwX0LdUAAKD2MHwGJikpSXl5eZo5c6ZmzZrlXCZJISEhmjFjhvr27eufKgEAAP6gWheLJ06cqBEjRmjt2rXKycmR3W5XmzZtNGTIELVu3dpfNQIAALioMsDYbDa9//77ys3N1X/8x3+of//+Sk5OronaAAAAKlRpgMnPz9fAgQP1448/yuH4fWJcgwYNtGLFCvXu3btGCgQAALhQpZN4Z8yYodzcXCUnJ2vFihWyWq0KCwvTE088UVP1AQAAlFPpGZgNGzZo9OjRmjFjhnPZJZdcorFjx+rw4cNq0aKF3wsEAAC4UKVnYPLz89WzZ0+XZb169ZLD4dChQ4f8WhgAAIA7lQaYsrIyhYe7PhHz/OezZ8/6ryoAAIBKVHkXUm5urnbs2OH8XFRUJEnKzs5Ww4YNy23frVs3H5YHAABQXpUBxmq1ymq1llt+4UReh8Mhi8XifEovAACAv1QaYBYtWlRTdQAAABhWaYC56667aqoOAAAAwwy/zBEAACBYEGAAAIDpEGAAAIDpEGAAAIDpEGAAAIDpEGAAAIDpEGAAAIDpVPkkXgCAMRZLiLZvD696QzdKSkJ8WA3w50aAAQAfOXFCslo9DyGpqT4sBviT4xISAAAwHQIMAAAwHQIMAAAwHQIMAAAwHQIMAAAwHQIMAAAwHQIMAAAwHQIMAAAwHQIMAAAwnaAOMHPnztVNN92k2NhYtW3bViNHjtS+ffsCXRYAAAiwoA4wn332me6//36tX79ea9euVd26dTVs2DCdPn060KUBAIAACup3IWVmZrp8Xrp0qVq1aqWtW7dqwIABAaoKAAAEWlCfgblQcXGx7Ha7IiMjA10KAAAIoKA+A3OhKVOmqHPnzurRo4fbbbKzs/1ybH/t988vTjabzaOWv/0WIputzOMjm7t9iMf95v2xvWsf6H4PZN8F+rsXFZUoOzvX4/b8nfMcfee5ivouISGhynamCTBPPvmktm7dqg8//FAhIe5fV2/kS1dXdna2X/ZbG+Tl/aawsDCP2tarJ4WFeT5Ezd2+1ON+8/7Y3rUPdL8Hsu8C/d0bN67r8d8q/s55jr7znDd9Z4oAk5qaqszMTL377ruKi4sLdDkAACDAgj7ATJ48WZmZmVq3bp3atWsX6HIAAEAQCOoAk5KSohUrVuiNN95QZGSk8vPzJUkNGjRQw4YNA1wdAAAIlKC+C2nZsmX65ZdfNHToUF122WXOnwULFgS6NAAAEEBBfQamoKAg0CUAAIAgFNRnYAAAACpCgAEAAKZDgAEAAKZDgAEAAKZDgAEAAKYT1HchAQBqhs0Wo+3bwz1u36KFXTEx53xYEVA5AgwAQMePh2naNPfvmatKWpoUE+PDgoAqcAkJAACYDgEGAACYDgEGAACYDgEGAACYDgEGAACYDgEGAACYDgEGAACYDgEGAACYDgEGAACYDk/iBQB4zWIJ4VUEqFEEGACA106ckKxWXkWAmsMlJAAAYDoEGAAAYDoEGAAAYDrMgUGljh4N1eHDnudcu50hBtQUbybS8rsKs2HEolKHD9dRSornE/NSUhw+rAZAZbyZSMvvKsyGS0gAAMB0CDAAAMB0CDAAAMB0CDAAAMB0mMQLAAg4XkWA6iLAAAACjlcRoLq4hAQAAEyHAAMAAEyHAAMAAEyHOTAAgFrN21emhIcz+SYQCDAAgFrN21emTJ0a5sNqYBSXkAAAgOkQYAAAgOkQYAAAgOkwBwYAYHrePMm3pMTz+S8IHAIMAMD0vHmSb2qqj4tBjeASEgAAMB0CDAAAMB0CDAAAMB0CDAAAMB0m8Rpgs8V4PLtdklq0sCsm5pwPKzLO20dkMzsfACoXHh6h7ds9/+c0kP9GmJkpAsyyZcs0f/585efnq3379rJarbrmmmtq7PjHj4dp2jTP/yFPS5NiAvSqDG8fkc3sfACo3KlTIUpLM+e/EWYW9JeQMjMzNWXKFD3++OP69NNP1aNHD91xxx3Ky8sLdGkAACBAgj7ALFq0SHfddZfuueceXXbZZXrhhRcUHR2tV199NdClAQCAAAnqAHPu3Dnt2rVLN998s8vym2++WV988UWN1dG4caMaO9afTb16prhKGXToN8/Rd56h3zxH33kuISHB47aWgoIChw9r8amjR4+qQ4cOeu+999S7d2/n8ueff14rV67U9u3bA1gdAAAIlKA+A3OexWJx+exwOMotAwAAtUdQB5ioqCiFhITo+PHjLstPnDihpk2bBqgqAAAQaEEdYEJDQ9WlSxdt3LjRZfnGjRvVs2fPAFUFAAACLehnHj388MN68MEH1a1bN/Xs2VOvvvqqjh07pnvvvTfQpQEAgAAJ6jMwkjR8+HBZrVa98MILuu6667R161ZlZGSoVatWPj1OVlaWRo0apQ4dOigyMlLLly93WT9+/HhFRka6/PTp08enNZjR3LlzddNNNyk2NlZt27bVyJEjtW/fPpdtHA6HrFar2rdvr2bNmmnQoEH69ttvA1RxcDDSb4y5iv3P//yPrrnmGsXGxio2NlZ9+/bV+vXrnesZb+5V1XeMOWPmzJmjyMhITZo0ybmMcVe1ivrNmzEX9AFGksaOHas9e/bo+PHj2rRpk8sdSb5y5swZdezYUbNmzVJERESF29x444367rvvnD8rV670eR1m89lnn+n+++/X+vXrtXbtWtWtW1fDhg3T6dOnndvMmzdPixYt0vPPP68NGzaoadOmuv322/XLL78EsPLAMtJvEmOuIs2bN9dzzz2nTZs2aePGjbr++us1ZswY7d27VxLjrTJV9Z3EmKvKtm3blJ6ersTERJfljLvKues3yfMxF/SXkGpKv3791K9fP0lScnJyhduEhYUpOjq6JssKepmZmS6fly5dqlatWmnr1q0aMGCAHA6HlixZookTJ2ro0KGSpCVLlighIUGrVq2qtZcCq+q38xhz5Q0aNMjl89NPP61XXnlF27ZtU2JiIuOtEpX1XadOnSQx5ipTWFiocePGacGCBZo9e7ZzOX/nKueu387zdMyZ4gxMsPj8888VHx+vbt266dFHH9XPP/8c6JKCTnFxsex2uyIjIyVJP/30k/Lz810eRhgREaFrrrmmRh9GGOwu7LfzGHOVKysr0+rVq3XmzBn16NGD8VYNF/bdeYw5984HlBtuuMFlOeOucu767TxPxxxnYAzq06ePBg8erNatW+vgwYOaMWOGhgwZok8++URhYWGBLi9oTJkyRZ07d3b+QczPz5ekcre9N23aVEePHq3x+oLVhf0mMeYq880336hfv346e/asGjRooDfeeEOJiYnOfywYb+656zuJMVeZ9PR05eTkaOnSpeXW8XfOvcr6TfJuzBFgDEpKSnL+d2Jiorp06aLOnTtr/fr1GjJkSAArCx5PPvmktm7dqg8//FAhIa5vZuVhhO656zfGnHsJCQnavHmzCgsLtXbtWo0fP17r1q1zrme8ueeu7zp27MiYcyM7O1vTpk3TBx98oNDQULfbMe5cGek3b8YcAcZDMTExat68uXJycgJdSlBITU1VZmam3n33XcXFxTmXn7+uefz4cbVs2dK5nIcR/s5dv1WEMff/QkNDdemll0qSunbtqp07d2rx4sVKSUmRxHirjLu+W7hwYbltGXO/+/LLL3Xy5EldffXVzmVlZWXasmWLXn31VW3dulUS4+5CVfXbkSNHyp1lqc6YYw6Mh06ePKmjR48y2U3S5MmTtWrVKq1du1bt2rVzWde6dWtFR0e7PIzw7Nmz+vzzz2v9wwgr67eKMObcs9vtOnfuHOPNA+f7riKMud8NGjRIW7Zs0ebNm50/Xbt2VVJSkjZv3qz4+HjGXQWq6reKzspUZ8xxBub/FBcXOxOf3W7XoUOH9PXXX6tJkyZq0qSJZs2apSFDhig6OloHDx7UtGnT1LRpU912220BrjywUlJStGLFCr3xxhuKjIx0Xgtu0KCBGjZsKIvFovHjx2vOnDlKSEhQfHy80tLS1KBBA40YMSLA1QdOVf1WXFzMmHPj2WefVb9+/dSiRQsVFxdr1apV+uyzz5SRkcF4q0JlfceYc+/880n+qH79+mrSpIk6duwoSYy7ClTVb96OOQLM//nqq680ePBg52er1Sqr1arRo0dr7ty52rdvn9566y0VFhYqOjpa1113nf75z3+qUaNGAaw68JYtWyZJzlsHz5s8ebJSU1MlSX/9619VUlKiSZMmqaCgQN26dVNmZmat7ruq+i0kJIQx50Z+fr4eeOABHT9+XI0bN1ZiYqJWrVqlW265RRLjrTKV9V1JSQljzguMu+rz9u+cpaCgwFEDdQIAAPgMc2AAAIDpEGAAAIDpEGAAAIDpEGAAAIDpEGAAAIDpEGAAAIDpEGAABJTVai33sCsAqAoBBqiF3nzzTUVGRqpr166BLsXn7Ha73nzzTY0ZM0adOnVSTEyMunfvrqeeekoFBQUVttmwYYP69OmjZs2aqV27dnriiSdUXFxcbrs5c+borrvuUvv27RUZGanHHnuswv1t3LhRI0eOVGJioqKjo9WuXTslJSUpKyvLl18VqNV4kB1QCw0bNkw5OTk6ePCg/v3vf6tHjx4Bq6W0tFSlpaUKDw/3yf6Ki4vVsmVLde/eXf369VN0dLT27t2r9PR0tWzZUp988onLUz43bdqk4cOH66qrrtKoUaN06NAhLVq0SD169NA777zj8jbhyMhINW3aVFdeeaXWr1+ve++9Vy+++GK5Gl566SVlZWWpa9euuvjii1VQUKCMjAzt27dPy5cv14ABA3zyXYHajAAD1DLHjh1Tx44d9dJLL2n69Onq37+/0tLSAl2Wz5w7d05fffVVuZfoZWZm6r777tOsWbP00EMPOZf37t1bpaWlLi+XW758uR5++GG98cYbLu9kyc3Ndb41PDIy0m2Aqcivv/6qrl27qn379nrnnXe8/JYAuIQE1DIrV65UeHi4Bg4cqKSkJGVmZuq3334rt93Zs2f15JNPKj4+Xs2bN9ftt9+u7Oxsde7cWePHj3fZtqioSE899ZQ6d+6sSy65RJ06ddKzzz4rm81WZT0VzYHp3LmzkpKStGPHDt16661q1qyZEhMTtXjx4ir3FxoaWuEbgAcNGiSLxaLvvvvOuez777/XN998o3vuucflzbgjR47URRddpDVr1rjs43x48cT5l9gVFRV5vA8A/48AA9QyK1asUP/+/dWwYUONGDFCp06d0scff1xuuwkTJmjx4sW6/vrrNW3aNLVo0ULDhg3Tr7/+6rJdSUmJbrvtNr3++usaPny4Zs+erf79+2vhwoW69957Pa7zp59+0qhRo9SzZ0/NnDlTcXFxevLJJ7VhwwaP9pefny+Hw6GoqCjnst27d0uSunXr5rJt3bp11aVLF+d6TxUWFurkyZPav3+/nnrqKe3fv18333yzV/sE8DveRg3UIt9++6327t2ryZMnS5I6deqkDh06KCMjw2Vexu7du7Vq1Srdd999mjt3rnP5jBkzyl1uWrx4sbKzs/XJJ5/osssucy7v0KGDUlJStGXLFl1zzTXVrvXAgQN6++23deONN0qS7r77bnXq1Enp6ekehYA5c+bIYrFo2LBhzmXHjh2TJEVHR5fbvlmzZtqxY0e1j/NHI0eO1NatWyVJ4eHhGjt2rLPvAXiHMzBALbJixQo1btxY/fr1cy5LSkrSBx984HJp4/wZmQceeMCl/YWXjiRpzZo16tmzpy6++GKdPHnS+XM+eHz66ace1dq2bVvnPiQpLCxMV111lXJzc6u9r9WrVys9PV3Jycnq1KmTc3lJSYlz3xcKDw93rveU1WpVZmam5s+fr8svv1xnzpwxdFkNQNU4AwPUEg6HQ6tWrVLv3r2dZx4kqXv37jp79qzWrl2ru+++W5KUl5cni8WiSy+91GUfUVFR5ear/PDDD9q7d6/atm1b4XFPnDjhUb2xsbHllkVGRuqbb76p1n4+/fRTJScnq2/fvnruuedc1kVEREhShaHi7NmzzvWe+uNt6nfeeaeuu+46Pfzww3rttde82i8AAgxQa2zevFmHDh3SoUOH9MEHH5Rbn5GR4QwwlXE4XG9ctNvtuv766/W3v/2twu2bN2/uUb0hISGGjl+ZHTt2aMyYMerSpYvS09NVt67rn7zzl47y8/PLTdA9duyYmjVrVr2iKxEeHq4BAwZowYIFKikp8TocAbUdAQaoJTIyMtSkSRMtWLCg3LpNmzbplVde0ZEjR9S8eXPFxsbK4XAoJydH7du3d2538uRJFRYWurRt06aNiouLXS73BINvvvlGI0aMUGxsrFasWKH69euX26ZLly6Sfg86f7xzqbS0VLt379Ytt9zi05pKSkrkcDhUXFxMgAG8xBwYoBY4f4mob9++uu2228r9PPzww7Lb7Vq1apUkqU+fPpKkl19+2WU/S5YsKbfv4cOHa+fOnXr//ffLrSspKanwibb+lpOTo9tvv10XXXSRMjMz3b6qoF27durYsaPS09N17tw55/IVK1aooKBAQ4cO9ej4P//8c7llp0+f1nvvvaeWLVuqadOmHu0XwP/jDAxQC5yfpDtw4MAK18fFxalDhw5asWKFHn30UV1xxRUaPny4Xn31VRUUFKh379766quv9MknnygqKsrl6bSPPPKI/v3vf+svf/mL7rzzTnXr1k02m00HDhzQmjVrtHLlSnXv3r2mvqp++eUXDR06VD///LOmTJmiTZs2uaxv06aNy5OHZ86cqaSkJA0ZMsT5JN6FCxfq2muv1eDBg13avvXWW8rLy3N+3r17t1544QVJv99x1KpVK0lS//791alTJ3Xt2lVRUVE6ePCg3njjDR0/flz//Oc//fXVgVqFAAPUAitWrFBoaGill0RuvfVWvfjii9q7d686deqkxYsX65JLLtHKlSv14YcfqkePHlqzZo369+/v8tj/iIgIrV27VvPmzVNmZqZWr16tBg0aKC4uTuPHj1dCQkJNfEWnU6dOOUOG1Wott3706NEuAeamm25SRkaG/vu//1tTpkxRo0aN9Je//EVTp051CWqS9Prrr7u8z2jnzp3auXOnJKlXr17OAPNf//VfWrdunRYsWKCioiI1adJE3bt314QJEzy6pRxAebxKAIBhBQUFiouL01NPPaWUlJRAlwOgFmMODIAKVfQMlIULF0qSrr/++pouBwBccAkJQIXmzZunbdu26YYbblBERISysrL09ttvq2/fvgF9ezUASFxCAuDGxo0bNXv2bO3fv1/FxcVq1qyZhg0bptTU1ApvSQaAmkSAAQAApsMcGAAAYDoEGAAAYDoEGAAAYDoEGAAAYDoEGAAAYDoEGAAAYDr/C9OWVrha0YGMAAAAAElFTkSuQmCC\n",
"text/plain": [
"
"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"unit = ''\n",
"\n",
"fig, ax = plt.subplots(figsize=(8,5))\n",
"\n",
"ax.hist(nba13['Age in 2013'], bins=np.arange(15, 45, 1), density=True, color='blue', alpha=0.8, ec='white', zorder=5)\n",
"\n",
"y_vals = ax.get_yticks()\n",
"\n",
"y_label = 'Percent per ' + (unit if unit else 'unit')\n",
"\n",
"x_label = 'Age in 2013'\n",
"\n",
"ax.set_yticklabels(['{:g}'.format(x * 100) for x in y_vals])\n",
"\n",
"plt.ylabel(y_label)\n",
"\n",
"plt.xlabel(x_label)\n",
"\n",
"plt.title('');\n",
"\n",
"plt.show()"
]
},
{
"cell_type": "code",
"execution_count": 21,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"(26.19009900990099, 4.321200441720307)"
]
},
"execution_count": 21,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"ages = nba13['Age in 2013']\n",
"mean_age = np.mean(ages)\n",
"sd_age = np.std(ages)\n",
"mean_age, sd_age"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"The average age was just over 26 years, and the SD was about 4.3 years.\n",
"\n",
"How far off were the ages from the average? Just as we did with the heights, let's look at the two extreme values of the ages.\n",
"\n",
"Juwan Howard was the oldest player, at 40. "
]
},
{
"cell_type": "code",
"execution_count": 22,
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"
\n",
"\n",
"
\n",
" \n",
"
\n",
"
\n",
"
Name
\n",
"
Position
\n",
"
Height
\n",
"
Weight
\n",
"
Age in 2013
\n",
"
\n",
" \n",
" \n",
"
\n",
"
294
\n",
"
Juwan Howard
\n",
"
Forward
\n",
"
81
\n",
"
250
\n",
"
40
\n",
"
\n",
"
\n",
"
172
\n",
"
Derek Fisher
\n",
"
Guard
\n",
"
73
\n",
"
210
\n",
"
39
\n",
"
\n",
"
\n",
"
466
\n",
"
Marcus Camby
\n",
"
Center
\n",
"
83
\n",
"
235
\n",
"
39
\n",
"
\n",
" \n",
"
\n",
"
"
],
"text/plain": [
" Name Position Height Weight Age in 2013\n",
"294 Juwan Howard Forward 81 250 40\n",
"172 Derek Fisher Guard 73 210 39\n",
"466 Marcus Camby Center 83 235 39"
]
},
"execution_count": 22,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"nba13.sort_values(by=['Age in 2013'], ascending=False).head(3)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Howard's age was about 3.2 SDs above average."
]
},
{
"cell_type": "code",
"execution_count": 23,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"3.1958482778922357"
]
},
"execution_count": 23,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"(40 - mean_age)/sd_age"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"The youngest was 15-year-old Jarvis Varnado, who won the NBA Championship that year with the Miami Heat. His age was about 2.6 SDs below average."
]
},
{
"cell_type": "code",
"execution_count": 24,
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"
\n",
"\n",
"
\n",
" \n",
"
\n",
"
\n",
"
Name
\n",
"
Position
\n",
"
Height
\n",
"
Weight
\n",
"
Age in 2013
\n",
"
\n",
" \n",
" \n",
"
\n",
"
293
\n",
"
Jarvis Varnado
\n",
"
Forward
\n",
"
81
\n",
"
230
\n",
"
15
\n",
"
\n",
"
\n",
"
296
\n",
"
Giannis Antetokounmpo
\n",
"
Forward
\n",
"
81
\n",
"
205
\n",
"
18
\n",
"
\n",
"
\n",
"
277
\n",
"
Livio Jean-Charles
\n",
"
Forward
\n",
"
81
\n",
"
217
\n",
"
19
\n",
"
\n",
" \n",
"
\n",
"
"
],
"text/plain": [
" Name Position Height Weight Age in 2013\n",
"293 Jarvis Varnado Forward 81 230 15\n",
"296 Giannis Antetokounmpo Forward 81 205 18\n",
"277 Livio Jean-Charles Forward 81 217 19"
]
},
"execution_count": 24,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"nba13.sort_values(by=['Age in 2013']).head(3)"
]
},
{
"cell_type": "code",
"execution_count": 25,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"-2.589581103867081"
]
},
"execution_count": 25,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"(15 - mean_age)/sd_age"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"What we have observed for the heights and ages is true in great generality. For *all* lists, the bulk of the entries are no more than 2 or 3 SDs away from the average. "
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### Chebychev's Bounds ###\n",
"The Russian mathematician [Pafnuty Chebychev](https://en.wikipedia.org/wiki/Pafnuty_Chebyshev) (1821-1894) proved a result that makes our rough statements precise.\n",
"\n",
"**For all lists, and all numbers $z$, the proportion of entries that are in the range\n",
"\"average $\\pm z$ SDs\" is at least $1 - \\frac{1}{z^2}$.**\n",
"\n",
"It is important to note that the result gives a bound, not an exact value or an approximation.\n",
"\n",
"What makes the result powerful is that it is true for all lists – all distributions, no matter how irregular. \n",
"\n",
"Specifically, it says that for every list:\n",
"\n",
"- the proportion in the range \"average $\\pm$ 2 SDs\" is **at least 1 - 1/4 = 0.75**\n",
"\n",
"- the proportion in the range \"average $\\pm$ 3 SDs\" is **at least 1 - 1/9 $\\approx$ 0.89**\n",
"\n",
"- the proportion in the range \"average $\\pm$ 4.5 SDs\" is **at least 1 - 1/$\\boldsymbol{4.5^2}$ $\\approx$ 0.95**\n",
"\n",
"As we noted above, Chebychev's result gives a lower bound, not an exact answer or an approximation. For example, the percent of entries in the range \"average $\\pm ~2$ SDs\" might be quite a bit larger than 75%. But it cannot be smaller."
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### Standard units\n",
"\n",
"In the calculations above, the quantity $z$ measures *standard units*, the number of standard deviations above average.\n",
"\n",
"Some values of standard units are negative, corresponding to original values that are below average. Other values of standard units are positive. But no matter what the distribution of the list looks like, Chebychev's bounds imply that standard units will typically be in the (-5, 5) range.\n",
"\n",
"To convert a value to standard units, first find how far it is from average, and then compare that deviation with the standard deviation.\n",
"$$\n",
"z ~=~ \\frac{\\mbox{value }-\\mbox{ average}}{\\mbox{SD}}\n",
"$$\n",
"\n",
"As we will see, standard units are frequently used in data analysis. So it is useful to define a function that converts an array of numbers to standard units."
]
},
{
"cell_type": "code",
"execution_count": 26,
"metadata": {},
"outputs": [],
"source": [
"def standard_units(numbers_array):\n",
" \"Convert any array of numbers to standard units.\"\n",
" return (numbers_array - np.mean(numbers_array))/np.std(numbers_array) "
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### Example ###\n",
"As we saw in an earlier section, the table `united` contains a column `Delay` consisting of the departure delay times, in minutes, of over thousands of United Airlines flights in the summer of 2015. We will create a new column called `Delay (Standard Units)` by applying the function `standard_units` to the column of delay times. This allows us to see all the delay times in minutes as well as their corresponding values in standard units. "
]
},
{
"cell_type": "code",
"execution_count": 27,
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"
\n",
"\n",
"
\n",
" \n",
"
\n",
"
\n",
"
Date
\n",
"
Flight Number
\n",
"
Destination
\n",
"
Delay
\n",
"
Delay (Standard Units)
\n",
"
\n",
" \n",
" \n",
"
\n",
"
0
\n",
"
6/1/15
\n",
"
73
\n",
"
HNL
\n",
"
257
\n",
"
6.087655
\n",
"
\n",
"
\n",
"
1
\n",
"
6/1/15
\n",
"
217
\n",
"
EWR
\n",
"
28
\n",
"
0.287279
\n",
"
\n",
"
\n",
"
2
\n",
"
6/1/15
\n",
"
237
\n",
"
STL
\n",
"
-3
\n",
"
-0.497924
\n",
"
\n",
"
\n",
"
3
\n",
"
6/1/15
\n",
"
250
\n",
"
SAN
\n",
"
0
\n",
"
-0.421937
\n",
"
\n",
"
\n",
"
4
\n",
"
6/1/15
\n",
"
267
\n",
"
PHL
\n",
"
64
\n",
"
1.199129
\n",
"
\n",
"
\n",
"
...
\n",
"
...
\n",
"
...
\n",
"
...
\n",
"
...
\n",
"
...
\n",
"
\n",
"
\n",
"
13820
\n",
"
8/31/15
\n",
"
1978
\n",
"
LAS
\n",
"
-4
\n",
"
-0.523254
\n",
"
\n",
"
\n",
"
13821
\n",
"
8/31/15
\n",
"
1993
\n",
"
IAD
\n",
"
8
\n",
"
-0.219304
\n",
"
\n",
"
\n",
"
13822
\n",
"
8/31/15
\n",
"
1994
\n",
"
ORD
\n",
"
3
\n",
"
-0.345950
\n",
"
\n",
"
\n",
"
13823
\n",
"
8/31/15
\n",
"
2000
\n",
"
PHX
\n",
"
-1
\n",
"
-0.447266
\n",
"
\n",
"
\n",
"
13824
\n",
"
8/31/15
\n",
"
2013
\n",
"
EWR
\n",
"
-2
\n",
"
-0.472595
\n",
"
\n",
" \n",
"
\n",
"
13825 rows × 5 columns
\n",
"
"
],
"text/plain": [
" Date Flight Number Destination Delay Delay (Standard Units)\n",
"0 6/1/15 73 HNL 257 6.087655\n",
"1 6/1/15 217 EWR 28 0.287279\n",
"2 6/1/15 237 STL -3 -0.497924\n",
"3 6/1/15 250 SAN 0 -0.421937\n",
"4 6/1/15 267 PHL 64 1.199129\n",
"... ... ... ... ... ...\n",
"13820 8/31/15 1978 LAS -4 -0.523254\n",
"13821 8/31/15 1993 IAD 8 -0.219304\n",
"13822 8/31/15 1994 ORD 3 -0.345950\n",
"13823 8/31/15 2000 PHX -1 -0.447266\n",
"13824 8/31/15 2013 EWR -2 -0.472595\n",
"\n",
"[13825 rows x 5 columns]"
]
},
"execution_count": 27,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"united = pd.read_csv(path_data + 'united_summer2015.csv')\n",
"\n",
"united['Delay (Standard Units)'] = standard_units(united['Delay'])\n",
"\n",
"united"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"The standard units that we can see are consistent with what we expect based on Chebychev's bounds. Most are of quite small size; only one is above 6.\n",
"\n",
"But something rather alarming happens when we sort the delay times from highest to lowest. The standard units that we can see are extremely high!"
]
},
{
"cell_type": "code",
"execution_count": 28,
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"
\n",
"\n",
"
\n",
" \n",
"
\n",
"
\n",
"
Date
\n",
"
Flight Number
\n",
"
Destination
\n",
"
Delay
\n",
"
Delay (Standard Units)
\n",
"
\n",
" \n",
" \n",
"
\n",
"
3140
\n",
"
6/21/15
\n",
"
1964
\n",
"
SEA
\n",
"
580
\n",
"
14.268971
\n",
"
\n",
"
\n",
"
3154
\n",
"
6/22/15
\n",
"
300
\n",
"
HNL
\n",
"
537
\n",
"
13.179818
\n",
"
\n",
"
\n",
"
3069
\n",
"
6/21/15
\n",
"
1149
\n",
"
IAD
\n",
"
508
\n",
"
12.445272
\n",
"
\n",
"
\n",
"
2888
\n",
"
6/20/15
\n",
"
353
\n",
"
ORD
\n",
"
505
\n",
"
12.369285
\n",
"
\n",
"
\n",
"
12627
\n",
"
8/23/15
\n",
"
1589
\n",
"
ORD
\n",
"
458
\n",
"
11.178815
\n",
"
\n",
"
\n",
"
...
\n",
"
...
\n",
"
...
\n",
"
...
\n",
"
...
\n",
"
...
\n",
"
\n",
"
\n",
"
13568
\n",
"
8/30/15
\n",
"
602
\n",
"
SAN
\n",
"
-13
\n",
"
-0.751216
\n",
"
\n",
"
\n",
"
12503
\n",
"
8/22/15
\n",
"
1723
\n",
"
KOA
\n",
"
-14
\n",
"
-0.776545
\n",
"
\n",
"
\n",
"
2900
\n",
"
6/20/15
\n",
"
464
\n",
"
PDX
\n",
"
-15
\n",
"
-0.801874
\n",
"
\n",
"
\n",
"
12565
\n",
"
8/23/15
\n",
"
587
\n",
"
PDX
\n",
"
-16
\n",
"
-0.827203
\n",
"
\n",
"
\n",
"
788
\n",
"
6/6/15
\n",
"
525
\n",
"
IAD
\n",
"
-16
\n",
"
-0.827203
\n",
"
\n",
" \n",
"
\n",
"
13825 rows × 5 columns
\n",
"
"
],
"text/plain": [
" Date Flight Number Destination Delay Delay (Standard Units)\n",
"3140 6/21/15 1964 SEA 580 14.268971\n",
"3154 6/22/15 300 HNL 537 13.179818\n",
"3069 6/21/15 1149 IAD 508 12.445272\n",
"2888 6/20/15 353 ORD 505 12.369285\n",
"12627 8/23/15 1589 ORD 458 11.178815\n",
"... ... ... ... ... ...\n",
"13568 8/30/15 602 SAN -13 -0.751216\n",
"12503 8/22/15 1723 KOA -14 -0.776545\n",
"2900 6/20/15 464 PDX -15 -0.801874\n",
"12565 8/23/15 587 PDX -16 -0.827203\n",
"788 6/6/15 525 IAD -16 -0.827203\n",
"\n",
"[13825 rows x 5 columns]"
]
},
"execution_count": 28,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"united.sort_values(by=['Delay'], ascending=False)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"What this shows is that it is possible for data to be many SDs above average (and for flights to be delayed by almost 10 hours). The highest value of delay is more than 14 in standard units. \n",
"\n",
"However, the proportion of these extreme values is small, and Chebychev's bounds still hold true. For example, let us calculate the percent of delay times that are in the range \"average $\\pm$ 3 SDs\". This is the same as the percent of times for which the standard units are in the range (-3, 3). That is about 98%, as computed below, consistent with Chebychev's bound of \"at least 89%\". "
]
},
{
"cell_type": "code",
"execution_count": 29,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"0.9790235081374322"
]
},
"execution_count": 29,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"within_3_sd = united[(united['Delay (Standard Units)'] >= -3) & (united['Delay (Standard Units)'] <= 3)]\n",
"len(within_3_sd)/len(united)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"The histogram of delay times is shown below, with the horizontal axis in standard units. By the table above, the right hand tail continues all the way out to $z=14.27$ standard units (580 minutes). The area of the histogram outside the range $z=-3$ to $z=3$ is about 2%, put together in tiny little bits that are mostly invisible in the histogram."
]
},
{
"cell_type": "code",
"execution_count": 30,
"metadata": {},
"outputs": [
{
"data": {
"image/png": "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5nLzwAMP2LSm5uLFi3cUCAAA4E7YXG5mz56dq9xkZ2fr+PHj+uyzz1S1alUNHTq0yAMCAAAUhM3lZtCgQXnui4iIULt27XTlypUiCQUAAFBYRbKguGLFiho0aJDefffdong7AACAQiuyq6XKlSuns2fPFtXbAQAAFEqRlJv9+/frvffeU7169Yri7QAAAArtjq+WSktLU3p6uipWrKi4uLgiDQcAAFBQNpebli1b5io3JpNJHh4euu+++9S7d295eHgUdT4AAIACsbncxMfH2zMHAABAkeDxCwAAwFAoNwAAwFAoNwAAwFAoNwAAwFAoNwAAwFBsKjfXrl3TpEmTtH79envnAQAAuCM2lRsXFxfNmDFDp06dsnceAACAO2LzaamGDRvqyJEj9swCAABwx2wuN+PGjdOCBQu0du1ae+YBAAC4IzbfoXjWrFny8PDQgAEDVKNGDfn5+cnV1dVqjMlkUkJCQpGHBAAAsJXN5ebAgQMymUzy8fGRJJ04cSLXmFs9WBMAAKA42Vxu9u/fb88cAAAARYL73AAAAEMpULnJzs5WQkKCRo0apf79++vHH3+UJKWmpmrFihU6d+6cXUICAADYyuZyk5aWpvbt22vEiBH64osv9PXXXyslJUWS5O7urtdee01z5861W1AAAABb2FxuJkyYoAMHDmjJkiXas2ePzGazZZ+Tk5O6du2qr7/+2i4hAQAAbGVzuVm1apWGDx+uxx9//JZXRfn7++vkyZNFGg4AAKCgbC43qampqlOnTp77zWazsrKyiiQUAABAYdlcbmrVqqWff/45z/1btmxRQEBAkYQCAAAoLJvLTd++fbVgwQJt2bLFsu3G6ak5c+boq6++0sCBA4s+IQAAQAHYfBO/l156Sbt27VK3bt0UEBAgk8mkqKgoXbx4UcnJyerSpYtGjBhhz6wAAAC3ZXO5KVeunBISErRkyRJ9/vnnMplMun79uho1aqRevXqpX79+PH4BAAA4nM3l5oa+ffuqb9++9sgCAABwxwpcbiTpxx9/tFz27evrqwYNGnDUBgAAlAgFevzCsmXLdP/99+vRRx/VwIEDNXDgQD366KNq2LChlixZYpeA586d07PPPit/f395e3urWbNm+vbbby37zWazYmNjFRQUpGrVqqlLly765Zdf7JIFAACUfDYfuVm4cKFGjRqlwMBATZgwQQEBATKbzTp8+LAWLFigESNGKCsrS4MGDSqycKmpqerQoYOaN2+uhIQEeXp66vjx4/Ly8rKMmTlzpuLi4hQXF6fAwEBNnjxZPXv21M6dO+Xu7l5kWQAAwN3B5nIzffp0hYSE6KuvvpKLi4vVvmHDhqlz586aPn16kZabWbNmqVq1apozZ45lm5+fn+V/m81mxcfHKyIiQt27d5ckxcfHKzAwUEuXLlVYWFiRZQEAAHcHm09LnT59Wn379s1VbCTJxcVF/fv315kzZ4o03KpVqxQSEqKwsDAFBASoVatWmjt3ruW5VsePH1dycrLatWtn+RpXV1e1aNFC27dvL9IsAADg7mDzkZugoCCdPXs2z/1nzpxRvXr1iiTUDceOHdMHH3ygkSNHKiIiQvv379fYsWMlScOHD1dycrIkWZ2muvE6v6xJSUlFmvNuZ/T5SE/3U2amq83jjT4fBcV85MacWGM+rDEfuRX1nAQGBua73+ZyExMTo8GDB6tRo0bq2bOn1b5ly5ZpwYIFWrBgQeFS5iEnJ0dNmjTR+PHjJUmNGjXSkSNHNG/ePA0fPtwy7q9XapnN5nyv3rrdpJQmSUlJhp+PtDQXlS/vZOPoDMPPR0GUhp+PgmJOrDEf1piP3BwxJzaXm3//+9/y9PTUkCFDFBUVpTp16shkMunIkSP67bff5O/vr1mzZmnWrFmWrzGZTEpISCh0OG9v71xHg+rWratTp05Z9kvS+fPn5ePjYxlz4cKFXEdzAABA6WBzuTlw4IBMJpOlRNxYX1O+fHn5+PgoMzNTBw8etPqaO733TfPmzXXo0CGrbYcOHZKvr68kqXbt2vL29lZiYqKaNm0qSbp27Zq2bt2qmJiYO/psAABwd7K53Ozfv9+eOW5p5MiRat++vaZOnapevXpp3759mjt3rt544w1Jf5an8PBwTZs2TYGBgQoICNDUqVPl5uamPn36FHteAADgeIW6Q3Fxadq0qRYuXKiYmBhNmTJFPj4+evXVVzV06FDLmBdffFEZGRmKjIxUamqqQkJCtHz5cu5xAwBAKVWiy40kdejQQR06dMhzv8lkUnR0tKKjo4sxFQAAKKkK9PgFAACAko5yAwAADIVyAwAADIVyAwAADMXmctOoUSOtXr06z/1r1qxRo0aNiiQUAABAYdlcbk6cOKGrV6/muf/q1as6efJkkYQCAAAorAKdlsrvjsOHDh3i3jIAAMDh8r3PzaJFi/Tpp59aXk+dOlXz58/PNS41NVU///xzvvejAQAAKA75lpurV68qOTnZ8jotLU05OTlWY0wmkypUqKDBgwcrKirKPikBAABslG+5GTZsmIYNGyZJeuCBBzRx4kR17ty5WIIBAAAUhs2PX9i3b589cwAAABSJAj9b6vLlyzp16pQuXboks9mca3/Lli2LJBgAAEBh2FxuLl26pLFjx2rFihXKzs7Otd9sNstkMunixYtFGhAAAKAgbC43L730kr766isNGzZMLVu2lIeHhx1jAQAAFI7N5WbdunUaMWKE3nrrLXvmAQAAuCM238TP2dlZ/v7+9swCAABwx2wuN927d9fXX39tzywAAAB3zOZy8/zzz+vcuXN69tlntXPnTp07d06//fZbrj8AAACOZPOam5CQEJlMJu3Zs0cJCQl5juNqKQAA4Eg2l5tXXnkl3wdnAgAAlAQ2l5vo6Gh75gAAACgSNq+5uVl2drYuXryo69evF3UeAACAO1KgcvP999+rR48eqlGjhgICArRlyxZJUkpKivr166eNGzfaJSQAAICtbC43O3bsUOfOnXX06FGFhoZaPVfK09NTV65c0ccff2yXkAAAALayudz861//kr+/v7Zv365x48bl2v/II49o165dRRoOAACgoGwuN99//72efPJJubi43PKqqZo1ayo5OblIwwEAABSUzeWmTJkyKlMm7+HJyclydXUtklAAAACFZXO5ady4sdasWXPLfVlZWVqyZIkefvjhIgsGAABQGDaXm5dfflmbNm3SqFGjtH//fknSuXPntG7dOnXr1k1Hjx7V6NGj7RYUAADAFjbfxK9t27aaM2eOIiMjtWjRIklSeHi4zGazKleurHnz5umhhx6yW1AAAABb2FxuJKlPnz7q3LmzEhMTdfjwYeXk5KhOnTp67LHHVLFiRXtlBAAAsFmByo0kVahQQV26dLFHFgAAgDtm85qb1atXKzIyMs/9kZGReS44BgAAKC42l5t///vf+v333/Pcf+3aNc2cObNIQgEAABSWzeXm559/VuPGjfPc36hRIx04cKAoMgEAABSazeXm+vXrysjIyHN/RkaGMjMziyQUAABAYdlcboKDg7Vy5Url5OTk2peTk6OVK1cqKCioSMMBAAAUlM3l5tlnn9Xu3bs1YMAA7dmzR5mZmcrMzNSePXs0cOBA7d69WyNGjLBnVgAAgNuy+VLw3r176+jRo4qNjdXXX38tSTKZTDKbzTKZTBo7dqz69+9vt6AAAAC2sPnIjSSNGTNGu3fv1oQJExQWFqbBgwdrwoQJ2r17t8aOHWuvjBbTpk2Th4eH1SXpZrNZsbGxCgoKUrVq1dSlSxf98ssvds8CAABKJpuO3GRkZKhfv37q37+/nnzyST3//PP2zpXLzp07NX/+fDVo0MBq+8yZMxUXF6e4uDgFBgZq8uTJ6tmzp3bu3Cl3d/dizwkAABzLpiM3rq6u2rt3r7Kzs+2d55bS0tI0bNgw/fvf/5aHh4dlu9lsVnx8vCIiItS9e3cFBwcrPj5eV65c0dKlSx2SFQAAOJbNp6VatWql7777zp5Z8nSjvLRu3dpq+/Hjx5WcnKx27dpZtrm6uqpFixbavn17cccEAAAlgM0LiidNmqRevXrpjTfe0JAhQ1SrVi2VKVOgJTuFMn/+fB05ckRz5szJtS85OVmS5OXlZbXdy8tLZ8+ezfM9k5KSijbkXc7o85Ge7qfMTFebxxt9PgqK+ciNObHGfFhjPnIr6jkJDAzMd7/N5eahhx6S2Wy2rG8pU6aMypUrZzXGZDLpzJkzhUt6C0lJSYqJidF///tfOTs75znOZDJZvb5xBVdebjcppUlSUpLh5yMtzUXlyzvZODrD8PNREKXh56OgmBNrzIc15iM3R8yJzeWmZ8+e+RYGe9ixY4dSUlL0t7/9zbItOztb3333nT788ENt27ZNknT+/Hn5+PhYxly4cCHX0RwAAFA62Fxu4uPj7Znjlrp06aImTZpYbXvuuefk7++vl19+WQEBAfL29lZiYqKaNm0q6c8HeG7dulUxMTHFnhcAADiezeXGETw8PKyujpKkChUqqEqVKgoODpYkhYeHa9q0aQoMDFRAQICmTp0qNzc39enTxwGJAQCAoxVoRfCJEyf0wgsvqHHjxvL19dW3334rSUpJSdHo0aO1Z88ee2TM14svvqiRI0cqMjJSbdu21blz57R8+XLucQMAQCll85GbgwcPqmPHjsrJydGDDz6oEydOWO574+npqZ07dyozM1OzZ8+2W1hJWrVqldVrk8mk6OhoRUdH2/VzAQDA3cHmcjN+/Hi5u7tr3bp1cnJyUkBAgNX+9u3b6/PPPy/qfEAuZ8866/Rp2w86ZmTYeqUUAMAIbC433333ncaMGaOqVavq4sWLufb7+vrme28ZoKicPl1GY8bYXlg4qAcApYvNv/5ev35dbm5uee6/dOmSnJz4DRkAADiWzeUmODhYmzdvvuU+s9msL7/8Uo0bNy6qXAAAAIVic7kJDw/XF198ocmTJ1tOS+Xk5OjXX3/VM888ox9++MEhTwsHAAC4mc1rbnr37q2TJ0/qrbfe0sSJEy3bJMnJyUlvvvmmnnjiCfukBAAAsFGBbuIXERGhPn36aOXKlTpy5IhycnJUp04ddevWTbVr17ZXRgAAAJvdttxkZmZq9erVOnbsmO655x516NBBI0eOLI5sAAAABZZvuUlOTlbnzp119OhRmc1mSZKbm5sWL16sli1bFktAAACAgsh3QfGbb76pY8eOaeTIkVq8eLFiY2NVvnx5vfLKK8WVDwAAoEDyPXKzfv16DRgwQG+++aZlW9WqVTV06FCdPn1aNWvWtHtAAACAgsj3yE1ycrKaNWtmta158+Yym806deqUXYMBAAAURr7lJjs7Wy4uLlbbbry+du2a/VIBAAAU0m2vljp27Jh2795teZ2eni5JSkpKUsWKFXONDwkJKcJ4AAAABXPbchMbG6vY2Nhc2/+6qNhsNstkMt3yoZoAAADFJd9yExcXV1w5AAAAikS+5WbgwIHFlQMAAKBI2PzgTAAAgLsB5QYAABgK5QYAABgK5QYAABgK5QYAABgK5QYAABgK5QYAABgK5QYAABgK5QYAABgK5QYAABgK5QYAABgK5QYAABgK5QYAABgK5QYAABgK5QYAABgK5QYAABgK5QYAABgK5QYAABgK5QYAABhKWUcHAEoSFxdX7dpl2/8tatbMUfXqWXZOBAAoKMoNcJOLF500daqTTWOnTpWqV7dzIABAgXFaCgAAGArlBgAAGEqJLjfTp09X27Zt5evrK39/f/Xv318///yz1Riz2azY2FgFBQWpWrVq6tKli3755RcHJQYAAI5WosvNt99+qyFDhmjt2rVauXKlypYtqx49eujSpUuWMTNnzlRcXJwmTZqk9evXy8vLSz179tTly5cdmBwAADhKiV5QvHz5cqvXc+bMUa1atbRt2zZ16tRJZrNZ8fHxioiIUPfu3SVJ8fHxCgwM1NKlSxUWFuaI2AAAwIFK9JGbv7py5YpycnLk4eEhSTp+/LiSk5PVrl07yxhXV1e1aNFC27dvd1BKAADgSCX6yM1fRUVFqWHDhnr44YclScnJyZIkLy8vq3FeXl46e/Zsnu+TlJRkv5B3obttPtLT/ZSZ6Wrz+D/+cFJmZraNo52UmZlpY44MJSUdsznH3epu+/koDsyJNebDGvORW1HPSWBgYL7775py8+qrr2rbtm1as2aNnJys70NiMpmsXpvN5lzbbna7SSlNkpKS7rr5SEtzUfnytt2LRpLKlZPKl7f1R/26ypcvb9PISpXK3nVzV1B348+HvTEn1pgPa8xHbo6Yk7vitFR0dLSWLVumlStXys/Pz7Ld29tbknT+/Hmr8RcuXMh1NAcAAJQOJb7cjB07VkuXLtXKlStVt25dq321a9eWt7e3EhMTLduuXbumrVu3qlmzZsUdFQAAlAAl+rTUmDFjtHjxYn3yySfy8PCwrLFxc3NTxYoVZTKZFB4ermnTpikwMFABAQGaOnWq3Nzc1KdPHwenBwAAjlCiy828efMkyXKZ9w1jx45VdHS0JOnFF19URkaGIiMjlZqaqpCQEC1fvlzu7u7FnhcAADheiS43qamptx1jMpkUHR1tKTsAAKB0K/FrbgAAAAqCcgMAAAyFcgMAAAyFcgMAAAyFcgMAAAyFcgMAAAyFcgMAAAyFcgMAAAyFcgMAAAyFcgMAAAyFcgMAAAyFcgMAAAyFcgMAAAyFcgMAAAyFcgMAAAyFcgMAAAyFcgMAAAylrKMDAHcrk8lJu3a52Dy+Zs0cVa+eZcdEAACJcgMU2oULUmysk83jp06Vqle3YyAAgCROSwEAAIOh3AAAAEOh3AAAAEOh3AAAAEOh3AAAAEOh3AAAAEOh3AAAAEOh3AAAAEOh3AAAAEPhDsVAMSnI4xp4VAMAFB7lBigmBXlcA49qAIDC47QUAAAwFMoNAAAwFE5LASVQQdbnSKzRAYCbUW6AEqgg63Mk1ugAwM04LQUAAAyFcgMAAAyF01KAAXAPHQD4P5QbwAC4hw4A/B9OSwEAAEMxzJGbefPmadasWUpOTlZQUJBiY2PVokULR8cCSpyCnMJyceEQD4C7jyHKzfLlyxUVFaVp06apefPmmjdvnvr27att27bJ19fX0fGAEqUgp7DGjStv5zQAUPQMUW7i4uI0cOBADR48WJI0ZcoUffPNN/rwww81fvx4B6cD7l4uLq7atcv2/0ywWBlASXDXl5usrCzt2bNHzz//vNX2du3aafv27Q5KdfcIDAx0dIQSpVy5u/7/EkXq8uXyio21ffy0aU46fdq2pXyVK5dRWlpOkY8t6PiCFjL+P2ON+bDGfOTmiDkxpaammov9U4vQ2bNnVb9+fa1atUotW7a0bJ80aZKWLFmiXbt2OTAdAAAoboa5WspkMlm9NpvNubYBAADju+vLjaenp5ycnHT+/Hmr7RcuXJCXl5eDUgEAAEe568uNs7OzGjdurMTERKvtiYmJatasmYNSAQAARzHE6snnnntOI0aMUEhIiJo1a6YPP/xQ586dU1hYmKOjAQCAYnbXH7mRpF69eik2NlZTpkzRI488om3btikhIUG1atXK82t2796tHj16qGbNmvLx8VH79u2VkpJSjKlLlhdeeEGNGzdWtWrV5O/vrwEDBujgwYOOjlVs5s2bpwceeEDe3t5q3bq1vvvuO0dHcpj3339fLVq0kK+vr3x9ffXEE09o7dq1jo7lUOfOndOzzz4rf39/eXt7q1mzZvr2228dHcthLl++rKioKN1///2qVq2a2rdvr++//97RsYrNli1bFBoaqvr168vDw0MLFy607Pvjjz80fvx4tWjRQjVq1FC9evU0dOhQnTx50oGJ7Su/+ZCk8PBweXh4WP15/PHH7ZrJEOVGkoYOHar9+/fr/Pnz2rhxo9WVU3+1a9cu9ezZU61atdLXX3+tDRs2aNSoUSpb1hAHsgqlSZMmevfdd7V9+3YtW7ZMZrNZPXr00B9//OHoaHZ34yaQo0eP1qZNm/Twww+rb9++hv6PUX5q1KihCRMmaOPGjUpMTNSjjz6qQYMG6ccff3R0NIdITU1Vhw4dZDablZCQoO3bt2vy5Mmlek3fCy+8oPXr1ys+Pl7fffed2rZtqx49eujMmTOOjlYsrl69quDgYE2cOFGurq5W+37//Xft3btXY8aM0caNG7Vo0SKdPn1affr00fXr1x2U2L7ym48b2rRpo4MHD1r+LFmyxK6Z7vpLwQujffv2euSRR/TGG284OkqJ9eOPP6pVq1bauXOn4e/b8Nhjj6lBgwaaNWuWZVvTpk3VvXt3bgL5//n5+Wn8+PGl8lRvTEyMtmzZUuqPXt2QkZEhHx8fLViwQF26dLFsb926tZ544gm9/vrrDkxX/GrWrKnJkydr0KBBeY45cOCAmjdvri1btqhBgwbFmK743Wo+wsPDdfHiRS1evLjYchjmyI2tfvvtN+3YsUPe3t7q2LGjAgMD1alTJ23cuNHR0UqMq1evauHChfLx8cn31J4R3LgJZLt27ay2cxPIP2VnZ2vZsmW6evWqHn74YUfHcYhVq1YpJCREYWFhCggIUKtWrTR37lyZzaXu90JJ0vXr15WdnS0XF+vnk7m6umrr1q0OSlWyXb58WZLk4eHh2CAOtHXrVgUEBCgkJEQvvPCCfvvtN7t+XqkrN8eOHZMkxcbGatCgQVq6dKn+9re/qVevXtq/f79jwznYvHnzVLNmTdWsWVPr1q3TypUrVb68sZ8tlJKSouzs7FynGLy8vHLdXqA0+emnn1SzZk1VrVpVL730kj755BPD/8aZl2PHjumDDz6Qn5+fli1bpmeffVYTJkzQ+++/7+hoDuHu7q6HH35YU6dO1ZkzZ5Sdna3Fixdrx44dSk5OdnS8EicrK0uvv/66OnbsqJo1azo6jkM8/vjjeu+99/TFF1/ozTff1O7du9WtWzdlZmba7TMNU27efPPNXAuW/vpn8+bNysn585bsYWFheuqpp9SoUSONGzdOISEh+s9//uPg76Jo2TonN/Tt21ebNm3SqlWr5O/vr8GDB+v333934HdQfLgJpLXAwEBt3rxZ69at05AhQxQeHq6ff/7Z0bEcIicnR40aNdL48ePVqFEjPfnkkxoxYoTmzZvn6GgOM2fOHJlMJgUHB6tq1aqaM2eO+vTpIycn2x7IWlpcv35dw4cPV1pamt59911Hx3GY3r17q3PnzmrQoIE6deqkpUuXKikpya6neg2zgjY8PFz9+vXLd4yPj4/lt/F69epZ7atbt65OnTplt3yOYOuc3FC5cmVVrlxZ/v7+euihh+Tn56eVK1cqNDTU3lEdhptA3pqzs7Puu+8+SX8uNv/+++/17rvvavbs2Q5OVvy8vb1LxX8vCqJOnTpavXq1rl69qsuXL6tatWoKCwtT7dq1HR2txLh+/bqGDBmin3/+WV999ZXuueceR0cqMapXr64aNWroyJEjdvsMw5QbT09PeXp63nZc7dq1Vb16dSUlJVltP3z4sIKDg+0VzyFsnZNbMZvNMpvNysoy9hOeb74JZI8ePSzbExMT1a1bN8cFK2FycnIM/7OQl+bNm+vQoUNW2w4dOiRfX18HJSo53Nzc5ObmptTUVH3zzTeKiYlxdKQS4Y8//tAzzzyjX375RV999ZW8vb0dHalESUlJ0dmzZ+06L4YpN7YymUx6/vnnNXHiRN1///164IEHtGLFCu3cuVOTJ092dDyHOHLkiFauXKk2bdrI09NTZ86c0YwZM+Ts7KwOHTo4Op7dcRNIa//85z/Vvn171axZU1euXNHSpUv17bffKiEhwdHRHGLkyJFq3769pk6dql69emnfvn2aO3duqb7a8ptvvlFOTo4CAwN19OhRvfHGGwoMDMz3iiEjuXLliuWoQ05Ojk6dOqV9+/apSpUqql69ugYPHqwffvhBn376qUwmk2UtUqVKlfK8VPpult98VKlSRRMnTlS3bt3k7e2tEydOKCYmRl5eXvr73/9ut0yl8lJwSZo5c6bef/99Xbx4UUFBQRo3bpzatGnj6FgOcerUKUVERGjPnj1KS0tT1apV1aJFC0VGRqpu3bqOjlcs5s2bp5kzZyo5OVn169fX22+/ne+9kowsPDxcmzdv1vnz51WpUiU1aNBAL7zwgh577DFHR3OYtWvXKiYmRocOHZKPj4+GDRumESNGlNp1WStWrNCECRN05swZValSRd26ddPrr7+uypUrOzpasdi8ebO6du2aa/uAAQMUFRWlRo0a3fLr4uLiDFkA85uP6dOna9CgQdq3b5/S0tLk7e2tRx55RK+99prVsoiiVmrLDQAAMCbDXC0FAAAgUW4AAIDBUG4AAIChUG4AAIChUG4AAIChUG4AAIChUG6Au9Dx48fl4eGhhQsXOizDwIEDNWzYMId9flHw8PBQbGxssXzWwoUL5eHhoePHjxfL591KbGxskT6Zeu7cubr//vvt+gBEoDAoN4Cd3PjH7MYfb29vBQUFqVevXnrvvfd0+fJlR0cstN27d2vNmjV66aWXrLZfuHBB0dHReuihh1S9enXdd999evTRRzV27FidPXvWMm7NmjXFViruNjcKSF5P2O7SpYseeuihIvu8uXPnFrokP/XUU7p27ZrhHjqMux/lBrCzqKgozZkzR9OmTdPw4cMlSdHR0WrRooV+/PFHB6crnFmzZql58+ZWz2O7dOmS2rRpo08++URt27ZVbGysIiIiFBQUpIULF1o9n2nt2rWaNGmSI6KXapGRkTp37pzVtvfff1+LFi0q1Pu5uroqNDRUs2fPVk5OTlFEBIpEqXu2FFDcHnvsMavftF9++WVt3LhRoaGhGjBggHbs2HFXPW/m4sWL+u9//5vryMvHH3+sU6dO6YsvvlDr1q2t9l29elXXr18vzpjFLisrS05OTnJycnJ0lDyVLVtWZcsW7X/2e/XqpdmzZ2vTpk2l9hE2KHk4cgM4QOvWrRUZGamTJ0/meiDl4cOH9cwzz8jf39/ynK9PPvnktu954sQJjR492nJKqFatWurfv79++eUXy5j09HRVr15dY8eOzfX1qampqlq1ql5//fV8P2ft2rXKysrK9Q/Z0aNHZTKZbvlMLjc3N8tzh8LDwy2nMW4+bXdjLcrChQvVvXt31a1bV1WrVlVISIjeeeedXEcGbpyeOXz4sHr37q0aNWooMDBQEyZMyDU2PT1dL774ovz8/OTr66unnnoq1xEMW+dQ+vNZOh4eHkpISNDkyZN1//33q1q1ajp16pQkaefOnWrfvr28vb11//33a8aMGTKb7fOkmxtZli5dqtmzZ6thw4by9vbWE088ob1791qN/euam4YNGyopKUlbtmyx/D00bNjQsn/evHlq0aKFatSoIT8/P7Vu3Voffvih1Xs2adJElStX1ldffWWX7w8oDI7cAA7Sv39/xcTEaP369Ro8eLAk6eDBg+rQoYM8PT313HPPqXLlyvrf//6nUaNGKT09XSNHjszz/X744Qdt2bJFXbt2Va1atXT27Fn95z//UefOnbVt2zZ5e3urUqVK+vvf/67ly5frrbfesvotfsWKFcrKylL//v3zzb1t2zZVqlRJ9913n9X2WrVqyWw2a9GiRfrHP/6R59eHhYXp9OnT2rRpk+bMmWPZfu+990r68zRJYGCgHn/8cbm6uioxMVH//Oc/lZ6ernHjxlm9V3p6urp3766OHTuqS5cuWrdunWbMmKHatWvr6aefliSZzWY9+eST2rx5s5566ik1bNhQGzZsUN++fQs1hzebMWOGTCaTRowYIUmqWLGiDhw4oB49esjd3V1jxoyRs7OzPvroI7m5ueU7r3dq9uzZ+uOPPzR8+HBdv35ds2bN0qBBg/TDDz+oXLlyt/ya2NhYjRkzRpUqVdLo0aMlyZJzwYIFGjNmjLp166Zhw4bpjz/+0IEDB7Rt2zY988wzlvcwmUxq3Lixtm7datfvDygIyg3gIDVr1lSlSpV09OhRy7aoqCh5e3srMTFRFSpUkCQNGTJEYWFhio2N1eDBg/P8R/KJJ55Q9+7drbb1799ff/vb3/Txxx9rzJgxkv58Uu+SJUu0fv16tW/f3jI2ISFBwcHBVr+538qvv/6qWrVq5Xoi9lNPPaW4uDi98MILmjlzplq1aqXmzZurffv28vT0tIx7+OGH5e/vr02bNt2ySK1evdryvUvS0KFD9fzzz2vOnDkaO3asypcvb9mXnJysWbNmWcrUM888o1atWmn+/PmWcrNmzRpt2rRJr776ql555RVJ0rBhwzRs2DDt37+/UHN4w+XLl7V9+3arv5OIiAhlZWXpv//9r+rUqSNJGjRokJo2bZrvvN6p9PR0fffdd3JxcZEkBQYG6sknn9T69evVoUOHW37N3//+d02YMEFeXl65/i7Wrl2r+vXra8GCBbf9bD8/P8oNShROSwEOVLFiRV25ckXSn6eFNmzYoB49eigjI0MpKSmWP48//rguX76sH374Ic/3urkQ/P7777p48aIqV64sf39/7dmzx7KvTZs2qlGjhhYvXmzZdvz4cW3btk2hoaG3zXzx4sVbXk587733KjExUc8884yuXLmi+fPnKzw8XHXr1lV0dLSysrJsmJH/+z6ys7OVmpqqlJQUtWrVSlevXlVSUpLVWBcXFw0aNMhqW8uWLXXs2DHL67Vr16pMmTKWoys3hIeH5/nZUv5zeENoaKhVscnOztY333yjjh07WoqN9Ofc9OvX7/bf/B0YNGiQpdhIUqtWrSTJai4Kwt3dXadPn9bu3btvO7ZKlSrKyspSenp6oT4LKGocuQEc6MqVK5bTMYcPH5bZbNakSZPyvJLowoULeb7XtWvX9PbbbyshISHXepKbj5yUKVNG/fr105w5c3T58mW5u7srISFBJpNJffr0sSl3XutHfH19NX36dE2fPl3Hjh3Thg0bNHv2bMXHx8vd3V2vvvrqbd9769atiomJ0e7du3MVorS0NKvXNWrUyLWA18PDQ5cuXbK8PnnypKpWrWpZ83NDQEBArs+2dQ5v8PPzs3p94cIF/f777woMDMw19lafV1h/PWom/Tn3N7tRQG+ei4KIiIjQpk2b9Nhjj8nPz09t27ZVjx49ci0Wl/7v5+FWuQBHoNwADnL69Gmlp6db1q7cWAQ7cuRIq9NFN7v50uu/ioqK0oIFCzR8+HA1b95clSpVUpkyZRQdHZ1rge2AAQP0zjvv6Msvv9TAgQO1ZMkSPfroo6pRo8Ztc99zzz1KTU297Tg/Pz89/fTT6t69uxo3bqzFixffttwcO3ZMPXv21H333afY2Fj5+PiofPny2rt3r8aPH5/r+7DlyiSz2WzzP7oFmUNJua5yy+8feVsXFN84+pKRkXHL/RkZGVan5m7Iay4Ku5A5KChIO3fu1Lp16/TNN99o7dq1+s9//qOwsDDNmDHDamxqaqqcnZ3l7u5eqM8CihrlBnCQG6eF2rVrJ+n/jgKULVu2UJfULl++XKGhoZo4caLV9tTUVN1zzz1W2+rVq6emTZtq8eLFCgoK0q+//prrhnx5qVevnpYvX25zaahSpYrq1KljdcVRXl+3evVqXbt2TZ999plq1apl2X4nd/WtVauWNmzYoLS0NKujNzffd+eGgszhrXh5ealChQr69ddfc+07fPiwTXlvHIE5dOhQriND2dnZOnLkyC2vSCus/P4O3dzc1L17d3Xv3l3Xr1+3XOkWGRlpVYSPHj2qunXrFlkm4E6x5gZwgI0bN2rKlCmqXbu2ZS2Gl5eXHn30UX300UeWS4pvlt8pKenP39z/+lv60qVLre4MfLMBAwZo8+bNmjlzptzc3NS1a1ebsjdr1kzp6em5/rHeuXPnLe+6fOLECR08eNDqVM2NtS1/PQJ04+jDzd9HZmam5s6da1O2W2nfvr1ycnKsrsySpPj4+FxjCzqHt/r6du3aac2aNVYLxS9cuKAlS5bY9B5t2rSRs7OzPvjgA2VnZ1vtW7x4sVJTU/M8slcYFSpUuOWRuIsXL1q9Llu2rBo0aCDJ+u/NbDZrz549atasWZFlAu4UR24AO/vmm2905MgRXb9+Xb/99ps2bdqkxMRE+fr66tNPP7VaBDp9+nR16NBBLVu21ODBg+Xv76+UlBTt3btX69ev18mTJ/P8nE6dOumzzz6Tu7u7goODtX//fi1fvjzXb/839OnTR6+99pq++OIL9evXTxUrVrTp+2nfvr3KlSunxMREq3UkCQkJWrx4sbp06aLGjRvL1dVVx44d08KFC5WZmano6GjL2CZNmkj68465jz/+uMqWLauOHTvqsccek7Ozs0JDQ/X0008rKytLn332mcqUKfzvYZ06dVLLli0VGxurU6dO6YEHHlBiYuItjwYVdA5v5dVXX9X69evVqVMnDR06VOXKldNHH30kX1/fXGuGbuXee+/VK6+8ojfffNNyiXvFihW1e/duffbZZwoJCdGAAQMKMgX5atKkiT766CNNnDhRAQEBcnNzU6dOndSzZ095eXmpefPmqlq1qo4ePaq5c+cqODhYQUFBlq/fvXu30tPT1aVLlyLLBNwpyg1gZzdOcTg7O6tKlSoKDg5WbGysBg0alGuNQkBAgDZs2KDJkydryZIlunDhgjw9PVWvXj3961//uu3nlCtXTitWrNAnn3yixo0ba9myZXrjjTduOb5KlSrq0KGDvvzyS5uukrrB09NTnTp10vLly60enPn000+rQoUK2rhxo/73v/8pLS1NVapU0YMPPqhRo0ZZnUrp0aOHduzYoRUrVmjp0qUym83au3evAgICtHDhQsXExGj8+PHy9PRUaGioWrVqpZ49e9qc8WYmk0mLFi3S66+/rs8//1wrVqxQ69attWTJEtWvX99qbEHn8FaCg4O1YsUKvf7665oyZYq8vLw0ZMgQeXl5adSoUTa9x5gxY+Tn56f3339fU6dOVVZWlnx9fRUREaHRo0fL2dm5QHOQn6ioKJ09e1bvvvuu0tPT5evrq06dOiksLExLlixRfHy8Ll++rGrVqmnQoEGKjIy0Kpuff/65atasyd2JUaKYUlNT7XPbTAAl3pAhQ7Rlyxb99NNPBXpswK5du/TEE0/o22+/tZyqQOmTkZGhhg0b6uWXX873BpNAcWPNDVBKpaSkaNWqVerXr1+Bn4f04IMPqlOnTrmumkHp8vHHH6t8+fIaMmSIo6MAVjhyA5Qyx44d0/bt27Vo0SJt27ZNO3futLoyCQDudqy5AUqZLVu26LnnnpOPj4/i4uIoNgAMhyM3AADAUFhzAwAADIVyAwAADIVyAwAADIVyAwAADIVyAwAADIVyAwAADOX/AW52TmvDEy6nAAAAAElFTkSuQmCC\n",
"text/plain": [
"