OSGeoLive-Notebooks/Pandas/solved - 02 - Data structur...

1914 lines
102 KiB
Plaintext

{
"cells": [
{
"cell_type": "code",
"execution_count": 1,
"metadata": {
"collapsed": true
},
"outputs": [],
"source": [
"import pandas as pd"
]
},
{
"cell_type": "code",
"execution_count": 2,
"metadata": {
"collapsed": false
},
"outputs": [],
"source": [
"%matplotlib inline\n",
"import numpy as np\n",
"import matplotlib.pyplot as plt\n",
"try:\n",
" import seaborn\n",
"except ImportError:\n",
" pass"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"# Tabular data"
]
},
{
"cell_type": "code",
"execution_count": 3,
"metadata": {
"collapsed": true
},
"outputs": [],
"source": [
"df = pd.read_csv(\"data/titanic.csv\")"
]
},
{
"cell_type": "code",
"execution_count": 4,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/html": [
"<div>\n",
"<table border=\"1\" class=\"dataframe\">\n",
" <thead>\n",
" <tr style=\"text-align: right;\">\n",
" <th></th>\n",
" <th>PassengerId</th>\n",
" <th>Survived</th>\n",
" <th>Pclass</th>\n",
" <th>Name</th>\n",
" <th>Sex</th>\n",
" <th>Age</th>\n",
" <th>SibSp</th>\n",
" <th>Parch</th>\n",
" <th>Ticket</th>\n",
" <th>Fare</th>\n",
" <th>Cabin</th>\n",
" <th>Embarked</th>\n",
" </tr>\n",
" </thead>\n",
" <tbody>\n",
" <tr>\n",
" <th>0</th>\n",
" <td>1</td>\n",
" <td>0</td>\n",
" <td>3</td>\n",
" <td>Braund, Mr. Owen Harris</td>\n",
" <td>male</td>\n",
" <td>22.0</td>\n",
" <td>1</td>\n",
" <td>0</td>\n",
" <td>A/5 21171</td>\n",
" <td>7.2500</td>\n",
" <td>NaN</td>\n",
" <td>S</td>\n",
" </tr>\n",
" <tr>\n",
" <th>1</th>\n",
" <td>2</td>\n",
" <td>1</td>\n",
" <td>1</td>\n",
" <td>Cumings, Mrs. John Bradley (Florence Briggs Th...</td>\n",
" <td>female</td>\n",
" <td>38.0</td>\n",
" <td>1</td>\n",
" <td>0</td>\n",
" <td>PC 17599</td>\n",
" <td>71.2833</td>\n",
" <td>C85</td>\n",
" <td>C</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2</th>\n",
" <td>3</td>\n",
" <td>1</td>\n",
" <td>3</td>\n",
" <td>Heikkinen, Miss. Laina</td>\n",
" <td>female</td>\n",
" <td>26.0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>STON/O2. 3101282</td>\n",
" <td>7.9250</td>\n",
" <td>NaN</td>\n",
" <td>S</td>\n",
" </tr>\n",
" <tr>\n",
" <th>3</th>\n",
" <td>4</td>\n",
" <td>1</td>\n",
" <td>1</td>\n",
" <td>Futrelle, Mrs. Jacques Heath (Lily May Peel)</td>\n",
" <td>female</td>\n",
" <td>35.0</td>\n",
" <td>1</td>\n",
" <td>0</td>\n",
" <td>113803</td>\n",
" <td>53.1000</td>\n",
" <td>C123</td>\n",
" <td>S</td>\n",
" </tr>\n",
" <tr>\n",
" <th>4</th>\n",
" <td>5</td>\n",
" <td>0</td>\n",
" <td>3</td>\n",
" <td>Allen, Mr. William Henry</td>\n",
" <td>male</td>\n",
" <td>35.0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>373450</td>\n",
" <td>8.0500</td>\n",
" <td>NaN</td>\n",
" <td>S</td>\n",
" </tr>\n",
" </tbody>\n",
"</table>\n",
"</div>"
],
"text/plain": [
" PassengerId Survived Pclass \\\n",
"0 1 0 3 \n",
"1 2 1 1 \n",
"2 3 1 3 \n",
"3 4 1 1 \n",
"4 5 0 3 \n",
"\n",
" Name Sex Age SibSp \\\n",
"0 Braund, Mr. Owen Harris male 22.0 1 \n",
"1 Cumings, Mrs. John Bradley (Florence Briggs Th... female 38.0 1 \n",
"2 Heikkinen, Miss. Laina female 26.0 0 \n",
"3 Futrelle, Mrs. Jacques Heath (Lily May Peel) female 35.0 1 \n",
"4 Allen, Mr. William Henry male 35.0 0 \n",
"\n",
" Parch Ticket Fare Cabin Embarked \n",
"0 0 A/5 21171 7.2500 NaN S \n",
"1 0 PC 17599 71.2833 C85 C \n",
"2 0 STON/O2. 3101282 7.9250 NaN S \n",
"3 0 113803 53.1000 C123 S \n",
"4 0 373450 8.0500 NaN S "
]
},
"execution_count": 4,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"df.head()"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Starting from reading this dataset, to answering questions about this data in a few lines of code:"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"**What is the age distribution of the passengers?**"
]
},
{
"cell_type": "code",
"execution_count": 5,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/plain": [
"<matplotlib.axes._subplots.AxesSubplot at 0x7fa70ee497f0>"
]
},
"execution_count": 5,
"metadata": {},
"output_type": "execute_result"
},
{
"data": {
"image/png": "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\n3jFtW79+vZqbm3Xp0iU99thjuu2225Jivk8//VSVlZU6ffq0enp69MQTT2jChAlJMduVzp8/rwce\neEALFy7UXXfdlTTzNTY26qc//aluueUWWZal8ePH60c/+lHSzCdJ9fX12rp1q1wul5YsWaLx48cn\nzXy1tbX63e9+J4fDIcuy1NLSotdffz0p5uvu7tayZcvU0dGhCxcuaOHChRo3btzVz2bFQWNjo/X4\n449blmVZ//jHP6w5c+bEI0ZUdXd3W2VlZdYzzzxj7dixw7Isy6qsrLT8fr9lWZa1YcMG67e//W08\nIw7KX//6V+uxxx6zLMuy2tvbrfvuu8+qrKy09u/fb1lWYs/3xz/+0aqurrYsy7JOnDhhFRcXJ81s\nV9qwYYNVUlJivfbaa0l123z33XetJUuW9NmWTPO1t7dbxcXFVnd3txUMBq1nnnkmqea7UmNjo7V6\n9eqkmW/Hjh3Whg0bLMuyrEAgYH3nO9+x9bclLoe+/9s5wRNZRkaGqqur5fP5ItsaGxtVVFQkSSoq\nKlJDQ0O84g3anXfeqaqqKknS0KFD1d3draamJk2dOlVSYs83Y8YM/fCHP5Qktba26rrrrkua2T5z\n7NgxHTt2TPfee68sy1JTU1PS3Dalz58FMZnuew0NDZo8ebKGDBmiESNGaPXq1Uk135VeeuklLViw\nIGnmGz58uNrb2yVJHR0d8ng8tv62xKWok/Gc4E6nU263u8+2cDgcOaSRm5urYDAYj2hR4XA4dM01\n10i6fKjqvvvuS6r5JGnu3LlaunSpli9fnnSzrVu3TpWVlZGvk22+o0ePasGCBXrkkUfU0NCgTz/9\nNGnmO3HihMLhsJ544gmVlpbqnXfeSar5PvP+++/ruuuuU25ubtLcPmfMmKHW1lYVFxerrKxMS5cu\ntTVb3J6jvtJ/PhpORsky4xtvvKG6ujpt3bpVxcXFke3JMN+uXbv097//XU8//XSfeRJ9tn379qmg\noEDXX//FnzCU6PONHj1aixYt0v33369//etfmjdvni5evBj5fqLPZ1mWzpw5o5deekknTpzQvHnz\nkur2+Zm9e/fqoYce+tz2RJ6vvr5eo0aNUnV1tQ4fPqzly5f3+f5AZ4tLUds5J3giysrKUk9Pj9xu\ntwKBQJ/D4ono7bff1pYtW7R161ZlZ2cnzXwtLS3Kzc3V1772NU2YMEG9vb1JM5skvfXWW/r44491\n4MABBQIBpaenKzMzM2nmGzlypO6//35J0o033qgRI0bogw8+SJr5RowYoYKCAjmdTt14443KysqS\ny+VKmvk+09jYGDmbZbLc/5qbmzVlyhRJ0vjx4xUMBjVkyJCrni0uh75T5ZzghYWFkTn9fn/kCktE\nXV1dev755/Xyyy8rJydHUvLM19TUpG3btkm6/LRMd3e3CgsLtX//fkmJPZskbdy4UXv37tXu3btV\nUlKihQsXJtV8v//97yPXXzAY1OnTp/XQQw8lzXyTJ0/Wu+++K8uy1N7ennS3T+nyztpnD0Ck5Pnb\nMnr0aL333nuSLj+FkZWVpbvvvvuqr7u4nUJ0w4YNamxsjJwTfPz48fGIETUtLS1au3atWltb5XK5\nNHLkSL3wwguqrKxUT0+PRo0apeeee05paWnxjmrLnj17tGnTJo0ZM0aWZcnhcGjdunVauXJlws93\n/vx5rVixQidPntT58+e1ePFiTZw4UUuXLk342f7Tpk2bdMMNN+iee+5JmvnOnTun8vJydXZ26uLF\ni1q0aJEmTJigZcuWJcV80uX73969e+VwOLRgwQLdeuutSXP9SZf/flZVVWnLli2SLj/gSobrr7u7\nWytWrNDp06d16dIlPfnkkxo7duxVz8a5vgEAMBhnJgMAwGAUNQAABqOoAQAwGEUNAIDBKGoAAAxG\nUQMAYDCKGgAAg1HUAAAY7P8DvN2ShlKzVvwAAAAASUVORK5CYII=\n",
"text/plain": [
"<matplotlib.figure.Figure at 0x7fa70ee31a90>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"df['Age'].hist()"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"**How does the survival rate of the passengers differ between sexes?**"
]
},
{
"cell_type": "code",
"execution_count": 6,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/html": [
"<div>\n",
"<table border=\"1\" class=\"dataframe\">\n",
" <thead>\n",
" <tr style=\"text-align: right;\">\n",
" <th></th>\n",
" <th>Survived</th>\n",
" </tr>\n",
" <tr>\n",
" <th>Sex</th>\n",
" <th></th>\n",
" </tr>\n",
" </thead>\n",
" <tbody>\n",
" <tr>\n",
" <th>female</th>\n",
" <td>0.742038</td>\n",
" </tr>\n",
" <tr>\n",
" <th>male</th>\n",
" <td>0.188908</td>\n",
" </tr>\n",
" </tbody>\n",
"</table>\n",
"</div>"
],
"text/plain": [
" Survived\n",
"Sex \n",
"female 0.742038\n",
"male 0.188908"
]
},
"execution_count": 6,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"df.groupby('Sex')[['Survived']].aggregate(lambda x: x.sum() / len(x))"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"**Or how does it differ between the different classes?**"
]
},
{
"cell_type": "code",
"execution_count": 7,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/plain": [
"<matplotlib.axes._subplots.AxesSubplot at 0x7fa70cd49710>"
]
},
"execution_count": 7,
"metadata": {},
"output_type": "execute_result"
},
{
"data": {
"image/png": "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\n",
"text/plain": [
"<matplotlib.figure.Figure at 0x7fa70cdccb38>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"df.groupby('Pclass')['Survived'].aggregate(lambda x: x.sum() / len(x)).plot(kind='bar')"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"**Are young people more likely to survive?**"
]
},
{
"cell_type": "code",
"execution_count": 8,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/plain": [
"0.38383838383838381"
]
},
"execution_count": 8,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"df['Survived'].sum() / df['Survived'].count()"
]
},
{
"cell_type": "code",
"execution_count": 9,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/plain": [
"0.41196013289036543"
]
},
"execution_count": 9,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"df25 = df[df['Age'] <= 25]\n",
"df25['Survived'].sum() / len(df25['Survived'])"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"All the needed functionality for the above examples will be explained throughout this tutorial."
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"# Data structures\n",
"\n",
"Pandas provides two fundamental data objects, for 1D (``Series``) and 2D data (``DataFrame``)."
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## Series\n",
"\n",
"A Series is a basic holder for **one-dimensional labeled data**. It can be created much as a NumPy array is created:"
]
},
{
"cell_type": "code",
"execution_count": 10,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/plain": [
"0 0.1\n",
"1 0.2\n",
"2 0.3\n",
"3 0.4\n",
"dtype: float64"
]
},
"execution_count": 10,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"s = pd.Series([0.1, 0.2, 0.3, 0.4])\n",
"s"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### Attributes of a Series: `index` and `values`\n",
"\n",
"The series has a built-in concept of an **index**, which by default is the numbers *0* through *N - 1*"
]
},
{
"cell_type": "code",
"execution_count": 11,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/plain": [
"RangeIndex(start=0, stop=4, step=1)"
]
},
"execution_count": 11,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"s.index"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"You can access the underlying numpy array representation with the `.values` attribute:"
]
},
{
"cell_type": "code",
"execution_count": 12,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/plain": [
"array([ 0.1, 0.2, 0.3, 0.4])"
]
},
"execution_count": 12,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"s.values"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"We can access series values via the index, just like for NumPy arrays:"
]
},
{
"cell_type": "code",
"execution_count": 13,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/plain": [
"0.10000000000000001"
]
},
"execution_count": 13,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"s[0]"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Unlike the NumPy array, though, this index can be something other than integers:"
]
},
{
"cell_type": "code",
"execution_count": 14,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/plain": [
"a 0\n",
"b 1\n",
"c 2\n",
"d 3\n",
"dtype: int64"
]
},
"execution_count": 14,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"s2 = pd.Series(np.arange(4), index=['a', 'b', 'c', 'd'])\n",
"s2"
]
},
{
"cell_type": "code",
"execution_count": 15,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/plain": [
"2"
]
},
"execution_count": 15,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"s2['c']"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"In this way, a ``Series`` object can be thought of as similar to an ordered dictionary mapping one typed value to another typed value.\n",
"\n",
"In fact, it's possible to construct a series directly from a Python dictionary:"
]
},
{
"cell_type": "code",
"execution_count": 16,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/plain": [
"Belgium 11.3\n",
"France 64.3\n",
"Germany 81.3\n",
"Netherlands 16.9\n",
"United Kingdom 64.9\n",
"dtype: float64"
]
},
"execution_count": 16,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"pop_dict = {'Germany': 81.3, \n",
" 'Belgium': 11.3, \n",
" 'France': 64.3, \n",
" 'United Kingdom': 64.9, \n",
" 'Netherlands': 16.9}\n",
"population = pd.Series(pop_dict)\n",
"population"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"We can index the populations like a dict as expected:"
]
},
{
"cell_type": "code",
"execution_count": 17,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/plain": [
"64.299999999999997"
]
},
"execution_count": 17,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"population['France']"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"but with the power of numpy arrays:"
]
},
{
"cell_type": "code",
"execution_count": 18,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/plain": [
"Belgium 11300.0\n",
"France 64300.0\n",
"Germany 81300.0\n",
"Netherlands 16900.0\n",
"United Kingdom 64900.0\n",
"dtype: float64"
]
},
"execution_count": 18,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"population * 1000"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## DataFrames: Multi-dimensional Data\n",
"\n",
"A DataFrame is a **tablular data structure** (multi-dimensional object to hold labeled data) comprised of rows and columns, akin to a spreadsheet, database table, or R's data.frame object. You can think of it as multiple Series object which share the same index.\n",
"\n",
"<img src=\"img/dataframe.png\" width=110%>"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"One of the most common ways of creating a dataframe is from a dictionary of arrays or lists.\n",
"\n",
"Note that in the IPython notebook, the dataframe will display in a rich HTML view:"
]
},
{
"cell_type": "code",
"execution_count": 19,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/html": [
"<div>\n",
"<table border=\"1\" class=\"dataframe\">\n",
" <thead>\n",
" <tr style=\"text-align: right;\">\n",
" <th></th>\n",
" <th>area</th>\n",
" <th>capital</th>\n",
" <th>country</th>\n",
" <th>population</th>\n",
" </tr>\n",
" </thead>\n",
" <tbody>\n",
" <tr>\n",
" <th>0</th>\n",
" <td>30510</td>\n",
" <td>Brussels</td>\n",
" <td>Belgium</td>\n",
" <td>11.3</td>\n",
" </tr>\n",
" <tr>\n",
" <th>1</th>\n",
" <td>671308</td>\n",
" <td>Paris</td>\n",
" <td>France</td>\n",
" <td>64.3</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2</th>\n",
" <td>357050</td>\n",
" <td>Berlin</td>\n",
" <td>Germany</td>\n",
" <td>81.3</td>\n",
" </tr>\n",
" <tr>\n",
" <th>3</th>\n",
" <td>41526</td>\n",
" <td>Amsterdam</td>\n",
" <td>Netherlands</td>\n",
" <td>16.9</td>\n",
" </tr>\n",
" <tr>\n",
" <th>4</th>\n",
" <td>244820</td>\n",
" <td>London</td>\n",
" <td>United Kingdom</td>\n",
" <td>64.9</td>\n",
" </tr>\n",
" </tbody>\n",
"</table>\n",
"</div>"
],
"text/plain": [
" area capital country population\n",
"0 30510 Brussels Belgium 11.3\n",
"1 671308 Paris France 64.3\n",
"2 357050 Berlin Germany 81.3\n",
"3 41526 Amsterdam Netherlands 16.9\n",
"4 244820 London United Kingdom 64.9"
]
},
"execution_count": 19,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"data = {'country': ['Belgium', 'France', 'Germany', 'Netherlands', 'United Kingdom'],\n",
" 'population': [11.3, 64.3, 81.3, 16.9, 64.9],\n",
" 'area': [30510, 671308, 357050, 41526, 244820],\n",
" 'capital': ['Brussels', 'Paris', 'Berlin', 'Amsterdam', 'London']}\n",
"countries = pd.DataFrame(data)\n",
"countries"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### Attributes of the DataFrame\n",
"\n",
"A DataFrame has besides a `index` attribute, also a `columns` attribute:"
]
},
{
"cell_type": "code",
"execution_count": 20,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/plain": [
"RangeIndex(start=0, stop=5, step=1)"
]
},
"execution_count": 20,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"countries.index"
]
},
{
"cell_type": "code",
"execution_count": 21,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/plain": [
"Index(['area', 'capital', 'country', 'population'], dtype='object')"
]
},
"execution_count": 21,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"countries.columns"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"To check the data types of the different columns:"
]
},
{
"cell_type": "code",
"execution_count": 22,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/plain": [
"area int64\n",
"capital object\n",
"country object\n",
"population float64\n",
"dtype: object"
]
},
"execution_count": 22,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"countries.dtypes"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"An overview of that information can be given with the `info()` method:"
]
},
{
"cell_type": "code",
"execution_count": 23,
"metadata": {
"collapsed": false
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"<class 'pandas.core.frame.DataFrame'>\n",
"RangeIndex: 5 entries, 0 to 4\n",
"Data columns (total 4 columns):\n",
"area 5 non-null int64\n",
"capital 5 non-null object\n",
"country 5 non-null object\n",
"population 5 non-null float64\n",
"dtypes: float64(1), int64(1), object(2)\n",
"memory usage: 240.0+ bytes\n"
]
}
],
"source": [
"countries.info()"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Also a DataFrame has a `values` attribute, but attention: when you have heterogeneous data, all values will be upcasted:"
]
},
{
"cell_type": "code",
"execution_count": 24,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/plain": [
"array([[30510, 'Brussels', 'Belgium', 11.3],\n",
" [671308, 'Paris', 'France', 64.3],\n",
" [357050, 'Berlin', 'Germany', 81.3],\n",
" [41526, 'Amsterdam', 'Netherlands', 16.9],\n",
" [244820, 'London', 'United Kingdom', 64.9]], dtype=object)"
]
},
"execution_count": 24,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"countries.values"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"If we don't like what the index looks like, we can reset it and set one of our columns:"
]
},
{
"cell_type": "code",
"execution_count": 25,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/html": [
"<div>\n",
"<table border=\"1\" class=\"dataframe\">\n",
" <thead>\n",
" <tr style=\"text-align: right;\">\n",
" <th></th>\n",
" <th>area</th>\n",
" <th>capital</th>\n",
" <th>population</th>\n",
" </tr>\n",
" <tr>\n",
" <th>country</th>\n",
" <th></th>\n",
" <th></th>\n",
" <th></th>\n",
" </tr>\n",
" </thead>\n",
" <tbody>\n",
" <tr>\n",
" <th>Belgium</th>\n",
" <td>30510</td>\n",
" <td>Brussels</td>\n",
" <td>11.3</td>\n",
" </tr>\n",
" <tr>\n",
" <th>France</th>\n",
" <td>671308</td>\n",
" <td>Paris</td>\n",
" <td>64.3</td>\n",
" </tr>\n",
" <tr>\n",
" <th>Germany</th>\n",
" <td>357050</td>\n",
" <td>Berlin</td>\n",
" <td>81.3</td>\n",
" </tr>\n",
" <tr>\n",
" <th>Netherlands</th>\n",
" <td>41526</td>\n",
" <td>Amsterdam</td>\n",
" <td>16.9</td>\n",
" </tr>\n",
" <tr>\n",
" <th>United Kingdom</th>\n",
" <td>244820</td>\n",
" <td>London</td>\n",
" <td>64.9</td>\n",
" </tr>\n",
" </tbody>\n",
"</table>\n",
"</div>"
],
"text/plain": [
" area capital population\n",
"country \n",
"Belgium 30510 Brussels 11.3\n",
"France 671308 Paris 64.3\n",
"Germany 357050 Berlin 81.3\n",
"Netherlands 41526 Amsterdam 16.9\n",
"United Kingdom 244820 London 64.9"
]
},
"execution_count": 25,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"countries = countries.set_index('country')\n",
"countries"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"To access a Series representing a column in the data, use typical indexing syntax:"
]
},
{
"cell_type": "code",
"execution_count": 26,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/plain": [
"country\n",
"Belgium 30510\n",
"France 671308\n",
"Germany 357050\n",
"Netherlands 41526\n",
"United Kingdom 244820\n",
"Name: area, dtype: int64"
]
},
"execution_count": 26,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"countries['area']"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"# Basic operations on Series/Dataframes"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"As you play around with DataFrames, you'll notice that many operations which work on NumPy arrays will also work on dataframes.\n"
]
},
{
"cell_type": "code",
"execution_count": 27,
"metadata": {
"collapsed": true
},
"outputs": [],
"source": [
"# redefining the example objects\n",
"\n",
"population = pd.Series({'Germany': 81.3, 'Belgium': 11.3, 'France': 64.3, \n",
" 'United Kingdom': 64.9, 'Netherlands': 16.9})\n",
"\n",
"countries = pd.DataFrame({'country': ['Belgium', 'France', 'Germany', 'Netherlands', 'United Kingdom'],\n",
" 'population': [11.3, 64.3, 81.3, 16.9, 64.9],\n",
" 'area': [30510, 671308, 357050, 41526, 244820],\n",
" 'capital': ['Brussels', 'Paris', 'Berlin', 'Amsterdam', 'London']})"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### Elementwise-operations (like numpy)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Just like with numpy arrays, many operations are element-wise:"
]
},
{
"cell_type": "code",
"execution_count": 28,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/plain": [
"Belgium 0.113\n",
"France 0.643\n",
"Germany 0.813\n",
"Netherlands 0.169\n",
"United Kingdom 0.649\n",
"dtype: float64"
]
},
"execution_count": 28,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"population / 100"
]
},
{
"cell_type": "code",
"execution_count": 29,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/plain": [
"0 0.000370\n",
"1 0.000096\n",
"2 0.000228\n",
"3 0.000407\n",
"4 0.000265\n",
"dtype: float64"
]
},
"execution_count": 29,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"countries['population'] / countries['area']"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### Alignment! (unlike numpy)\n",
"\n",
"Only, pay attention to **alignment**: operations between series will align on the index: "
]
},
{
"cell_type": "code",
"execution_count": 30,
"metadata": {
"collapsed": false
},
"outputs": [],
"source": [
"s1 = population[['Belgium', 'France']]\n",
"s2 = population[['France', 'Germany']]"
]
},
{
"cell_type": "code",
"execution_count": 31,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/plain": [
"Belgium 11.3\n",
"France 64.3\n",
"dtype: float64"
]
},
"execution_count": 31,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"s1"
]
},
{
"cell_type": "code",
"execution_count": 32,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/plain": [
"France 64.3\n",
"Germany 81.3\n",
"dtype: float64"
]
},
"execution_count": 32,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"s2"
]
},
{
"cell_type": "code",
"execution_count": 33,
"metadata": {
"collapsed": false,
"scrolled": true
},
"outputs": [
{
"data": {
"text/plain": [
"Belgium NaN\n",
"France 128.6\n",
"Germany NaN\n",
"dtype: float64"
]
},
"execution_count": 33,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"s1 + s2"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### Reductions (like numpy)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"The average population number:"
]
},
{
"cell_type": "code",
"execution_count": 34,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/plain": [
"47.739999999999995"
]
},
"execution_count": 34,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"population.mean()"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"The minimum area:"
]
},
{
"cell_type": "code",
"execution_count": 35,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/plain": [
"30510"
]
},
"execution_count": 35,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"countries['area'].min()"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"For dataframes, often only the numeric columns are included in the result:"
]
},
{
"cell_type": "code",
"execution_count": 36,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/plain": [
"area 244820.0\n",
"population 64.3\n",
"dtype: float64"
]
},
"execution_count": 36,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"countries.median()"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"<div class=\"alert alert-success\">\n",
" <b>EXERCISE</b>: Calculate the population numbers relative to Belgium\n",
"</div>"
]
},
{
"cell_type": "code",
"execution_count": 37,
"metadata": {
"clear_cell": true,
"collapsed": false,
"scrolled": true
},
"outputs": [
{
"data": {
"text/plain": [
"Belgium 1.000000\n",
"France 5.690265\n",
"Germany 7.194690\n",
"Netherlands 1.495575\n",
"United Kingdom 5.743363\n",
"dtype: float64"
]
},
"execution_count": 37,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"population / population['Belgium'].mean()"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"<div class=\"alert alert-success\">\n",
" <b>EXERCISE</b>: Calculate the population density for each country and add this as a new column to the dataframe.\n",
"</div>"
]
},
{
"cell_type": "code",
"execution_count": 38,
"metadata": {
"clear_cell": true,
"collapsed": false,
"scrolled": true
},
"outputs": [
{
"data": {
"text/plain": [
"0 370.370370\n",
"1 95.783158\n",
"2 227.699202\n",
"3 406.973944\n",
"4 265.092721\n",
"dtype: float64"
]
},
"execution_count": 38,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"countries['population']*1000000 / countries['area']"
]
},
{
"cell_type": "code",
"execution_count": 39,
"metadata": {
"clear_cell": true,
"collapsed": false,
"scrolled": true
},
"outputs": [
{
"data": {
"text/html": [
"<div>\n",
"<table border=\"1\" class=\"dataframe\">\n",
" <thead>\n",
" <tr style=\"text-align: right;\">\n",
" <th></th>\n",
" <th>area</th>\n",
" <th>capital</th>\n",
" <th>country</th>\n",
" <th>population</th>\n",
" <th>density</th>\n",
" </tr>\n",
" </thead>\n",
" <tbody>\n",
" <tr>\n",
" <th>0</th>\n",
" <td>30510</td>\n",
" <td>Brussels</td>\n",
" <td>Belgium</td>\n",
" <td>11.3</td>\n",
" <td>370.370370</td>\n",
" </tr>\n",
" <tr>\n",
" <th>1</th>\n",
" <td>671308</td>\n",
" <td>Paris</td>\n",
" <td>France</td>\n",
" <td>64.3</td>\n",
" <td>95.783158</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2</th>\n",
" <td>357050</td>\n",
" <td>Berlin</td>\n",
" <td>Germany</td>\n",
" <td>81.3</td>\n",
" <td>227.699202</td>\n",
" </tr>\n",
" <tr>\n",
" <th>3</th>\n",
" <td>41526</td>\n",
" <td>Amsterdam</td>\n",
" <td>Netherlands</td>\n",
" <td>16.9</td>\n",
" <td>406.973944</td>\n",
" </tr>\n",
" <tr>\n",
" <th>4</th>\n",
" <td>244820</td>\n",
" <td>London</td>\n",
" <td>United Kingdom</td>\n",
" <td>64.9</td>\n",
" <td>265.092721</td>\n",
" </tr>\n",
" </tbody>\n",
"</table>\n",
"</div>"
],
"text/plain": [
" area capital country population density\n",
"0 30510 Brussels Belgium 11.3 370.370370\n",
"1 671308 Paris France 64.3 95.783158\n",
"2 357050 Berlin Germany 81.3 227.699202\n",
"3 41526 Amsterdam Netherlands 16.9 406.973944\n",
"4 244820 London United Kingdom 64.9 265.092721"
]
},
"execution_count": 39,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"countries['density'] = countries['population']*1000000 / countries['area']\n",
"countries"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### Some other useful methods"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Sorting the rows of the DataFrame according to the values in a column:"
]
},
{
"cell_type": "code",
"execution_count": 40,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/html": [
"<div>\n",
"<table border=\"1\" class=\"dataframe\">\n",
" <thead>\n",
" <tr style=\"text-align: right;\">\n",
" <th></th>\n",
" <th>area</th>\n",
" <th>capital</th>\n",
" <th>country</th>\n",
" <th>population</th>\n",
" <th>density</th>\n",
" </tr>\n",
" </thead>\n",
" <tbody>\n",
" <tr>\n",
" <th>3</th>\n",
" <td>41526</td>\n",
" <td>Amsterdam</td>\n",
" <td>Netherlands</td>\n",
" <td>16.9</td>\n",
" <td>406.973944</td>\n",
" </tr>\n",
" <tr>\n",
" <th>0</th>\n",
" <td>30510</td>\n",
" <td>Brussels</td>\n",
" <td>Belgium</td>\n",
" <td>11.3</td>\n",
" <td>370.370370</td>\n",
" </tr>\n",
" <tr>\n",
" <th>4</th>\n",
" <td>244820</td>\n",
" <td>London</td>\n",
" <td>United Kingdom</td>\n",
" <td>64.9</td>\n",
" <td>265.092721</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2</th>\n",
" <td>357050</td>\n",
" <td>Berlin</td>\n",
" <td>Germany</td>\n",
" <td>81.3</td>\n",
" <td>227.699202</td>\n",
" </tr>\n",
" <tr>\n",
" <th>1</th>\n",
" <td>671308</td>\n",
" <td>Paris</td>\n",
" <td>France</td>\n",
" <td>64.3</td>\n",
" <td>95.783158</td>\n",
" </tr>\n",
" </tbody>\n",
"</table>\n",
"</div>"
],
"text/plain": [
" area capital country population density\n",
"3 41526 Amsterdam Netherlands 16.9 406.973944\n",
"0 30510 Brussels Belgium 11.3 370.370370\n",
"4 244820 London United Kingdom 64.9 265.092721\n",
"2 357050 Berlin Germany 81.3 227.699202\n",
"1 671308 Paris France 64.3 95.783158"
]
},
"execution_count": 40,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"countries.sort_values('density', ascending=False)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"One useful method to use is the ``describe`` method, which computes summary statistics for each column:"
]
},
{
"cell_type": "code",
"execution_count": 41,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/html": [
"<div>\n",
"<table border=\"1\" class=\"dataframe\">\n",
" <thead>\n",
" <tr style=\"text-align: right;\">\n",
" <th></th>\n",
" <th>area</th>\n",
" <th>population</th>\n",
" <th>density</th>\n",
" </tr>\n",
" </thead>\n",
" <tbody>\n",
" <tr>\n",
" <th>count</th>\n",
" <td>5.000000</td>\n",
" <td>5.000000</td>\n",
" <td>5.000000</td>\n",
" </tr>\n",
" <tr>\n",
" <th>mean</th>\n",
" <td>269042.800000</td>\n",
" <td>47.740000</td>\n",
" <td>273.183879</td>\n",
" </tr>\n",
" <tr>\n",
" <th>std</th>\n",
" <td>264012.827994</td>\n",
" <td>31.519645</td>\n",
" <td>123.440607</td>\n",
" </tr>\n",
" <tr>\n",
" <th>min</th>\n",
" <td>30510.000000</td>\n",
" <td>11.300000</td>\n",
" <td>95.783158</td>\n",
" </tr>\n",
" <tr>\n",
" <th>25%</th>\n",
" <td>41526.000000</td>\n",
" <td>16.900000</td>\n",
" <td>227.699202</td>\n",
" </tr>\n",
" <tr>\n",
" <th>50%</th>\n",
" <td>244820.000000</td>\n",
" <td>64.300000</td>\n",
" <td>265.092721</td>\n",
" </tr>\n",
" <tr>\n",
" <th>75%</th>\n",
" <td>357050.000000</td>\n",
" <td>64.900000</td>\n",
" <td>370.370370</td>\n",
" </tr>\n",
" <tr>\n",
" <th>max</th>\n",
" <td>671308.000000</td>\n",
" <td>81.300000</td>\n",
" <td>406.973944</td>\n",
" </tr>\n",
" </tbody>\n",
"</table>\n",
"</div>"
],
"text/plain": [
" area population density\n",
"count 5.000000 5.000000 5.000000\n",
"mean 269042.800000 47.740000 273.183879\n",
"std 264012.827994 31.519645 123.440607\n",
"min 30510.000000 11.300000 95.783158\n",
"25% 41526.000000 16.900000 227.699202\n",
"50% 244820.000000 64.300000 265.092721\n",
"75% 357050.000000 64.900000 370.370370\n",
"max 671308.000000 81.300000 406.973944"
]
},
"execution_count": 41,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"countries.describe()"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"The `plot` method can be used to quickly visualize the data in different ways:"
]
},
{
"cell_type": "code",
"execution_count": 42,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/plain": [
"<matplotlib.axes._subplots.AxesSubplot at 0x7fa70cd3f080>"
]
},
"execution_count": 42,
"metadata": {},
"output_type": "execute_result"
},
{
"data": {
"image/png": "iVBORw0KGgoAAAANSUhEUgAAAfwAAAFXCAYAAABHifw+AAAABHNCSVQICAgIfAhkiAAAAAlwSFlz\nAAALEgAACxIB0t1+/AAAIABJREFUeJzs3Xl8U2Xe///XSZqmK91T2kLZCi10o0XEslpEFFzYQUEc\nZdRBsI4O6jAgKN6/Wxnm5uvNjeCMwyggIqKgIiMUFS1IERBKaYECpWzdF+hGt6TJ7w+kM3WAFmh7\nkvTz/MeH4SR5X4nyybnO51yXYrFYLAghhBDCrmnUDiCEEEKI1icFXwghhGgHpOALIYQQ7YAUfCGE\nEKIdkIIvhBBCtANS8IUQQoh2wKGpAz777DO+/PJLFEXBYrFw9OhRvv76a15++WUsFgt+fn4sWbIE\nnU7Hli1bWLt2LVqtlkmTJjFx4kRMJhNz584lNzcXrVbLW2+9RadOncjIyOD1119Ho9EQGhrKa6+9\nBsCqVatITExEo9Ewa9Yshg0b1uofghBCCGHvlJu5D//AgQNs376dqqoq4uPjGTlyJG+//TYBAQGM\nGTOGcePGsWnTJhwcHJg4cSIfffQRO3fuJC0tjQULFrBnzx4+++wz3n77bR5//HH++Mc/Eh4ezpw5\ncxg7dizdunXj97//PRs3bqSsrIxp06bx9ddfoyhKa34GQgghhN27qSn9FStWMGvWLPbv3098fDwA\n8fHxJCcnk5qaSlRUFK6uruj1emJjYzl48CB79+5lxIgRAAwcOJCUlBSMRiPZ2dmEh4cDMHz4cJKT\nk9m3bx9Dhw5Fq9Xi7e1NUFAQmZmZLTxkIYQQov1pdsFPS0sjICAAHx8fqqur0el0APj4+FBYWEhJ\nSQne3t4Nx3t7e1NUVERxcXHD44qioCgKxcXFeHp6Njr2Rq8hhBBCiNvT7IL/6aefMn78+P94/HpX\nBG70+NV+gKbIqr9CCCFEy2h2wd+/fz8xMTEAuLq6UldXB0BBQQH+/v4YDIZGZ+P//nhxcTEAJpOp\nodGvtLT0msf++jUMBsMNc8mPAiGEEKJpTXbpAxQWFuLq6oqDw5XD4+LiSExM5KGHHiIxMZEhQ4YQ\nFRXFq6++SmVlJYqikJKSwvz586moqGD79u0MGjSInTt3MmDAALRaLd27d+fQoUPExsayY8cOpk+f\nTteuXfnggw94/vnnKSkpobCwkJCQkBtmUxSFoqKK2/8krJSfn7uMz0bZ89hAxmfrZHy2y8/P/Zae\n16yCX1RUhI+PT8O/JyQk8Mc//pFPPvmEwMBAxo0bh1arZc6cOcyYMQONRkNCQgJubm6MHj2aPXv2\nMHXqVPR6PYsXLwZg3rx5LFy4EIvFQnR0NHFxcQBMnjyZadOmoSgKixYtuqVBCSGEEKKxm7otz1rZ\n6684sO9fqWDf47PnsYGMz9bJ+GzXrZ7hy0p7QgghRDsgBV8IIYRoB6TgCyGEEO2AFHwhhBCiHZCC\nL4QQQrQDUvCFEEKIdkAKvhBCCNEONGvhHSFamtlsITWzmGGeLmpHEULYqaqqy7z++qvU1tZQU1PD\nCy+8xKJFCxg4cBBeXt6MGvUQixe/gclkQqPRMnfuqxgM/mzYsI4fftiJxWLhrrsG8uSTT6s9lBYh\nBV+oYveRXNZsP8H+E0U8/WBvNIqidiQhRCvZuDOTAxmFLfqa/cMMTB5+46XXS0pKePjhsQwePIxD\nh37mo4/WUF9fT1zcIPr3v4vFi/+LRx+dTr9+/dm7dw8ffLCKP/5xPoqi8O67/0BRFCZNGsOUKdNw\ncbH9kxMp+EIVPxzOBWDf0Xz8PZ0YO6S7yomEEPbG29ub1atXsX79hxiNRpycnAAICwsHID39CBcu\nnGf16lVYLBY8Pb0A0Ov1zJ79NFqtlvLyUsrLy6XgC3ErzuaXcy6/grBgTy5V1rFlz1k6G9zoF3rj\nnRGFELZp8vCQJs/GW8PGjR9jMPizYMEbZGQcZ8WK/wVAp9M1/PO//msx3t7/2ismPz+fDRvWs2bN\nevR6Jx5/fEqb524t0rQn2tyuX87u77szmFdnDECv07Jq63GyCytVTiaEsCdlZaUEBQUBsGvX95hM\nxkZ/3qdPBLt2fQ/AwYMH+PbbRMrKSvH29kavd+LEiQwKCvL/43m2Sgq+aFM1dSZ+OlaAl7ueyO4+\ndA3owG8f6E2tsZ7lm49QWW0f/2MJIdR3//0PsGHDR/zhDwmEh0dSUlLS6M+ffPIZdu1K4rnnnmH1\n6lVERETRs2cvnJycmTXrKb7//lvGjBnP0qWLVRpBy5Ld8qycve34tCs1l9XbMhgzuBtjBndrGN/m\nXVlsTT5Ln65evDg5Gq3G9n+L2tt392syPtsm47NdsluesAlJh3NRFBgSFdDo8bFDutE3xJdjZy/x\n6fenVUonhBD2Swq+aDPnCyo4k1dOZHcfvDs4NfozjaLw9EN9CPBxYceBC+xJy1MppRBC2Ccp+KLN\n7Eq90qw3rG/gNf/cWe9AwoQonPUOrNl+gjN55W0ZTwgh7JoUfNEmao317D2aj6ebI1E9fK57XEdv\nF2aOCafebOadzWmUVda2YUohhLBfUvBFmzhwvJDq2noGRwU22ZAX2d2HicN6cKmilhWfp2M0mdso\npRBC2C8p+KJN7ErNRQGG/qpZ73ruHxDMgD7+ZOaU8dE3J7GDm0mEEEJVUvBFq8suqiQzp4zw7t74\nejo36zmKovDEqDCC/d3YlZrLDyk5rZxSCCGatm3bVlasWHbdPy8oyCcj4xgAy5f/P/LzracBWQq+\naHVXV9YbFn3tZr3r0eu0JIyPwt1Fx/pvT3Hi/KXWiCeEEDflRnt9HTr0M0ePpgOQkPAHOnZs3qxm\nW5C19EWrqvulWa+DqyPRIb43/XwfDydmjY3gfzYcZuUX6Sz8TX98PJyafqIQot3btm0rP/2UTFXV\nZYqKipg8+VECAgJ5770VODjoMBgMzJ27kG+/TWx03JQpUxk16kEmTXqYDz/ciJOTEytWLKN79x6N\nXn/58rfJyDhGXV0tY8ZMYPDgYbz//ns4ODjg79+RTz75iD/84Y8YDAb++78XUVlZQX19PS+88BI9\ne4byyCPjGDLkbtLSUnF3d+cvf7n+zEFLkIIvWtXBE0VcrjHxQFwXHLS3NqEUGuzF1BE9+XDHSZZv\nPsKfHuuHXqdt4aRCiNayOXMrKYVpLfqaMYZIxoc82ORxZ8+eYfXq9ZSXl/HEE1Nxdnbm//7vr/j6\n+vG///sXvvlmO4qiNDruySencf/9D9zwdY1GI4GBgSQkvEhtbS1TpozlwQfHMGrUg3h6ejF48FA2\nblwPwKefbiAiIpKpUx8nI+M4y5Yt5Z133iM3N4dRox5k9uzf87vfPUlm5ilCQnq2yOdzLTKlL1pV\n0uEr195/vbLezbo7Joih0YGcL6jkg6+PSxOfEKJZYmJiURQFDw9PXF3d0Gi0+Pr6/fJn/Th58sR/\nHOfu7k5paekNX1en01FWVsazz87gpZeep6zsP4+/+vdURsYxYmL6ARAW1pvc3Ct/L7q4uDbMGvj5\nGbh8uXU3EJMzfNFq8kouczK7jD5dvTB43d5e0oqi8NjIXuQWX2b/8UK6+Lsz6q4uLZRUCNGaxoc8\n2Kyz8dZgNv/rtl5FuXJmfpXRaET7y8zjvx9nsVhQFAX418V6k8nU6HUPHz7EoUM/s2LFKjQaDSNH\nDrtuBkVRGp2k1NfXA+Dg0HimsrVPZOQMX7SapKvNen2DWuT1HLQaZo+LwMtdz2c/nObI6ZKmnySE\naNfS09OwWCyUlpZSVVWFg4OOwsIC4ErRDg3tc83jPD09cXNzpaSkmPr6eo4ebXxJoqysFH9/fzQa\nDT/+mITZXI/JZEKj0TQU9Kt69w7n4MGfG97n170AbUXO8EWrMJrMJKfn4+6iI6bnzTfrXY+Hm57n\nxkfy1rpD/G3LURb85g46et/e7IEQwn4FBATw6quvkJOTw+9+9xwBAQG8/vp8HBwcCArqxIgRI0lM\n/LrRcc88MxuA8eMn88orLxAc3PU/inT//gNYt24NCQm/Y8iQuxk4cAhLly7mnntG8t///Tqenp6/\nzBLAxImP8Oabi/j975/FYrEwZ87cX17lXzMIyo1a/1uIbI9r5Wx1i8d9xwr425aj3D8gmMnxIdc9\n7lbHl5yex6qtxwnwceHVx+/AWW99v11t9btrLhmfbWsP41u79mPOnDnNrFm/v+Gx27ZtbdZx1kK2\nxxVW5Wqz3tCbvPe+uQZGBDCyf2fySqr4+1fHMNv+71YhhGhV1ndaJGxe/sUqMs6XEhbs2arT7ZPi\ne5BTVMnhzGK+2H2G8UO7t9p7CSFsz6hRzWsUbO5xtk7O8EWLu7oN7tDrbIPbUrQaDb8bE4GfpxNb\nk8/yc0Zhq76fEELYMin4okWZ6s3sScvDzVlHv15+rf5+bs46EiZEoddpWfXPY1wobN37WIUQwlZJ\nwRctKuVUMRVVRgZGdETn0Dar4XXyc+OpB/tQZzSzfNMRKquNTT9JCCHaGSn4okW1drPe9fQL9ePh\nQV0pLqvh3S/Sqf+3RTSEEEI0s+Bv2bKFMWPGMGHCBJKSksjPz2f69Ok89thjvPjiiw0rF23ZsoWJ\nEycyZcoUPvvsM+DK6kQvvfQSU6dOZfr06WRnZwOQkZHBI488wtSpU1m0aFHDe61atYpJkyYxZcoU\nkpKSWnq8ohUVllZz7OwlenXyINDXtc3f/+HB3Yjp6cvxc5f4ZGdmm7+/EMJ6VVdXM2nSw7f9Ole3\nvK2qusyBAz+1QLK202TBLy0tZcWKFWzYsIG//e1vfPfddyxbtozp06ezbt06goOD2bRpE9XV1axc\nuZI1a9awdu1a1qxZQ3l5OVu3bsXDw4P169czc+ZMli5dCsCbb77JggULWL9+PeXl5ezevZvs7Gy2\nbdvGhg0bePfdd1m8eLGsmW5Ddqe27Mp6N0ujKDz1YB8CfV359uds9qRZzz7UQgh1Xaklt7+4zdUt\nbzMyjrN//77bD9aGmrwtLzk5mUGDBuHs7IyzszNvvPEG99xzD2+88QYA8fHxvP/++3Tt2pWoqChc\nXa+c2cXGxnLw4EH27t3L2LFjARg4cCDz58/HaDSSnZ1NeHg4AMOHDyc5OZnCwkKGDh2KVqvF29ub\noKAgMjMz6dmz9XYPEi3DVG9m95E8XPQO9Att/Wa963HWO5AwIZL/Wv0za7afoKOPCz0CPVTLI4RQ\nT1XVZebPfwWj0UhkZDQAqamHG7bH9ff355VX5pOWlsqmTRtRFIXz588RH38PTzzxFNu2bWXz5k9x\ndHQkJKQnL774CgkJv+PFF1/h7beXUFVVhZeXF1999QUff7wZgB07tnPyZAbPPfeCmkO/piYLfk5O\nDtXV1Tz77LNUVFQwe/Zsampq0Ol0APj4+FBYWEhJSQne3t4Nz/P29qaoqIji4uKGxxVFQVEUiouL\n8fT0bHRsYWEhXl5e13wNKfjWLzWzhPLLdYzo1wlHlbeu9fdyYebYcN7emMqKzWksfKI/nm56VTMJ\n0Z4VfbqBip8PtOhrut/RH79Jj9zwmMTEbXTvHkJCwot89903fPttIsuW/Q/Llr2Lu7s7K1f+H99/\n/y2+vn5kZBxj/fpN1NfXM2nSwzzxxFNs2PAR//M/y/DzM7Bt21Zqa2sb6tjUqY9z5sxppk59nOPH\nj5GenkZERCQ//pjEtGm/adGxtpQmC/7VzQRWrFhBTk4Ojz/+eKNp9utNud/o8V/vHHSj9xa2ISn1\nl2a9Vr73vrkiuvkw6e4QNn6fyYrNabwyNRadg/SoCtGenD2b1bAtbWxsPy5eLKGsrIz581/GYrFQ\nU1ODp6cXvr5+9OoVhqOjY6Pn33vvffzpTy8xcuQo7r33fvR6/TXr0n33jea773YQFtabvLxcQkPD\n2mR8N6vJgu/r60tMTAwajYbOnTvj6uqKg4MDdXV1ODo6UlBQgL+/PwaDgaKioobnFRQUEBMTg8Fg\noLi4mNDQUEwmExaLBT8/v0Z7Df/7a2RlZTV63GAwNDmIW11X2FZY+/gKLlZx9MxFenf1JqbPze97\n31rje+yBPhSW1fDDoWw+25VFwuS+bbJBxb+z9u/udsn4bFtbjc9v1tPA023yXv/OyUmHp6frL+Os\nwdHRET8/Pz7++KNGx+3fvx8XF33D56HRKPj5ufPiiwk8+ugktm/fzpw5s/nwww/R6bR4e7vi7u6E\ns7Mjfn7uPPTQfaxe/R6Zmence+89VvvfTZMFf9CgQcybN4+nn366YdvAwYMHs337dh5++GESExMZ\nMmQIUVFRvPrqq1RWVqIoCikpKcyfP5+Kigq2b9/OoEGD2LlzJwMGDECr1dK9e3cOHTpEbGwsO3bs\nYPr06XTt2pUPPviA559/npKSEgoLCwkJuf7GK1fZ+wYQ1j6+L3dlYbFAXB//m87a2uN7JL4HZ3LL\n+Gb/eQweTtzTr1Orvdev2cJ3dztkfLatPYzPzy+AffsO0rfvXXzzzQ+4ublTX2/mwIEjdO3ajU2b\nPiEmph9lZVXU1poaPg+z2UxRUQXvvbeSGTOe4YEHJpCensHRo6cwGuu5ePEylZW1VFRUNTwnIiKa\npUvf5vXX/7vVP9db/UHRZMH39/fnvvvuY/LkySiKwsKFC4mIiOCVV15h48aNBAYGMm7cOLRaLXPm\nzGHGjBloNBoSEhJwc3Nj9OjR7Nmzh6lTp6LX61m8eDEA8+bNY+HChVgsFqKjo4mLiwNg8uTJTJs2\nDUVRGt2uJ6xTvdnM7iO5OOsd6N+76dmYtuao05IwPpI3Vh/g429PEeTrSlgXL7VjCSHawP33P8i8\neS/xwguziIq6MsM3d+4C3nxzEY6Ojvj4+DJmzATS0lJ/9cwrM4EuLi7MnDkDNzc3AgOD6NkztGGW\nsFevMP7613cwGPx55JHHGD78Xo4fP0ZQUNudVNws2R7Xyln7r/CUU0Us35TG8NggHhsZetPPb6vx\nnbxQyl8+TsFZ78DC39yBr6dzq7+ntX93t0vGZ9tkfC3rH//4G4GBQW2yEY9sjytUkXT4l41y2nhl\nvZvVq7Mn0+7tRWW1keWb06itq1c7khDCTrzyygucPXuG++9/QO0oNyTb44pbdrG8hrSsEroFdCDY\n3zqbVP7d3TFBnC+s5IeUHN7/+jgzx4S3eROfEML+LFnyv2pHaBY5wxe3bPeRPCwWGGYlt+I1x9QR\nPenZyYMDGYV8/dM5teMIIUSbkYIvbonZbGH3kVz0jlrutMJmvetx0GqYNS4SL3c9m5OySM0sVjuS\nEEK0CSn44paknynhYnktcX38cXK0rStDHq6OJEyIxMFBw3tfHSWv5LLakYQQotVJwRe35Gqznlob\n5dyurh078OSoMKpr61m+KY2qGpPakYQQolVJwRc37VJFLamZJXTxd6dLR+tv1rueu8I7cv+dweRf\nrOK9r45iNtv8HapCCHFdUvDFTfsxLQ+zxWJTzXrXM/HuHoR38+bI6RI+353V9BOEEMJGScEXN8Vs\nsbDrcC56nZYBffzVjnPbNBqFmWPCMXg588+959h/vEDtSEII0Sqk4IubcuzMRUrKaxjQx4Cz3raa\n9a7H1UlHwvhI9I5a3v/6OOcL7Hf1MSFE+yUFX9yUf62sZ5vNetcT5OfGMw/2oc5oZvmmNMqr6tSO\nJIQQLUoKvmi2sspaDmcW09ngRrcA223Wu56YXn6MHdyNkvIa/vpFOqZ6s9qRhBCixUjBF832Y1oe\n9eYrzXr2uiTtg4O6EtvLj4zzpXyyM1PtOEII0WKk4ItmMVss7ErNxdFBw119Oqodp9VoFIXfPtCb\nID9XvjuYze7UXLUjCSFEi5CCL5ol49wlikpr6N/bgIuTfTTrXY+z3oGE8ZG4Ojnw4Y4TnM4pUzuS\nEELcNin4ollsfWW9m2XwcmHm2AjqzRbe+TyNSxW1akcSQojbIgVfNKm8qo5DJ4sI8nWlR2AHteO0\nmfCu3kyJD6Gsso53NqdhNNWrHUkIIW6ZFHzRpOS0fOrNFobacbPe9dzbvzNx4R05k1fO2sQTWCyy\n/K4QwjZJwRc3ZLFYSDqcg85BQ1y4/TbrXY+iKPzm/lC6BbizJy2fbw9mqx1JCCFuiRR8cUMnzpdS\ncKmaO0INuDnr1I6jCkedltnjIung6sgn32Vy7OxFtSMJIcRNk4IvbmhX6tVmPdvfKOd2eHdw4rlx\nkSgKvPtFOkWl1WpHEkKImyIFX1xXZbWRn08UEuDjQs9OHmrHUV1IJw8eG9mLyzUmlm9Ko6bOpHYk\nIYRoNin44rqS0/Iw1VsYFt3+mvWuZ1jfIOJjg8guquT9fx6XJj4hhM2Qgi+uyWKxkJSai4NWIS6i\n/TXr3cij9/SkV2dPfj5RxNa959SOI4QQzSIFX1zTqewy8kqq6BdqwN3FUe04VsVBq2HW2Ah8Ouj5\nfFcWh08Vqx1JCCGaJAVfXFPDynrR7btZ73o6uDry3PgoHB00vPfVUXKLL6sdSQghbkgKvvgPl2uu\nNOv5ezkTGuypdhyr1aWjO0+MDqOmrp7lm45QVWNUO5IQQlyXFHzxH/am52M0mdvlyno3664+HRl1\nVzAFl6r565ajmM3SxCeEsE5S8EUjV5v1tBqFQREBasexCROG9iCyuw/pWRfZtOu02nGEEOKapOCL\nRk7nlpNTdJmYXn50cJVmvebQaBR+93Af/L2c2fbTeX46lq92JCGE+A9S8EUjuw7Lynq3wsVJR8KE\nKJwctaz+OoNz+RVqRxJCiEak4IsGVTUm9h8vwM/Tid5dvNSOY3MCfV155qFwjCYz72w+QmlFrdqR\nhBCigRR80eCnY/nUmcwMjQ5EI816t6RvT1/GDulGSXkti9cewFRvVjuSEEIAUvDFL65sg3ulWW9w\npDTr3Y4HB3bljlA/jmaV8PF3p9SOI4QQgBR88Yuz+RVcKKykb4gvHm56tePYNEVRmPFAb7oGdOD7\nQzkNOw4KIYSaHJo6YP/+/fz+97+nZ8+eWCwWQkNDeeqpp3j55ZexWCz4+fmxZMkSdDodW7ZsYe3a\ntWi1WiZNmsTEiRMxmUzMnTuX3NxctFotb731Fp06dSIjI4PXX38djUZDaGgor732GgCrVq0iMTER\njUbDrFmzGDZsWKt/CAKSDucA0qzXUpwcHZj/5J288P9+4MPEEwT6uBIiOw4KIVTUrDP8O++8k7Vr\n1/Lhhx/y6quvsmzZMqZPn866desIDg5m06ZNVFdXs3LlStasWcPatWtZs2YN5eXlbN26FQ8PD9av\nX8/MmTNZunQpAG+++SYLFixg/fr1lJeXs3v3brKzs9m2bRsbNmzg3XffZfHixbIbWRuorjWx71gh\nPh2c6NPNW+04dqOjjyuzxkZgscA7n6dxsbxG7UhCiHasWQX/10V3//79xMfHAxAfH09ycjKpqalE\nRUXh6uqKXq8nNjaWgwcPsnfvXkaMGAHAwIEDSUlJwWg0kp2dTXh4OADDhw8nOTmZffv2MXToULRa\nLd7e3gQFBZGZmdmS4xXXsO94AbXGeoZGB0izXgvr3dWbKcNDKL9cxzub06gz1qsdSQjRTjWr4J8+\nfZpZs2Yxbdo0kpOTqampQafTAeDj40NhYSElJSV4e//r7NDb25uioiKKi4sbHlcUBUVRKC4uxtPT\ns9GxN3oN0bqSDueiURQGR8l0fmsYcUcnBkV25Gx+BWu2n5BZKyGEKpq8ht+lSxeee+45Ro0axYUL\nF3j88ccxmUwNf369v7xu9LiiKM36S0/+Ymx95/IrOJdfQd8QX7zcpVmvNSiKwuP3hZJbXMXeo/l0\n8Xdj5J3BascSQrQzTRZ8f39/Ro0aBUDnzp3x9fUlPT2duro6HB0dKSgowN/fH4PB0OhsvKCggJiY\nGAwGA8XFxYSGhmIymRoa/UpLSxsde/U1srKyGj1uMBiaHISfn/tNDdrWtOb4Pk268nk/PKyHap+j\nPX9//z62156+ixffTmLj95mE9/Sjb6+m/9u2dvb83YGMz9bZ+/huVpMF/6uvvqKoqIgZM2ZQVFRE\nSUkJ48ePZ/v27Tz88MMkJiYyZMgQoqKiePXVV6msrERRFFJSUpg/fz4VFRVs376dQYMGsXPnTgYM\nGIBWq6V79+4cOnSI2NhYduzYwfTp0+natSsffPABzz//PCUlJRQWFhISEtLkIIqK7HcZUz8/91Yb\nX02die8PXsDLXU+wj4sqn2Nrjk9t1xrbs2MjWLL+EIvXHGDBb+7A4OWiUrrbZ8/fHcj4bJ09j+9W\nf8g0WfCHDx/OnDlz+O677zCZTCxatIiwsDD++Mc/snHjRgIDAxk3bhxarZY5c+YwY8YMNBoNCQkJ\nuLm5MXr0aPbs2cPUqVPR6/UsXrwYgHnz5rFw4UIsFgvR0dHExcUBMHnyZKZNm4aiKCxatOiWBiWa\nZ//xQmrq6hnZvzMajTTrtYWQIA+mjwzlg20ZLN+cxvzp/XBybPJ/QyGEuG2KxQ4ulNvrrzho3V+p\n/9/anzmTV86SmQPx8XBqlfdoir3/Cr/e2D7acZLvDmUT28uPWeMibPLuCHv+7kDGZ+vseXy3eoYv\nK+21U+cLKsjKLSeyu49qxb49m3JPCGHBnhw6WcTWPWfVjiOEaAek4LdTV5d7lZX11OGg1fDs2Ah8\nOjjxxY9nSDkpt58KIVqXFPx2qNZYz96jBXi6ORLVw0ftOO2Wu4sjCRMicXTQ8N7WY+QUVaodSQhh\nx6Tgt0M/ZxRSXWticFQgWo38J6CmYH93ZjzQm9q6epZvTuNyjVHtSEIIOyV/27dDSYdzUYChUbIN\nrjW4s7c/D8R1ofBSNX/98ihms8330QohrJAU/HYmp6iSzJwywrt54+vprHYc8YtxQ7oT1cOHo2cu\n8lnSabXjCCHskBT8diZJmvWskkaj8MxD4XT0dmH7vvPsPZqvdiQhhJ2Rgt+O1Bnr2ZueTwdXR6JD\nfNWOI37FxcmBhAmROOu1rN6Wwdn8crUjCSHsiBT8duTgiSIu15gYHBmAg1a+emsU4OPKMw+FYzKZ\nWb4pjbLLdWpHEkLYCflbvx25Op0/NFqa9axZdIgv44d151JFLSs/T8NUb1Y7khDCDkjBbyfySi5z\n8kIpfbo6YfdSAAAgAElEQVR62fSGLe3F6Lu60D/MwKnsMtZ/e0rtOEIIOyAFv51IOnz17F6a9WyB\noijMGN2bzgY3fkjJ4YeUHLUjCSFsnBT8dsBoMpOcno+7i47YXn5qxxHNpHfUkjA+EjdnHR99c5KT\nF0rVjiSEsGFS8NuBQyeLqKw2Mkia9WyOr6czs8ZGYLHAys/TuFheo3YkIYSNkr/924Gkw1emg2U6\n3zaFdfHi0RE9Ka8ysnxTGnXGerUjCSFskBR8O1dwsYqM86WEBXvS0Vua9WzV8NggBkcFcK6ggtXb\nM7BYZPldIcTNkYJv565ugztUVtazaYqiMH1kKD0CO/DT0QIS919QO5IQwsZIwbdjpnozP6bl4eas\no58069k8nYOG2eMj8XRz5NMfMknPKlE7khDChkjBt2Mpp4qpqDIyMKIjOget2nFEC/B00zN7fCRa\njcJfvzxKwaUqtSMJIWyEFHw7tkua9exSj0APHr8vjKpaE8s3pVFda1I7khDCBkjBt1OFpdUcPXuJ\nXp08CPR1VTuOaGGDowIYcUcncosvs2rrMczSxCeEaIIUfDu1W5r17N6U4SH07uJFyqlitvx4Ru04\nQggrJwXfDpnqzfx4JA8XvQN3hBrUjiNaiVajYeaYcHw9nNiy5ywHTxSqHUkIYcWk4Nuh1MwSyi7X\nMTCiI446adazZ+4ujiRMiMJRp2HV1uNkF1WqHUkIYaWk4NuhpNRfmvVkOr9d6Gxw46kH+lBrrGf5\npiNUVhvVjiSEsEJS8O1McVk1R7Mu0iOoA5383NSOI9rIHWEGHhzYlaLSGv76ZTr1ZrPakYQQVkYK\nvp3ZnZqHBRgWHaR2FNHGxg7pRt8QX46dvcSn359WO44QwspIwbcj9WYzu4/k4qx3oH9vadZrbzSK\nwtMP9SHAx4UdBy6QnJ6ndiQhhBWRgm9H0k5fpLSyjrvC/dFLs1675Kx3IGFCFM56B1ZvO8GZvHK1\nIwkhrIQUfDtydRvcYbKyXrvW0duFmWPCqa83887mNMoqa9WOJISwAlLw7cTF8hqOZJXQLaADwf7u\nascRKovs7sOEu3twqaKWFZ+nYzRJE58Q7Z0UfDux+0geFgsMk1vxxC9GDQjmzt4GMnPK+Oibk1hk\n+V0h2jUp+HbAbLaw+0guekctd0qznviFoig8Obo3wf5u7ErN5YeUHLUjCSFUJAXfDqSfKeFieS1x\nffxxcnRQO46wInqdlufGR+LmrGP9t6c4cf6S2pGEECqRgm8Hkg7LRjni+nw9nJk9LgKAlV+kU1JW\no3IiIYQamlXwa2truffee/niiy/Iz89n+vTpPPbYY7z44osYjVeW8dyyZQsTJ05kypQpfPbZZwCY\nTCZeeuklpk6dyvTp08nOzgYgIyODRx55hKlTp7Jo0aKG91m1ahWTJk1iypQpJCUltfRY7dKlilpS\nM0vo4u9O144d1I4jrFRosBePjuhJRZWR5ZuPUGusVzuSEKKNNavgr1y5Ek9PTwCWLVvG9OnTWbdu\nHcHBwWzatInq6mpWrlzJmjVrWLt2LWvWrKG8vJytW7fi4eHB+vXrmTlzJkuXLgXgzTffZMGCBaxf\nv57y8nJ2795NdnY227ZtY8OGDbz77rssXrxYmoya4ce0PMwWizTriSbFxwQxNDqA8wWVfPD1cfn/\nS4h2psmCn5WVRVZWFsOGDcNisXDgwAHi4+MBiI+PJzk5mdTUVKKionB1dUWv1xMbG8vBgwfZu3cv\nI0aMAGDgwIGkpKRgNBrJzs4mPDwcgOHDh5OcnMy+ffsYOnQoWq0Wb29vgoKCyMzMbMWh2z6zxcLu\n1Fz0Oi0D+virHUdYOUVRmHZvKCFBHuw/Xsj2fefVjiSEaENNFvw///nPzJ07t+Hfq6ur0el0APj4\n+FBYWEhJSQne3t4Nx3h7e1NUVERxcXHD44qioCgKxcXFDbMFV4+90WuI6zt29iLFZTXc2duAs16a\n9UTTdA4aZo+LwMtdz2c/nCYtq0TtSEKINnLDKvHFF18QExNDUNC1N2K53pTgjR5XFKVZU4k3M93o\n52ffC81cb3w/fX0cgLHxPW36M7Dl7E2xxrH5+bnz6owBzF3xI+9tOcrSF4YRdIs7K1rj+FqSjM+2\n2fv4btYNC35SUhLZ2dl8//33FBQUoNPpcHFxoa6uDkdHRwoKCvD398dgMDQ6Gy8oKCAmJgaDwUBx\ncTGhoaGYTCYsFgt+fn6UlpY2Ovbqa2RlZTV63GBo3j3lRUUVNztum+Hn537N8ZVV1rIvPZ/OBjc8\nnbQ2+xlcb3z2wJrH5uXswOP3hfKPfx5n0d/38urjd9z0LJE1j68lyPhsmz2P71Z/yNxwSv/tt9/m\n008/5ZNPPmHixInMnj2buLg4tm/fDkBiYiJDhgwhKiqK9PR0KisruXz5MikpKfTr149BgwY1HLtz\n504GDBiAVqule/fuHDp0CIAdO3YwZMgQBgwYQFJSEiaTiYKCAgoLCwkJCbmlQbUHP6blUW+2MDQ6\nEEVR1I4jbNCgyABG9u9MXkkVf//qGGZp4hPCrt30hd/nn3+eV155hY0bNxIYGMi4cePQarXMmTOH\nGTNmoNFoSEhIwM3NjdGjR7Nnzx6mTp2KXq9n8eLFAMybN4+FCxdisViIjo4mLi4OgMmTJzNt2jQU\nRWl0u55o7EqzXh6ODhriwqVZT9y6SfE9yC6q5HBmMV/sPsP4od3VjiSEaCWKxQ7uzbHXaRu49rTU\nsbMX+Z8NhxkU2ZHfPtBHpWQtw96n3WxhbJXVRv5rzQGKSmuYNTaCO8KadynNVsZ3q2R8ts2ex9cq\nU/rCOl1dWW9Y9LWbKYW4GW7OOhImRKHXafnHP49zobBS7UhCiFYgBd/GlFfVcehkEUG+rvQIkpX1\nRMvo5OfGUw/2ptZYz/JNR6isNqodSQjRwqTg25jktPwrzXp9pVlPtKx+oQYeHtSV4rIa3v0inXqz\nWe1IQogWJAXfhlgsFpJSc3HQaogL76h2HGGHHh7cjZievhw/d4lPdspKl0LYEyn4NuTkhVIKLlbR\nP8wPN2ed2nGEHdIoCk892IdAX1e+/TmbPWl5akcSQrQQKfg2pKFZr68064nW46x3IGFCJC56B9Zs\nP8Hp3DK1IwkhWoAUfBtRWW3k5xOFBPi40LOTh9pxhJ3z93Jh5phw6s1mVmxOo7SyVu1IQojbJAXf\nRiSn52Oql5X1RNuJ6O7DpLtDKK2sY8XmNIwmaeITwpZJwbcBFouFpMM5OGgVBkZIs55oO/fd2Zm7\nwv05nVvOuh0nbmpTKyGEdZGCbwNOZZeRV1JFv1AD7i6OascR7YiiKDxxfxhd/N3ZfSSPnYdy1I4k\nhLhFUvBtwNVmvaHRgSonEe2Ro07Lc+Mj6eCi4+NvT5Fx7pLakYQQt0AKvpWrrKrj5xOFGLycCQv2\nVDuOaKd8PJyYNS4SRYGVX6RTXFqtdiQhxE2Sgm/lvj+YjdFkZpisrCdU1quzJ1Pv7UVltZHlm9Oo\nqTWpHUkIcROk4Fsxi8VC4k9n0WoUBkUEqB1HCOJjgri7byAXCitZ9kmKNPEJYUOk4FuxrNxyzuVX\nENPLjw6u0qwnrMPUe3vRs5MHP6bm8vVP59SOI4RoJin4VuxfK+tJs56wHg5aDbPGReLr4cTmpCyO\nnC5RO5IQohmk4FupqhoT+48X4O/tQu8uXmrHEaIRD1dH5j15J1qthr9tOUr+xSq1IwkhmiAF30rt\nO5ZPncnMfXd1QSPNesIK9ezsxROjQqmuNbF80xGqpYlPCKsmBd8KWSwWfjici1ajMKJ/sNpxhLiu\ngREBjOzfmbySKv7+1THM0sQnhNWSgm+FzuZXcKGwkr4hvnh1cFI7jhA3NCm+B727eHE4s5gtP55R\nO44Q4jqk4FuhhpX1pFlP2ACtRsOzYyPw9XBiy56zHDxRpHYkIcQ1SMG3MtW1JvYdK8CngxPhXb3V\njiNEs7g560iYEIWjTsOqfx4jp6hS7UhCiF+Rgm9l9h0voNZYz9DoADQaadYTtqOzwY3fPtCH2rp6\nlm9O43KNUe1IQoh/IwXfyiQdzkVRYHCUTOcL29M/zMADcV0ovFTN3748itksTXxCWAsp+FbkXH4F\n5/IriO7hi5e7Xu04QtyScUO6E9XDh/QzF9mUdFrtOEKIX0jBtyJJqbKynrB9Go3CMw/1wd/bhW37\nzrPvWIHakYQQSMG3GjV1Jn46mo+Xu57I7j5qxxHitrg46UgYH4mTo5YPvj7OufwKtSMJ0e5JwbcS\nB44XUlNXz5AoadYT9iHQ15WnH+pDncnMO5uPUF5Vp3YkIdo1KfhWIin1SrPeEGnWE3YkpqcfY4d0\no6S8lr9+kY6p3qx2JCHaLSn4VuBCYSVZueVEdvfBx0NW1hP25cGBXYnt5UfG+VI+2Zmpdhwh2i0p\n+FZg19VtcKPl7F7YH42i8NsHehPk68p3B7PZfSRX7UhCtEtS8FVWa6wn+Wg+Hm6ORIVIs56wT856\nB56bEImL3oEPE09wOrdM7UhCtDtS8FX2c0Yh1bUmhkQFotXI1yHsl7+XCzPHhlNvtrBicxqllbVq\nRxKiXZEKo7Kk1FwUYGhUgNpRhGh1Ed18mHR3CKWVdaz4PA2jSZr4hGgrUvBVlFNUSWZ2GeHdvPH1\ndFY7jhBt4r47OzOgjz+nc8r56JsTWCyy/K4QbcGhqQNqamqYO3cuJSUl1NXV8eyzzxIWFsbLL7+M\nxWLBz8+PJUuWoNPp2LJlC2vXrkWr1TJp0iQmTpyIyWRi7ty55ObmotVqeeutt+jUqRMZGRm8/vrr\naDQaQkNDee211wBYtWoViYmJaDQaZs2axbBhw1r9Q1CLrKwn2iNFUXhiVBh5JZfZlZpHF3934mM7\nqR1LCLvX5Bn+zp07iYyM5MMPP+Ttt9/mrbfeYtmyZTz22GOsW7eO4OBgNm3aRHV1NStXrmTNmjWs\nXbuWNWvWUF5eztatW/Hw8GD9+vXMnDmTpUuXAvDmm2+yYMEC1q9fT3l5Obt37yY7O5tt27axYcMG\n3n33XRYvXmy3v/6Npnr2pufTwdWR6BBfteMI0ab0Oi3PjY/EzVnH+m9PcfJCqdqRhLB7TRb80aNH\n89vf/haA3NxcAgICOHDgAMOHDwcgPj6e5ORkUlNTiYqKwtXVFb1eT2xsLAcPHmTv3r2MGDECgIED\nB5KSkoLRaCQ7O5vw8HAAhg8fTnJyMvv27WPo0KFotVq8vb0JCgoiM9M+79v9+UQRl2tMDI4MwEEr\nV1ZE++Pr4czscRFYLLDy8zQulteoHUkIu9bsSvPII4/wyiuv8Kc//Ynq6mp0Oh0APj4+FBYWUlJS\ngre3d8Px3t7eFBUVUVxc3PC4oigoikJxcTGenp6Njr3Ra9ijpF/uvR8aLc16ov0KDfbi0RE9Ka8y\nsnxzGnXGerUjCWG3mryGf9WGDRvIyMjgpZdeajTNfr0p9xs9rihKs6bqmzud7+fn3qzjrMWFggpO\nXigluqcv4b38mzze1sZ3s+x5fPY8NmiZ8U25L4zCshq+2X+eDT+c5g+PxqIo1rGfhHx/ts3ex3ez\nmiz4R48excfHh44dOxIWFobZbMbV1ZW6ujocHR0pKCjA398fg8HQ6Gy8oKCAmJgYDAYDxcXFhIaG\nYjKZGhr9SktLGx179TWysrIaPW4wGJocRFGRbe3E9eUPpwCI6+PfZHY/P3ebG9/NsOfx2fPYoGXH\nN3Fod05nl/LDwWw6ejgx8s7gFnnd2yHfn22z5/Hd6g+ZJqf0Dxw4wPvvvw9AcXExVVVVxMXFsX37\ndgASExMZMmQIUVFRpKenU1lZyeXLl0lJSaFfv34MGjSo4didO3cyYMAAtFot3bt359ChQwDs2LGD\nIUOGMGDAAJKSkjCZTBQUFFBYWEhISMgtDcxaGU1m9qTl4+6iI7aXn9pxhLAKOgcNs8dF4uHqyCff\nZ3L07EW1Iwlhd5o8w3/00UeZN28e06ZNo7a2ltdff53w8HBeeeUVNm7cSGBgIOPGjUOr1TJnzhxm\nzJiBRqMhISEBNzc3Ro8ezZ49e5g6dSp6vZ7FixcDMG/ePBYuXIjFYiE6Opq4uDgAJk+ezLRp01AU\nhUWLFrXu6FVw6GQRldVG7h8QLM16QvwbL3c9s8dHsmT9If76RToLnuiPQdanEKLFKBY7uO/NlqZt\n/vJxCsfPXeLNZ+6io7dLk8fb87QU2Pf47Hls0Hrj25Way+ptGXTyc2Xe9H44OTa71ahFyfdn2+x5\nfK02pS9aTsHFKo6fu0RYsGezir0Q7dHQ6EDiY4PILrrM+/88brdrcQjR1qTgt6Fdv6ysN1RW1hPi\nhh69pye9Onvy84ki/rn3nNpxhLALUvDbiKnezJ60PFydHOgnzXpC3JCDVsOssRF4d9Dz+a4sUjOL\n1Y4khM2Tgt9GDp8qprzKyKDIAHQOWrXjCGH1Org68tz4SBwcNLz31VHySi6rHUkImyYFv40kHc4B\nrlyfFEI0T9eOHXhiVBjVtfUs35RGVY1J7UhC2Cwp+G2gsLSao2cv0bOTB4G+rmrHEcKmxIV35L47\nO5N/sYpVW49hliY+IW6JFPw2sFu2wRXitky8uwfhXb04nFnMl7vPqB1HCJskBb+VmerN/HgkDxe9\nA3eENr1MsBDiP2k1Gn43JgI/Tye+Sj7LwROFakcSwuZIwW9lqZkllF2uIy6iI446adYT4la5OetI\nGB+FXqdl1dbjZBdWqh1JCJsiBb+VXb33fpg06wlx2zoZ3PjtA72pNdazfPMRKquNakcSwmZIwW9F\nxWXVpGeV0COoA50MbmrHEcIu3BFm4MGBXSkqreFvX6ZTbzarHUkImyAFvxXtTs3DAgyLDlI7ihB2\nZeyQbkT38OHo2Uts+iGr6ScIIaTgt5Z6s5kf0/Jw1mvpHybNekK0JI2i8PRD4XT0dmH7/vPsPZqv\ndiQhrJ4U/FaSdvoilypquSu8I3pHadYToqW5ODmQMCESZ72W1dsyOJdvnzujCdFSpOC3kqsr60mz\nnhCtJ8DHlWceCsdkMrN88xHKL9epHUkIqyUFvxVcLK/hSFYJ3QLcCfa/tX2LhRDNEx3iy9ih3blY\nXsvKL9Ix1UsTnxDXIgW/Ffx4JA+LBYb1lWY9IdrCg3FduCPUj5MXStnw3Sm14whhlaTgtzCz2cKu\nI7noHbXc2Vua9YRoC4qiMOOB3nTyc2XnoZyG9S+EEP8iBb+FpZ8p4WJ5LXf18cfJ0UHtOEK0G06O\nDjw3IQpXJwfW7TjB6ZwytSMJ0eLKq269T0UKfgtLOiwb5QihFoOnMzPHRlBvtvDO52lcqqhVO5IQ\nLSYrt5xFHxy45edLwW9BlypqSc0soYu/O107dlA7jhDtUnhXbybHh1BWWcfKz9MwmqSJT9i+3am5\nLP7oIKWVt/4jVgp+C/oxLQ+zxcJQObsXQlUj+3cmLtyf07nlfLjjBBaLRe1IQtwSU72ZDxNP8MG2\nDPQ6LS9Ojr7l15KLzC3EbLGwOzUXR52Gu/r4qx1HiHZNURR+c38YucVV/Hgkjy7+7tzTr5PasYS4\nKWWVtaz4Ip3M7DI6+bny3IQoDJ7Ot/x6cobfQo6dvUhxWQ0DevvjrJffUUKozVGn5bnxkbi76Njw\n3SlOnL+kdiQhmu10bhmLVh8gM7uMO3sbmD/9jtsq9iAFv8X8q1lP7r0Xwlr4eDgxa2wEACu/SKek\nrEblREI0bVdqLn/+6BBll+uYFN+D3z0c3iJLtEvBbwFll+s4fKqYTn5udAuQlfWEsCahwV48OqIn\nFVVGlm8+Qq2xXu1IQlyTqd7M2sQTrP7lev0fJvdl1IAuKIrSIq8vBb8F7EnLo95sYVjfwBb7YoQQ\nLSc+Joih0QGcL6hkzbYMaeITVqe0spYl61P4ISWHzgY3Fj7Rn/Bu3i36HnKx+TaZLRZ2Hc7F0UFD\nXLg06wlhjRRFYdq9oeQUX+anYwUE+7tz/4BgtWMJAUBmThkrPk+jrLKOAX38eWJUGHpdy++yKmf4\ntynj3CUKS6vpH2bAxUmndhwhxHXoHDTMHheJp5sjn/6QSfqZErUjCcEPh3P480eHKL9cx5ThITzz\nUJ9WKfYgBf+2XV2zW5r1hLB+nm56Zo+PRKtR+NuXRym8VKV2JNFOGU1m1mzPYO32EzjrHZgzpS/3\n3RncqpeFpeDfhvKqOg6eKCLI15UeQbKynhC2oEegB9PvC+VyjYnlm9OoqTOpHUm0M5cqalny8SGS\nDucSbHBj4W/uoE/Xlr1efy1S8G9Dclo+9WYLQ6OlWU8IWzIkKpB7+nUip+gy/9h6HLM08Yk2kpld\nxhurD3A6p5y7+vjzp+n98L3N++ubS5r2bpHFYiEpNRcHrYa4iI5qxxFC3KQpw0PIKark4Mki/pl8\nlocGdVM7krBzP6Tk8NE3J7FY4JHhIdzbv3ObnizKGf4tOnmhlIKLVfQP88PNWZr1hLA1DloNM8dG\n4NNBz+e7z3D4VLHakYSdMprMrN6WwdrEq9froxnZytfrr6VZZ/hLlizh0KFD1NfX88wzzxAZGcnL\nL7+MxWLBz8+PJUuWoNPp2LJlC2vXrkWr1TJp0iQmTpyIyWRi7ty55ObmotVqeeutt+jUqRMZGRm8\n/vrraDQaQkNDee211wBYtWoViYmJaDQaZs2axbBhw1r1A7hVsrKeELavg4sjz42P4q11B3nvq6Ms\n+M0dBPi4qh1L2JFLFbWs+DyNrNxygv3deG58JL4ebTOF/2tNnuHv27eP06dPs2HDBv7+97/z5ptv\nsmzZMh577DHWrVtHcHAwmzZtorq6mpUrV7JmzRrWrl3LmjVrKC8vZ+vWrXh4eLB+/XpmzpzJ0qVL\nAXjzzTdZsGAB69evp7y8nN27d5Odnc22bdvYsGED7777LosXL7bKBTIqq438fKKIAB8XenbyUDuO\nEOI2dOnozhOjw6ipq+f/NqVRVWNUO5KwE6eyS3lj9QGycsuJC/dn3mP9VCv20IyCf+edd7Js2TIA\nOnToQFVVFQcOHGD48OEAxMfHk5ycTGpqKlFRUbi6uqLX64mNjeXgwYPs3buXESNGADBw4EBSUlIw\nGo1kZ2cTHh4OwPDhw0lOTmbfvn0MHToUrVaLt7c3QUFBZGZmttbYb1lyej6merM06wlhJ+7q05H7\nBwRTcLGK9746htlsfScawnZYLBa+P5TNkvUpVFQZefSenjz1YB8cW+n++uZqsuArioKTkxMAn332\nGXfffTfV1dXodFeuW/v4+FBYWEhJSQne3v+6rcDb25uioiKKi4sbHlcUBUVRKC4uxtPTs9GxN3oN\na2KxWEg6nIODVmGgNOsJYTcmDutBeDdvjpwu4fPdWWrHETbKaKpn9bYMPtxx8sr1+kf6tnlz3vU0\nu2nv22+/ZdOmTSxYsKDRNPv1ptxv9LiiKM2aqrfG6fzMnDLySqqI7eWHu4uj2nGEEC1Eo1GYOSYc\ng6cz/9x7jh9Tc9SOJGzMxfIaFn+Uwu4jeXTxd+e1J/rTu4uX2rEaNKtpb/fu3bz33nv84x//wM3N\nDVdXV+rq6nB0dKSgoAB/f38MBkOjs/GCggJiYmIwGAwUFxcTGhqKyWRqaPQrLS1tdOzV18jKymr0\nuMFgaDKfn1/b7VC37ttTAIy5O6TN3rctx6cGex6fPY8N7G98fsDCp+/ipWW7+N8NKfwlYQjdAu23\nT8fevr9fa8vxHc0qYfHag5RW1jL8js7Mmhjdakvk3qomC35lZSV/+ctfWL16Ne7uVz68uLg4EhMT\neeihh0hMTGTIkCFERUXx6quvUllZiaIopKSkMH/+fCoqKti+fTuDBg1i586dDBgwAK1WS/fu3Tl0\n6BCxsbHs2LGD6dOn07VrVz744AOef/55SkpKKCwsJCQkpMlBFBVV3P4n0QyXa4zsPpyDwcuZjh30\nbfK+fn7ubTY+Ndjz+Ox5bGC/43PRKvz2gT6s+DyNN1b9xMIn+tvlrbf2+v1d1Vbjs1gs7DyUw4bv\nTmGxwKMjejKiXyfKS1tv2eZb/SHTZMH/+uuvKS0t5YUXXmiYjv/zn//M/Pnz+eSTTwgMDGTcuHFo\ntVrmzJnDjBkz0Gg0JCQk4ObmxujRo9mzZw9Tp05Fr9ezePFiAObNm8fChQuxWCxER0cTFxcHwOTJ\nk5k2bRqKorBo0aJbGlRr2Zuej9FkZpg06wlh1/qF+vHIvaFs+OYE736Rzh+mRKPVyLIlojGjqZ4P\nE0/yY1oe7i46Zo2NIDTYeqbwf02xWOOF8pvUVr/iXnt/P3klVSydPYgOrm1z/V5+hdsuex4b2P/4\nfHzceO1vyRzOLGZk/848ck9PtSO1KHv//lp7fBfLa1jxeRpn8iro2tGd58ZH4t3BqdXe79/d6hm+\n/GRtpqzccrKLLhPTy6/Nir0QQj0ajcLTD/UhwMeFHQcukJyep3YkYSVOnL/EG6sPcCavgkERHZk7\nLbbNiv3tkILfTA0r60UHqpxECNFWnPUOJEyIwlnvwOptJziTV652JKEii8XCdwez+Z8Nh7lcY2La\nvb2Y8UBv1e+vby4p+M1QVWNif0YBvh5O9O5qvddnhBAtr6O3C797uA/19Wbe2ZxG2eU6tSMJFRhN\n9bz/z+N89M1JXJ0ceOmRvtzTr5NN9XNJwW+GfcfyqTOaGdY3EI0NfblCiJYR1cOX8cO6c6milpWf\np2GqN6sdSbShi+U1vLXuEHvS8+kW4M7CJ/pbdXPe9UjBb8KVlfVy0WoUBkcGqB1HCKGS0Xd1oX+Y\ngVPZZXz8y3ocwv6dOH+JRasPcDa/gsGRATZzvf5amrXwTnt2Nr+C84WVxPbyw8NNr3YcIYRKFEVh\nxuje5JVU8X1KDsH+brJbph2zWCx8ezCbT77LRFHgsZG9iI8Jsqkp/F+TM/wm/GsbXGnWE6K90ztq\nSZgQiZuzjnU7TpKZXaZ2JNEK6oz1rNp6nI+/PYWbswMvPxrD8Fjbul5/LVLwb6C61sS+YwX4dHAi\nvH+X2fYAABjiSURBVKt3008QQtg9P09nZo4Jx2KBFZ+ncamiVu1IogWVlF25Xr/3aD7dAjqw8In+\n9Ors2fQTbYAU/BvYf7yAWmM9Q6ID0Ghs+5edEKLl9OnqzeThIZRdruOdzWkYTfVqRxIt4Pi5K9fr\nzxVUMDgqgLnTYmz2ev21SMG/gaTDuSgKDImS6XwhRGP33tGJgREdOZNXztrEE1a5u6doHovFwo4D\nF1i64TDVtSam3xfKk6PC0DnYxv31zSVNe9dxLr+Cs/kV9A3xxctdmvWEEI0pisLj94WSW3yZPWn5\ndPF3Z8QdndWOJW5SrbGetdsz2Hu0gA6ujsweF0HPTvYxhf9rcoZ/HUmpV5r1hkqznhDiOhx1Wp4b\nH0kHFx0b/v/27j0uqjpv4Phnhvv9okAK3q8IqJhapIKauq7ZaqZpGpub+1iZ7rXXPj2W9myXzXat\nnjZLa9k2u700r5ldbLfWS15STAXxQoAXkMswgBAwDAxznj9INgwYReDMOfN9/8c5Z858f/MFvnN+\nv9/5nS+yOH2hTO2QxHUwl1t47t2jHMwool/3QJ5cOEq3xR6k4DfLWlvPoYxCQgK8iOsrk/WEEC0L\nDfRmyV1xGAywdvtJzJctaockrsHp86U89VYqF4sqSRzWjT/MH6H73lwp+M04fLqImtp6xg3tJo/E\nFEI4NLBHMAsmD6TSUsearelY62QSn7NSFIVdhy+yemPDeP3Ppw5i4U+j8XDX//96/bewDfacyMeA\nTNYTQly78fGRJA3vzkVTJf/45LRM4nNC1rp6/vbRKTZ+mUWgryf/PX8E411o8SSZtHeVXFMlOfkV\nDO3XhS5B+rkdQwjR8RZMHsglcxWHT5voFRHAT2/tpXZI4nvFly28ujWdi6ZK+kUGsmRmnO678K8m\nV/hX2SuPwRVCtJG7m5FHZsYSEuDF5t3ZpOeUqB2SADLOl/LUW0e4aKokaXh3/nCv/sfrmyMF/wes\ndfUcyCgkyN+Tof27qB2OEEKDgvy9WDorDjc3I69/mEFRWbXaIbksRVH47OuLvLjxODW19fx86iDu\nnzrYJcbrm+OarW5B6hkTFqtNJusJIW5In26B3D91ENVWG69sScditakdksupqbXxxken+ODfWQT6\nefLfC1xrvL45UtV+QCbrCSHay5i4bkwaGUW+uYqUnaewyyS+TlN82cIfXtnH16eK6B8ZxJMLR9E/\nMkjtsFQnk/a+d6m4kqy8cmL7hBIW7KN2OEIIHbhnQn/yTJUc+9bMzv3n+dnYPmqHpHsZ50pZ9+FJ\nqmpsjI+PZP6kAbi7ybUtyBV+o70nCgBIlMl6Qoh24u5m5OGZsXQJ9Gb7V+c4llmsdki6pSgKn359\ngRc/OI61rp6lc4bz858MkmL/A/JJAHW2eg6cLCDQz5PhA7qqHY4QQkcCfD1Zdnccnu5G3th5ikvm\nKrVD0h1rbT2v78hg07+zCfJruL/+J3JL5I9IwQdSzxZTVWNjbFw3+TYohGh3PSMCeOCOaKy19azZ\nkkZ1TZ3aIemG6bKFZ99J5fBpE/2jGsbr+8l4fbOkutHwGFyAxGHdVI5ECKFXo6MjmHZrL4rKLLy+\n4xR2u0ziu1Enz5Xw9FtHyCuuYsKISP5wbzxB/q53f/21cvlJewUlVWTmXia6VwjhIb5qhyOE0LFZ\niX3JNVWSnlPC1r05zB7fT+2QNKlhvP4iW/Zk42Y08IufDmaczL9yyOWv8Pd+/xjcJHkMrhCigxmN\nBh782RAiQnz45NAFDp8uUjskzamptbH2www2784m2N+LxxbcLMX+Grl0wa+z2dmfXoi/jwfxA8LU\nDkcI4QJ8vT1YevdQvDzdePOT01ws+k7tkDTDVFbNs+8cJfWMiYFRQaxcOIq+3QPVDkszXLrgH/u2\nmEpLHWPjurnsUotCiM4X2dWPxdOHUFtnZ83WdL6rrlU7JKeXnlPCU2+lcqm4ittHRPHovfEE+Xmq\nHZamuHSVa5ysJ935QohOFj8wjBlj+2Aur2HdhxnU2+1qh+SUFEXh44Pn+b8PTlBrs/PAtGgWTBko\nd1S1gct+YkVl1Zy+UMbgnsHcFCqT9YQQne/OMb2JH9CV0xfK+ODLbLXDcTo1tTbWbj/Jlj05BAd4\n8T/3jWDsULmbqq1ctuBfmawnK+sJIdRiNBj45fQhdO/qxz9Tc9mfXqB2SE6jqKyaZ98+SurZYgb2\nCGblwlH06Sbj9TfCJQu+rd7O/rQC/LzduXmQTNYTQqjHx8udZXfH4evlzvrPznKuoELtkFSXll3C\n02+lcslcxe03R/HovOEyXt8OXLLgH//WTEV1HWPiuuHh7qZ2OEIIFxcR4suDM2KotzdM4iuvtKod\nkioURWHngfO8vKlhvH7RHdEsmCzj9e3FJT/FPdKdL4RwMnF9uzA7qR9l31l5dftJbPWuNYnPYrXx\n2raTbN2bQ0hgw3j9mDgZr29P11TwMzMzmTx5Mu+99x4AhYWFJCcnc9999/Hb3/6WurqGdaF37NjB\n7NmzmTt3Lps3bwbAZrPx6KOPMn/+fJKTk8nLywPgzJkzzJs3j/nz5/PHP/6x8b1SUlKYM2cOc+fO\nZc+ePe3aWGh4TnLGuVIGRAXRvatfu59fCCHaauotPRkdHU5WXjnv/zNT7XA6TVFpw/31RzOLGdQj\nmJX3y3h9R3BY8C0WC8888wwJCQmN215++WWSk5N599136dmzJ1u2bMFisfDaa6+xfv163n77bdav\nX09FRQU7d+4kKCiI999/n4ceeogXXngBgD/96U+sWLGC999/n4qKCvbt20deXh6ffvopGzZsYO3a\ntaxatQpFad/1pmVlPSGEszIYDPxiWjQ9w/3ZfTyf3ccuqR1ShzuRZeap9ankm6uYNDKK388bTqCM\n13cIhwXfy8uLlJQUwsPDG7cdPnyYCRMmADBhwgQOHDjAiRMnGDp0KH5+fnh5eTFixAiOHj3KwYMH\nmTRpEgC33XYbx44do66ujry8PGJiYgCYOHEiBw4c4OuvvyYxMRE3NzdCQ0OJjIwkKyur3Rprq7fz\nVVoBvl7ujBwU7vgFQgjRybw83Fg6Kw5/Hw/e+2cmmbmX1Q6pQ9gVhY/2n+Ovm9Ow1dv55fRo5k+S\n8fqO5PCTNRqNeHo2/bZlsVjw8PAAoEuXLphMJkpKSggNDW08JjQ0lOLiYsxmc+N2g8GAwWDAbDYT\nHBzc5NjWztFe0rJLKK+qJSH2Jjw9ZLKeEMI5dQ324eGZsSgKvLb9JKUVNWqH1K4sVhuvbk1n275z\nhAZ6sfy+m7ktVsbrO9oNf5Vqqcu9te0Gg+Gauurbuzv/ysp6STJZTwjh5KJ7hTD39v5UVNWyZms6\ndbZ6tUNqFwUlVTzzdirHvjUzuGcwKxaOotdNAWqH5RLa9HhcPz8/amtr8fT0pKioiIiICMLDw5tc\njRcVFREfH094eDhms5lBgwZhs9lQFIWwsDAuX77c5Ngr58jJyWmy/YdDCS0JC3P8y2IqrebkuRIG\n9wohPkZb3ySvpX1apuf26bltIO3raPdOjcZUXsMXR3LZuDuH38yLx2AwtNv5O7t9h08V8sJ7R6mu\nsTEjsR+/mD4Etw7swlc7f86mTQU/ISGBXbt2ceedd7Jr1y7GjRvH0KFDeeKJJ6isrMRgMHDs2DEe\nf/xxvvvuOz777DPGjBnDl19+yS233IKbmxt9+/blm2++YcSIEXz++eckJyfTu3dv/vGPf/CrX/2K\nkpISTCYT/fv3dxhPcbHjp019uC8HRYGEmIhrOt5ZhIUFaCre66Xn9um5bSDt6yz3JPUlJ6+cL1Nz\niQjyZvKoHu1y3s5sn11R2Ln/PNu/OoeHu5H/unMICTE3UVpa1WHv6Sz56wht/SLjsOBnZGSwatUq\n8vPzcXd3Z9euXaxevZrHHnuMjRs30r17d+666y7c3Nz4/e9/zwMPPIDRaGTZsmX4+/szbdo09u/f\nz/z58/Hy8mLVqlUALF++nJUrV6IoCsOGDWu8C+Cee+5hwYIFGAyGJrfr3Yh6u519aQX4eLkxenBE\nu5xTCCE6g4d7wyS+p946wsYvs4gM82NI71DHL3QSFquNlJ2nOPatmS6B3iydFSdd+CoxKO09UK4C\nR9/ijn9r5q9b0pgwIpLkKYM6Kar2oedvqaDv9um5bSDt62xZeeU8//43+Hi5s+L+kYQF+9zQ+Tqj\nfQUlVazZmk5BSTXRvUJ4aEYMAb6dc8uds+WvPbX1Ct8l7n9ovPdeJusJITSqf1QQ900ZSKWljle2\npGOtde5JfMe+Lebp9akUlFQzZVQPfjd3WKcVe9E83Rf80ooaTmSb6dMtgJ4R0o0khNCupOGRTIiP\nJK+4kjc/Od3udzK1B7ui8OFX53hlSzp2u8LiO4cw7/YBuBl1X26cXpsm7WnJV2kFKErDH4oQQmjd\nvZMGkFdcyZEzJnpG+HNHQm+1Q2pUXdMwXn88q2G8ftndcXKh5UR0/ZXLblfYl5aPl6cbo6NlZT0h\nhPa5uxlZclccIQFebN2TQ1p2idohAf+5v/54lpnoXiGsXDhSir2T0XXBP3mulJIKK7cOicDbU/ed\nGUIIFxHk58nSWXG4uxt5fUcGhaXVqsbzTWbDeH1haTVTR/eU8XonpeuCv+d4w4Mn5EE5Qgi96dMt\nkPunDsJitfHKljQsVlunx2BXFLbtzWHN1obx+gd/FsM9E/vLeL2T0m1WLldaOZFVQs8If3rfJI9Z\nFELoz22x3ZgyqgcFJdX87aNT2DtxEl91TR2vbE7jowPn6RrkzfLkm7lliKxz4sx028/9VVoBdkWR\nyXpCCF2bM6EfuaZKjmeZ2fHVOWaO69vh73nJXMWaLWkUlVmI6R3CgzNi8ffx6PD3FTdGl1f4dkVh\n74l8PD2M3CrfOIUQOuZmNPLwzFi6BnmzY/95jp5tvyeMNufo2WKeeTuVojILP72lJ7+5Z5gUe43Q\nZcE/db4Uc3kNt0RH4OOl204MIYQAwN/Hg2V3D8XTw0jKx6e4VFzZ7u9hVxS27s3h1W3pKIrCQzNi\nmDNBxuu1RJeZ2vv9Y3ATZbKeEMJF9Aj3Z9EdQ7DW1vPK1nSqaura7dzVNXX8dXMaOw+cJyzYm8eT\nRzI6WnpPtUZ3Bb+8qpZj35qJCvOnbzeZrCeEcB2jBodzR0IvTGUWXv8wA7v9xifxXSqu5Kn1qaRl\nlxDTJ5QV94+iR7h/O0QrOpvu+rv3pxdQb1dIGt69XZ8bLYQQWnDXuL7kmipJyy5hy55s5kxw/Ijx\nlhw9ayLl49NYa+uZdmsvZiX2xWiU/6tapasr/MbJeu5GEmKku0kI4XqMRgOL7xxCRKgvn359kUOn\nCq/7HHa7wpY92by67SSKovDwzFhmj+8nxV7jdFXwz14ow1RmYdTgcHy9ZdaoEMI1+Xp7sGxWHN6e\nbrz1yRkuFF77Y2Kraup4eXMaHx+8QHiwD08kj2TUYFmaXA90VfD3XHkMrtx7L4Rwcd27+rH4zhhq\nbXbWbE2jorrW4Wvyiit5+q1U0nNKiO0TyoqFI4mS8Xrd0E3Br6iu5ejZYrp39aNfpEzWE0KI4QO6\nMnNcH0oqrKzbfhJbvb3FY1PPmHj27aOYLlu4I6EXv5kzDD/pKdUV3RT8A+mFDZP1hslkPSGEuGL6\nbb25eWAYZy5eZuOXWT/ab7crbN6dzWvbTwKwZGYsdyfJeL0e6WKWvqIo7DmRj7ubkYTYm9QORwgh\nnIbRYGDR9GgK36nmi6N59IzwZ9zQhjVKKi11vLEjg5PnSgkP9mHp3XFEhUkXvl7p4go/M/cyRaXV\njBwcJks8CiHEVbw93Vk2Kw4/b3fe2XWW7PxyzhdU8PT6I5w8V0pc3y4N4/VS7HVNF1f4jZP1hsnK\nekII0ZzwEF8enBHDSx+c4JXNaVhtdqy19Uy/rRczx8r99a5A81f4FVW1pJ4p5qZQXwb2CFY7HCGE\ncFqxfbowZ3x/KqrrMBrgkbtimZUo4/WuQvNX+P8+mout3i4r6wkhxDX4yegedA3yZtjgCDy48aV3\nhXZo/gp/16ELuLsZuE0m6wkhhEMGg4GRg8PpLuP1LkfzBT+36DtGDAwjwNdT7VCEEEIIp6X5gg+y\nsp4QQgjhiOYLfo8Ifwb3lMl6QgghRGs0X/CffWiMTNYTQgghHNB8wQ8J9FY7BCGEEMLpab7gCyGE\nEMIxKfhCCCGEC5CCL4QQQrgAKfhCCCGEC5CCL4QQQrgAKfhCCCGEC3DKh+c899xznDhxAoPBwPLl\ny4mLi1M7JCGEEELTnK7gHzlyhAsXLrBhwways7N5/PHH2bBhg9phCSGEEJrmdF36Bw8eZNKkSQD0\n69ePiooKqqqqVI5KCCGE0Danu8I3m83ExsY2/hwSEoLZbMbPz6/Z4wuOpVJeYfnBlquW2TW0+EPT\nH3+0PG/bzmMwGFCaPGO6jfFgQAHqS3woK7f86FjDdbdLcXzsNexrbJuhjfFctc9e7UvZ5Wp+zMFz\nulvd3fprldZ2t7rTwbmv2mWr8KGsrLrlA67xtB35WbS628FnUWv2obzc0nRji6/58XZFofllsR3m\noG3vd/Umw5XfxWbOoaBQW+BLeXn11TuanOF63u8/2xt2NG16Cwe3eo6rP7vrO0dtoDcVFTXN72x1\ntfJWdhoMLb/hDZ2zhVS38rK6fB8ul19L+5SrdjmOxfE5ab0OXOs5WxAWlnDdrwEnLPhXUxz88ef8\n73OdFIk6StUOoIOVqB1AB9J77srUDqCD6b198vupYR9uadPLnK7gh4eHYzabG382mUyEhYW1ePyY\nNjZcCCGEcCVON4Y/ZswYdu3aBUBGRgYRERH4+vqqHJUQQgihbU53hR8fH09MTAzz5s3Dzc2NlStX\nqh2SEEIIoXkGxdEguRBCCCE0z+m69IUQQgjR/qTgCyGEEC5ACr4QQgjhApxu0l5LWltf/8CBA7z0\n0ku4ubmRmJjIkiVLVIy0bVpr38SJE+nevTsGgwGDwcDq1asJDw9XMdrrl5mZySOPPMLChQtZsGBB\nk316yF9r7dND/v785z/zzTffUF9fz+LFi5k8eXLjPj3kr7X2aTl/NTU1PPbYY5SUlFBbW8vDDz/M\n+PHjG/drPXeO2qfl3P2Q1Wpl+vTpPPLII8ycObNx+3XnT9GAw4cPKw8++KCiKIqSlZWlzJ07t8n+\nadOmKYWFhYrdblfmz5+vZGVlqRFmmzlq38SJExWLxaJGaO2iurpaSU5OVlasWKG8++67P9qv9fw5\nap/W83fo0CFl8eLFiqIoSllZmTJ+/Pgm+7WeP0ft03L+Pv74YyUlJUVRFEW5dOmSMmXKlCb7tZ47\nR+3Tcu5+6MUXX1Rmz56tbNu2rcn2682fJrr0W1tfPzc3l+DgYCIiIjAYDCQlJXHo0CE1w71ujp4f\noCiKwxUHnZmXlxcpKSnNfrPWQ/5aax9oP3+jR4/m5ZdfBiAwMBCLxdLYHj3kr7X2gbbzN23aNBYt\nWgRAfn4+3bp1a9ynh9y11j7Qdu6uyMnJIScnh6SkpCbb25I/TXTpt7a+vtlsJjQ0tHFfaGgoubm5\naoTZZtfy/IAnn3ySvLw8Ro4cye9+9zs1wmwzo9GIp6dns/v0kL/W2neFlvNnMBjw9vYGYNOmTSQl\nJTWuga+H/LXWviu0nD+AefPmYTKZWLduXeM2PeTuiubad4XWc/f888+zcuVKtm3b1mR7W/KniYJ/\ntda+sWn92xz8uA2//vWvGTduHMHBwSxZsoTPP/+cKVOmqBRdx9JD/q6ml/z961//YuvWrfz9739v\n8Rgt56+l9ukhfxs2bODMmTM8+uij7Nixo9ljtJy7ltqn9dxt376d+Ph4IiMjgRuvfZro0m9tff3w\n8HCKi4sb9xUVFWluUoaj5wfMmDGD0NBQjEYjiYmJZGZmqhFmh9BD/hzRQ/727dvHG2+8QUpKCv7+\n/o3b9ZK/ltoH2s5fRkYGhYWFAAwePJj6+npKSxsem6OH3LXWPtB27gD27NnDF198wdy5c9m0aRNr\n167l4MGDQNvyp4mC39r6+pGRkVRVVZGfn4/NZmP37t2MHTtWzXCvW2vtq6ysZNGiRdTV1QFw5MgR\nBgwYoFqs7U0P+WuNHvJXWVnJX/7yF9atW0dAQECTfXrIX2vt03r+jhw5wptvvgk0dAFbLJbGbmA9\n5K619mk9dwAvvfQSmzZtYuPGjcyZM4clS5aQkNDwaNy25E8zS+u++OKLHD58uHF9/VOnThEQEMCk\nSZNITU1l9erVAEydOpWFCxeqG2wbtNa+d955h23btuHt7c2QIUN44okn1A73umRkZLBq1Sry8/Nx\nd3cnIiKCiRMnEhUVpYv8OWqf1vP3wQcfsGbNGnr37o2iKBgMBm699VYGDhyoi/w5ap+W82e1Wlm+\nfDmFhYVYrVaWLl1KWVmZbv53OmqflnN3tTVr1hAVFYWiKG3On2YKvhBCCCHaThNd+kIIIYS4MVLw\nhRBCCBcgBV8IIYRwAVLwhRBCCBcgBV8IIYRwAVLwhRBCCBcgBV8IIYRwAVLwhRBCCBfw/wQoJjRY\n9k8/AAAAAElFTkSuQmCC\n",
"text/plain": [
"<matplotlib.figure.Figure at 0x7fa70cccc048>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"countries.plot()"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"However, for this dataset, it does not say that much:"
]
},
{
"cell_type": "code",
"execution_count": 43,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/plain": [
"<matplotlib.axes._subplots.AxesSubplot at 0x7fa70cc213c8>"
]
},
"execution_count": 43,
"metadata": {},
"output_type": "execute_result"
},
{
"data": {
"image/png": "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\nqiz2AgCQ9lwvOy9dulQrVqyQJJ05c0bTp09XR0eHFi1aJEmKRqNqa2tL7UoAAHzE9Znvh6qqqtTb\n26sdO3boO9/5zshl5lAopHg8nrKBAAD4zZjj29zcrLfffltPPfWUHMcZuf2jv/4kBQU5CgQyx7fQ\nQ+FwvtcTPJdI5Hk9YVwKC/PS5vHjjP2Bs+Bz+Va4xrezs1OhUEjTpk3TnDlzdO3aNeXm5mpoaEjB\nYFA9PT2KRCKj3kciMZC0wVbC4XzF45e8nuG5vr5+ryeMS19ff9o8fpxx+uPvi+v4XL7RaEF3/Zpv\nR0eHmpqaJEnnzp3TwMCASktL1draKkmKxWIqKytL0lQAAPzP9Znvo48+qrq6Oj322GO6cuWKfvaz\nn6mkpETr16/X3r17VVRUpIqKCoutAAD4gmt8s7Oz9Ytf/OKm2z98NgwAAG4Nr3AFAIAx4gsAgDHi\nCwCAMeILAIAx4gsAgDHiCwCAMeILAIAx4gsAgDHiCwCAMeILAIAx4gsAgDHiCwCAMeILAIAx4gsA\ngDHiCwCAMeILAIAx4gsAgDHiCwCAMeILAIAx4gsAgDHiCwCAMeILAIAx4gsAgDHiCwCAMeILAICx\nwFh+U319vY4dO6bh4WF9//vf19y5c1VbWyvHcRQOh1VfX6+srKxUbwUAwBdc43v06FGdOHFCzc3N\nOn/+vCoqKvTlL39Z1dXVWrJkiRoaGtTS0qKqqiqLvQAApD3Xy87z589XY2OjJOmOO+7QwMCAOjo6\ntGjRIklSNBpVW1tbalcCAOAjrvHNyMjQxIkTJUmvv/66vv71r2twcHDkMnMoFFI8Hk/tSgAAfGRM\nX/OVpL/+9a9qaWnRnj17VF5ePnK74ziuf7agIEeBQOb4FnooHM73eoLnEok8ryeMS2FhXto8fpyx\nP3AWfC7fijHF9/Dhw9q1a5f27NmjvLw85ebmamhoSMFgUD09PYpEIqP++URiICljLYXD+YrHL3k9\nw3N9ff1eTxiXvr7+tHn8OOP0x98X1/G5fKPRgu562bm/v18vvfSSdu7cqfz863dUWlqqWCwmSYrF\nYiorK0vSVAAA/M/1me/Bgwd1/vx5/ehHP5LjOMrIyNCLL76oZ555Rq+++qqKiopUUVFhsRUAAF9w\njW9lZaUqKytvur2pqSklgwAA8Dte4QoAAGPEFwAAY8QXAABjxBcAAGPEFwAAY2N+hSsASGfDw8Pq\n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\nXrSvR4h8uBsAAAAASUVORK5CYII=\n",
"text/plain": [
"<matplotlib.figure.Figure at 0x7fa70cd50a20>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"countries['population'].plot(kind='bar')"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"You can play with the `kind` keyword: 'line', 'bar', 'hist', 'density', 'area', 'pie', 'scatter', 'hexbin'"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## Importing and exporting data"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"A wide range of input/output formats are natively supported by pandas:\n",
"\n",
"* CSV, text\n",
"* SQL database\n",
"* Excel\n",
"* HDF5\n",
"* json\n",
"* html\n",
"* pickle\n",
"* ..."
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {
"collapsed": true
},
"outputs": [],
"source": [
"pd.read"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {
"collapsed": true
},
"outputs": [],
"source": [
"states.to"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## Other features\n",
"\n",
"* Working with missing data (`.dropna()`, `pd.isnull()`)\n",
"* Merging and joining (`concat`, `join`)\n",
"* Grouping: `groupby` functionality\n",
"* Reshaping (`stack`, `pivot`)\n",
"* Time series manipulation (resampling, timezones, ..)\n",
"* Easy plotting"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"There are many, many more interesting operations that can be done on Series and DataFrame objects, but rather than continue using this toy data, we'll instead move to a real-world example, and illustrate some of the advanced concepts along the way.\n",
"\n",
"See the next notebooks!"
]
},
{
"cell_type": "markdown",
"metadata": {
"collapsed": true
},
"source": [
"## Acknowledgement\n",
"\n",
"> *© 2015, Stijn Van Hoey and Joris Van den Bossche (<mailto:stijnvanhoey@gmail.com>, <mailto:jorisvandenbossche@gmail.com>). Licensed under [CC BY 4.0 Creative Commons](http://creativecommons.org/licenses/by/4.0/)*\n",
"\n",
"> This notebook is partly based on material of Jake Vanderplas (https://github.com/jakevdp/OsloWorkshop2014).\n",
"\n",
"---"
]
}
],
"metadata": {
"kernelspec": {
"display_name": "Python 3",
"language": "python",
"name": "python3"
},
"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.5.2"
}
},
"nbformat": 4,
"nbformat_minor": 0
}