python-pour-finance/06-Pandas-avec-Time-Series/.ipynb_checkpoints/Ré-échantillonnage du Tem...

860 lines
55 KiB
Plaintext

{
"cells": [
{
"cell_type": "markdown",
"metadata": {},
"source": [
"___\n",
"\n",
"<a href='http://www.pieriandata.com'> <img src='../Pierian_Data_Logo.png' /></a>\n",
"___\n",
"<center>*Copyright Pierian Data 2017*</center>\n",
"<center>*For more information, visit us at www.pieriandata.com*</center>"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"# Time Resampling\n",
"\n",
"Let's learn how to sample time series data! This will be useful later on in the course!"
]
},
{
"cell_type": "code",
"execution_count": 30,
"metadata": {
"collapsed": true
},
"outputs": [],
"source": [
"import numpy as np\n",
"import pandas as pd"
]
},
{
"cell_type": "code",
"execution_count": 31,
"metadata": {
"collapsed": true
},
"outputs": [],
"source": [
"%matplotlib inline\n",
"import matplotlib.pyplot as plt"
]
},
{
"cell_type": "code",
"execution_count": 2,
"metadata": {
"collapsed": true
},
"outputs": [],
"source": [
"# Grab data\n",
"# Faster alternative\n",
"# df = pd.read_csv('time_data/walmart_stock.csv',index_col='Date')\n",
"df = pd.read_csv('time_data/walmart_stock.csv')"
]
},
{
"cell_type": "code",
"execution_count": 3,
"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>Date</th>\n",
" <th>Open</th>\n",
" <th>High</th>\n",
" <th>Low</th>\n",
" <th>Close</th>\n",
" <th>Volume</th>\n",
" <th>Adj Close</th>\n",
" </tr>\n",
" </thead>\n",
" <tbody>\n",
" <tr>\n",
" <th>0</th>\n",
" <td>2012-01-03</td>\n",
" <td>59.970001</td>\n",
" <td>61.060001</td>\n",
" <td>59.869999</td>\n",
" <td>60.330002</td>\n",
" <td>12668800</td>\n",
" <td>52.619235</td>\n",
" </tr>\n",
" <tr>\n",
" <th>1</th>\n",
" <td>2012-01-04</td>\n",
" <td>60.209999</td>\n",
" <td>60.349998</td>\n",
" <td>59.470001</td>\n",
" <td>59.709999</td>\n",
" <td>9593300</td>\n",
" <td>52.078475</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2</th>\n",
" <td>2012-01-05</td>\n",
" <td>59.349998</td>\n",
" <td>59.619999</td>\n",
" <td>58.369999</td>\n",
" <td>59.419998</td>\n",
" <td>12768200</td>\n",
" <td>51.825539</td>\n",
" </tr>\n",
" <tr>\n",
" <th>3</th>\n",
" <td>2012-01-06</td>\n",
" <td>59.419998</td>\n",
" <td>59.450001</td>\n",
" <td>58.869999</td>\n",
" <td>59.000000</td>\n",
" <td>8069400</td>\n",
" <td>51.459220</td>\n",
" </tr>\n",
" <tr>\n",
" <th>4</th>\n",
" <td>2012-01-09</td>\n",
" <td>59.029999</td>\n",
" <td>59.549999</td>\n",
" <td>58.919998</td>\n",
" <td>59.180000</td>\n",
" <td>6679300</td>\n",
" <td>51.616215</td>\n",
" </tr>\n",
" </tbody>\n",
"</table>\n",
"</div>"
],
"text/plain": [
" Date Open High Low Close Volume Adj Close\n",
"0 2012-01-03 59.970001 61.060001 59.869999 60.330002 12668800 52.619235\n",
"1 2012-01-04 60.209999 60.349998 59.470001 59.709999 9593300 52.078475\n",
"2 2012-01-05 59.349998 59.619999 58.369999 59.419998 12768200 51.825539\n",
"3 2012-01-06 59.419998 59.450001 58.869999 59.000000 8069400 51.459220\n",
"4 2012-01-09 59.029999 59.549999 58.919998 59.180000 6679300 51.616215"
]
},
"execution_count": 3,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"df.head()"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Create a date index from the date column"
]
},
{
"cell_type": "code",
"execution_count": 4,
"metadata": {
"collapsed": true
},
"outputs": [],
"source": [
"df['Date'] = df['Date'].apply(pd.to_datetime)"
]
},
{
"cell_type": "code",
"execution_count": 5,
"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>Date</th>\n",
" <th>Open</th>\n",
" <th>High</th>\n",
" <th>Low</th>\n",
" <th>Close</th>\n",
" <th>Volume</th>\n",
" <th>Adj Close</th>\n",
" </tr>\n",
" </thead>\n",
" <tbody>\n",
" <tr>\n",
" <th>0</th>\n",
" <td>2012-01-03</td>\n",
" <td>59.970001</td>\n",
" <td>61.060001</td>\n",
" <td>59.869999</td>\n",
" <td>60.330002</td>\n",
" <td>12668800</td>\n",
" <td>52.619235</td>\n",
" </tr>\n",
" <tr>\n",
" <th>1</th>\n",
" <td>2012-01-04</td>\n",
" <td>60.209999</td>\n",
" <td>60.349998</td>\n",
" <td>59.470001</td>\n",
" <td>59.709999</td>\n",
" <td>9593300</td>\n",
" <td>52.078475</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2</th>\n",
" <td>2012-01-05</td>\n",
" <td>59.349998</td>\n",
" <td>59.619999</td>\n",
" <td>58.369999</td>\n",
" <td>59.419998</td>\n",
" <td>12768200</td>\n",
" <td>51.825539</td>\n",
" </tr>\n",
" <tr>\n",
" <th>3</th>\n",
" <td>2012-01-06</td>\n",
" <td>59.419998</td>\n",
" <td>59.450001</td>\n",
" <td>58.869999</td>\n",
" <td>59.000000</td>\n",
" <td>8069400</td>\n",
" <td>51.459220</td>\n",
" </tr>\n",
" <tr>\n",
" <th>4</th>\n",
" <td>2012-01-09</td>\n",
" <td>59.029999</td>\n",
" <td>59.549999</td>\n",
" <td>58.919998</td>\n",
" <td>59.180000</td>\n",
" <td>6679300</td>\n",
" <td>51.616215</td>\n",
" </tr>\n",
" </tbody>\n",
"</table>\n",
"</div>"
],
"text/plain": [
" Date Open High Low Close Volume Adj Close\n",
"0 2012-01-03 59.970001 61.060001 59.869999 60.330002 12668800 52.619235\n",
"1 2012-01-04 60.209999 60.349998 59.470001 59.709999 9593300 52.078475\n",
"2 2012-01-05 59.349998 59.619999 58.369999 59.419998 12768200 51.825539\n",
"3 2012-01-06 59.419998 59.450001 58.869999 59.000000 8069400 51.459220\n",
"4 2012-01-09 59.029999 59.549999 58.919998 59.180000 6679300 51.616215"
]
},
"execution_count": 5,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"df.head()"
]
},
{
"cell_type": "code",
"execution_count": 6,
"metadata": {
"collapsed": true
},
"outputs": [],
"source": [
"df.set_index('Date',inplace=True)"
]
},
{
"cell_type": "code",
"execution_count": 8,
"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>Open</th>\n",
" <th>High</th>\n",
" <th>Low</th>\n",
" <th>Close</th>\n",
" <th>Volume</th>\n",
" <th>Adj Close</th>\n",
" </tr>\n",
" <tr>\n",
" <th>Date</th>\n",
" <th></th>\n",
" <th></th>\n",
" <th></th>\n",
" <th></th>\n",
" <th></th>\n",
" <th></th>\n",
" </tr>\n",
" </thead>\n",
" <tbody>\n",
" <tr>\n",
" <th>2012-01-03</th>\n",
" <td>59.970001</td>\n",
" <td>61.060001</td>\n",
" <td>59.869999</td>\n",
" <td>60.330002</td>\n",
" <td>12668800</td>\n",
" <td>52.619235</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2012-01-04</th>\n",
" <td>60.209999</td>\n",
" <td>60.349998</td>\n",
" <td>59.470001</td>\n",
" <td>59.709999</td>\n",
" <td>9593300</td>\n",
" <td>52.078475</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2012-01-05</th>\n",
" <td>59.349998</td>\n",
" <td>59.619999</td>\n",
" <td>58.369999</td>\n",
" <td>59.419998</td>\n",
" <td>12768200</td>\n",
" <td>51.825539</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2012-01-06</th>\n",
" <td>59.419998</td>\n",
" <td>59.450001</td>\n",
" <td>58.869999</td>\n",
" <td>59.000000</td>\n",
" <td>8069400</td>\n",
" <td>51.459220</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2012-01-09</th>\n",
" <td>59.029999</td>\n",
" <td>59.549999</td>\n",
" <td>58.919998</td>\n",
" <td>59.180000</td>\n",
" <td>6679300</td>\n",
" <td>51.616215</td>\n",
" </tr>\n",
" </tbody>\n",
"</table>\n",
"</div>"
],
"text/plain": [
" Open High Low Close Volume Adj Close\n",
"Date \n",
"2012-01-03 59.970001 61.060001 59.869999 60.330002 12668800 52.619235\n",
"2012-01-04 60.209999 60.349998 59.470001 59.709999 9593300 52.078475\n",
"2012-01-05 59.349998 59.619999 58.369999 59.419998 12768200 51.825539\n",
"2012-01-06 59.419998 59.450001 58.869999 59.000000 8069400 51.459220\n",
"2012-01-09 59.029999 59.549999 58.919998 59.180000 6679300 51.616215"
]
},
"execution_count": 8,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"df.head()"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## resample()\n",
"\n",
"A common operation with time series data is resamplling based on the time series index. Let see how to use the resample() method.\n",
"\n",
"#### All possible time series offest strings"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"<table border=\"1\" class=\"docutils\">\n",
"<colgroup>\n",
"<col width=\"13%\" />\n",
"<col width=\"87%\" />\n",
"</colgroup>\n",
"<thead valign=\"bottom\">\n",
"<tr class=\"row-odd\"><th class=\"head\">Alias</th>\n",
"<th class=\"head\">Description</th>\n",
"</tr>\n",
"</thead>\n",
"<tbody valign=\"top\">\n",
"<tr class=\"row-even\"><td>B</td>\n",
"<td>business day frequency</td>\n",
"</tr>\n",
"<tr class=\"row-odd\"><td>C</td>\n",
"<td>custom business day frequency (experimental)</td>\n",
"</tr>\n",
"<tr class=\"row-even\"><td>D</td>\n",
"<td>calendar day frequency</td>\n",
"</tr>\n",
"<tr class=\"row-odd\"><td>W</td>\n",
"<td>weekly frequency</td>\n",
"</tr>\n",
"<tr class=\"row-even\"><td>M</td>\n",
"<td>month end frequency</td>\n",
"</tr>\n",
"<tr class=\"row-odd\"><td>SM</td>\n",
"<td>semi-month end frequency (15th and end of month)</td>\n",
"</tr>\n",
"<tr class=\"row-even\"><td>BM</td>\n",
"<td>business month end frequency</td>\n",
"</tr>\n",
"<tr class=\"row-odd\"><td>CBM</td>\n",
"<td>custom business month end frequency</td>\n",
"</tr>\n",
"<tr class=\"row-even\"><td>MS</td>\n",
"<td>month start frequency</td>\n",
"</tr>\n",
"<tr class=\"row-odd\"><td>SMS</td>\n",
"<td>semi-month start frequency (1st and 15th)</td>\n",
"</tr>\n",
"<tr class=\"row-even\"><td>BMS</td>\n",
"<td>business month start frequency</td>\n",
"</tr>\n",
"<tr class=\"row-odd\"><td>CBMS</td>\n",
"<td>custom business month start frequency</td>\n",
"</tr>\n",
"<tr class=\"row-even\"><td>Q</td>\n",
"<td>quarter end frequency</td>\n",
"</tr>\n",
"<tr class=\"row-odd\"><td>BQ</td>\n",
"<td>business quarter endfrequency</td>\n",
"</tr>\n",
"<tr class=\"row-even\"><td>QS</td>\n",
"<td>quarter start frequency</td>\n",
"</tr>\n",
"<tr class=\"row-odd\"><td>BQS</td>\n",
"<td>business quarter start frequency</td>\n",
"</tr>\n",
"<tr class=\"row-even\"><td>A</td>\n",
"<td>year end frequency</td>\n",
"</tr>\n",
"<tr class=\"row-odd\"><td>BA</td>\n",
"<td>business year end frequency</td>\n",
"</tr>\n",
"<tr class=\"row-even\"><td>AS</td>\n",
"<td>year start frequency</td>\n",
"</tr>\n",
"<tr class=\"row-odd\"><td>BAS</td>\n",
"<td>business year start frequency</td>\n",
"</tr>\n",
"<tr class=\"row-even\"><td>BH</td>\n",
"<td>business hour frequency</td>\n",
"</tr>\n",
"<tr class=\"row-odd\"><td>H</td>\n",
"<td>hourly frequency</td>\n",
"</tr>\n",
"<tr class=\"row-even\"><td>T, min</td>\n",
"<td>minutely frequency</td>\n",
"</tr>\n",
"<tr class=\"row-odd\"><td>S</td>\n",
"<td>secondly frequency</td>\n",
"</tr>\n",
"<tr class=\"row-even\"><td>L, ms</td>\n",
"<td>milliseconds</td>\n",
"</tr>\n",
"<tr class=\"row-odd\"><td>U, us</td>\n",
"<td>microseconds</td>\n",
"</tr>\n",
"<tr class=\"row-even\"><td>N</td>\n",
"<td>nanoseconds</td>\n",
"</tr>\n",
"</tbody>\n",
"</table>"
]
},
{
"cell_type": "code",
"execution_count": 14,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/plain": [
"DatetimeIndex(['2012-01-03', '2012-01-04', '2012-01-05', '2012-01-06',\n",
" '2012-01-09', '2012-01-10', '2012-01-11', '2012-01-12',\n",
" '2012-01-13', '2012-01-17',\n",
" ...\n",
" '2016-12-16', '2016-12-19', '2016-12-20', '2016-12-21',\n",
" '2016-12-22', '2016-12-23', '2016-12-27', '2016-12-28',\n",
" '2016-12-29', '2016-12-30'],\n",
" dtype='datetime64[ns]', name='Date', length=1258, freq=None)"
]
},
"execution_count": 14,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"# Our index\n",
"df.index"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"You need to call resample with the rule parameter, then you need to call some sort of aggregation function. This is because due to resampling, we need some sort of mathematical rule to join the rows by (mean,sum,count,etc...)"
]
},
{
"cell_type": "code",
"execution_count": 17,
"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>Open</th>\n",
" <th>High</th>\n",
" <th>Low</th>\n",
" <th>Close</th>\n",
" <th>Volume</th>\n",
" <th>Adj Close</th>\n",
" </tr>\n",
" <tr>\n",
" <th>Date</th>\n",
" <th></th>\n",
" <th></th>\n",
" <th></th>\n",
" <th></th>\n",
" <th></th>\n",
" <th></th>\n",
" </tr>\n",
" </thead>\n",
" <tbody>\n",
" <tr>\n",
" <th>2012-12-31</th>\n",
" <td>67.158680</td>\n",
" <td>67.602120</td>\n",
" <td>66.786520</td>\n",
" <td>67.215120</td>\n",
" <td>9239015</td>\n",
" <td>59.389349</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2013-12-31</th>\n",
" <td>75.264048</td>\n",
" <td>75.729405</td>\n",
" <td>74.843055</td>\n",
" <td>75.320516</td>\n",
" <td>6951496</td>\n",
" <td>68.147179</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2014-12-31</th>\n",
" <td>77.274524</td>\n",
" <td>77.740040</td>\n",
" <td>76.864405</td>\n",
" <td>77.327381</td>\n",
" <td>6515612</td>\n",
" <td>71.709712</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2015-12-31</th>\n",
" <td>72.569405</td>\n",
" <td>73.064167</td>\n",
" <td>72.034802</td>\n",
" <td>72.491111</td>\n",
" <td>9040769</td>\n",
" <td>68.831426</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2016-12-31</th>\n",
" <td>69.481349</td>\n",
" <td>70.019643</td>\n",
" <td>69.023492</td>\n",
" <td>69.547063</td>\n",
" <td>9371645</td>\n",
" <td>68.054229</td>\n",
" </tr>\n",
" </tbody>\n",
"</table>\n",
"</div>"
],
"text/plain": [
" Open High Low Close Volume Adj Close\n",
"Date \n",
"2012-12-31 67.158680 67.602120 66.786520 67.215120 9239015 59.389349\n",
"2013-12-31 75.264048 75.729405 74.843055 75.320516 6951496 68.147179\n",
"2014-12-31 77.274524 77.740040 76.864405 77.327381 6515612 71.709712\n",
"2015-12-31 72.569405 73.064167 72.034802 72.491111 9040769 68.831426\n",
"2016-12-31 69.481349 70.019643 69.023492 69.547063 9371645 68.054229"
]
},
"execution_count": 17,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"# Yearly Means\n",
"df.resample(rule='A').mean()"
]
},
{
"cell_type": "markdown",
"metadata": {
"collapsed": false
},
"source": [
"### Custom Resampling\n",
"\n",
"You could technically also create your own custom resampling function:"
]
},
{
"cell_type": "code",
"execution_count": 23,
"metadata": {
"collapsed": true
},
"outputs": [],
"source": [
"def first_day(entry):\n",
" \"\"\"\n",
" Returns the first instance of the period, regardless of samplling rate.\n",
" \"\"\"\n",
" return entry[0]"
]
},
{
"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>Open</th>\n",
" <th>High</th>\n",
" <th>Low</th>\n",
" <th>Close</th>\n",
" <th>Volume</th>\n",
" <th>Adj Close</th>\n",
" </tr>\n",
" <tr>\n",
" <th>Date</th>\n",
" <th></th>\n",
" <th></th>\n",
" <th></th>\n",
" <th></th>\n",
" <th></th>\n",
" <th></th>\n",
" </tr>\n",
" </thead>\n",
" <tbody>\n",
" <tr>\n",
" <th>2012-12-31</th>\n",
" <td>59.970001</td>\n",
" <td>61.060001</td>\n",
" <td>59.869999</td>\n",
" <td>60.330002</td>\n",
" <td>12668800</td>\n",
" <td>52.619235</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2013-12-31</th>\n",
" <td>68.930000</td>\n",
" <td>69.239998</td>\n",
" <td>68.449997</td>\n",
" <td>69.239998</td>\n",
" <td>10390800</td>\n",
" <td>61.879708</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2014-12-31</th>\n",
" <td>78.720001</td>\n",
" <td>79.470001</td>\n",
" <td>78.500000</td>\n",
" <td>78.910004</td>\n",
" <td>6878000</td>\n",
" <td>72.254228</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2015-12-31</th>\n",
" <td>86.269997</td>\n",
" <td>86.720001</td>\n",
" <td>85.550003</td>\n",
" <td>85.900002</td>\n",
" <td>4501800</td>\n",
" <td>80.624861</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2016-12-31</th>\n",
" <td>60.500000</td>\n",
" <td>61.490002</td>\n",
" <td>60.360001</td>\n",
" <td>61.459999</td>\n",
" <td>11989200</td>\n",
" <td>59.289713</td>\n",
" </tr>\n",
" </tbody>\n",
"</table>\n",
"</div>"
],
"text/plain": [
" Open High Low Close Volume Adj Close\n",
"Date \n",
"2012-12-31 59.970001 61.060001 59.869999 60.330002 12668800 52.619235\n",
"2013-12-31 68.930000 69.239998 68.449997 69.239998 10390800 61.879708\n",
"2014-12-31 78.720001 79.470001 78.500000 78.910004 6878000 72.254228\n",
"2015-12-31 86.269997 86.720001 85.550003 85.900002 4501800 80.624861\n",
"2016-12-31 60.500000 61.490002 60.360001 61.459999 11989200 59.289713"
]
},
"execution_count": 25,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"df.resample(rule='A').apply(first_day)"
]
},
{
"cell_type": "code",
"execution_count": 38,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/plain": [
"<matplotlib.text.Text at 0x11d782080>"
]
},
"execution_count": 38,
"metadata": {},
"output_type": "execute_result"
},
{
"data": {
"image/png": "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\nEG7oZmaF+G9iulHp3OaAggAAAABJRU5ErkJggg==\n",
"text/plain": [
"<matplotlib.figure.Figure at 0x11ce18588>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"df['Close'].resample('A').mean().plot(kind='bar')\n",
"plt.title('Yearly Mean Close Price for Walmart')"
]
},
{
"cell_type": "code",
"execution_count": 42,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/plain": [
"<matplotlib.text.Text at 0x11e8ddda0>"
]
},
"execution_count": 42,
"metadata": {},
"output_type": "execute_result"
},
{
"data": {
"image/png": "iVBORw0KGgoAAAANSUhEUgAAA6IAAAHjCAYAAAA5Y6JnAAAABHNCSVQICAgIfAhkiAAAAAlwSFlz\nAAALEgAACxIB0t1+/AAAIABJREFUeJzt3XmYdGdZJ/7vDW/YSSCLEZNAGBaBUVkmssjIIrusjhrQ\nQYLigCDKMM4ALr+BUdCMCyIqIsNiFBGD+IMou2FHWULCIoRMEBJCDBBIAmEVyDN/1HmhafrtOt31\n9ql6uj+f66orXafqW89d9Tz1pu8+51RVay0AAAAwlSstuwAAAAD2Fo0oAAAAk9KIAgAAMCmNKAAA\nAJPSiAIAADApjSgAAACT0ogC7FFV1arqxge47eFV9dapa+pRVf1gVZ2z7DqSpKqeXVX/30F+zKqq\nF1TVpVX1zoP52AdDVb2xqn522XUAsDUaUYAlq6rzqurfqurIddvPGprF4w/CGJP9sj7U/Kmq2rdm\n2yHDth358uqquk5V/UlVfaKqvlhV76+qn96JsdZrrb2ltfbdO/HYw7x9uao+X1Wfrqq/rarrbVLL\nz7XWfuMgl/Efk9wjybGttdsu+mBV9ZqqeuKa68cMa2ajbd+56HgHU1UdP9S1b/69AdiMRhRgNXw0\nyU/sv1JV35vkGssrZ2GXJrnPmuv3GbYddFV1lST/kOQGSe6Q5LAk/yPJyVX133ZizIk9trV2rSQ3\nTXKdJL+/0Z2q6so7NP4NkpzXWvvCVoMHaNjenOROa67fKcmHNth2bmvtE1sdc6doPgEOLo0owGr4\niyQPW3P9pCR/vvYOVXVYVf15VV1cVedX1a9V1ZWG2x5eVW+tqt8dDqH8aFXdZ7jtaUl+MMkfDXvW\n/mjNw969qs6tqsuq6o+rqtYXNmz/vXXbTquqx2/h+Txsg+fz01V1dlVdXlUfqapHrbntiVX1jv2/\n/FfVo6vqA1V1tQ3G+qkk10/y4621j7bWvtpae3WSX0zy61V16PAY51XVL1fVB4fX6AVrH6+q7ldV\n7xlei3+squ9bc9t5VfXfq+p9VfXZqvrr/dmquktVfXzMfYfbn1BVF1XVv1bVz252iPRarbVLkrw0\nyfcMj/Nnw17gV1bVF5Lcddj21DVjPXB4Tp+rqn+pqnsP2w+rqucNdVxYVU/dqJGtqkckeW6SOwxr\n538N2/9LVX24qi4Z1sJ3rcm0qvr5qjo3ybkbPJU3J7nj/rWb2dp8RpIT1m178/B4162qvx/W/aXD\nz8du9BoN74O3VdXvD/P4kar6gWH7BTXbK3/Smvvft2ZHHnxuuP0pa27bv/fzEVX1sSSv319TksuG\n1+MOG04WAHNpRAFWw9uTHFpVNx8agockeeG6+/xhZnv7/l2SO2fW3K09/PR2Sc5JcmSS307yvKqq\n1tqvJnlLhj1rrbXHrsncL8n3J/m+JCcmudcGtZ2S5CfWNL1HJrl7khdt8nxeluRONTtk9rqZNRYv\nX3efTw3jHzo8j9+vqtsMt/1Okq8k+bWqukmS30zy0NbalzcY6x5JXrXBHruXJrlaZntJ9/vPw3O8\nUWZ7GH9teE63TvL8JI9KckSSP01yWlVddU32xCT3TnLDzF6vh2/y/De879AI/rfMXr8bJ7nLJo/x\nLYbX/UeTnLVm808meVqSayd567r73zaz5v9/ZLYn9U5Jzhtu/rMkXxtquHWSeyb5tkO3W2vPS/Jz\nSf5pWDtPrqofSvJbw3O8XpLzk7x4XfRBma3HW2zwVN6Z5KpJbjlcv1OS1yX58Lpt+5u+KyV5QWZ7\nZq+f5EtJ1v4xZb3bJXlfZvP4oqG27x+e60Mz+4PMtYb7fiGz99F1ktw3yaOr6kHrHu/OSW6e2brZ\nv9f2OsPr8U+b1AHAJjSiAKtj/17EeyQ5O8mF+29Y05z+cmvt8tbaeUl+L7O9gfud31r7P621r2fW\nPF4vydFzxjy5tXZZa+1jSd6Q5Fbr79Bae2eSzya527DpIUne2Fr75CaP++Ukf5fkwcPltGHb2sd9\nRWvtX9rMm5K8NrOGNa21K4bX4heH7G+31tY2YGsdmeSiDer+WpJPD7fv90ettQuGvYtPyzcPh35k\nkj9trb2jtfb11topmTXCt1+TfWZr7V+H7N9lg9dqxH1PTPKC1toHWmtfTPKUTR7jG49VVZclee/w\nPNcebvzy1trbWmtXbNCkPyLJ81trrxtuv7C19qGqOjrJDyf5r621L7TWPpXZ4b4PGVFLMmvmn99a\nO7O19pUkv5zZHtPj19znt1prl7TWvrQ+PGTekdkfKg5Pclhr7SOZ/bFk/7ZbJHnTcP/PtNZe2lr7\nYmvt8szm7c6b1PfR1toLhvfBXyc5Lsmvt9a+0lp7bZJ/y6wpTWvtja219w+vz/uS/NUGj/2U4XX6\ntucCwPY53wFgdfxFZnuBbph1h7Fm1kwdktnep/3OT3LMmuvfOJ+utfbFmh1le61sbu05eF/c5P6n\n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\nFAAAgElpRAEAAJiURhQAAIBJaUQBAACYlEYUAACASWlEAQAAmJRGFAAAgElpRAEAAJiURhQAAIBJ\naUQBAACYlEYUAACASWlEAQAAmJRGFAAAgElpRAEAAJiURhQAAIBJaUQBAACYlEYUAACASWlEAQAA\nmJRGFAAAgElpRAEAAJiURhQAAIBJaUQBAACYlEYUAACASWlEAQAAmJRGFAAAgElpRAEAAJiURhQA\nAIBJaUQBAACYlEYUAACASWlEAQAAmJRGFAAAgElpRAEAAJiURhQAAIBJaUQBAACYlEYUAACASWlE\nAQAAmJRGFAAAgElpRAEAAJiURhQAAIBJaUQBAACYlEYUAACASWlEAQAAmNTcRrSqjquqN1TVB6vq\nA1X1uGH74VX1uqo6d/jvdXe+XAAAAHo3Zo/o15L8UmvtFklun+Tnq+oWSZ6U5PTW2k2SnD5cBwAA\ngE3NbURbaxe11s4cfr48ydlJjknywCSnDHc7JcmDdqpIAAAAdo8tnSNaVccnuXWSdyQ5urV20XDT\nJ5IcfYDMI6vqjKo64+KLL16gVAAAAHaD0Y1oVV0ryUuT/NfW2ufW3tZaa0naRrnW2nNaaye01k44\n6qijFioWAACA/o1qRKvqkMya0L9srf3tsPmTVXW94fbrJfnUzpQIAADAbjLmU3MryfOSnN1ae/qa\nm05LctLw80lJXn7wywMAAGC32TfiPndM8lNJ3l9V7xm2/UqSk5OcWlWPSHJ+khN3pkQAAAB2k7mN\naGvtrUnqADff7eCWAwAAwG63pU/NBQAAgEVpRAEAAJiURhQAAIBJaUQBAACYlEYUAACASWlEAQAA\nmJRGFAAAgElpRAEAAJiURhQAAIBJaUQBAACYlEYUAACASWlEAQAAmJRGFAAAgElpRAEAAJiURhQA\nAIBJaUQBAACYlEYUAACASWlEAQAAmJRGFAAAgElpRAEAAJiURhQAAIBJaUQBAACYlEYUAACASWlE\nAQAAmJRGFAAAgElpRAEAAJiURhQAAIBJaUQBAACYlEYUAACASWlEAQAAmJRGFAAAgElpRAEAAJiU\nRhQAAIBJaUQBAACYlEYUAACASWlEAQAAmJRGFAAAgElpRAEAAJiURhQAAIBJaUQBAACYlEYUAACA\nSWlEAQAAmJRGFAAAgElpRAEAAJiURhQAAIBJaUQBAACYlEYUAACASWlEAQAAmJRGFAAAgElpRAEA\nAJiURhQAAIBJaUQBAACYlEYUAACASWlEAQAAmJRGFAAAgElpRAEAAJiURhQAAIBJaUQBAACYlEYU\nAACASS3UiFbVvavqnKr6cFU96WAVBQAAwO617Ua0qq6c5I+T3CfJLZL8RFXd4mAVBgAAwO60yB7R\n2yb5cGvtI621f0vy4iQPPDhlAQAAsFst0ogek+SCNdc/PmwDAACAA6rW2vaCVT+W5N6ttZ8drv9U\nktu11h677n6PTPLI4ep3JznnAA95ZJJPb6sY2VXP9lav7GqPKbv62d7qlV3tMWWnyfZWr+w02d7q\nlV2NMW/QWjtq7qO01rZ1SXKHJK9Zc/2Xk/zyAo93huzuzPZWr+xqjym7+tne6pVd7TFlza2sdSG7\ne+Z27WWRQ3PfleQmVXXDqrpKkockOW2BxwMAAGAP2LfdYGvta1X12CSvSXLlJM9vrX3goFUGAADA\nrrTtRjRJWmuvTPLKg1TLc2R3bba3emVXe0zZ1c/2Vq/sao8pO022t3plp8n2Vq/sao/5Lbb9YUUA\nAACwHYucIwoAAABbphEFAABgUgudI7pdVVVJbpvkmGHThUne2UYcJyy72tne6pUdn+2tXtlpsr3V\nKzs+21u9suOzvdUrO022t3plx2eXVe/cx576HNGqumeSZyU5N7MnkiTHJrlxkse01l4r22e2t3pl\nza3sYtne6pU1t7L91StrXcgull1WvaO0g/BlpFu5JDk7yfEbbL9hkrNl+832Vq+suZW1LmRXZ0xZ\ncytrXcjunrkdc1nGOaL7knx8g+0XJjlEtutsb/XKjs/2Vq/sNNne6pUdn+2tXtnx2d7qlZ0m21u9\nsuOzy6p3rn2LPsA2PD/Ju6rqxUkuGLYdl+QhSZ4n23W2t3plx2d7q1d2mmxv9cqOz/ZWr+z4bG/1\nyk6T7a1e2fHZZdU711K+R7SqbpHkAfnWk15Pa619ULbvbG/1yo7P9lav7DTZ3uqVHZ/trV7Z8dne\n6pWdJttbvbLjs8uqd+5jL6MRBQAAYA9b9CTTrV6SHJbk5CQfSnJJks9kdiLsyUmuI9tvtrd6Zc2t\nrHUhuzpjyppbWetCdvfM7ZjLMj6s6NQklya5S2vt8NbaEUnuOmw7VbbrbG/1yppb2cWyvdUra25l\n+6tX1rqQXSy7rHrnm9epHuxLknO2c5vs6md7q1fW3MpaF7KrM6asuZW1LmR3z9yOuSxjj+j5VfWE\nqjp6/4aqOrqqnphvfhqTbJ/Z3uqVHZ/trV7ZabK91Ss7PttbvbLjs73VKztNtrd6Zcdnl1XvXMto\nRB+c5Igkb6qqS6vqkiRvTHJ4khNlu872Vq+suZVdLNtbvbLmVra/emWtC9nFssuqdy6fmgsAAMCk\nlrFH9Buq6jabXZftN9tbvbLmVnaxbG/1yppb2f7qlbUuZBfLLqveA1lqI5rk0XOuy/ab7a1eWXMr\nu1i2t3plza1sf/XKWheyi2WXVe+GHJoLAADApPYtY9CqqiS3TXLMsOnCJO9sI7pi2dXO9lav7Phs\nb/XKTpPtrV7Z8dne6pUdn+2tXtlpsr3VKzs+u6x65z721HtEq+qeSZ6V5NzMnkiSHJvkxkke01p7\nrWyf2d7qlTW3sotle6tX1tzK9levrHUhu1h2WfWO0hb8ItKtXpKcneT4DbbfMMnZsv1me6tX1tzK\nWheyqzOmrLmVtS5kd8/cjrks48OK9iX5+AbbL0xyiGzX2d7qlR2f7a1e2WmyvdUrOz7bW72y47O9\n1Ss7Tba3emXHZ5dV71z7Fn2AbXh+kndV1YuTXDBsOy7JQ5I8T7brbG/1yo7P9lav7DTZ3uqVHZ/t\nrV7Z8dne6pWdJttbvbLjs8uqd66lfGpuVd0iyQPyrSe9ntZa+6Bs39ne6pUdn+2tXtlpsr3VKzs+\n21u9suOzvdUrO022t3plx2eXVe/cx15GIwoAAMAetuhJplu9JDksyclJPpTkkiSfyexE2JOTXEe2\n32xv9cqaW1nrQnZ1xpQ1t7LWhezumdsxl2V8WNGpSS5NcpfW2uGttSOS3HXYdqps19ne6pU1t7KL\nZXurV9bcyvZXr6x1IbtYdln1zjevUz3YlyTnbOc22dXP9lavrLmVtS5kV2dMWXMra13I7p65HXNZ\nxh7R86vqCVV19P4NVXV0VT0x3/w0Jtk+s73VKzs+21u9stNke6tXdny2t3plx2d7q1d2mmxv9cqO\nzy6r3rmW0Yg+OMkRSd5UVZdW1SVJ3pjk8CQnynad7a1eWXMru1i2t3plza1sf/XKWheyi2WXVe9c\nPjUXAACASS1jj+g3VNVtNrsu22+2t3plza3sYtne6pU1t7L91StrXcgull1WvQey1EY0yaPnXJft\nN9tbvbLmVnaxbG/1yppb2f7qlbUuZBfLLqveDTk0FwAAgEntW8agVVVJbpvkmGHThUne2UZ0xbKr\nne2tXtnx2d7qlZ0m21u9suOzvdUrOz7bW72y02R7q1d2fHZZ9c597Kn3iFbVPZM8K8m5mT2RJDk2\nyY2TPKaEr2YUAAAWd0lEQVS19lrZPrO91StrbmUXy/ZWr6y5le2vXlnrQnax7LLqHaUt+EWkW70k\nOTvJ8Rtsv2GSs2X7zfZWr6y5lbUuZFdnTFlzK2tdyO6euR1zWcaHFe1L8vENtl+Y5BDZrrO91Ss7\nPttbvbLTZHurV3Z8trd6Zcdne6tXdppsb/XKjs8uq9659i36ANvw/CTvqqoXJ7lg2HZckockeZ5s\n19ne6pUdn+2tXtlpsr3VKzs+21u9suOzvdUrO022t3plx2eXVe9cS/nU3Kq6RZIH5FtPej2ttfZB\n2b6zvdUrOz7bW72y02R7q1d2fLa3emXHZ3urV3aabG/1yo7PLqveuY+9jEYUAACAPWzRk0y3ekly\nWJKTk3woySVJPpPZibAnJ7mObL/Z3uqVNbey1oXs6owpa25lrQvZ3TO3Yy7L+LCiU5NcmuQurbXD\nW2tHJLnrsO1U2a6zvdUra25lF8v2Vq+suZXtr15Z60J2seyy6p1vXqd6sC9JztnObbKrn+2tXllz\nK2tdyK7OmLLmVta6kN09czvmsow9oudX1ROq6uj9G6rq6Kp6Yr75aUyyfWZ7q1d2fLa3emWnyfZW\nr+z4bG/1yo7P9lav7DTZ3uqVHZ9dVr1zLaMRfXCSI5K8qaouqapLkrwxyeFJTpTtOttbvbLmVnax\nbG/1yppb2f7qlbUuZBfLLqveuXxqLgAAAJNaxh5RAAAA9jCNKAAAAJPSiAIAADCpfcsuYK2qukdr\n7XVz7nOtJPdOclySryf5v0le21q7YofHPWwY95hh04VJXtNau2w3jrvdrNdpfLaq7pTkk621c6rq\njknukOTs1tortjPmFsY9qK/VLp4fa3lEdres41Ufd5Gs9/ze+jd5zLidzo/3/Mjswf5deZVfp07n\nZ8+/5/dbtT2iz9vsxqo6McnrM3shH5vk+5P8VJL3VNX37uC4D0tyZpK7JLnGcLlrkncPt+2qcbeb\n9TqNz1bVM5KcnOQvquo3kvxOkqsneXxV/c4OjrsTr9VunB9reUR2l63jlR13kaz3/LjsXlrLnc6P\n9/zI7A79rrySr1On8+M9v7a2qT81t6pOO9BNSX6otXbNTbLvS3L71toXq+rIJH/ZWrtXVX1fkme3\n1n5gh8Y9J8nt1v/VoKqum+QdrbWb7rJxt5X1Om0p+4Ek35PZLzoXJjlmWNeHJDmrtfY9OzTutl6r\nPTg/1vKIbG/ruONxvef9m3zQxu10frznx2e39btyp69Tj/OzZ97zYyzj0NwfTPLQJJ9ft72S3HZO\ntpJ8afj5C0m+I0laa++rqkN3eNyNOvYrhtt227jbzXqdxmdba61V1f7DZPbXf0XmH6mwjNdqr82P\ntTwu29s67nVc73n/Jh/McXucH+/58dnt/q7c4+vU6/zslff8XMtoRN+e5IuttTetv2Ho2DfzyiSv\nrqo3Z3bIwUuG3OGZ/0IuMu7TkpxZVa9NcsGw7fpJ7pHkN3bhuNvNep3GZ19RVW9JcrUkz01yalW9\nPcmdk7x5B8fd7mu11+bHWh6X7W0d9zqu9/y4cffSv8mLjNvj/HjPj89u93flHl+nHudnL73n55r8\n0NxFVdUPJ7lFkve24QTZqrpSkkNaa1/ZwXGvm+Re+faTfC/dqTGXOe52eZ3Gq6o7ZPZX+LdX1Y2S\n/EiSjyX5m7bAh2+NGHfy16rT+bGWR9hL63iZ4y7Ce36cvbSWO50f7/mRlvG7svkZz3v+m7prRAEA\nAOhca23SS5KbJXlVklckuVGSP0tyWZJ3Jrn5nOxxSV6c5C1JfiWzv+zsv+1lOziu7Ihsb/UuOdvV\nWu70NZbd+XXR1TqW9Z63lvurV3aatdzpc5Vd4ff8mMtC4W0NODvX4v5JfiLJ+Ukektkx6/dPcvqc\n7OuS/FySWyX5wyT/mOSI4bazdnBc2RHZ3updcrartdzpayy78+uiq3Us6z1vLfdXr+w0a7nT5yq7\nwu/5MZeFwtsacM2bIMmH19125pzse9Zdf2iSD2TWoc/LLjKu7Ihsb/UuOdvVWu70NZbd+XXR1TqW\n9Z7fJLtn1nJv9cpOs5Y7fa6yI7LLqnfMZRmfmnvlNT8/fd1tV5mTPaSqrtZa+3KStNZeWFWfSPKa\nJPO+x2aRcWXHZXurd5nZ3tZyj6+x7M5ne1vHsuOzvdW7aHYvreXe6pXdWna7a7nH5yo7Lruseudb\ntJPd6iXJo5Jca4PtN07yjDnZxye58wbbb53kdTs4ruyIbG/1Ljnb1Vru9DWW3fl10dU6lt3S3HZV\n70HI7pm13Fu9stOs5U6fq+yI7LLqHXPxqbkAAABM6krLLiBJqupM2d2Z7a1e2dUeU3b1s73VK7va\nY8pOk+2tXtlpsr3VK7vaY25kJRrRzD59SXZ3ZnurV3a1x5Rd/Wxv9cqu9piy02R7q1d2mmxv9cqu\n9pjfZlUa0VfI7tpsb/XKrvaYsquf7a1e2dUeU3aabG/1yk6T7a1e2dUe89s4R3Sbquo2rbWDtmt6\n5JiHJrlJko+01i6deOwjW2uf3sL9r5vk6621z21jrMOTpLV2yVazbN3Ua7mndTxkrOUO+Dd5VGZb\na9k6npZ/k+dm/JvcAf8mj8pYy4t+2tHBvCR5/5zbj0vy4iRvSfIrSQ5Zc9vL5mRvluRVmXXxN0ry\nZ0kuS/LOJDefk73Nust/SPLxzD6B7DZzsj+z5udjk5ye5NLMvmD4pnOyL0xy5PDzvZJ8LMk/ZPaF\nsj8+J3tJkucmuVuGPzhsYR7uk+SjSd46PMcPJPmX4TnfbZPcdyX58ySfTfL1od6PJXnK2rk6QPb6\nw9xenOTcJB9O8qlh2/GruKb20lreS+vYWh4/bm/r2Foev5b30jrea2t5L61ja3n8uL2tY2v54Kzl\nZa3jbzzGog+wjSf8nw5w+dEkF8/Jvi7JzyW5VZI/HBbpEcNtZ83JvjnJ/ZP8xLBAH5LZMc73T3L6\nnOwVw1hvWHP50vDf18/Jnrnm51OTPDKzQ6J/ZMS471/z8z/uX2RJjkzy3jnZc5I8NsnbklyY5A+S\n3H7kHL0nyc2T3CHJZ/bnhm2bfWHu65PcZc08/35m31n11CTPmTPmPyV5cJIrr9l25WGe3r6ia2rP\nrOW9tI6t5fHj9raOreXxa3kvreO9tpb30jq2lseP29s6tpbHr+VlreNRr+WiD7DlAZOvZvZXlhds\ncLl83sSvu/7QzP4KcaMRE3/Wmp8/fKA3wQGyP5rkTUnus2bbR0c+37VvsPceqKYDZD+Q5NDh57cm\nudLa27Yw7vWTPCHJmUk+kuQ3t5C9YLM5WHfb+uf37jU/f2jOmOdu57Ylr6k9s5b30jq2lseP29s6\ntpbHr+W9tI732lreS+vYWh4/bm/r2Fre0m1LWcdjLvsyvfcl+d3W2j+vv6Gq7j4ne0hVXa219uUk\naa29sKo+keQ1mf01YTNXXvPz09fddpXNgq21l1bVa5L8RlX9TJJfStLmjLffsVX1zMz+qnRkVR3S\nWvvq/uczJ/u/kryhqv44s7/YvKSqTkty1ySvnpP9xidatdY+luS3k/x2Vd0ss7+mbOayqnpUkkOT\nXFpVj8/sr1R3T/L5TXIXV9VDM/sL2H9Kcl6SVFVl/gdjvbuqnpXklCQXDNuOS3JSkrPmZJe1pvbS\nWt5L6zixlseO29s6Tqzl85JRa3kvreNFx+1tLe+ldZxYy2PH7W0dJ9ZyMm4tL2sdz7doJ7vVS5If\nTHL9A9x2wpzs45PceYPtt07yujnZRyW51gbbb5zkGVuo/zaZLZ5Nd2Wvuf9J6y7XHbZ/Z+b8xWVN\nff87yf+f5O+S/EmSe43IPX2BOTouyZ8mefZQ5+OT/HNm5w0c8DyBzP6idOpw3xcmud6w/YgkPzpn\nzKskeXRm/3C8f7i8Ksljklx1RdfUnlnLe2kdW8vjx+1tHVvL49fyXlrHe3Et75V1bC2PH7fHdWwt\nj1vLy1rHYy4+NXcbhr9aXLtt41OuYJVYy+wG1jG7hbXMbmAdM9ZSGtGquleSByU5Zth0YZKXt9bm\n7UaXXW72Za211+zUmJs85v9srf36KmZXbH52NNtbvZtk567jRcfd5DF33Vpesbnda9mlrOXduI73\nWnbF6vVv8sb32evrosdsd2t5We+BbzzG1I1oVT0jyU0z++jijw+bj03ysMxOtH2cbJ/ZRcbcTFV9\nrLV2/VXL9jY/i2R7q3eZ2c3strXc4/zIjs9u8pi7ah3vtWxv9S6a3Yy1vNwxZZe/lpf1HviGtuCx\nvVu9JPm/B9hemf/pZbIrnF1wzM8d4HJ5kq+taLar+Vni3O617J5Zy53Oj+y4ud0z63ivZXur9yBk\nrWXrYrdkt7WmlrWOx1zmfTrTTvhyVX3/Btu/P8mXZbvOLjLmZUlu0lo7dN3l2kkuWtFsb/OzSLa3\nepeZ3Utrucf5kR2X3UvreK9le6t30ay1PC7b49zutex219Sy1vFcy/j6locn+ZOquna+uUv6uCSf\nHW6T7Te7yJh/nuQGST65wW0vWtHsw9PX/CyS7a3eZWb30lrebk529bN7aR3vtWxv9S6atZati92S\n3e6aWtY6nmtpn5pbVd+ZNSfpttY+Ibs7souM2aPe5meRbG/1LjPbI+tCdjfo8TX27/nOZ3tkXcju\nepsdtzvVJclTZHdntrd6ZVd7TNnVz/ZWr+xqjylrbmWtC9ndM7frL8s4R3QjD5Ddtdne6pVd7TFl\nVz/bW72yqz2m7DTZ3uqVnSbbW72yqz3mt1mVRrRkd222t3plV3tM2dXP9lav7GqPKTtNtrd6ZafJ\n9lav7GqP+e0PNOxiXaqqulJr7QrZ3ZftrV7Z1R5TdvWzvdUru9pjyk6T7a3ePZqtts1f2rebXcaY\nstNkl1XvekvZI1pV96qqR1TV8Umy/01ZVT8j23e2t3oXydbMiVX148PPd0vyjKp6TFVt+t7qLdtb\nvbJbyx7AP2wjs0hOdvWzK11vVR257vpDM3sPPLKqNv0L/l7K9lbvHs3+SFUdPvx8VFX9eZL3VdVf\nV9WxO5Fdxpiyu3tux5h8j2hV/WaS/5jkzCT3T/KM1tofDred2Vq7jWyf2d7qPQjZZyX5jiRXyezL\nfa+a5LQk903yydba43ZLtrd6Zbecfd/6TUlumuScJGmtfd/BzMmufra3eofsN/7NrqpfS/KDmX29\nwP2SfLy19njZ/urdo9kPttZuMfz810nenuQlSe6e5D+31u5xsLPLGFN2d8/tKO0gferR2EuS9yfZ\nN/x8nSSvTPL7w/WzZPvN9lbvwcgO/z0kyWeSXGW4vi/J+3ZTtrd6ZbecPS3JC5PcLLPvCzs+yQXD\nzzc42DnZ1c/2Vu+QPWvNz2cmueaa98T7Zfusd49mz1nz87vX3faencguY0zZ3T23Yy7LODR3X2vt\na0nSWrsss71Qh1bVSzL7S75sv9ne6l00uz/31STvaq3923D9a0nmnQPSW7a3emW3kG2tPSDJS5M8\nJ8ktW2vnJflqa+381tr5Bzsnu/rZ3uodXL2qbl1V/yHJIa21LwyP+dUkX5fttt69mH1jVf16VV19\n+PlHkqSq7prkszuUXcaYsrt7budrC3ayW70k+fskd95g+1OTXCHbb7a3eg9C9lVJrrXB9u9M8s7d\nlO2tXtmtZdfc95pJnp7k5ZkdOjY3s0hOdvWzPdWb5A3rLtcbth+R5AzZPuvdo9lDkjwlyceGyxVJ\nLs/s0N7r70R2GWPK7u65HXNZxjmiV0+S1tqXNrjtmNbahbJ9Znurd9HsJo95zcwOwfnUbs/2Vq/s\n6Mwtk9yhtfbsLY61rZzs6md7q3fdY1w5yVVba1+UXa0xZUfd/7DMjt76zDbG2lZ2GWPKTpNdVr0H\nMvmhua21L230S//g2rL9Znurd9HsJo/5hSSH74Vsb/XKjs68d/8v/lV1s53Oya5+trd61z3G15Nc\nX3b1xpQddf/Prv3Ff4vv221llzGm7O6e2wNZie8R3a+qPtZa29YbW3a1s73VK7vaY8qufra3emVX\ne0zZabK91Ss7Tba3emVXe8y19i0S3o6qeuaBbsrsU0tlO832Vq/s+Gxv9cpOk+2tXtnx2d7qlR2f\n7a1e2WmyvdUrOz67rHrHWMY5opcn+aUkX9ng5t9rrR25wXbZDrK91Ss7PttbvbLTZHurV3Z8trd6\nZcdne6tXdppsb/XKjs8uq95R2oKfdrTVS5LXJ/mBA9z2Udl+s73VK2tuZa0L2dUZU9bcyloXsrtn\nbsdclrFH9PAkX27b+6Qx2RXO9lav7GqPKbv62d7qlV3tMWWnyfZWr+w02d7qlV3tMUc//tSNKAAA\nAHvcortUt3pJcliSk5N8KMklST6T5Oxh23Vk+832Vq+suZW1LmRXZ0xZcytrXcjunrkdc5n8e0ST\nnJrk0iR3aa0d3lo7Isldh22nynad7a1eWXMru1i2t3plza1sf/XKWheyi2WXVe988zrVg31Jcs52\nbpNd/Wxv9cqaW1nrQnZ1xpQ1t7LWhezumdsxl2XsET2/qp5QVUfv31BVR1fVE5NcINt1trd6Zcdn\ne6tXdppsb/XKjs/2Vq/s+Gxv9cpOk+2tXtnx2WXVO9cyGtEHJzkiyZuq6pKquiTJG5McnuRE2a6z\nvdUra25lF8v2Vq+suZXtr15Z60J2seyy6p3Lp+YCAAAwqWXsEU1V3ayq7lZV11y3/d6yfWd7q1d2\nfLa3emWnyfZWr+z4bG/1yo7P9lav7DTZ3uqVHZ9dVr1zLXqS6VYvSX4xyTlJXpbkvCQPXHPbmbL9\nZnurV9bcyloXsqszpqy5lbUuZHfP3I65LBTe1oDJ+5Nca/j5+CRnJHnccP0s2X6zvdUra25lrQvZ\n1RlT1tzKWheyu2dux1z2ZXpXaq19Pklaa+dV1V2S/E1V3SBJyXad7a1eWXMru1i2t3plza1sf/XK\nWheyi2WXVe9cyzhH9JNVdav9V4Ynd78kRyb5Xtmus73VK2tuZRfL9lavrLmV7a9eWetCdrHssuqd\nry24S3WrlyTHJvnOA9x2R9l+s73VK2tuZa0L2dUZU9bcyloXsrtnbsdcfH0LAAAAk1rK17cAAACw\nd2lEAQAAmJRGFAC2oKq+XlXvqaoPVNV7q+qXqmrT/59W1fFV9ZNT1QgAq04jCgBb86XW2q1aa/8+\nyT2S3CfJk+dkjk+iEQWAgQ8rAoAtqKrPt9auteb6v0vyrsw+zv4GSf4iyTWHmx/bWvvHqnp7kpsn\n+WiSU5I8M8nJSe6S5KpJ/ri19qeTPQkAWDKNKABswfpGdNh2WZLvTnJ5kitaa1+uqpsk+avW2gnD\nl4D/99ba/Yb7PzLJd7TWnlpVV03ytiQ/3lr76KRPBgCWZN+yCwCAXeSQJH80fAH415Pc9AD3u2eS\n76uqHxuuH5bkJpntMQWAXU8jCgALGA7N/XqST2V2rugnk9wys89h+PKBYkl+obX2mkmKBIAV48OK\nAGCbquqoJM9O8kdtdq7LYUkuaq1dkeSnklx5uOvlSa69JvqaJI+uqkOGx7lpVV0zALBH2CMKAFtz\n9ap6T2aH4X4tsw8nevpw27OSvLSqHpbk1Um+MGx/X5KvV9V7k/xZkj/I7JN0z6yqSnJxkgdN9QQA\nYNl8WBEAAACTcmguAAAAk9KIAgAAMCmNKAAAAJPSiAIAADApjSgAAACT0ogCAAAwKY0oAAAAk9KI\nAgAAMKn/B8bYJGOOpVzFAAAAAElFTkSuQmCC\n",
"text/plain": [
"<matplotlib.figure.Figure at 0x11e090b70>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"df['Open'].resample('M').max().plot(kind='bar',figsize=(16,6))\n",
"plt.title('Monthly Max Opening Price for Walmart')"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"That is it! Up next we'll learn about time shifts!"
]
}
],
"metadata": {
"anaconda-cloud": {},
"kernelspec": {
"display_name": "Python [conda root]",
"language": "python",
"name": "conda-root-py"
},
"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.3"
}
},
"nbformat": 4,
"nbformat_minor": 0
}