Skip to content

Instantly share code, notes, and snippets.

@benjaminjack
Last active July 9, 2018 17:41
Show Gist options
  • Select an option

  • Save benjaminjack/4b7d6e536e4e9f1581dc4ca2a04ac1f7 to your computer and use it in GitHub Desktop.

Select an option

Save benjaminjack/4b7d6e536e4e9f1581dc4ca2a04ac1f7 to your computer and use it in GitHub Desktop.
Tidy Data in Python
Display the source blob
Display the rendered blob
Raw
{
"cells": [
{
"cell_type": "code",
"execution_count": 1,
"metadata": {},
"outputs": [],
"source": [
"%matplotlib inline\n",
"%config InlineBackend.figure_format = 'retina'\n",
"\n",
"import pandas as pd\n",
"import numpy as np\n",
"import seaborn as sns\n",
"import matplotlib.pyplot as plt\n",
"\n",
"sns.set(style='ticks', context='talk')"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## Melting a dataframe\n",
"\n",
"This is a _wide_ or _untidy_ table."
]
},
{
"cell_type": "code",
"execution_count": 2,
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"<div>\n",
"<style scoped>\n",
" .dataframe tbody tr th:only-of-type {\n",
" vertical-align: middle;\n",
" }\n",
"\n",
" .dataframe tbody tr th {\n",
" vertical-align: top;\n",
" }\n",
"\n",
" .dataframe thead th {\n",
" text-align: right;\n",
" }\n",
"</style>\n",
"<table border=\"1\" class=\"dataframe\">\n",
" <thead>\n",
" <tr style=\"text-align: right;\">\n",
" <th></th>\n",
" <th>name</th>\n",
" <th>treat_a</th>\n",
" <th>treat_b</th>\n",
" </tr>\n",
" </thead>\n",
" <tbody>\n",
" <tr>\n",
" <th>0</th>\n",
" <td>John Doe</td>\n",
" <td>NaN</td>\n",
" <td>2</td>\n",
" </tr>\n",
" <tr>\n",
" <th>1</th>\n",
" <td>Jane Smith</td>\n",
" <td>16.0</td>\n",
" <td>11</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2</th>\n",
" <td>Mary Johnson</td>\n",
" <td>3.0</td>\n",
" <td>1</td>\n",
" </tr>\n",
" </tbody>\n",
"</table>\n",
"</div>"
],
"text/plain": [
" name treat_a treat_b\n",
"0 John Doe NaN 2\n",
"1 Jane Smith 16.0 11\n",
"2 Mary Johnson 3.0 1"
]
},
"execution_count": 2,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"treatments = pd.DataFrame({'name': ['John Doe', 'Jane Smith', 'Mary Johnson'],\n",
" 'treat_a': [np.nan, 16, 3],\n",
" 'treat_b': [2, 11, 1]})\n",
"treatments.head()"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Let's reshape it into a _long_ or _tidy_ table."
]
},
{
"cell_type": "code",
"execution_count": 3,
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"<div>\n",
"<style scoped>\n",
" .dataframe tbody tr th:only-of-type {\n",
" vertical-align: middle;\n",
" }\n",
"\n",
" .dataframe tbody tr th {\n",
" vertical-align: top;\n",
" }\n",
"\n",
" .dataframe thead th {\n",
" text-align: right;\n",
" }\n",
"</style>\n",
"<table border=\"1\" class=\"dataframe\">\n",
" <thead>\n",
" <tr style=\"text-align: right;\">\n",
" <th></th>\n",
" <th>name</th>\n",
" <th>variable</th>\n",
" <th>value</th>\n",
" </tr>\n",
" </thead>\n",
" <tbody>\n",
" <tr>\n",
" <th>0</th>\n",
" <td>John Doe</td>\n",
" <td>treat_a</td>\n",
" <td>NaN</td>\n",
" </tr>\n",
" <tr>\n",
" <th>1</th>\n",
" <td>Jane Smith</td>\n",
" <td>treat_a</td>\n",
" <td>16.0</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2</th>\n",
" <td>Mary Johnson</td>\n",
" <td>treat_a</td>\n",
" <td>3.0</td>\n",
" </tr>\n",
" <tr>\n",
" <th>3</th>\n",
" <td>John Doe</td>\n",
" <td>treat_b</td>\n",
" <td>2.0</td>\n",
" </tr>\n",
" <tr>\n",
" <th>4</th>\n",
" <td>Jane Smith</td>\n",
" <td>treat_b</td>\n",
" <td>11.0</td>\n",
" </tr>\n",
" </tbody>\n",
"</table>\n",
"</div>"
],
"text/plain": [
" name variable value\n",
"0 John Doe treat_a NaN\n",
"1 Jane Smith treat_a 16.0\n",
"2 Mary Johnson treat_a 3.0\n",
"3 John Doe treat_b 2.0\n",
"4 Jane Smith treat_b 11.0"
]
},
"execution_count": 3,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"tidy = treatments.melt(id_vars='name', value_vars=['treat_a', 'treat_b'])\n",
"tidy.head()"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Rename the columns so it's clear what they represent."
]
},
{
"cell_type": "code",
"execution_count": 4,
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"<div>\n",
"<style scoped>\n",
" .dataframe tbody tr th:only-of-type {\n",
" vertical-align: middle;\n",
" }\n",
"\n",
" .dataframe tbody tr th {\n",
" vertical-align: top;\n",
" }\n",
"\n",
" .dataframe thead th {\n",
" text-align: right;\n",
" }\n",
"</style>\n",
"<table border=\"1\" class=\"dataframe\">\n",
" <thead>\n",
" <tr style=\"text-align: right;\">\n",
" <th></th>\n",
" <th>name</th>\n",
" <th>treatment</th>\n",
" <th>days</th>\n",
" </tr>\n",
" </thead>\n",
" <tbody>\n",
" <tr>\n",
" <th>0</th>\n",
" <td>John Doe</td>\n",
" <td>treat_a</td>\n",
" <td>NaN</td>\n",
" </tr>\n",
" <tr>\n",
" <th>1</th>\n",
" <td>Jane Smith</td>\n",
" <td>treat_a</td>\n",
" <td>16.0</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2</th>\n",
" <td>Mary Johnson</td>\n",
" <td>treat_a</td>\n",
" <td>3.0</td>\n",
" </tr>\n",
" <tr>\n",
" <th>3</th>\n",
" <td>John Doe</td>\n",
" <td>treat_b</td>\n",
" <td>2.0</td>\n",
" </tr>\n",
" <tr>\n",
" <th>4</th>\n",
" <td>Jane Smith</td>\n",
" <td>treat_b</td>\n",
" <td>11.0</td>\n",
" </tr>\n",
" </tbody>\n",
"</table>\n",
"</div>"
],
"text/plain": [
" name treatment days\n",
"0 John Doe treat_a NaN\n",
"1 Jane Smith treat_a 16.0\n",
"2 Mary Johnson treat_a 3.0\n",
"3 John Doe treat_b 2.0\n",
"4 Jane Smith treat_b 11.0"
]
},
"execution_count": 4,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"tidy = tidy.rename(columns={'variable': 'treatment', 'value': 'days'})\n",
"tidy.head()"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Group by the `treatment` column and compute the mean and median for each treatment."
]
},
{
"cell_type": "code",
"execution_count": 5,
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"<div>\n",
"<style scoped>\n",
" .dataframe tbody tr th:only-of-type {\n",
" vertical-align: middle;\n",
" }\n",
"\n",
" .dataframe tbody tr th {\n",
" vertical-align: top;\n",
" }\n",
"\n",
" .dataframe thead tr th {\n",
" text-align: left;\n",
" }\n",
"\n",
" .dataframe thead tr:last-of-type th {\n",
" text-align: right;\n",
" }\n",
"</style>\n",
"<table border=\"1\" class=\"dataframe\">\n",
" <thead>\n",
" <tr>\n",
" <th></th>\n",
" <th colspan=\"2\" halign=\"left\">days</th>\n",
" </tr>\n",
" <tr>\n",
" <th></th>\n",
" <th>mean</th>\n",
" <th>median</th>\n",
" </tr>\n",
" <tr>\n",
" <th>treatment</th>\n",
" <th></th>\n",
" <th></th>\n",
" </tr>\n",
" </thead>\n",
" <tbody>\n",
" <tr>\n",
" <th>treat_a</th>\n",
" <td>9.500000</td>\n",
" <td>9.5</td>\n",
" </tr>\n",
" <tr>\n",
" <th>treat_b</th>\n",
" <td>4.666667</td>\n",
" <td>2.0</td>\n",
" </tr>\n",
" </tbody>\n",
"</table>\n",
"</div>"
],
"text/plain": [
" days \n",
" mean median\n",
"treatment \n",
"treat_a 9.500000 9.5\n",
"treat_b 4.666667 2.0"
]
},
"execution_count": 5,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"(tidy.groupby('treatment')\n",
" .agg({'days' : ['mean', 'median']}))"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## Pivot tables and other ways of reshaping data\n",
"\n",
"The `pivot_table` method is effectively the inverse of `melt`."
]
},
{
"cell_type": "code",
"execution_count": 6,
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"<div>\n",
"<style scoped>\n",
" .dataframe tbody tr th:only-of-type {\n",
" vertical-align: middle;\n",
" }\n",
"\n",
" .dataframe tbody tr th {\n",
" vertical-align: top;\n",
" }\n",
"\n",
" .dataframe thead th {\n",
" text-align: right;\n",
" }\n",
"</style>\n",
"<table border=\"1\" class=\"dataframe\">\n",
" <thead>\n",
" <tr style=\"text-align: right;\">\n",
" <th>treatment</th>\n",
" <th>name</th>\n",
" <th>treat_a</th>\n",
" <th>treat_b</th>\n",
" </tr>\n",
" </thead>\n",
" <tbody>\n",
" <tr>\n",
" <th>0</th>\n",
" <td>Jane Smith</td>\n",
" <td>16.0</td>\n",
" <td>11.0</td>\n",
" </tr>\n",
" <tr>\n",
" <th>1</th>\n",
" <td>John Doe</td>\n",
" <td>NaN</td>\n",
" <td>2.0</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2</th>\n",
" <td>Mary Johnson</td>\n",
" <td>3.0</td>\n",
" <td>1.0</td>\n",
" </tr>\n",
" </tbody>\n",
"</table>\n",
"</div>"
],
"text/plain": [
"treatment name treat_a treat_b\n",
"0 Jane Smith 16.0 11.0\n",
"1 John Doe NaN 2.0\n",
"2 Mary Johnson 3.0 1.0"
]
},
"execution_count": 6,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"tidy.pivot_table(index='name', columns='treatment', values='days').reset_index().head()"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"The methods `stack` and `unstack` also reshape data into long and wide forms, respectively. Unlike `melt` and `pivot_table`, they rely on multilevel indexing. I prefer the more explicit behavior of `melt` and `pivot_table`. "
]
},
{
"cell_type": "code",
"execution_count": 7,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"name \n",
"John Doe treat_b 2.0\n",
"Jane Smith treat_a 16.0\n",
" treat_b 11.0\n",
"Mary Johnson treat_a 3.0\n",
" treat_b 1.0\n",
"dtype: float64"
]
},
"execution_count": 7,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"tidy = treatments.set_index('name').stack()\n",
"tidy.head()"
]
},
{
"cell_type": "code",
"execution_count": 8,
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"<div>\n",
"<style scoped>\n",
" .dataframe tbody tr th:only-of-type {\n",
" vertical-align: middle;\n",
" }\n",
"\n",
" .dataframe tbody tr th {\n",
" vertical-align: top;\n",
" }\n",
"\n",
" .dataframe thead th {\n",
" text-align: right;\n",
" }\n",
"</style>\n",
"<table border=\"1\" class=\"dataframe\">\n",
" <thead>\n",
" <tr style=\"text-align: right;\">\n",
" <th></th>\n",
" <th>name</th>\n",
" <th>treat_a</th>\n",
" <th>treat_b</th>\n",
" </tr>\n",
" </thead>\n",
" <tbody>\n",
" <tr>\n",
" <th>0</th>\n",
" <td>John Doe</td>\n",
" <td>NaN</td>\n",
" <td>2.0</td>\n",
" </tr>\n",
" <tr>\n",
" <th>1</th>\n",
" <td>Jane Smith</td>\n",
" <td>16.0</td>\n",
" <td>11.0</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2</th>\n",
" <td>Mary Johnson</td>\n",
" <td>3.0</td>\n",
" <td>1.0</td>\n",
" </tr>\n",
" </tbody>\n",
"</table>\n",
"</div>"
],
"text/plain": [
" name treat_a treat_b\n",
"0 John Doe NaN 2.0\n",
"1 Jane Smith 16.0 11.0\n",
"2 Mary Johnson 3.0 1.0"
]
},
"execution_count": 8,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"tidy.unstack().reset_index().head()"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## In an NBA season, how many days of rest do teams get between games?\n",
"We're going to pull data directly from [basketball-reference.com](https://www.basketball-reference.com/leagues/NBA_2016_games-october.html)."
]
},
{
"cell_type": "code",
"execution_count": 9,
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"<div>\n",
"<style scoped>\n",
" .dataframe tbody tr th:only-of-type {\n",
" vertical-align: middle;\n",
" }\n",
"\n",
" .dataframe tbody tr th {\n",
" vertical-align: top;\n",
" }\n",
"\n",
" .dataframe thead th {\n",
" text-align: right;\n",
" }\n",
"</style>\n",
"<table border=\"1\" class=\"dataframe\">\n",
" <thead>\n",
" <tr style=\"text-align: right;\">\n",
" <th></th>\n",
" <th>Date</th>\n",
" <th>Start (ET)</th>\n",
" <th>Visitor/Neutral</th>\n",
" <th>PTS</th>\n",
" <th>Home/Neutral</th>\n",
" <th>PTS.1</th>\n",
" <th>Unnamed: 6</th>\n",
" <th>Unnamed: 7</th>\n",
" <th>Attend.</th>\n",
" <th>Notes</th>\n",
" </tr>\n",
" </thead>\n",
" <tbody>\n",
" <tr>\n",
" <th>0</th>\n",
" <td>Tue, Oct 27, 2015</td>\n",
" <td>8:00 pm</td>\n",
" <td>Detroit Pistons</td>\n",
" <td>106.0</td>\n",
" <td>Atlanta Hawks</td>\n",
" <td>94.0</td>\n",
" <td>Box Score</td>\n",
" <td>NaN</td>\n",
" <td>19187.0</td>\n",
" <td>NaN</td>\n",
" </tr>\n",
" <tr>\n",
" <th>1</th>\n",
" <td>Tue, Oct 27, 2015</td>\n",
" <td>8:00 pm</td>\n",
" <td>Cleveland Cavaliers</td>\n",
" <td>95.0</td>\n",
" <td>Chicago Bulls</td>\n",
" <td>97.0</td>\n",
" <td>Box Score</td>\n",
" <td>NaN</td>\n",
" <td>21957.0</td>\n",
" <td>NaN</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2</th>\n",
" <td>Tue, Oct 27, 2015</td>\n",
" <td>10:30 pm</td>\n",
" <td>New Orleans Pelicans</td>\n",
" <td>95.0</td>\n",
" <td>Golden State Warriors</td>\n",
" <td>111.0</td>\n",
" <td>Box Score</td>\n",
" <td>NaN</td>\n",
" <td>19596.0</td>\n",
" <td>NaN</td>\n",
" </tr>\n",
" <tr>\n",
" <th>3</th>\n",
" <td>Wed, Oct 28, 2015</td>\n",
" <td>7:30 pm</td>\n",
" <td>Philadelphia 76ers</td>\n",
" <td>95.0</td>\n",
" <td>Boston Celtics</td>\n",
" <td>112.0</td>\n",
" <td>Box Score</td>\n",
" <td>NaN</td>\n",
" <td>18624.0</td>\n",
" <td>NaN</td>\n",
" </tr>\n",
" <tr>\n",
" <th>4</th>\n",
" <td>Wed, Oct 28, 2015</td>\n",
" <td>7:30 pm</td>\n",
" <td>Chicago Bulls</td>\n",
" <td>115.0</td>\n",
" <td>Brooklyn Nets</td>\n",
" <td>100.0</td>\n",
" <td>Box Score</td>\n",
" <td>NaN</td>\n",
" <td>17732.0</td>\n",
" <td>NaN</td>\n",
" </tr>\n",
" </tbody>\n",
"</table>\n",
"</div>"
],
"text/plain": [
" Date Start (ET) Visitor/Neutral PTS \\\n",
"0 Tue, Oct 27, 2015 8:00 pm Detroit Pistons 106.0 \n",
"1 Tue, Oct 27, 2015 8:00 pm Cleveland Cavaliers 95.0 \n",
"2 Tue, Oct 27, 2015 10:30 pm New Orleans Pelicans 95.0 \n",
"3 Wed, Oct 28, 2015 7:30 pm Philadelphia 76ers 95.0 \n",
"4 Wed, Oct 28, 2015 7:30 pm Chicago Bulls 115.0 \n",
"\n",
" Home/Neutral PTS.1 Unnamed: 6 Unnamed: 7 Attend. Notes \n",
"0 Atlanta Hawks 94.0 Box Score NaN 19187.0 NaN \n",
"1 Chicago Bulls 97.0 Box Score NaN 21957.0 NaN \n",
"2 Golden State Warriors 111.0 Box Score NaN 19596.0 NaN \n",
"3 Boston Celtics 112.0 Box Score NaN 18624.0 NaN \n",
"4 Brooklyn Nets 100.0 Box Score NaN 17732.0 NaN "
]
},
"execution_count": 9,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"months = ['october', 'november', 'december', 'january', 'february',\n",
" 'march', 'april', 'may', 'june']\n",
"# Download data\n",
"games = pd.DataFrame()\n",
"for month in months:\n",
" tables = pd.read_html(\"http://www.basketball-reference.com/leagues/NBA_2016_games-{}.html\".format(month))\n",
" # Extract first table from website and concatenate to existing data\n",
" games = pd.concat([games, tables[0]], ignore_index=True)\n",
"games.head()"
]
},
{
"cell_type": "code",
"execution_count": 10,
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"<div>\n",
"<style scoped>\n",
" .dataframe tbody tr th:only-of-type {\n",
" vertical-align: middle;\n",
" }\n",
"\n",
" .dataframe tbody tr th {\n",
" vertical-align: top;\n",
" }\n",
"\n",
" .dataframe thead th {\n",
" text-align: right;\n",
" }\n",
"</style>\n",
"<table border=\"1\" class=\"dataframe\">\n",
" <thead>\n",
" <tr style=\"text-align: right;\">\n",
" <th></th>\n",
" <th></th>\n",
" <th>away_team</th>\n",
" <th>away_points</th>\n",
" <th>home_team</th>\n",
" <th>home_points</th>\n",
" </tr>\n",
" <tr>\n",
" <th>game_id</th>\n",
" <th>date</th>\n",
" <th></th>\n",
" <th></th>\n",
" <th></th>\n",
" <th></th>\n",
" </tr>\n",
" </thead>\n",
" <tbody>\n",
" <tr>\n",
" <th>0</th>\n",
" <th>2015-10-27</th>\n",
" <td>Detroit Pistons</td>\n",
" <td>106.0</td>\n",
" <td>Atlanta Hawks</td>\n",
" <td>94.0</td>\n",
" </tr>\n",
" <tr>\n",
" <th>1</th>\n",
" <th>2015-10-27</th>\n",
" <td>Cleveland Cavaliers</td>\n",
" <td>95.0</td>\n",
" <td>Chicago Bulls</td>\n",
" <td>97.0</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2</th>\n",
" <th>2015-10-27</th>\n",
" <td>New Orleans Pelicans</td>\n",
" <td>95.0</td>\n",
" <td>Golden State Warriors</td>\n",
" <td>111.0</td>\n",
" </tr>\n",
" <tr>\n",
" <th>3</th>\n",
" <th>2015-10-28</th>\n",
" <td>Philadelphia 76ers</td>\n",
" <td>95.0</td>\n",
" <td>Boston Celtics</td>\n",
" <td>112.0</td>\n",
" </tr>\n",
" <tr>\n",
" <th>4</th>\n",
" <th>2015-10-28</th>\n",
" <td>Chicago Bulls</td>\n",
" <td>115.0</td>\n",
" <td>Brooklyn Nets</td>\n",
" <td>100.0</td>\n",
" </tr>\n",
" </tbody>\n",
"</table>\n",
"</div>"
],
"text/plain": [
" away_team away_points home_team \\\n",
"game_id date \n",
"0 2015-10-27 Detroit Pistons 106.0 Atlanta Hawks \n",
"1 2015-10-27 Cleveland Cavaliers 95.0 Chicago Bulls \n",
"2 2015-10-27 New Orleans Pelicans 95.0 Golden State Warriors \n",
"3 2015-10-28 Philadelphia 76ers 95.0 Boston Celtics \n",
"4 2015-10-28 Chicago Bulls 115.0 Brooklyn Nets \n",
"\n",
" home_points \n",
"game_id date \n",
"0 2015-10-27 94.0 \n",
"1 2015-10-27 97.0 \n",
"2 2015-10-27 111.0 \n",
"3 2015-10-28 112.0 \n",
"4 2015-10-28 100.0 "
]
},
"execution_count": 10,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"column_names = {'Date': 'date', 'Start (ET)': 'start',\n",
" 'Visitor/Neutral': 'away_team', 'PTS': 'away_points',\n",
" 'Home/Neutral': 'home_team', 'PTS.1': 'home_points',\n",
" 'Unamed: 6': 'box', 'Unamed: 7': 'n_ot', 'Attend.': 'attend'}\n",
"\n",
"games = (games.rename(columns=column_names) # Rename columns\n",
" .dropna(thresh=4) # Drop rows with more than 4 missing values\n",
" [['date', 'away_team', 'away_points', 'home_team', 'home_points']]\n",
" .assign(date=lambda x: pd.to_datetime(x['date'], format='%a, %b %d, %Y'))\n",
" .set_index('date', append=True) # Add date to index\n",
" .rename_axis([\"game_id\", \"date\"]) # Rename index columns\n",
" .sort_index())\n",
"games.head()"
]
},
{
"cell_type": "code",
"execution_count": 11,
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"<div>\n",
"<style scoped>\n",
" .dataframe tbody tr th:only-of-type {\n",
" vertical-align: middle;\n",
" }\n",
"\n",
" .dataframe tbody tr th {\n",
" vertical-align: top;\n",
" }\n",
"\n",
" .dataframe thead th {\n",
" text-align: right;\n",
" }\n",
"</style>\n",
"<table border=\"1\" class=\"dataframe\">\n",
" <thead>\n",
" <tr style=\"text-align: right;\">\n",
" <th></th>\n",
" <th>game_id</th>\n",
" <th>date</th>\n",
" <th>variable</th>\n",
" <th>team</th>\n",
" </tr>\n",
" </thead>\n",
" <tbody>\n",
" <tr>\n",
" <th>0</th>\n",
" <td>0</td>\n",
" <td>2015-10-27</td>\n",
" <td>away_team</td>\n",
" <td>Detroit Pistons</td>\n",
" </tr>\n",
" <tr>\n",
" <th>1</th>\n",
" <td>1</td>\n",
" <td>2015-10-27</td>\n",
" <td>away_team</td>\n",
" <td>Cleveland Cavaliers</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2</th>\n",
" <td>2</td>\n",
" <td>2015-10-27</td>\n",
" <td>away_team</td>\n",
" <td>New Orleans Pelicans</td>\n",
" </tr>\n",
" <tr>\n",
" <th>3</th>\n",
" <td>3</td>\n",
" <td>2015-10-28</td>\n",
" <td>away_team</td>\n",
" <td>Philadelphia 76ers</td>\n",
" </tr>\n",
" <tr>\n",
" <th>4</th>\n",
" <td>4</td>\n",
" <td>2015-10-28</td>\n",
" <td>away_team</td>\n",
" <td>Chicago Bulls</td>\n",
" </tr>\n",
" </tbody>\n",
"</table>\n",
"</div>"
],
"text/plain": [
" game_id date variable team\n",
"0 0 2015-10-27 away_team Detroit Pistons\n",
"1 1 2015-10-27 away_team Cleveland Cavaliers\n",
"2 2 2015-10-27 away_team New Orleans Pelicans\n",
"3 3 2015-10-28 away_team Philadelphia 76ers\n",
"4 4 2015-10-28 away_team Chicago Bulls"
]
},
"execution_count": 11,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"tidy = pd.melt(games.reset_index(),\n",
" id_vars=['game_id', 'date'], value_vars=['away_team', 'home_team'],\n",
" value_name='team')\n",
"tidy.head()"
]
},
{
"cell_type": "code",
"execution_count": 12,
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"<div>\n",
"<style scoped>\n",
" .dataframe tbody tr th:only-of-type {\n",
" vertical-align: middle;\n",
" }\n",
"\n",
" .dataframe tbody tr th {\n",
" vertical-align: top;\n",
" }\n",
"\n",
" .dataframe thead th {\n",
" text-align: right;\n",
" }\n",
"</style>\n",
"<table border=\"1\" class=\"dataframe\">\n",
" <thead>\n",
" <tr style=\"text-align: right;\">\n",
" <th></th>\n",
" <th>game_id</th>\n",
" <th>date</th>\n",
" <th>variable</th>\n",
" <th>team</th>\n",
" <th>rest</th>\n",
" </tr>\n",
" </thead>\n",
" <tbody>\n",
" <tr>\n",
" <th>4</th>\n",
" <td>4</td>\n",
" <td>2015-10-28</td>\n",
" <td>away_team</td>\n",
" <td>Chicago Bulls</td>\n",
" <td>0.0</td>\n",
" </tr>\n",
" <tr>\n",
" <th>8</th>\n",
" <td>8</td>\n",
" <td>2015-10-28</td>\n",
" <td>away_team</td>\n",
" <td>Cleveland Cavaliers</td>\n",
" <td>0.0</td>\n",
" </tr>\n",
" <tr>\n",
" <th>14</th>\n",
" <td>14</td>\n",
" <td>2015-10-28</td>\n",
" <td>away_team</td>\n",
" <td>New Orleans Pelicans</td>\n",
" <td>0.0</td>\n",
" </tr>\n",
" <tr>\n",
" <th>17</th>\n",
" <td>17</td>\n",
" <td>2015-10-29</td>\n",
" <td>away_team</td>\n",
" <td>Memphis Grizzlies</td>\n",
" <td>0.0</td>\n",
" </tr>\n",
" <tr>\n",
" <th>18</th>\n",
" <td>18</td>\n",
" <td>2015-10-29</td>\n",
" <td>away_team</td>\n",
" <td>Dallas Mavericks</td>\n",
" <td>0.0</td>\n",
" </tr>\n",
" </tbody>\n",
"</table>\n",
"</div>"
],
"text/plain": [
" game_id date variable team rest\n",
"4 4 2015-10-28 away_team Chicago Bulls 0.0\n",
"8 8 2015-10-28 away_team Cleveland Cavaliers 0.0\n",
"14 14 2015-10-28 away_team New Orleans Pelicans 0.0\n",
"17 17 2015-10-29 away_team Memphis Grizzlies 0.0\n",
"18 18 2015-10-29 away_team Dallas Mavericks 0.0"
]
},
"execution_count": 12,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"# For each time, get the number of days between games\n",
"tidy['rest'] = tidy.sort_values('date').groupby('team').date.diff().dt.days - 1\n",
"tidy.dropna().head()"
]
},
{
"cell_type": "code",
"execution_count": 13,
"metadata": {},
"outputs": [
{
"data": {
"image/png": "iVBORw0KGgoAAAANSUhEUgAABBsAAAMmCAYAAAC0AYk5AAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAAWJQAAFiUBSVIk8AAAADl0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uIDIuMi4yLCBodHRwOi8vbWF0cGxvdGxpYi5vcmcvhp/UCwAAIABJREFUeJzs3Xm4HFWd//F3ZAcJ+4SACz8EvgwoqIzgxhJBR3BYXAAVVBQVFLdRxAUd0RnGURBHERXRAdlRxwUEBdEEFBUdQUDALzjCyCb7EgEhkPz+OKftSqe775K6ueHyfj1PnqruOqequrrvza1Pn2XaggULkCRJkiRJassTJvsEJEmSJEnS1GLYIEmSJEmSWmXYIEmSJEmSWmXYIEmSJEmSWmXYIEmSJEmSWmXYIEmSJEmSWmXYIEmSJEmSWmXYIEmSJEmSWmXYIEmSJEmSWmXYIEmSJEmSWmXYIEmSJEmSWmXYIEmSJEmSWmXYIEmSJEmSWrXsZJ+AJGnpEREnAG8YUmQ+8BBwD3Ad8BPglMz8/cSf3eNLRLwWeBvw98BqwFzggsx8+aSe2ASKiNcAV2XmZeOoOwfYvj5cJzPvaPPcxmNxXo8kSY91hg2SpLF4ArBS/TcTeD5waEQcC7w/M/8ymSc3VUTER4FP9Dy9BvDoJJzOhIuIpwHHAjsCsyb5dBbbVHs9kiSNh2GDJGmQoyktF5qeAKwCrAc8B9gVWB44ENgyInbMzAeX6FlOMRGxCvCR+nAB8EXg58BywP9O1nlNsNdRbsyniqn2eiRJGjPDBknSIJdk5neHFYiIjYHvAJsDzwNOAV6xBM5tKgtKgANwVma+YzJPRpIkaTwcIFKSNG6ZeS3lG9yb6lMvj4idJ/GUpoInNtavnLSzkCRJWgyGDZKkxZKZtwLvbDz18ck6lymi+X/zw5N2FpIkSYth2oIFCyb7HCRJS4me2SjemJknjLLeNOBqShcAgMjMawaU+yfg5ZRuFzOAVYH7gBuBOcAXMzN76r0H+Gx9+O+ZeegI53NWPc5DwLqZeU9j28uA1wPPBdatZW4Ffgacmpk/Gs1rHuH4f0eZSWJnYBPKOBd3AJcA3wJOzsxHe+qcwPCZQC7IzB1GefzDgI/Vh6sCOwGHAZtSZrW4HDioOYtIfW9eBbwG2BpYB/gLcA1wFnBMZt475JhPAPau9f8BWBt4gNLq5QLghMz81ZDzXERmThvN6637mkNjNgrKNT8UeCnwd5TrfxFwXGaeP4r9rQm8nfI52ohyHW8HLqa8f9/pU2fo66n7+UNdPzMzdx9w7K8Bb6oPP5iZnxpQ7g/A0yhdnrbqs31r4C3ADpRxVuYDfwLOB47OzD/01umzjzFfh0bdzh+Zn8nMgyPiH4B31PNZl/Jz/1vgBOC0zFysP0ojYibwXuBlwP+jhHVX1v1/FdgLOK0Wn5WZc/rsY1nK5/hllHFp1gFWBu6lzMDzY8rPwo196u4AzK4Pd87MH0bEqynvwRZ1PzdQup4dmZl31nprAv8MvBLYAJgHXAp8ITO/NcJrXhl4K7AHZeaa1YG7av1vACf1/q7pqT+9nt9uwNMp7++9wB+BHwFf7vdaJWk0DBskSX8z3rCh1j0COLg+fFtmfrln+/rAdyk3osM8SrkRPrZRdx3KTetywPXAhoNuTGrZmynjEn0jM/euzy9HGVNizxGOfyawd2b+dYRyfUXE64FjWLg7RK/fAS9v3uxNYNiwP+VGq3njPpcSwjxQy88Avk2ZXWSQO4HX9AtjImI1ynXbboRT+zLlvZ3f5zwXsRhhw97A1xj8HpxM+Xw/MmBfu1FuUNcYcsg5wKs6N4y13mGM8Hoi4veUUO5eYK1+N4IRcR3lphPgnMx8WZ8yG1OCIIBPZObHGtuWA75AuQkdZB7w0UFBRt3PuK5Do/7fwgbKz+SngWUG7OeHwB6Z+dCQYw0UES8Evk+ZJrafC4GTgOPq40XChojYDPgeJVQZ5kHK74izeurvQDdseDnlZ++fBuzjGsrPy0xKmPekAeX+LTM/2m9DRDyXEl6uP+RcLwd2z8zr+9R/OvCDIceGEsa+LTOPH1JGkvqyG4UkqS2/aay/oLkhIpanfJvaCRp+C3yIMmr/a4B/ATrfsi8DHF1vpgDIzNuBs+vDDXr33+PVdAdA/nrj+X+hGzT8Dvgg5aZ0P8rN0H11227Avw/Z/0ARsV89Zucm91zgoHpOh9K9OXw68IuI2KBR/fOUG5TmjcUZ9bmX052hYqyOAf4KfArYh3LDd2wjaFid8o1/J2i4FPgA5docQPkWdgGwFnBORLyozzG+QDdo+DnlW9o9gTdTpoDs3EAeSPlmu+P0+trOaDz3UbqvebxOorwHF1G+lX8t8DnKTSLAvpTgYxERsQflNa8BPFLP8S1038PO53QHYE79Znksr+eculyNPsFbRGxIN2gAeGFE9LtBb46N8v2ebafRDRpuAT5JuQZvoMxu8gAluPuPOs3qIhbzOvR6GeVn7BFKCPSG+u8kymcLSguUg/vWHkFEPIvys9YJGs6nfHb3ocyq8yDl83nkkH2sRQlOOkHDT+v5vJbyefl3SusrKFP/nhgRw0KYIylBw02UAGofSuuiTuugTSjvxfcpYcG3Ka1ZXsfCn59DI2LzPue7NWW2oPUp1/D7lM/63sD7gF/XolsAF9VAsVl/BUr4+6Ra/wzKZ2ZPys9o5zO1AvC1iNhyyGuVpL6cjUKS1JbrGuvr9mx7C6UJP5Rm7It84xoR/0H5dvNFlBuh1wCfaBQ5gdJUGMof7j8bcB6vr8tbKTcgnSb+B9XnLwee2ztFZ0QcC/yK0gz5gIj4YGaOesyEiHgS3RvYR4A3ZOapPWWOBL5CudFaGziVepOfmZcAl0TEPY0qvx9pRpBRWBHYrfEt7Kk924+hNMWHMt7Gx3tajXwlIl5CufFcGTglIp7WCCvWprxXUK73Lp2WC9XXIuJEyo3ccsC7KMEKtRvH7yPimY3yP+vXvH2MlqfcHH6k8VpOi4ivUm7Q1gH2j4jjM/OiTqXa/eW/KF/G3ElpCv/r5o4j4tOUcOUASmj0SeDdY3g9Z1PCGCjdWy7uOffeMGc68EwWDvOg3JwD/Bn4n8b5vYXSHB9KsPHqzJzbqHdi/RyeR7mxPiwifpCZzX0s1nXoY1NK0/5ZmXl5z7lcQGl5A+Vm9/AB+xjm85TPJsD7MvOoxrZT68/2jyndtgb5IOVzAXBoZi4SOEbEJym/IzrdFXYFThywv6fVsv/Y043rPEogB92Ze96Qmc39nBwRN1M+J9Mo3T+aLVdWoIQ/K1GCxFdm5jmN+kTEZ4EPA/9G6ULzFaDZbWdnuj/3H+nzeo+JiIOBI+o5vJMSHkrSqNmyQZLUlvsa62v1bNurLh8EDulXOTPnUb5179i0p8jZwG11fc/aVHwhEbEp3W+LT2k0UV+HblPw83uDhnr8aylNrK+i3JD2BiYjOYTyLSCUcSV6b+qp4cWbKWM3ADwvIl48xuOM1WW9zb07IuJplG+qAb6XmYf1656SmefRbe2xLqU1SMfT6DaNP7snaOjU/zmlufflwOUjfAvehh9n5qG9ryUzf0c3dIISfDQdRPdz8ubeG+y6j0co3/xeXZ96S/1WfLR+SunGAmUml16d535MGWMBut1DAIiIFSktCqBc8wX1+SdQWgxB6bawZ0/Q0HkN1wFvrA+fwKI/kxNxHT7cEzR09vM14P/qw6dExHpD9rGIiJgFvLA+/E5P0NA5xpV0X+8gnVZPN7Dw76Hmfv5CaSHT0fs7qtdbmkFD3ccvgCsaT53VEzR0HNdYf3rPttdSxqQA+FBv0FCPsyAzD6e08gDYraeFRDTW+/5+AP6T0hrrYkroJEljYtggSWrLvMb6qj3bdgWeTfmG9B4Ga7aOWOiGtN7cnFIfrsXCzcg7XtdYb3ahuIcyFgTAXvUmexGZeUhmbp6Zu2bmn4acZz+dvtkPUf5I76u+jmY/+cXpLjAaPx2ybU+6fwscN6QclG9GO3ZtrN/RWN+/fiu+iMx8bWZumZmv6LSKmEBHDNn235SuBQC79HRR2Lsub6f03e+rvoedPuwrUVoojEoNnDo3gM+PiJV6isyqyzPpdlXYvqfM9vW4sHAXiq3p3oSeOuw6Z+bPKMEawM5L4DoMG+iwefM9luAGFv4sDvu5+wGl+9QgW1Gu36sGjeVRDfwd1ePKfuFK9cfG+qCWS83fP6v3bOu8P4/Svf6DNH9um+NHNH9uD65d3RaSmY9kZmTmczPzAyMcR5IWYTcKSVJbpjfWF/o2NTPvo4wFsIj6beyGlBYJzYHw+vVTP4FuE/R9KDdknf1Mo/SthvJt/t/+0M/MhyLiu5Tm5U8CroqIcymDo52Xmf870osbpt5gd27yfpOZd49QpTnI4nMX59ij8Psh257XWN+w9tMf5m7KN97P6TyRmf8bEb+h3KxtCfwxIs6mXNsfZeZN4zvtcXuEMhhgX5k5PyJ+TvksPBHYDLiizgjQ+bb3XmD3iBiwF6DMdtHxHBbuZz+Ssykh0wqU8UfOB6jfPHea+s+hdJ/YDNg2Ip7QaDXSCdoeYuHPUvP9nD6K97PzbfUTKV0DfjdB1+HWfgNINjRnOVmkxdIIOkHMw8AvRij7ExZtJQBAPb++51hnqNiE8vqaA8wOGuwSui0++mkGroNmBGkGRb3H6fzOuB+YNcL7s05j/TmN9TMpXTBWpHQ92ykivkfpCjW7/s6WpMVi2CBJaktzFPi+rRdq8+9dKDdFQWmCvyHlD95ei8xEkJmXR8QllFYSu0bE9MYfxdsDT6nrX++tS2kavgWwMaVP/671HxHxR0r/9m8DcwbNdDFEsy/4iMFFZt4dEZ0b92H9yNswrCVJcxT6z49hn2tGxDKNbiqvo4zCP4Ny87lX/UdEXEm5tt/KnqkvJ8it/brJ9Pi/xvpMyjfrzRH9N6KMUTFafVtzDPGDxvpOdFs6dLpQ3FnP6UJK8/81gGcAl9XtnfEa5mTm/Y19Nd/PtzJ8NopendcwEddh2GcQSkDUMdZWt51uF7fUrljDjPizGRGrUgaJfQ4lYHgaJUjsF4IMmy3lrpGOVfVtfZKZC/qFCPX8Or9rpzPO9yczb4+IN1LGnFiOch3fVv89EhG/oLSa+Ua/mSwkaTTsRiFJasvfN9azd2OU+eb/j9KM/WDKjf5mdIOG31MGpRvJCXW5Et0B1qDbhaLZ3aJ7Qpm3Ur4p/igLN2OGEni8g/LN51V1Gr2xaLbquH9gqYV1bjJWGVpq8Q2bSnD6kG3DTKMxrWRmXg1sThmB/5aespsD7wcujohf9htZv2Wj6aLRLNP5/I33WsCi3YaGysyb6bb0aY7b0Bkc8oIaeM1pbNseICL+H92WB7197dt4DRNxHYZ1S1hcnW4XIwVMMMJnIyLeRZk94mTKYJc7UwKH5SjjZ1xKGZhxNEYKPsartfcnM08HnkX5fdn8vbUssC2lu9cfI+LkOmuNJI2JLRskSW1pNtHtHbl+PxbuW3wFZVrC31GaG/82M++qYym8aYTjnEq5qV2eMlDaCXV09lfV7T/MzNv6Vax92P8N+LeIeAblG+IdKX9Yd/pfbwqcGxHPzcwr+u2nj7801kcbHnRu1kcbTkyE5s3XSpn51/HuqDZDf39EHEL5LPwj5do+j/JeAWwD/CQinpmZvaFEW/q1kun1xMZ651v35rU4IzNfzcQ6h3Kj9+w6heK9dLsEzAHIzOsj4nrKVJjbU1qfvLSxj94pL5uvYefM/OE4zmtJX4fF9QDlm/7R/NwNHGMhIg6jO+PDAsrvsIspv6OuonTNmhsRO9IdVHUyNN+fizNzsbph1cEz962tzmYBL6b83D6DEipOo3RZe0pEbD+OVl+SHscMGyRJi60OLtYZb2E+ZVq9zraV6Q7c9hDwin6jp1cjfnuWmXdGxFmUPvc7RMRqlBvazjd+g6ai693PFZTQ44j6h/ZLKdPubUa5KfkA3TEgRvLnxnrfwSebImIduk2hl/SYBk23NtbXZxTNzEdSb0Z+Vf/9a232vTtlasQnUZpyHwR8ZHGPNcC6PV08+mm+RzfUZe+1mGhnA4dSWpnuQGn10/n8z2mUm03pSrFdHZekM17D7zKz2R0E2nkNS/o6LK4bKT9LMyNi+Rw+Xe1T+z0ZEU+m+3m8C3hpvxk4qsn+hv8eyu/RFWjx/alB4w/qPyJifUprsY9TwsJtKSHE+YP2IUm9DBskSW14Nd2ByH6SmTc2tr2Q7o31aUOCBijdHDqG9Yc+nhI2LEcJOTrdHu6mMWhkR0Q8nfLN8KbA5zJzoUHZ6h/a342IS4Hr69NbDjn+QjLz1oj4P8rNzFYRscYIg0Q2m87/drTHmQAXU77JhPKt5sCwoTajPp5yc/f7zDymPr8NJezZFDikd2C5OvXiyRFxA92b6FFf23FYjvI5+k2/jTUYe0F9eFudBpLMvDkibqQEIltFxKr9po1s7OdVlM/g9ZTpJ382xvO8mDIjwNqUz8O19fk7WHjWhE7YsDalJURntoreVg2dfXbMAr427AQi4ouU63U98MXMvHsSrsPi+iWlq86ylJYzw2ZfGdQ9ame6gzB+fkjQAKP/HTUh6lgOv6a8lidFxEa9v8+aImJbyhSv11PG+Di7Pr8HNVjNzEWCvzqw63/UVmOH1ae3xLBB0hg4ZoMkabFExLrAZxpP/WtPkeZUdn9hgHoT+M7GU8NGpf8h3dYEe9Cd0u2MzOw3RsEs4AuUcRn2GrLfeygtM6BnRo1R6ExhtwLwnkGF6hSDBzeeGji14BLQnHbvvfXGYpB3Ua71O+iOLQDlen4WOICFp9br1Rwwr/fazm+st/G3yTuGbNsfWLOuf6NnW2ewvZUY/h4uS2kF82rgg5QBHJtGfD11Zolz68MXAdvV9c54DR2zG+sfodsFpHe8Bihdk26v66+KiI2GvIbtKIMBvpkyPkEzJGrrOiwJzffwoEGFaii29YDNo/0dtSYLd/Ma68wZbWkOCvmhEcoeRulidjBlbJqOj1Leuw/XVgyDDPu5laShDBskSeMWEVtQbobWrk+dmJm90w4256V/Re1C0Luf6ZQp85rfeA/se1+byJ9cH74ceHLn+AOqfJvuIHUfiohnDij3Ibr/N84eUGaQ/6RMJQflD/jX9BaIiOWAYynTREL5VvYHveWWlMz8Dd0b3r8HTqldShYSETuzcLeHIxvrzakOj4yIp9CjNv9v3hT1XttmP/Q2blj3i4j9+5zHdsAR9eFf6Xbv6fgs3ffwXwa8h08AvkoZOBBKf/6ze4qN9vV06v093RYmc5oFaiuhzjfXL6/LOyifHXrK/hU4qj5cAThzwPvxVMrYJx1H9XQ7aes6LAk/Ai6p63tHxIG9BWo3iZN7n29o/o56w4CfgZmUVlPrNZ4ezfggE+GrdEOlN0XEwf0KRcS/0g0G76A7uC50f26nAV8f8JpXpxvgzAcuWLzTlvR4YzcKSdIgz46I3inrlqWMjfAUSh/eWXSbEv8MWOQPfUrf/asoTXbXAy6LiK8A11DGRngm8Bq63zZ3rMZwx1O+rev8X3ZNZv6iX8HMvCkiPge8j/LN8K8i4hTKIHB3Ufo+v5xu8/pbWPRGdKg6mN87KDcCywKnRsTrKS0X7qJ8q7gf3ZkE7gZeW7/hnkz7U7oczKA0h39ORBxPGbhzTcrNyivpvs9HNa9zZv4qIv67lpkJXF3rX075lvjJlAHmnlGrXMWiU5M2u918vLawWIbS7WasMxncTwmMvhoRu1JaAPyV8lndj25z+X/OzIW6jWTmdX3ewzdSWoDcSZkC8Q2ULiNQ+s7v1+c9HO3rORd4tG7rzBQwp89rmk2ZhrLjB0M+N0dQBufcgRJiXBURJ1DCiWUp08a+ie6AihfTDSiAVq/DhKvdCg6gdJ9YEfhSROxOCRjnUrqeHED5fdK51rDwDBlnU27e16F8Tq+IiK9Ruh6sTmkRsReLDkI50u+oCZGZ90XE6yjnvQxl3JlXUWbKuJnSBWZvui05FgBv7ukO80VKy5YNqN146s/tHyg/P5tQfjd0pss8PjMXmWVIkoYxbJAkDfJOFu7WMMgjwJeBg/t1YcjM+fWb0fMpf8zPpDvqe9ODwD9T+qdvA2wSESsM6BZBZl5V+y53ZsEYaWDIDwHrUm58l6PceO7Xp9z/UgaxvL3PtqEy82sRMY/yh/wqlEEnX9qn6KXAnp3xAiZTDWKeT7k525ISJPV7fxZQussc0mfbGyk3ZTtSAqRBzdkvBXbrM4jfj+iOX7A53alL/4cSeozFHZQQ6mTKwJS792x/GHhfZn65X+U+7+GL6bY6aLoNeM2A/v2jej11BpZf0g25bgeu7LO/2cBbGo/7jdfQ2eejEfEyyjSye9fXcBD935MfAXv1G1SxpeuwRGTm/0TEnpTrPJ3+P3dnUsKv19bHDzXqz42I11LClFUowc4n+xzqLsoN+Jcp4dwWLb6MMcnMc+v7fDLlc7ZN/ddrLvDWzPxeT/2/RMQulJZVT6UEFB8dcLhTKcGEJI2J3SgkSWOxgPLH6/WUqfsOAZ6Wme8cFAoAZObllD/Mj6DcTD1AmYf+DuDnwCeAjTPzWMoNEJRvKfcY4Xw6TckXACcNK5iZ8zJzX8oN08mUAfk653EzZQaNtwNPr+c7Lpl5ImW2g3+ltJy4m3Jj80fKDc8rga17v1WfTJn5R8o33q+l9Ae/kXLODwIJHAf8Q2a+v9/Ud/Ub0xdT+ob/N+Xz8de6jxsoN3GvA57TM3hop/6dlG/iz6Lc0D1CuYmdOc7X8y3KjdcZlNkVHqrndBywZWZ+YYT6J1JaohxG+YzdWc/pHsrn9YPAppn5kwH1x/J6ml0PLhwwteCcxvo8ul1fBp3/A3XKym0pocO1lBYfD1Pe228De2TmSzKzt/VScz+LdR2WpMz8PiXY+Qzwe8rP9lzKOBZvYNHfJXf31D+fErZ9iXK9/kq5XrdSrv8hlN9R36X7O2qDOhbEpMjMcynvz/sp53gb5f25j9Ja6XDK+3P6gPpXU67Zu4AfU17rw5RQ5lrKZ2eHzNwnM+dN6IuRNCVNW7DA6XIlSY89tc/49ZRm+udnZr9vXSUJgIg4jxKKzQdWzcwHRqgiSVoMdqOQJD1WvZjuwJDHTeaJSJocEbEvpUXOdcCRg7omRcRawPPrw6sMGiRp4hk2SJIec+rI8J+tD29i4angJD1+3A3sXNdXoc84LHUWmK/SHeDx1N4ykqT22Y1CkvSYUEecP4DSJ3kLytR+AAdk5lcm7cQkTZqIWJ4yDkxnto5LgG9QxgpZvj6/L2UQRIDfAtv0GxRTktQuWzZIkh4rbqNMY9d0FnahkB63MvPhiNiNMkPHhpSBTp89oPiPgH0MGiRpyXA2CknSY8VVlFHmOzMLfAJ45YDR+yU9TjRmVTgQ+CFwC2VWhbmU2VROB3YBXjqeKW0lSePzuOlGEREbA5dRppXqN+d5p9yylGa6rwU2A1YC/o+SmP/HsP+kImIvyjzWz6K0GrkO+CZwRGbeP6TeTOAjlP8I16f0P/wlcFRmXjCGlylJkiRJ0qR7XIQNEbEqMBvYCjh3UNgQEWtQEvGt61OdOeM7/YL/DMzKzN/3qXsEcHB9OK/WfWJ9fA2wXWbe2qfehpS5qmfUp+4FVqW0OlkAHJyZR43ulUqSJEmSNPmmfDeKiFgTOIcSNIzkG5Sg4TZgN2BlSmDwT8DNwLr0GcE4IvahBA3zgfdQ5m5eFZgF/AnYBDi5T71lgbMpQcOvgc0yc3VgLeDzwDTgyIjYdvSvWJIkSZKkyTWlWzZExPOA0+iOQAwDWjZExKsoXR4eBLaq/f+a22cBP6kPt8nMX9Xnl6H0Id6I0s3iQz31Nqd031gG2DEzf9LY9gbgBEqfwqf1dtGIiNOAVwM/zcztxvbqJUmSJEmaHFOyZUNETI+Ik4CLKEHDtcCFI1R7c11+pjdoAMjM2cD7KOM53NbYtBMlaFhAd873Zr0rgTPrw9f3bD6wLk8cMBbEJ+ty24jYYITzlyRJkiRpqTAlwwbK1Ef71vVjKV0orhtUOCJWAXasDxfp7tCRmUdl5lcy8/rG07Pq8vLMvK1PNYDz6/JvLSrqMbfu2d57vMuBTggxcFDLJSEi/jMi5kTEf07meUiSJEmSln7LTvYJTJD5lLnXD8vMSwAiYlj5zSnX4kHgmtqK4J3Ai4A1gD8CpwDHZ+b8nrqb1eUirSEarq3LGRGxVmbeCQTdsGekuuvUc5xMzwS233rrrbcH3j3J5yJJkiRJate0Nnc2JcOG2iJgtzFU2bQub6UMBnkq3ZkkoHTFmAW8OiL26JnGcr26vHHI/m9qrM8E7mzUG23dmUPKSJIkSZK01Jiq3SjGavW6XAM4HbiDElasQpmB4sPAo5TxGb7UU3d6Xd7PYA/2KT+98dwDo6g7fUgZSZIkSZKWGlOyZcM4dFoxrAbcBWyXmTfU5x4APhkR9wLHAK+LiM9k5mV1e+caPjxk/w811pftWc7LzGFTgnTqtv5eRcQBwFtHWXyTto8vSZIkSZqaDBsW9YVG0NB0LHAopfvDKynTWUK35cHyQ/a5QmO9E0p06i0XEdOGBA6dusPCjPGaCTx7AvYrSZIkSXocM2wo5jbWL+hXIDMfjYhfAq8Ant6n7kpD9r9yY/2+PsdckYW7WvSre9+A7YvjFuCSUZbdhIXHsZAkSZIkqS/DhuLWxvpfhpS7uy6b4cENwDbA+kPqNbfd0qjX3P6HEerePGT/45KZx1JabIwoIuYA27d9DpIkSZKkqccBIosrGutPHlJuzbr8c+O5K+ty2JgGG9flLZnZCSyuAeaNou5GdXnVkDKSJEmSJC01DBuKpNvi4KX9CkTEMsBz68Nm14PZdfmsiFhjwP53qsu/ddHIzHnARfXhjgOOuSWwTm9dSZIkSZKWZoYNQGbOB06qD18fEZv2KfYmyoCKjwDfbDz/U+AmSpeUQ3orRcQzgF3rw95pM0+vy/0jYkafYx5al7MzM0d6HZIkSZIkLQ0MG7r+nRIaLA/8OCJ2johpEbFcRLwZOLqWOyIzO60gOkFFJxT4QER8OCJWAoiIHYCzgWWAH2fQCCfIAAAgAElEQVTmhT3HPJ7SqmI14LyIeGatt3pEHA3sCcwHPt7+y5UkSZIkaWIYNlSZeS/wj5TAYT3gHOB+yiwQx1GmoPwmfW78M/PrlIEWpwGHA/dGxH2ULhZPpgQKe/Wp9zAlULgD2AK4NCLuqY/fUYu9KzPtQiFJkiRJeswwbGjIzCuBzSiBwu+ABcADlK4S+wJ7Z+ZDA+oeSAkOZtc6KwDXAp8CtsnMuwbUu4IylebRwHWUKTTnAucCL8nMY9p6fZIkSZIkLQnTFixYMNnnoMeAztSXW2+9NSeddNJIxSVJkiRJjy3T2tyZLRskSZIkSVKrDBskSZIkSVKrDBskSZIkSVKrDBskSZIkSVKrDBskSZIkSVKrDBskSZIkSVKrDBskSZIkSVKrDBskSZIkSVKrDBskSZIkSVKrDBskSZIkSVKrDBskSZIkSVKrDBskSZIkSVKrDBskSZIkSVKrDBskSZIkSVKrDBskSZIkSVKrDBskSZIkSVKrDBskSZIkSVKrlp3sE5C09Nj1fd+b7FOYEs76zO6TfQqSJEnSpLJlgyRJkiRJapVhgyRJkiRJapVhgyRJkiRJapVhgyRJkiRJapVhgyRJkiRJapVhgyRJkiRJapVhgyRJkiRJapVhgyRJkiRJapVhgyRJkiRJapVhgyRJkiRJapVhgyRJkiRJapVhgyRJkiRJapVhgyRJkiRJapVhgyRJkiRJapVhgyRJkiRJapVhgyRJkiRJapVhgyRJkiRJapVhgyRJkiRJapVhgyRJkiRJapVhgyRJkiRJapVhgyRJkiRJapVhgyRJkiRJapVhgyRJkiRJapVhgyRJkiRJapVhgyRJkiRJapVhgyRJkiRJapVhgyRJkiRJapVhgyRJkiRJapVhgyRJkiRJapVhgyRJkiRJapVhgyRJkiRJapVhgyRJkiRJapVhgyRJkiRJapVhgyRJkiRJapVhgyRJkiRJapVhgyRJkiRJapVhgyRJkiRJapVhgyRJkiRJapVhgyRJkiRJapVhgyRJkiRJapVhgyRJkiRJapVhgyRJkiRJapVhgyRJkiRJatWyk30CS0pEbAxcBlyYmS8dQ72ZwBXAWsCszJwzpOxewEHAsyjX9jrgm8ARmXn/CMf4CLALsD5wN/BL4KjMvGC05ypJkiRJ0tLgcdGyISJWBU4DVhpH9f+iBA0jHeMI4AxgO2BF4FFgM+BjwCURMWNAvQ2BS4G3AxsADwBrA7sBsyPiveM4Z0mSJEmSJs2UDxsiYk3gHGCrcdQ9CBixFURE7AMcDMwH3gOsmpmrArOAPwGbACf3qbcscDYwA/g1sFlmrk4JNz4PTAOOjIhtx3rukiRJkiRNlikdNkTE84BLgBeOo+6mwBHAgyOUWwY4rD78dGZ+LjMfAqhdLnahtHLYKSJe1FN9H2BTYC7wssy8uta7JzPfDZxOCRwOH+v5S5IkSZI0WaZk2BAR0yPiJOAi4KnAtcCFY6i/HKUlwkrAB0YovhOwEbAA+Gzvxsy8EjizPnx9z+YD6/LEzLy9z74/WZfbRsQGI5+5JEmSJEmTb0qGDcCGwL51/VhKF4rrxlD/Y7XOqZQBHoeZVZeXZ+ZtA8qcX5d/65IREasAW/dsX0hmXg50QohRD2opSZIkSdJkmqphw3zgLOAfMvPAzJw72ooR8Xzgg8BNlJklRrJZXV49pMy1dTkjIjqDTQbd6z+aupuP4lwkSZIkSZp0U3Lqy9oiYLex1ouIJwInUUKAN2XmPRGx7gjV1qvLG4eUuamxPhO4s1FvtHVnjnAekiRJkiQtFaZqy4bx+hylC8aXMvO8UdaZXpf3DynTHGRyes8SynSXI9WdPqSMJEmSJElLjSnZsmE8ImIP4E2UbgvvH0PVzjV8eEiZh/qU7yznZeaCUdRt/b2KiAOAt46y+CZtH1+SJEmSNDUZNgC1q8RxlCkqX5eZw1oa9Oq0PFh+SJkVGuudUKJTb7mImDYkcOjUHRZmjNdM4NkTsF9JkiRJ0uOYYUPxNWBt4PDMvHiMdTuDT640pMzKjfX7euoBrMjCXS361b1vwPbFcQtwySjLbgI8cQLOQZIkSZI0xTzuw4aIeCqwS314QES8uadIc1yLb0fEw8DPM/MV9bkbgG2A9Yccprntlka95vY/jFD35iH7H5fMPJYyNeiIImIOsH3b5yBJkiRJmnoe92EDMK2xvvYIZdeoyzUbz10JvIrhYxpsXJe3ZObddf0aYB6wXK07KGzYqC6vGuHcJEmSJElaKjzuw4bMvJ6FA4eF1PEcOq0RZmXmnJ4is4GPAc+KiDUaYULTTnV5QeO48yLiImAHYEfgnD7H3hJYp7euJEmSJElLM6e+XHw/BW6iBDeH9G6MiGcAu9aHX+rZfHpd7h8RM/rs+9C6nJ2Z2cK5SpIkSZI04QwbFlNmzqcbCnwgIj4cESsBRMQOwNnAMsCPM/PCnurHAwmsBpwXEc+s9VaPiKOBPYH5wMcn/IVIkiRJktQSw4YWZObXKQMtTgMOB+6NiPsoXSyeTAkU9upT72FKoHAHsAVwaUTcUx+/oxZ7V2bahUKSJEmS9Jhh2NCSzDyQEhzMBh4AVgCuBT4FbJOZdw2odwXwdOBo4DrKFJpzgXOBl2TmMRN/9pIkSZIktedxM0BkZu4H7DeOen9myACSPWW/BXxrHMe4FXhX/SdJkiRJ0mOaLRskSZIkSVKrDBskSZIkSVKrDBskSZIkSVKrDBskSZIkSVKrDBskSZIkSVKrDBskSZIkSVKrDBskSZIkSVKrDBskSZIkSVKrDBskSZIkSVKrDBskSZIkSVKrDBskSZIkSVKrDBskSZIkSVKrDBskSZIkSVKrDBskSZIkSVKrDBskSZIkSVKrDBskSZIkSVKrDBskSZIkSVKrDBskSZIkSVKrDBskSZIkSVKrDBskSZIkSVKrDBskSZIkSVKrDBskSZIkSVKrDBskSZIkSVKrDBskSZIkSVKrDBskSZIkSVKrDBskSZIkSVKrDBskSZIkSVKrDBskSZIkSVKrDBskSZIkSVKrDBskSZIkSVKrDBskSZIkSVKrDBskSZIkSVKrDBskSZIkSVKrDBskSZIkSVKrDBskSZIkSVKrDBskSZIkSVKrDBskSZIkSVKrDBskSZIkSVKrDBskSZIkSVKrDBskSZIkSVKrDBskSZIkSVKrDBskSZIkSVKrDBskSZIkSVKrDBskSZIkSVKrDBskSZIkSVKrDBskSZIkSVKrDBskSZIkSVKrDBskSZIkSVKrDBskSZIkSVKrDBskSZIkSVKrDBskSZIkSVKrDBskSZIkSVKrDBskSZIkSVKrDBskSZIkSVKrDBskSZIkSVKrDBskSZIkSVKrDBskSZIkSVKrDBskSZIkSVKrDBskSZIkSVKrDBskSZIkSVKrDBskSZIkSVKrDBskSZIkSVKrlp3sE1hSImJj4DLgwsx86ZBy2wMHAc8H/g54APgdcBpwXGY+PKTuXrXusyjX9jrgm8ARmXn/kHozgY8AuwDrA3cDvwSOyswLxvAyJUmSJEmadI+Llg0RsSolLFhphHKfBOYAewLrAfcDqwEvAL4AzImI1QbUPQI4A9gOWBF4FNgM+BhwSUTMGFBvQ+BS4O3ABpRwY21gN2B2RLx39K9UkiRJkqTJN+XDhohYEzgH2GqEcvsAH6wPPwesm5lrANOBd1KCh+cB/zWg7sHAfOA9wKqZuSowC/gTsAlwcp96ywJnAzOAXwObZebqwFrA54FpwJERse3YXrUkSZIkSZNnSocNEfE84BLghaMo/i91+e3MfE9m3gaQmXMz8wuU7hEAr4iIzRvHWAY4rD78dGZ+LjMfqnXnULpGPArsFBEv6jnmPsCmwFzgZZl5da13T2a+GzidEjgcPvpXLUmSJEnS5JqSYUNETI+Ik4CLgKcC1wIXDin/NErrA4CjBhQ7GXiwrm/feH4nYCNgAfDZ3kqZeSVwZn34+p7NB9bliZl5e59jfrIut42IDQadvyRJkiRJS5MpGTYAGwL71vVjKV0orhtSfhngeOBHwFX9CmTmo0AnEJje2DSrLi/vtIbo4/y6/NvAlBGxCrB1z/beY17eOObAQS0lSZIkSVqaTNXZKOYDZwGHZeYlABExsHBmXgO8adgOI+LJwJPrwxsbmzary6uHVL+2LmdExFqZeScQdMOekequA2w+pIwkSZIkSUuNKRk21BYBu7W820Mp4yc8QmkB0bFeXd64SI2umxrrM4E7G/VGW3fm6E5TkiRJkqTJNSXDhrZFxCuAt9aHX8nMWxubO10q7h+yiwcb69N7llCmuxyp7vQhZcYlIg6g+7pGssnIRSRJkiRJMmwYUUTsBJxCadWQwAd6inSu4cNDdvNQn/Kd5bzMXDCKuhPxXs0Enj0B+5UkSZIkPY4ZNgwREbsDZwArALcCu2bmX3qKdVoeLD9kVys01juhRKfechExbUjg0Kk7LMwYr1soU4OOxibAEyfgHCRJkiRJU4xhwwARcRDwOcpMFTcDO2XmtX2Kzq3LlYbsbuXG+n099QBWZOGuFv3q3jdg+7hl5rGU2TpGFBFzWHjKT0mSJEmS+jJs6BER04BPAe+vT/0BeElmDpo68wZgG2D9IbttbrulUa+5/Q8j1L15yP4lSZIkSVpqPGHkIo8fEfEE4ES6QcOvgecPCRoArqzLYQMoblyXt2Tm3XX9GmDeKOpuVJdXDSkjSZIkSdJSw7BhYV8B9q3r5wKzMvP2EerMrstnRcQaA8rsVJcXdJ7IzHnARfXhjv0qRcSWwDq9dSVJkiRJWpoZNlQR8TZg//rwu5TBIIdNZ9nxU+AmSpeUQ/rs9xnArvXhl3o2n16X+0fEjD77PrQuZ2dmjuJcJEmSJEmadIYNQESsBXy6PrwS2Ke2PBhRZs6nGwp8ICI+HBEr1f3uAJxNGWTyx5l5YU/14ynTaa4GnBcRz6z1Vo+Io4E9gfnAx8f72iRJkiRJWtIcILJ4C91pHZ8C/DEihpU/IzPf3XmQmV+PiOcBBwCHA4dFxF+BVTtFgL16d5KZD0fEnsBPgC2ASyPi3nouy9Ri78pMu1BIkiRJkh4zbNlQvKCxviowY4R/q/XuIDMPpLREmA08AKwAXEuZ2WKbzLyr34Ez8wrg6cDRwHWUKTTnUsaMeElmHrP4L0+SJEmSpCXncdOyITP3A/YbsG3Xfs+P4xjfAr41jnq3Au+q/yRJkiRJekyzZYMkSZIkSWqVYYMkSZIkSWqVYYMkSZIkSWqVYYMkSZIkSWqVYYMkSZIkSWqVYYMkSZIkSWqVYYMkSZIkSWqVYYMkSZIkSWqVYYMkSZIkSWqVYYMkSZIkSWqVYYMkSZIkSWqVYYMkSZIkSWqVYYMkSZIkSWqVYYMkSZIkSWqVYYMkSZIkSWqVYYMkSZIkSWqVYYMkSZIkSWqVYYMkSZIkSWqVYYMkSZIkSWqVYYMkSZIkSWqVYYMkSZIkSWqVYYMkSZIkSWqVYYMkSZIkSWqVYYMkSZIkSWqVYYMkSZIkSWqVYYMkSZIkSWqVYYMkSZIkSWqVYYMkSZIkSWqVYYMkSZIkSWqVYYMkSZIkSWqVYYMkSZIkSWqVYYMkSZIkSWqVYYMkSZIkSWqVYYMkSZIkSWqVYYMkSZIkSWqVYYMkSZIkSWqVYYMkSZIkSWqVYYMkSZIkSWqVYYMkSZIkSWqVYYMkSZIkSWqVYYMkSZIkSWqVYYMkSZIkSWqVYYMkSZIkSWqVYYMkSZIkSWqVYYMkSZIkSWqVYYMkSZIkSWqVYYMkSZIkSWqVYYMkSZIkSWqVYYMkSZIkSWqVYYMkSZIkSWqVYYMkSZIkSWqVYYMkSZIkSWqVYYMkSZIkSWqVYYMkSZIkSWqVYYMkSZIkSWqVYYMkSZIkSWqVYYMkSZIkSWqVYYMkSZIkSWqVYYMkSZIkSWqVYYMkSZIkSWqVYYMkSZIkSWrVspN9AktKRGwMXAZcmJkvHVJuJvARYBdgfeBu4JfAUZl5wQjH2As4CHgW5dpeB3wTOCIz75+IY0qSJEmStLR5XLRsiIhVgdOAlUYotyFwKfB2YAPgAWBtYDdgdkS8d0jdI4AzgO2AFYFHgc2AjwGXRMSMto8pSZIkSdLSaMqHDRGxJnAOsNUI5ZYFzgZmAL8GNsvM1YG1gM8D04AjI2LbPnX3AQ4G5gPvAVbNzFWBWcCfgE2Ak9s8piRJkiRJS6spHTZExPOAS4AXjqL4PsCmwFzgZZl5NUBm3pOZ7wZOp9z8H95zjGWAw+rDT2fm5zLzoVp3DqVrxKPAThHxojaOKUmSJEnS0mxKhg0RMT0iTgIuAp4KXAtcOEK1A+vyxMy8vc/2T9blthGxQeP5nYCNgAXAZ3srZeaVwJn14etbOqYkSZIkSUutKRk2ABsC+9b1YyldKK4bVDgiVgG2rg/P71cmMy8HOoFAc4DJWXV5eWbeNuAQnX3+rd5iHlOSJEmSpKXWVA0b5gNnAf+QmQdm5twRygfda3H1kHLX1uXmjec2G0O9GRGxVgvHlCRJkiRpqTUlp76sLQJ2G0OV9RrrNw4pd1NdzuxTdzT1OnXvXMxjSpIkSZK01JqSYcM4TG+sPzCk3IN9ynfW7x9FvWb5xTlmKyLiAOCtoyy+SdvHlyRJkiRNTYYNRec6zMvMBUPKPdRTvrn+8CjqNcsvzjHbMhN49gTsV5IkSZL0OGbYUHRaDywXEdOG3PyvUJfNYKFTd/kh+1+hsd6puzjHbMstlKlBR2MT4IkTcA6SJEmSpCnGsKFoDiC5Igt3e2hauS7v61N3pSH7X7mx3qm7OMdsRWYeS5mtY0QRMQfYvu1zkCRJkiRNPVN1NoqxuqGxvv6Qcp1tN/epO5p6UFoTLO4xJUmSJElaahk2FNcA8+r6sIEQN6rLqxrPXTmKehvX5S2ZeXcLx5QkSZIkaall2ABk5jzgovpwx35lImJLYJ368ILGptl1+ayIWGPAIXbqrbeYx5QkSZIkaall2NB1el3uHxEz+mw/tC5nZ2Y2nv8pcBNl/ItDeitFxDOAXevDL7V0TEmSJEmSllqGDV3HAwmsBpwXEc8EiIjVI+JoYE9gPvDxZqXMnE83FPhARHw4IlaqdXcAzgaWAX6cmRe2cUxJkiRJkpZmhg1VZj5Mubm/A9gCuDQi7qmP31GLvSszF+nOkJlfp8zqMA04HLg3Iu6jdLF4MiVQ2KvNY0qSJEmStLQybGjIzCuApwNHA9dRprOcC5wLvCQzjxlS90BKcDAbeABYAbgW+BSwTWbe1fYxJUmSJElaGk1bsGDBZJ+DHgMiYg6w/dZbb81JJ5002aejCbLr+7432acwJZz1md0n+xQkSZKksZrW5s5s2SBJkiRJklpl2CBJkiRJklpl2CBJkiRJklpl2CBJkiRJklpl2CBJkiRJklq17ETtOCKuA04BTs3MqybqOJIkSZIkaekykS0bngp8CLgiIn4bEQdHxJMm8HiSJEmSJGkpMJFhw4nAXMpcnVsAnwKuj4g5EfHmiFh9Ao8tSZIkSZImyYSFDZm5HzADeCXwLeCv9XjbAccCf46I70TEnhGxwkSdhyRJkiRJWrImbMwGgMx8CPgO8J2IeCKwB/Aa4MXA8sBu9d/ciPg2cBpwfmYumMjzkiRJkiRJE2eJzUaRmX/JzJMz82XATOBtwE+AecB04A3AD4GbIuKoiNhqSZ2bJEmSJElqz6RMfZmZd2bmsZn5YmAtSmuHP1LGd5gBvBv4VURcERHviIhVJuM8JUmSJEnS2E1K2AAQEWtHxP7AycBxwIZ10zRKa4dpwObA54BrI2L3STlRSZIkSZI0JhM6ZkOviFgNeAXwamAWsEzdNA14GPgBJXz4PrAp8DrgTcC6wLciYo/MPHtJnrMkSZIkSRqbCQ8b6sCQuwN7Ay8BlqubpgELgJ9TAoZvZObdjaqXAZdFxH8BPwNWBw4DDBskSZIkSVqKTVjYEBF7UgKGnYEV69PT6vJq4BTg1My8fth+MvOqiDgb2AfYbGLOVpIkSZIktWUiWzacQWm50AkY/gycDpycmZeMcV+dsSVubencJEmSJEnSBJnobhQPAN+hdJM4PzPnj3M/Z1HGcbiyrROTJEmSJEkTYyLDhn2A72XmA4u7o8w8vYXzkSRJkiRJS8CEhQ2ZeVpnvc5C8YLMPKe3XES8HXiURQeIlCRJkiRJj0FPGLnI+EXEMhHxb8BNwHcjYvk+xd4EfBG4ISLeO5HnI0mSJEmSJt6Ehg3AqcCHgJUprSiiT5nVKYNIrgwcERFHTPA5SZIkSZKkCTRhYUNEvBLYsz78DWUKzEUGeMzMjYDnAhdTQof3RsR2E3VekiRJkiRpYk1ky4Y31+WlwAsz89xBs1Fk5q+AFwKX16feOYHnJUmSJEmSJtBEhg1bAQuAIzLzoZEKZ+ajwGcorRteOIHnJUmSJEmSJtBEhg3T6/K6MdS5pi7XaPlcJEmSJEnSEjKRYcPNdbnhGOqsV5dOgSlJkiRJ0mPURIYNv6V0iXj7GOq8ldL14pIJOSNJkiRJkjThJjJs+FpdviAiToiIlQcVjIjlI+LzwD/Wp74+geclSZIkSZIm0LITtePMPDsizgR2A14H7Fof/xa4sxZbE9gC+Cdgnfrc+Zn5jYk6L0mSJEmSNLEmLGyo9gHOAHahDPr4+vqv17S6PA/Yc4LPSZIkSZIkTaAJDRsy837gnyJiN+CNwE7AKj3FHgJ+AXzZFg2SJEnS/2fvzsMtu+o64X+LhEwkIUyGggYZQn4YxoCAzEHSvAwCgg0vikzSAiIdRkFBEQdaISSIdBoiikytKLFlEBQaqISpEZoQQUj/CBJeAoQ5IUUCGev9Y+9rnVzuvVWV7HPPrarP53nOs/aw1t7r3JxU1fnetdcC2P3Ne2RDkqS735nknVW1b5LNSX5ivPf5Sb7U3ZeuRz8AAACA+VuXsGFJd1+W5JzxBQAAAOyB5rkaBQAAALAXmvvIhqq6eZLHJLltkoPHe25as1GyrbsfMu++AQAAANOba9hQVc9J8ke7eJ9NSbbNp0cAAADAvM0tbKiq+yZ5RYbgYClA+F6SCyNMAAAAgD3WPEc2PHMsL0/y3CRv7O4L5ng/AAAAYAOYZ9hwzwwjGE7o7lfP8T4AAADABjLP1SgOHct3z/EeAAAAwAYzz7Dh6+twDwAAAGCDmWcQ8E9j+aA53gMAAADYYOYZNhyf5AdJjququ8/xPgAAAMAGMrcJIrv7y1X1sCR/l2RLVf1tkg8k+UqG5S931P4T8+obAAAAMD9zCxuqammZy/3G12PH187YlvmulAEAAADMyTy/0B+8bH/THO8FAAAAbBDzDBueNMdrAwAAABvUPOdseOO8rg0AAABsXPNcjQIAAADYC63bJIxV9R+S3CfJzZMcluTE7j53PH5kd39wvfoCAAAAzM/cw4aqulmSVyV5SK48SeSbk5yb5J5J/qqqzkzy9O7+0Lz7BAAAAMzPXB+jqKq7JDk9yc+N99qUH1+V4hbjsZ9K8oGq+n/n2ScAAABgvuYWNlTVIUnenuGRiR8k+Z0kd12h6ilJ3pDkiiT7JPmLqrr5vPoFAAAAzNc8RzY8I8nmJFuT3L27X9rd/2d5pe4+q7t/JcnDk1yS5MAkx82xXwAAAMAczTNs+Pkk25L8t+7+/I4qd/d7krwmwyMV/88c+wUAAADM0TzDhiPH8n/tQpt/HMufnLgvAAAAwDqZZ9iw/1j+YBfabB3LbRP3BQAAAFgn8wwbvj6WtQtt7rasLQAAALCbmWfYsCXD/AtP3ZnKVXW9JM/LMKrhtDn2CwAAAJijeYYNf5phOct7VtWrqmqf1SpW1dEZwokbZQgbXjPHfgEAAABztO+8Ltzdn62qlyT5/QzLYP6nqvroTJVnVNXlSe6S5OiZ43/S3afPq187UlUHZOjvY5LcOsPP6CsZJq88vru/ukbbI5O8KMmxSW6Q5NsZRmm8rLv/ZY1210jyq0l+JcltM4Q0ZyV5c5JXd/dlV/+dAQAAwPqY58iGdPcfJnlBksuSbE7yC9k++eOTkzwlQ9CwaTz28iS/Mc8+raWqrp3kI0mOT3LnDJNcXpHkVkmOS/LZqrrnKm3vmuT0JI/PMELjogzv+ReTfKKqHr1Ku01J/jrJa5PcNcN/k2tk+LmcmOS0qjpoorcIAAAAczfXsCFJuvv4DCMETkjy+Qxhw6aZ15eTvC7J0d39m929yJUoTsoQMpyfISQ4KMm1ktwryf9NcliSU6rqkNlGVXWdJP8w1v3HJDft7sMyhA5/m2S/JG+sqiNWuOeLkjw6Qzjx2CQHj69HJjkvyT0yPJICAAAAu4W5PUYxq7vPzjBi4Teqat8k10myT5Lzuvvi9ejDjlTVdTM8OpEkx3X3W2dOf7SqHpbkC0lumOShSf5q5vxxGR6b+HKSR3b3j5Kku79RVb+U5MZJ7pnkxRlGPizd89AMk2ImyXO6e/aaf19VP8wQXjyxql7W3WdN8mYBAABgjuY+smG57r6su7/d3d/YKEHD6MgMAUiSfHz5yfGL/tKSnDdZOj4+BrG04sZJS0HDTLvLMzwekiS/sOyRiF9Mcu0MIylev8I9/ynJp8d+PXYX3w8AAAAsxLqHDRvYeTPbd19+sqpukmFUQ5J8cfZUhrkZkuT9q1x7S4a5Hw5Kcp+Z4/cby9O6+9JV2i5d84GrnAcAAIANZW6PUVTV569G823dfZvJOrNzzsrwmMSRSV5ZVRcmeWeGyS3vlOTPM4QzZyR5x0y7o8ZyW4Z5HX5Md2+tqm9kmMPhNkn+aVnbM3fQr4ztAAAAYMOb55wNt872ySDXsjQh5KYVjq2b7r6iqp6QIQi4bpJTMgQNl2QYkXBZkjdmmFthdinKG43ld5c/QrHM18a6m2eOLbVddTnNsV2SHFxVB3f3D3bm/QAAAMCizDNs+FDWDjrf9HIAACAASURBVA2ukeSQJP8hyfXHY/+WYQTBQnT3x6vqTknel+SWGX4+Sz+ja2SYO+FaSb430+zQsbxwB5f/4bL6O9v2hzPbhyaZLGyoqqdmWH50Zxw51X0BAADYs80tbOjuY3a2blXdMcPyjvdMcqPufua8+rWDfjw4yZszzK/whAyPUVya5Jgkr0jyy0nuVVX36u6lEQdLP8NLdnD5pckwZ3/mO9N2dhLNqf97bc7wiAgAAABMZl2WvtyR7j6jqh6Y5P8keUZVva+7372efRhHNLw9Q9Bwt+7+l5nT766q/53kU0luluSPkzxuPLc08mC/Hdxi/7GcDRZ+mOERjbXa7j+zvaNAY1edm+T0nax7ZJKDJ74/AAAAe6ANETYkSXdfVFWvTHJykmckWdewIcmLklwzyeuXBQ1L/fteVf1hhsc8HlNVvzbOn7B1rHLgDq6/tOTlBTPHto7H12o7u1TmBavWugq6++QMP+8dqqpTk9x3yvsDAACwZ9poS19+dizvvIB7320sP7ZGnQ+P5b5Jbj5unzOW16+qtUYo3Hgsvz5z7Jxl59Zq9/3uvmiNegAAALAhbLSwYemL9bUWcO+lSSrX+pnMPsZwwFh+bqbdESs1qqpDkxw+7s4uCbrUdq3JF2+1QjsAAADYsDZM2FBVByZ5/rj7xQV0YWn5yXusUWdpxMUVGVbOSHd/OcmXx+P3X6Xd/TL8rC9J8r9njm8Zy/tW1WqPtBw7lqet0S8AAADYMOY2Z0NVPXonqm3KMELgphkmXDwiw3KZb5tXv9bwD0memWE+hpd19/+dPVlV10zym+Pulu6eXf7yreO5Z1bVX8w+7lBV+yR5wbj7P7p760y7d2SYJPInkjw5y+ZPGFfHuGOSy5O87mq+PwAAAFgX85wg8q0ZgoNd9aUkJ07cl53xsiSPzfA4xQeq6ulJ/qG7L6+qn8qwNOdPZxid8IJlbY9P8qtJbplh5Yond/eXquqGY7u7J7kowyoW/667z6+qlyV5SZJXVdXlSd6QIVx4RJK/GKu+obu/NPH7BQAAgLmY92MUm3bh9aMkf53kvouYCLG7z03yc0m+meRGGZbB/GFVnZ9hvoRjMwQGv9jdn1rW9ntJHp1hlMIxSf6tqs7LMBnkozKEB7/Y3V9Y4dZ/lORdGZa4fF2SH4yvv0tyWIZJKZ8x5XsFAACAeZrnyIb77USdbUkuS3J+kn/r7ovn2J8d6u5/rqrbZnic4qEZHus4IMMcEu9LcsJqIwy6+4NVdfsMS2j+xwyPRnw3yYeS/HF3f3KVdpdU1c8n+c9JnpTkthmW4PzXJH+V5MRF/1wAAABgV8wtbOju3XJCw+7+TpLfGV+72vaLGQKDXW13RZI/G18AAACwW9swq1EAAAAAewZhAwAAADCpeS59OY/VE7Z19y3ncF0AAABgIvOcIPJmy/a3ZVh1YiVrnVteDwAAANjA5hk2/EaGxzT+S5L/kCFM+HSSf07yjSSXJLlOktsl+dkk+2UIE7ZkWEISAAAA2A3NM2w4McnfZwgaPpPkV7r79JUqVtVPJHldhuUm90/ywO6+bI59AwAAAOZknhNEPj3Jw5J8Mcl9VgsakqS7v5XkEUk+luQeSZ41x34BAAAAczTPsOHJGR6L+K/dfcGOKnf3FRlGQ2xK8qQ59gsAAACYo3mGDUeO5ed3oc1Xx/LmE/cFAAAAWCfzDBvOH8sjdqHN0WP5vYn7AgAAAKyTeYYNZ2R4JOIFVXXgjipX1Q2SvDDDoxcfnGO/AAAAgDmaZ9jw38bytkm2VNWdVqtYVfdP8pEkN0lyWZKXzbFfAAAAwBzNbenL7v6nqnpdkl9Ncpckn6yqszMsg7n0mMQNktwpyY0yjIJIkuO6+3Pz6hcAAAAwX3MLG0a/luRbSZ6XZP8kt8iPT/64FDJ8L8mvdffb5twnAAAAYI7mGjaMy1n+zjjC4TFJHpjklhlGNFyR5LsZ5nb4xyRv6e4fzLM/AAAAwPzNe2RDkqS7v5Lk5eMLAAAA2IPNc4JIAAAAYC+0LiMbqmq/JP8pyTEZ5mw4LMkvdfdZVXWHJL+Q5HXdfc569AcAAACYn7mPbKiqRyT5SpI3J3lykvtnWIHiwLHK0Ul+O8lZVfWiefcHAAAAmK+5hg1V9StJTknyExlWnVhpAsibjuV+SX6/qk6YZ58AAACA+Zpb2FBVN0/y3zOEDJ9Ocq8k11mh6n9N8sQk3xzrPquq7jWvfgEAAADzNc+RDc/OMFrhy0mO6e6PjUthXkl3X9bdb0ryM0m+NR5++hz7BQAAAMzRPMOG/5hkW5JXdvfWHVXu7v8vySsyjG645xz7BQAAAMzRPMOGm4zlJ3ehzT+P5eET9wUAAABYJ/MMGy4fy0270GZpKc4fTtwXAAAAYJ3MM2w4eyzvsgttHrSsLQAAALCbmWfY8J5sX13i4B1VrqqfTvKMDPM8vHeO/QIAAADmaJ5hw4lJvp/kJ5O8t6pus1Klqjq0qp6d5ANJDsjwCMWr5tgvAAAAYI7mFjZ093eS/GKGuRt+JslnqupbM1XeUFVnJvluhlUoDskwquHJ3f2NefULAAAAmK95jmxId/9TkmOS/FuGRyquP3P6DkkqyT7juXOTPLS7/2aefQIAAADma98dV7l6uvtjVVVJHpzkgRlChutlCBnOS/L5JO9P8nfdfcm8+wMAAADM19zChqo6JsmXuvsr3b0tybvHFwAAALAHm+djFCck+VJV/f4c7wEAAABsMPMMG47IMBfD/5njPQAAAIANZq4TRI7OW4d7AAAAABvEPMOGd2QY2fCUOd4DAAAA2GDmuRrFM5LcPMkvVdX1k7wuwyMVX+/uy+Z4XwAAAGCB5hk2vCXJ1iTbkjxgfCVJquqS8fhqtnX3tebYNwAAAGBO5hk2/FyGQGHTCuf230HbtYIIAAAAYAObZ9jwpggNAAAAYK8zt7Chu584r2sDAAAAG9fVDhuq6vbjZnf3xVf3egAAAMDubYqlL89IcnqSmuBaAAAAwG5uqscoVpoE8t9V1c2SnJhhlYlfmOieAAAAwAY0zwkiZ107yc/HhJEAAACwx5viMQoAAACAfydsAAAAACYlbAAAAAAmJWwAAAAAJiVsAAAAACYlbAAAAAAmJWwAAAAAJrXvhNfaXFXnr3LuRksbVXWTJJt2dLHu/spUHQMAAADWz5Rhw3t2cH7bWH55J661LdP2DQAAAFgnU32h3+FIBQAAAGDvMEXY8MYJrgEAAADsIa522NDdT5qiIwAAAMCewWoUAAAAwKSEDQAAAMCkhA0AAADApIQNAAAAwKSmWvpyj1JVt0ny3CT3T3LDJBcm+WSSk7r7nWu025zkt5M8OMmNk5yX5ONJTuzu03Zwz0cn+fUkR2f473J2krclOb67L7y67wkAAADWi5ENy1TVE5N8OsmTktw0ycVJrpPkAUneUVV/skq7W4ztnp7kZkkuSnL9JA9LsqWqnrPGPY9P8jdJ7pPkgCSXJzkqye8mOb2qDp/grQEAAMC6EDbMqKr7JHl9kmsmeWOSzd19aIbRDa8fqz2zqh6+rN2+Sd6d5PAMIyCO6u7DklwvyZ8m2ZTkFVV17xXu+dgkz0tyRZJnJTmkuw9Jcr8kX0lyZJK3TPxWAQAAYG6EDVd2UoZg4A3d/cTu/kaSdPc3u/vJSZYehXjqsnaPTXLrJFuTPKS7zxzbnd/dz0zy1vG6L51tVFX7JHnJuPvy7n5Vd188tj01w+MYlyc5tqp+dso3CgAAAPMibBhV1c8kuW2SCzLM17CS30zy7CSvW3b8aWP5pu7+9grt/mgs711VN5s5fmySI5JsS/LK5Y26+3NJluaIePwO3gIAAABsCCaI3G7p0Yj3dPf3VqrQ3R/PMOHjv6uqayW567j7/lXafaaqvp3kBkkemOS146n7jeVnuvtbq/Tr/UkeMbYDAACADU/YsN0dxvKMqtqU5DFJHpekkvwoyUcyrAzxxWXtKttHiJy5xvXPyhA23Gbm2FE72S5JDq+q63X3d9d8FwAAALBgHqPY7tZj+f0k70nyV0kelOQWGUKBpyT57PLJIZPcaGb7q2tc/2tjuXmFtjvTbnlbAAAA2JCMbNjusLF8cYYv9SclOSHJ15PcOcOqEndO8tdVdZdxPoUkOXTmGhetcf0frlB/afvCnWi3vO3VVlVPzRCi7Iwjp7w3AAAAey5hw3YHj+XmJK/o7t+YOfexqrpfkjMyjHT4gySPHM8t/Qwv7e5ta1z/4mX1Z7cv2Yl2y9tOYXOSO018TQAAAPZyHqP4cRcm+b3lB7t7a5JXjLsPqaoDx+2lkQfXHOd6WM3+YzkbLCy13W8n2i1vO4Vzk5y+k68fTHxvAAAA9lBGNmy3Ncl1k5ze3at9sf7IWO6X5FZJPjO2W3JArvzYw6yDxvKCZfdMkgOzuoNmti9YtdZV0N0nJzl5Z+pW1alJ7jvl/QEAANgzGdmw3TfHcq3f4J83s70UApwzc+zGa7RdOvf1mWPnLDu3VrtkGIkAAAAAG5qwYbvPjuVN1qhz3Zntb4zlF5JcOm6vNYniEWP5+ZljS5NMrtXuVmN5bneft0Y9AAAA2BCEDdudOpa3qarVAod7jeV3Mo5K6O5Lk3x0PH7/lRpV1R2S3GDcPW3m1JaxPLqqrrPKPY9doR0AAABsWMKG7f42w3wLm5L84fKTVXVQkmcv1e3uy2dOv3Usn1xVh69w7ReN5Zbu7pnjH07ytQxzZzx/hXveLslDx93X7OT7AAAAgIUSNoy6+7tJXjzuPr6qTq6qn0iSqrplkndneBTivCS/v6z5XybpJNdO8r6quuPY7rCqenWSRyW5IstWuejuK7I9iHhBVb1waZWLqjpmvOc+ST7Q3R+a8O0CAADA3AgbruyEJH8ybj8lyTer6vwkX0xyTJLzk/xCd39ztlF3X5IhUPhOktsn+fTY7jtJnjFWO667f+xRiO5+Y4YVITYleWmS71fVBRkesbhJhhDj0RO+RwAAAJgrYcOM7t7W3c/OMPfC25N8K8Nyll9KclKSo7t7yyptP5vktkleneTsDMtZbk3y3iQP6O6T1rjv0zKEFVuSXJRk/yRnJXlZkrt19/cmeYMAAACwDvZddAc2ou7+YJIPXoV230xy3Pja1banJDllV9sBAADARmNkAwAAADApYQMAAAAwKWEDAAAAMClhAwAAADApYQMAAAAwKWEDAAAAMClhAwAAADApYQMAAAAwKWEDAAAAMClhAwAAADApYQMAAAAwKWEDAAAAMClhAwAAADApYQMAAAAwKWEDAAAAMClhAwAAADCpfRfdAZjKQ5/7jkV3AQAAgBjZAAAAAExM2AAAAABMStgAAAAATErYAAAAAExK2AAAAABMStgAAAAATErYAAAAAExK2AAAAABMStgAAAAATErYAAAAAExK2AAAAABMStgAAAAATErYAAAAAExK2AAAAABMStgAAAAATErYAAAAAExK2AAAAABMStgAAAAATErYAAAAAExK2AAAAABMStgAAAAATErYAAAAAExK2AAAAABMStgAAAAATErYAAAAAExK2AAAAABMStgAAAAATErYAAAAAExK2AAAAABMStgAAAAATErYAAAAAExK2AAAAABMStgAAAAATErYAAAAAExK2AAAAABMStgAAAAATErYAAAAAExK2AAAAABMStgAAAAATErYAAAAAExK2AAAAABMStgAAAAATErYAAAAAExK2AAAAABMat9Fd2B3UFUvTfLCJKd19zGr1Nmc5LeTPDjJjZOcl+TjSU7s7tN2cP1HJ/n1JEdn+G9ydpK3JTm+uy+c6G0AAADAujCyYQeq6p5JXrCDOrdI8ukkT09ysyQXJbl+kocl2VJVz1mj7fFJ/ibJfZIckOTyJEcl+d0kp1fV4Vf/XQAAAMD6ETasoaoOSfLmJPusUWffJO9OcniSTyY5qrsPS3K9JH+aZFOSV1TVvVdo+9gkz0tyRZJnJTmkuw9Jcr8kX0lyZJK3TPmeAAAAYN6EDWt7VZKbJ/nhGnUem+TWSbYmeUh3n5kk3X1+dz8zyVszBA4vnW1UVfskecm4+/LuflV3Xzy2PTXD4xiXJzm2qn52qjcEAAAA8yZsWEVVPSLJk5KckSEwWM3TxvJN3f3tFc7/0Vjeu6puNnP82CRHJNmW5JXLG3X355K8c9x9/M73HAAAABbLBJErqKobJvmzJBcneVySZ6xS71pJ7jruvn+lOt39mar6dpIbJHlgkteOp+43lp/p7m+t0pX3J3nE2A7YTTz0ue9YdBd2e+864eGL7gIAAFeDkQ0re32GCR5/p7v/dY16le0/wzPXqHfWWN5m5thRu9Du8Kq63hr1AAAAYMMQNixTVU9P8qAkH05ywg6q32hm+6tr1PvaWG5eoe3OtFveFgAAADYsj1HMqKpKcnySHyR5QndfsYMmh85sX7RGvaUJJmfrL21fuBPtlredRFU9NclTdrL6kVPfHwAAgD2TsGE0LmH5liQHJfnV7j57J5ot/fwu7e5ta9S7eFn92e1LdqLd8rZT2ZzkTnO4LgAAAHsxYcN2v5vkp5P8Q3f/+U62WRp5cM2q2rRG4LD/WM4GC0tt91vj+vvPbK8VSlxV5yY5fSfrHpnk4Dn0AQAAgD2MsCFJVd09yW8l+U6SX92Fpltntg/IlR97mHXQWF6wQtsD17j+QTPbF6xa6yrq7pOTnLwzdavq1CT3nboPAAAA7HmEDYOnJNknw2/uzximbriSpfkS7lFV3xi3H5nknJk6N07yxVWuf+Ox/PrMsXOS3G3m3FrtkmEUAgAAAGx4wobBprE8YHyt5ppJDh+390vyhSSXjsePzOphwxFj+fmZY59L8p+y9sSLtxrLc7v7vDXqAQAAwIYhbEjS3U9M8sTVzlfVa5M8Nclp3X3MsnMfTXJMkvsnec8Kbe+Q5Abj7mkzp7ZkmCfi6Kq6ziphwrErtAMAAIAN7RqL7sAe4K1j+eSqOnyF8y8ayy3d3TPHP5zkaxkCn+cvb1RVt0vy0HH3NRP1FQAAAOZO2HD1/WWSTnLtJO+rqjsmSVUdVlWvTvKoJFck+b3ZRt19RbYHES+oqhdW1YFj22OSvDvDPBIf6O4PrccbAQAAgCkIG66m7r4kQ6DwnSS3T/Lpqjp/3H/GWO247v6xRyG6+40ZVoPYlOSlSb5fVRdkeMTiJhlCjEfP/U0AAADAhIQNE+juzya5bZJXJzk7w3KWW5O8N8kDuvukNdo+LUNYsSXJRUn2T3JWkpcluVt3f2++vQcAAIBpmSByJ4yBwNN2UOebSY4bX7t6/VOSnHLVegcAAAAbi5ENAAAAwKSEDQAAAMCkhA0AAADApIQNAAAAwKSEDQAAAMCkhA0AAADApIQNAAAAwKSEDQAAAMCkhA0AAADApIQNAAAAwKSEDQAAAMCkhA0AAADApIQNAAAAwKSEDQAAAMCkhA0AAADApIQNAAAAwKSEDQAAAMCkhA0AAADApIQNAAAAwKSEDQAAAMCkhA0AAADApIQNAAAAwKSEDQAAAMCkhA0AAADApIQNAAAAwKSEDQAAAMCkhA0AAADApIQNAAAAwKSEDQAAAMCkhA0AAADApIQNAAAAwKSEDQAAAMCkhA0AAADApIQNAAAAwKSEDQAAAMCkhA0AAADApIQNAAAAwKSEDQAAAMCkhA0AAADApIQNAAAAwKSEDQAAAMCkhA0AAADApIQNAAAAwKSEDQAAAMCkhA0AAADApIQNAAAAwKSEDQAAAMCkhA0AAADApIQNAAAAwKSEDQAAAMCkhA0AAADApIQNAAAAwKSEDQAAAMCkhA0AAADApIQNAAAAwKSEDQAAAMCkhA0AAADApIQNAAAAwKSEDQAAAMCkhA0AAADApIQNAAAAwKT2XXQHNqKqunaS/5Lk55McmWT/JOcm2ZLkhO7+11XabU7y20kenOTGSc5L8vEkJ3b3aTu456OT/HqSozP8dzk7yduSHN/dF07wtgAAAGBdGNmwTFUdmeRfkvxBkjsnuWaSy5L8ZJInJvlUVf3yCu1ukeTTSZ6e5GZJLkpy/SQPS7Klqp6zxj2PT/I3Se6T5IAklyc5KsnvJjm9qg6f5t0BAADA/AkbZlTVvkneniFYODvJA5JcK8nBSW6f5NQk+yV5fVXdaVm7dyc5PMknkxzV3YcluV6SP02yKckrqureK9zzsUmel+SKJM9Kckh3H5Lkfkm+kmFkxVvm8HYBAABgLoQNV/aoJD+VYWTBI7v7f3X3Fd29rbs/m+RBSc7MMNrht2baPTbJrZNsTfKQ7j4zSbr7/O5+ZpK3ZggcXjp7s6raJ8lLxt2Xd/eruvvise2pGR7HuDzJsVX1s3N4vwAAADA5YcOVPXgst3T3GctPdvePsn2UwX1nTj1tLN/U3d9e4bp/NJb3rqqbzRw/NskRSbYleeUK9/tckneOu4/fmTcAAAAAiyZsuLJPJ/m7JP+4Rp1zx/LQJKmqayW563js/Ss16O7PJFkKIR44c+p+Y/mZ7v7WKvdbuuYDVzkPAAAAG4rVKGZ094lJTtxBtXuO5VfHsrI9tDlzjXZnJblBktvMHDtqJ9slyeFVdb3u/u4O+gcAAAALZWTDLqiqmyf5pXH3PWN5o5kqX83qvjaWm2eOLbXdmXbL2wIAAMCGZGTDTqqqA5L8dZIDk/woySvGU4fOVLtojUv8cIX6S9sX7kS75W2vtqp6apKn7GT1I6e8NwAAAHsuYcNOqKr9MszlcLfx0HHd/ZVxe+lneGl3b1vjMhcvqz+7fclOtFvedgqbk9xph7UAAABgFwgbdqCqDk7y9xlWjkiSE7v7dTNVlkYeXLOqNq0ROOw/lrPBwlLb/dbowv4z22uFElfFuUlO38m6RyY5eOL7AwAAsAcSNqyhqjYneXeSo8dDr+zu5y6rtnVm+4Bc+bGHWQeN5QUrtD1wjW4cNLN9waq1roLuPjnJyTtTt6pOzZWX+wQAAIAVmSByFVV1VJKPZ3vQ8OLufs4KVc+Z2b7xGpdcOvf1FdruTLtk+7KbAAAAsGEJG1ZQVT+T5CNJbprk8iT/ubv/YJXqX0hy6bi91iSKR4zl52eOfW4n2t1qLM/t7vPWqAcAAAAbgrBhmaq6fZJ/THKdDI9EPKK7/2K1+t19aZKPjrv3X+Wad0hyg3H3tJlTW8by6Kq6ziq3WJor4rRVzgMAAMCGImyYMU4G+T+THJZhGcsHdfe7dqLpW8fyyVV1+ArnXzSWW7q7Z45/OMnXMsyd8fwV+nO7JA8dd1+zE/0AAACAhRM2XNmLktxy3P617t7Z0QR/maSTXDvJ+6rqjklSVYdV1auTPCrJFUl+b7ZRd1+R7UHEC6rqhVV14Nj2mAyTU+6T5APd/aGr/K4AAABgHVmNYlRV+yd5+ri7LcnLq+rlO2h2l+4+p7svqapHJflgktsn+XRVfT/DUpH7jHWPWym86O43VtXdkzw1yUuTvKSqfpTkkKUqSR59dd4bAAAArCcjG7a7bZJDx+1NSQ7fiddSkJDu/ux4jVcnOTvDcpZbk7w3yQO6+6TVbtzdT8sw+mFLhsc39k9yVpKXJblbd39vqjcJAAAA82Zkw6i7P5UhZLg61/hmkuPG1662PSXJKVfn/gAAALARGNkAAAAATErYAAAAAExK2AAAAABMStgAAAAATErYAAAAAExK2AAAAABMStgAAAAATErYAAAAAExK2AAAAABMStgAAAAATErYAAAAAExK2AAAAABMStgAAAAATErYAAAAAExK2AAAAABMStgAAAAATErYAAAAAExK2AAAAABMStgAAAAATErYAAAAAExK2AAAAABMStgAAAAATErYAAAAAExK2AAAAABMStgAAAAATErYAAAAAExK2AAAAABMStgAAAAATErYAAAAAExK2AAAAABMStgAAAAATErYAAAAAExK2AAAAABMStgAAAAATErYAAAAAExK2AAAAABMStgAAAAATErYAAAAAExq30V3AACWe+hz37HoLuz23nXCwxfdBQBgL2ZkAwAAADApYQMAAAAwKWEDAAAAMClhAwAAADApYQMAAAAwKWEDAAAAMClhAwAAADApYQMAAAAwKWEDAAAAMClhAwAAADApYQMAAAAwKWEDAAAAMClhAwAAADApYQMAAAAwKWEDAAAAMClhAwAAADApYQMAAAAwKWEDAAAAMClhAwAAADApYQMAAAAwKWEDAAAAMClhAwAAADCpfRfdAQZV9egkv57k6Az/Xc5O8rYkx3f3hYvsGwAAAOwKIxs2gKo6PsnfJLlPkgOSXJ7kqCS/m+T0qjp8gd0DAACAXWJkw4JV1WOTPC/JFUmek+S1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\n",
"text/plain": [
"<Figure size 576x432 with 1 Axes>"
]
},
"metadata": {
"image/png": {
"height": 403,
"width": 525
}
},
"output_type": "display_data"
}
],
"source": [
"ax = tidy['rest'].plot.hist(bins=list(range(11)), figsize=(8,6))\n",
"ax.set(xlabel='Days of rest', title=\"Days of rest between games\")\n",
"sns.despine()\n",
"plt.show()"
]
},
{
"cell_type": "code",
"execution_count": 14,
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"<div>\n",
"<style scoped>\n",
" .dataframe tbody tr th:only-of-type {\n",
" vertical-align: middle;\n",
" }\n",
"\n",
" .dataframe tbody tr th {\n",
" vertical-align: top;\n",
" }\n",
"\n",
" .dataframe thead th {\n",
" text-align: right;\n",
" }\n",
"</style>\n",
"<table border=\"1\" class=\"dataframe\">\n",
" <thead>\n",
" <tr style=\"text-align: right;\">\n",
" <th></th>\n",
" <th>rest</th>\n",
" </tr>\n",
" <tr>\n",
" <th>variable</th>\n",
" <th></th>\n",
" </tr>\n",
" </thead>\n",
" <tbody>\n",
" <tr>\n",
" <th>away_team</th>\n",
" <td>1.016897</td>\n",
" </tr>\n",
" <tr>\n",
" <th>home_team</th>\n",
" <td>1.210000</td>\n",
" </tr>\n",
" </tbody>\n",
"</table>\n",
"</div>"
],
"text/plain": [
" rest\n",
"variable \n",
"away_team 1.016897\n",
"home_team 1.210000"
]
},
"execution_count": 14,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"(tidy.groupby('variable')\n",
" .agg({'rest': 'mean'}))"
]
}
],
"metadata": {
"kernelspec": {
"display_name": "tidypandas",
"language": "python",
"name": "tidypandas"
},
"language_info": {
"codemirror_mode": {
"name": "ipython",
"version": 3
},
"file_extension": ".py",
"mimetype": "text/x-python",
"name": "python",
"nbconvert_exporter": "python",
"pygments_lexer": "ipython3",
"version": "3.6.4"
}
},
"nbformat": 4,
"nbformat_minor": 2
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment