Created
July 6, 2020 01:39
-
-
Save Nat-Gr/b7f65a44800cc2e861f3c342605fd04e to your computer and use it in GitHub Desktop.
Created on Skills Network Labs
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| { | |
| "cells": [ | |
| { | |
| "cell_type": "markdown", | |
| "metadata": {}, | |
| "source": [ | |
| "<a href=\"https://cognitiveclass.ai/\">\n", | |
| " <img src=\"https://s3-api.us-geo.objectstorage.softlayer.net/cf-courses-data/CognitiveClass/PY0101EN/Ad/CCLog.png\" width=\"200\" align=\"center\">\n", | |
| "</a>\n", | |
| "\n", | |
| "\n", | |
| "\n", | |
| "<h1 align=center><font size = 5><b>A </b>pplication <b>P</b>rogramming <b>I</b>nterface</font> (API)</h1>" | |
| ] | |
| }, | |
| { | |
| "cell_type": "markdown", | |
| "metadata": {}, | |
| "source": [ | |
| "An API lets two pieces of software talk to each other. Just like a function, you don’t have to know how the API works only its inputs and outputs. An essential type of API is a REST API that allows you to access resources via the internet. In this lab, we will review the Pandas Library in the context of an API, we will also review a basic REST API " | |
| ] | |
| }, | |
| { | |
| "cell_type": "markdown", | |
| "metadata": {}, | |
| "source": [ | |
| "<div class=\"alert alert-block alert-info\" style=\"margin-top: 20px\">\n", | |
| " <a href=\"https://cocl.us/topNotebooksPython101Coursera\">\n", | |
| " <img src=\"https://s3-api.us-geo.objectstorage.softlayer.net/cf-courses-data/CognitiveClass/PY0101EN/Ad/TopAd.png\" width=\"750\" align=\"center\">\n", | |
| " </a>\n", | |
| "</div>" | |
| ] | |
| }, | |
| { | |
| "cell_type": "markdown", | |
| "metadata": {}, | |
| "source": [ | |
| "## Table of Contents\n", | |
| "<div class=\"alert alert-block alert-info\" style=\"margin-top: 20px\">\n", | |
| "<li><a href=\"#ref0\">Pandas is an API</a></li>\n", | |
| "<li><a href=\"#ref1\">REST APIs Basics </a></li>\n", | |
| "<li><a href=\"#ref2\">Quiz on Tuples</a></li>\n", | |
| "\n", | |
| "<p></p>\n", | |
| "Estimated Time Needed: <strong>15 min</strong>\n", | |
| "</div>\n", | |
| "\n", | |
| "<hr>" | |
| ] | |
| }, | |
| { | |
| "cell_type": "code", | |
| "execution_count": 1, | |
| "metadata": { | |
| "collapsed": false, | |
| "jupyter": { | |
| "outputs_hidden": false | |
| } | |
| }, | |
| "outputs": [ | |
| { | |
| "name": "stdout", | |
| "output_type": "stream", | |
| "text": [ | |
| "Collecting nba_api\n", | |
| "\u001b[?25l Downloading https://files.pythonhosted.org/packages/fd/94/ee060255b91d945297ebc2fe9a8672aee07ce83b553eef1c5ac5b974995a/nba_api-1.1.8-py3-none-any.whl (217kB)\n", | |
| "\u001b[K |████████████████████████████████| 225kB 3.0MB/s eta 0:00:01\n", | |
| "\u001b[?25hRequirement already satisfied: requests in /home/jupyterlab/conda/envs/python/lib/python3.6/site-packages (from nba_api) (2.23.0)\n", | |
| "Requirement already satisfied: certifi>=2017.4.17 in /home/jupyterlab/conda/envs/python/lib/python3.6/site-packages (from requests->nba_api) (2020.4.5.2)\n", | |
| "Requirement already satisfied: chardet<4,>=3.0.2 in /home/jupyterlab/conda/envs/python/lib/python3.6/site-packages (from requests->nba_api) (3.0.4)\n", | |
| "Requirement already satisfied: urllib3!=1.25.0,!=1.25.1,<1.26,>=1.21.1 in /home/jupyterlab/conda/envs/python/lib/python3.6/site-packages (from requests->nba_api) (1.25.9)\n", | |
| "Requirement already satisfied: idna<3,>=2.5 in /home/jupyterlab/conda/envs/python/lib/python3.6/site-packages (from requests->nba_api) (2.9)\n", | |
| "Installing collected packages: nba-api\n", | |
| "Successfully installed nba-api-1.1.8\n" | |
| ] | |
| } | |
| ], | |
| "source": [ | |
| "!pip install nba_api" | |
| ] | |
| }, | |
| { | |
| "cell_type": "markdown", | |
| "metadata": {}, | |
| "source": [ | |
| "<h2 id=\"PandasAPI\">Pandas is an API </h2>" | |
| ] | |
| }, | |
| { | |
| "cell_type": "markdown", | |
| "metadata": {}, | |
| "source": [ | |
| "You will use this function in the lab:" | |
| ] | |
| }, | |
| { | |
| "cell_type": "code", | |
| "execution_count": 2, | |
| "metadata": { | |
| "collapsed": false, | |
| "jupyter": { | |
| "outputs_hidden": false | |
| } | |
| }, | |
| "outputs": [], | |
| "source": [ | |
| "def one_dict(list_dict):\n", | |
| " keys=list_dict[0].keys()\n", | |
| " out_dict={key:[] for key in keys}\n", | |
| " for dict_ in list_dict:\n", | |
| " for key, value in dict_.items():\n", | |
| " out_dict[key].append(value)\n", | |
| " return out_dict " | |
| ] | |
| }, | |
| { | |
| "cell_type": "markdown", | |
| "metadata": {}, | |
| "source": [ | |
| "<h2 id=\"PandasAPI\">Pandas is an API </h2>" | |
| ] | |
| }, | |
| { | |
| "cell_type": "markdown", | |
| "metadata": {}, | |
| "source": [ | |
| "Pandas is actually set of software components , much of witch is not even written in Python.\n" | |
| ] | |
| }, | |
| { | |
| "cell_type": "code", | |
| "execution_count": 3, | |
| "metadata": { | |
| "collapsed": false, | |
| "jupyter": { | |
| "outputs_hidden": false | |
| } | |
| }, | |
| "outputs": [], | |
| "source": [ | |
| "import pandas as pd\n", | |
| "import matplotlib.pyplot as plt" | |
| ] | |
| }, | |
| { | |
| "cell_type": "markdown", | |
| "metadata": {}, | |
| "source": [ | |
| "You create a dictionary, this is just data." | |
| ] | |
| }, | |
| { | |
| "cell_type": "code", | |
| "execution_count": 4, | |
| "metadata": { | |
| "collapsed": false, | |
| "jupyter": { | |
| "outputs_hidden": false | |
| } | |
| }, | |
| "outputs": [], | |
| "source": [ | |
| "dict_={'a':[11,21,31],'b':[12,22,32]}" | |
| ] | |
| }, | |
| { | |
| "cell_type": "markdown", | |
| "metadata": {}, | |
| "source": [ | |
| "When you create a Pandas object with the Dataframe constructor in API lingo, this is an \"instance\". The data in the dictionary is passed along to the pandas API. You then use the dataframe to communicate with the API." | |
| ] | |
| }, | |
| { | |
| "cell_type": "code", | |
| "execution_count": 5, | |
| "metadata": { | |
| "collapsed": false, | |
| "jupyter": { | |
| "outputs_hidden": false | |
| } | |
| }, | |
| "outputs": [ | |
| { | |
| "data": { | |
| "text/plain": [ | |
| "pandas.core.frame.DataFrame" | |
| ] | |
| }, | |
| "execution_count": 5, | |
| "metadata": {}, | |
| "output_type": "execute_result" | |
| } | |
| ], | |
| "source": [ | |
| "df=pd.DataFrame(dict_)\n", | |
| "type(df)" | |
| ] | |
| }, | |
| { | |
| "cell_type": "markdown", | |
| "metadata": {}, | |
| "source": [ | |
| "<img src = \"https://s3-api.us-geo.objectstorage.softlayer.net/cf-courses-data/CognitiveClass/PY0101EN/Chapter%206/images/pandas_api.png\" width = 800, align = \"center\" alt=\"logistic regression block diagram\" />" | |
| ] | |
| }, | |
| { | |
| "cell_type": "markdown", | |
| "metadata": {}, | |
| "source": [ | |
| "When you call the method head the dataframe communicates with the API displaying the first few rows of the dataframe.\n", | |
| "\n", | |
| "\n" | |
| ] | |
| }, | |
| { | |
| "cell_type": "code", | |
| "execution_count": 6, | |
| "metadata": { | |
| "collapsed": false, | |
| "jupyter": { | |
| "outputs_hidden": false | |
| } | |
| }, | |
| "outputs": [ | |
| { | |
| "data": { | |
| "text/html": [ | |
| "<div>\n", | |
| "<style scoped>\n", | |
| " .dataframe tbody tr th:only-of-type {\n", | |
| " vertical-align: middle;\n", | |
| " }\n", | |
| "\n", | |
| " .dataframe tbody tr th {\n", | |
| " vertical-align: top;\n", | |
| " }\n", | |
| "\n", | |
| " .dataframe thead th {\n", | |
| " text-align: right;\n", | |
| " }\n", | |
| "</style>\n", | |
| "<table border=\"1\" class=\"dataframe\">\n", | |
| " <thead>\n", | |
| " <tr style=\"text-align: right;\">\n", | |
| " <th></th>\n", | |
| " <th>a</th>\n", | |
| " <th>b</th>\n", | |
| " </tr>\n", | |
| " </thead>\n", | |
| " <tbody>\n", | |
| " <tr>\n", | |
| " <th>0</th>\n", | |
| " <td>11</td>\n", | |
| " <td>12</td>\n", | |
| " </tr>\n", | |
| " <tr>\n", | |
| " <th>1</th>\n", | |
| " <td>21</td>\n", | |
| " <td>22</td>\n", | |
| " </tr>\n", | |
| " <tr>\n", | |
| " <th>2</th>\n", | |
| " <td>31</td>\n", | |
| " <td>32</td>\n", | |
| " </tr>\n", | |
| " </tbody>\n", | |
| "</table>\n", | |
| "</div>" | |
| ], | |
| "text/plain": [ | |
| " a b\n", | |
| "0 11 12\n", | |
| "1 21 22\n", | |
| "2 31 32" | |
| ] | |
| }, | |
| "execution_count": 6, | |
| "metadata": {}, | |
| "output_type": "execute_result" | |
| } | |
| ], | |
| "source": [ | |
| "df.head()" | |
| ] | |
| }, | |
| { | |
| "cell_type": "markdown", | |
| "metadata": {}, | |
| "source": [ | |
| "When you call the method mean,the API will calculate the mean and return the value." | |
| ] | |
| }, | |
| { | |
| "cell_type": "code", | |
| "execution_count": 7, | |
| "metadata": { | |
| "collapsed": false, | |
| "jupyter": { | |
| "outputs_hidden": false | |
| } | |
| }, | |
| "outputs": [ | |
| { | |
| "data": { | |
| "text/plain": [ | |
| "a 21.0\n", | |
| "b 22.0\n", | |
| "dtype: float64" | |
| ] | |
| }, | |
| "execution_count": 7, | |
| "metadata": {}, | |
| "output_type": "execute_result" | |
| } | |
| ], | |
| "source": [ | |
| "df.mean()" | |
| ] | |
| }, | |
| { | |
| "cell_type": "markdown", | |
| "metadata": {}, | |
| "source": [ | |
| "<h2 id=\"ref1\">REST APIs</h2>" | |
| ] | |
| }, | |
| { | |
| "cell_type": "markdown", | |
| "metadata": {}, | |
| "source": [ | |
| "<p>Rest API’s function by sending a <b>request</b>, the request is communicated via HTTP message. The HTTP message usually contains a JSON file. This contains instructions for what operation we would like the service or <b>resource</b> to perform. In a similar manner, API returns a <b>response</b>, via an HTTP message, this response is usually contained within a JSON.</p>\n", | |
| "<p>In this lab, we will use the <a href=https://pypi.org/project/nba-api/>NBA API</a> to determine how well the Golden State Warriors performed against the Toronto Raptors. We will use the API do the determined number of points the Golden State Warriors won or lost by for each game. So if the value is three, the Golden State Warriors won by three points. Similarly it the Golden State Warriors lost by two points the result will be negative two. The API is reltivly will handle a lot of the details such a Endpoints and Authentication </p>" | |
| ] | |
| }, | |
| { | |
| "cell_type": "markdown", | |
| "metadata": {}, | |
| "source": [ | |
| "In the nba api to make a request for a specific team, it's quite simple, we don't require a JSON all we require is an id. This information is stored locally in the API we import the module teams " | |
| ] | |
| }, | |
| { | |
| "cell_type": "code", | |
| "execution_count": 8, | |
| "metadata": {}, | |
| "outputs": [], | |
| "source": [ | |
| "from nba_api.stats.static import teams\n", | |
| "import matplotlib.pyplot as plt" | |
| ] | |
| }, | |
| { | |
| "cell_type": "code", | |
| "execution_count": 9, | |
| "metadata": {}, | |
| "outputs": [], | |
| "source": [ | |
| "#https://pypi.org/project/nba-api/" | |
| ] | |
| }, | |
| { | |
| "cell_type": "markdown", | |
| "metadata": {}, | |
| "source": [ | |
| "The method <code>get_teams()</code> returns a list of dictionaries the dictionary key id has a unique identifier for each team as a value " | |
| ] | |
| }, | |
| { | |
| "cell_type": "code", | |
| "execution_count": 10, | |
| "metadata": {}, | |
| "outputs": [], | |
| "source": [ | |
| "nba_teams = teams.get_teams()" | |
| ] | |
| }, | |
| { | |
| "cell_type": "markdown", | |
| "metadata": {}, | |
| "source": [ | |
| "The dictionary key id has a unique identifier for each team as a value, let's look at the first three elements of the list:" | |
| ] | |
| }, | |
| { | |
| "cell_type": "code", | |
| "execution_count": 11, | |
| "metadata": {}, | |
| "outputs": [ | |
| { | |
| "data": { | |
| "text/plain": [ | |
| "[{'id': 1610612737,\n", | |
| " 'full_name': 'Atlanta Hawks',\n", | |
| " 'abbreviation': 'ATL',\n", | |
| " 'nickname': 'Hawks',\n", | |
| " 'city': 'Atlanta',\n", | |
| " 'state': 'Atlanta',\n", | |
| " 'year_founded': 1949},\n", | |
| " {'id': 1610612738,\n", | |
| " 'full_name': 'Boston Celtics',\n", | |
| " 'abbreviation': 'BOS',\n", | |
| " 'nickname': 'Celtics',\n", | |
| " 'city': 'Boston',\n", | |
| " 'state': 'Massachusetts',\n", | |
| " 'year_founded': 1946},\n", | |
| " {'id': 1610612739,\n", | |
| " 'full_name': 'Cleveland Cavaliers',\n", | |
| " 'abbreviation': 'CLE',\n", | |
| " 'nickname': 'Cavaliers',\n", | |
| " 'city': 'Cleveland',\n", | |
| " 'state': 'Ohio',\n", | |
| " 'year_founded': 1970}]" | |
| ] | |
| }, | |
| "execution_count": 11, | |
| "metadata": {}, | |
| "output_type": "execute_result" | |
| } | |
| ], | |
| "source": [ | |
| "nba_teams[0:3]" | |
| ] | |
| }, | |
| { | |
| "cell_type": "markdown", | |
| "metadata": {}, | |
| "source": [ | |
| "To make things easier, we can convert the dictionary to a table. First, we use the function <code>one dict</code>, to create a dictionary. We use the common keys for each team as the keys, the value is a list; each element of the list corresponds to the values for each team.\n", | |
| "We then convert the dictionary to a dataframe, each row contains the information for a different team." | |
| ] | |
| }, | |
| { | |
| "cell_type": "code", | |
| "execution_count": 12, | |
| "metadata": {}, | |
| "outputs": [ | |
| { | |
| "data": { | |
| "text/html": [ | |
| "<div>\n", | |
| "<style scoped>\n", | |
| " .dataframe tbody tr th:only-of-type {\n", | |
| " vertical-align: middle;\n", | |
| " }\n", | |
| "\n", | |
| " .dataframe tbody tr th {\n", | |
| " vertical-align: top;\n", | |
| " }\n", | |
| "\n", | |
| " .dataframe thead th {\n", | |
| " text-align: right;\n", | |
| " }\n", | |
| "</style>\n", | |
| "<table border=\"1\" class=\"dataframe\">\n", | |
| " <thead>\n", | |
| " <tr style=\"text-align: right;\">\n", | |
| " <th></th>\n", | |
| " <th>id</th>\n", | |
| " <th>full_name</th>\n", | |
| " <th>abbreviation</th>\n", | |
| " <th>nickname</th>\n", | |
| " <th>city</th>\n", | |
| " <th>state</th>\n", | |
| " <th>year_founded</th>\n", | |
| " </tr>\n", | |
| " </thead>\n", | |
| " <tbody>\n", | |
| " <tr>\n", | |
| " <th>0</th>\n", | |
| " <td>1610612737</td>\n", | |
| " <td>Atlanta Hawks</td>\n", | |
| " <td>ATL</td>\n", | |
| " <td>Hawks</td>\n", | |
| " <td>Atlanta</td>\n", | |
| " <td>Atlanta</td>\n", | |
| " <td>1949</td>\n", | |
| " </tr>\n", | |
| " <tr>\n", | |
| " <th>1</th>\n", | |
| " <td>1610612738</td>\n", | |
| " <td>Boston Celtics</td>\n", | |
| " <td>BOS</td>\n", | |
| " <td>Celtics</td>\n", | |
| " <td>Boston</td>\n", | |
| " <td>Massachusetts</td>\n", | |
| " <td>1946</td>\n", | |
| " </tr>\n", | |
| " <tr>\n", | |
| " <th>2</th>\n", | |
| " <td>1610612739</td>\n", | |
| " <td>Cleveland Cavaliers</td>\n", | |
| " <td>CLE</td>\n", | |
| " <td>Cavaliers</td>\n", | |
| " <td>Cleveland</td>\n", | |
| " <td>Ohio</td>\n", | |
| " <td>1970</td>\n", | |
| " </tr>\n", | |
| " <tr>\n", | |
| " <th>3</th>\n", | |
| " <td>1610612740</td>\n", | |
| " <td>New Orleans Pelicans</td>\n", | |
| " <td>NOP</td>\n", | |
| " <td>Pelicans</td>\n", | |
| " <td>New Orleans</td>\n", | |
| " <td>Louisiana</td>\n", | |
| " <td>2002</td>\n", | |
| " </tr>\n", | |
| " <tr>\n", | |
| " <th>4</th>\n", | |
| " <td>1610612741</td>\n", | |
| " <td>Chicago Bulls</td>\n", | |
| " <td>CHI</td>\n", | |
| " <td>Bulls</td>\n", | |
| " <td>Chicago</td>\n", | |
| " <td>Illinois</td>\n", | |
| " <td>1966</td>\n", | |
| " </tr>\n", | |
| " </tbody>\n", | |
| "</table>\n", | |
| "</div>" | |
| ], | |
| "text/plain": [ | |
| " id full_name abbreviation nickname city \\\n", | |
| "0 1610612737 Atlanta Hawks ATL Hawks Atlanta \n", | |
| "1 1610612738 Boston Celtics BOS Celtics Boston \n", | |
| "2 1610612739 Cleveland Cavaliers CLE Cavaliers Cleveland \n", | |
| "3 1610612740 New Orleans Pelicans NOP Pelicans New Orleans \n", | |
| "4 1610612741 Chicago Bulls CHI Bulls Chicago \n", | |
| "\n", | |
| " state year_founded \n", | |
| "0 Atlanta 1949 \n", | |
| "1 Massachusetts 1946 \n", | |
| "2 Ohio 1970 \n", | |
| "3 Louisiana 2002 \n", | |
| "4 Illinois 1966 " | |
| ] | |
| }, | |
| "execution_count": 12, | |
| "metadata": {}, | |
| "output_type": "execute_result" | |
| } | |
| ], | |
| "source": [ | |
| "dict_nba_team=one_dict(nba_teams)\n", | |
| "df_teams=pd.DataFrame(dict_nba_team)\n", | |
| "df_teams.head()" | |
| ] | |
| }, | |
| { | |
| "cell_type": "markdown", | |
| "metadata": {}, | |
| "source": [ | |
| "Will use the team's nickname to find the unique id, we can see the row that contains the warriors by using the column nickname as follows:" | |
| ] | |
| }, | |
| { | |
| "cell_type": "code", | |
| "execution_count": 13, | |
| "metadata": { | |
| "collapsed": false, | |
| "jupyter": { | |
| "outputs_hidden": false | |
| } | |
| }, | |
| "outputs": [ | |
| { | |
| "data": { | |
| "text/html": [ | |
| "<div>\n", | |
| "<style scoped>\n", | |
| " .dataframe tbody tr th:only-of-type {\n", | |
| " vertical-align: middle;\n", | |
| " }\n", | |
| "\n", | |
| " .dataframe tbody tr th {\n", | |
| " vertical-align: top;\n", | |
| " }\n", | |
| "\n", | |
| " .dataframe thead th {\n", | |
| " text-align: right;\n", | |
| " }\n", | |
| "</style>\n", | |
| "<table border=\"1\" class=\"dataframe\">\n", | |
| " <thead>\n", | |
| " <tr style=\"text-align: right;\">\n", | |
| " <th></th>\n", | |
| " <th>id</th>\n", | |
| " <th>full_name</th>\n", | |
| " <th>abbreviation</th>\n", | |
| " <th>nickname</th>\n", | |
| " <th>city</th>\n", | |
| " <th>state</th>\n", | |
| " <th>year_founded</th>\n", | |
| " </tr>\n", | |
| " </thead>\n", | |
| " <tbody>\n", | |
| " <tr>\n", | |
| " <th>7</th>\n", | |
| " <td>1610612744</td>\n", | |
| " <td>Golden State Warriors</td>\n", | |
| " <td>GSW</td>\n", | |
| " <td>Warriors</td>\n", | |
| " <td>Golden State</td>\n", | |
| " <td>California</td>\n", | |
| " <td>1946</td>\n", | |
| " </tr>\n", | |
| " </tbody>\n", | |
| "</table>\n", | |
| "</div>" | |
| ], | |
| "text/plain": [ | |
| " id full_name abbreviation nickname city \\\n", | |
| "7 1610612744 Golden State Warriors GSW Warriors Golden State \n", | |
| "\n", | |
| " state year_founded \n", | |
| "7 California 1946 " | |
| ] | |
| }, | |
| "execution_count": 13, | |
| "metadata": {}, | |
| "output_type": "execute_result" | |
| } | |
| ], | |
| "source": [ | |
| "df_warriors=df_teams[df_teams['nickname']=='Warriors']\n", | |
| "df_warriors" | |
| ] | |
| }, | |
| { | |
| "cell_type": "markdown", | |
| "metadata": {}, | |
| "source": [ | |
| "we can use the following line of code to access the first column of the dataframe:" | |
| ] | |
| }, | |
| { | |
| "cell_type": "code", | |
| "execution_count": 14, | |
| "metadata": { | |
| "collapsed": false, | |
| "jupyter": { | |
| "outputs_hidden": false | |
| } | |
| }, | |
| "outputs": [ | |
| { | |
| "data": { | |
| "text/plain": [ | |
| "1610612744" | |
| ] | |
| }, | |
| "execution_count": 14, | |
| "metadata": {}, | |
| "output_type": "execute_result" | |
| } | |
| ], | |
| "source": [ | |
| "id_warriors=df_warriors[['id']].values[0][0]\n", | |
| "#we now have an integer that can be used to request the Warriors information \n", | |
| "id_warriors" | |
| ] | |
| }, | |
| { | |
| "cell_type": "markdown", | |
| "metadata": {}, | |
| "source": [ | |
| "The function \"League Game Finder \" will make an API call, its in the module <code>stats.endpoints</code> " | |
| ] | |
| }, | |
| { | |
| "cell_type": "code", | |
| "execution_count": 16, | |
| "metadata": {}, | |
| "outputs": [], | |
| "source": [ | |
| "from nba_api.stats.endpoints import leaguegamefinder" | |
| ] | |
| }, | |
| { | |
| "cell_type": "markdown", | |
| "metadata": {}, | |
| "source": [ | |
| "The parameter <code>team_id_nullable</code> is the unique ID for the warriors. Under the hood, the NBA API is making a HTTP request. \n", | |
| "The information requested is provided and is transmitted via an HTTP response this is assigned to the object <code>gamefinder</code>." | |
| ] | |
| }, | |
| { | |
| "cell_type": "code", | |
| "execution_count": 23, | |
| "metadata": { | |
| "collapsed": false, | |
| "jupyter": { | |
| "outputs_hidden": false | |
| } | |
| }, | |
| "outputs": [ | |
| { | |
| "ename": "ReadTimeout", | |
| "evalue": "HTTPSConnectionPool(host='stats.nba.com', port=443): Read timed out. (read timeout=30)", | |
| "output_type": "error", | |
| "traceback": [ | |
| "\u001b[0;31m---------------------------------------------------------------------------\u001b[0m", | |
| "\u001b[0;31mtimeout\u001b[0m Traceback (most recent call last)", | |
| "\u001b[0;32m~/conda/envs/python/lib/python3.6/site-packages/urllib3/connectionpool.py\u001b[0m in \u001b[0;36m_make_request\u001b[0;34m(self, conn, method, url, timeout, chunked, **httplib_request_kw)\u001b[0m\n\u001b[1;32m 425\u001b[0m \u001b[0;31m# Otherwise it looks like a bug in the code.\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m--> 426\u001b[0;31m \u001b[0msix\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mraise_from\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0me\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0;32mNone\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 427\u001b[0m \u001b[0;32mexcept\u001b[0m \u001b[0;34m(\u001b[0m\u001b[0mSocketTimeout\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mBaseSSLError\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mSocketError\u001b[0m\u001b[0;34m)\u001b[0m \u001b[0;32mas\u001b[0m \u001b[0me\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n", | |
| "\u001b[0;32m~/conda/envs/python/lib/python3.6/site-packages/urllib3/packages/six.py\u001b[0m in \u001b[0;36mraise_from\u001b[0;34m(value, from_value)\u001b[0m\n", | |
| "\u001b[0;32m~/conda/envs/python/lib/python3.6/site-packages/urllib3/connectionpool.py\u001b[0m in \u001b[0;36m_make_request\u001b[0;34m(self, conn, method, url, timeout, chunked, **httplib_request_kw)\u001b[0m\n\u001b[1;32m 420\u001b[0m \u001b[0;32mtry\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m--> 421\u001b[0;31m \u001b[0mhttplib_response\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mconn\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mgetresponse\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 422\u001b[0m \u001b[0;32mexcept\u001b[0m \u001b[0mBaseException\u001b[0m \u001b[0;32mas\u001b[0m \u001b[0me\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n", | |
| "\u001b[0;32m~/conda/envs/python/lib/python3.6/http/client.py\u001b[0m in \u001b[0;36mgetresponse\u001b[0;34m(self)\u001b[0m\n\u001b[1;32m 1353\u001b[0m \u001b[0;32mtry\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m-> 1354\u001b[0;31m \u001b[0mresponse\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mbegin\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 1355\u001b[0m \u001b[0;32mexcept\u001b[0m \u001b[0mConnectionError\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n", | |
| "\u001b[0;32m~/conda/envs/python/lib/python3.6/http/client.py\u001b[0m in \u001b[0;36mbegin\u001b[0;34m(self)\u001b[0m\n\u001b[1;32m 306\u001b[0m \u001b[0;32mwhile\u001b[0m \u001b[0;32mTrue\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m--> 307\u001b[0;31m \u001b[0mversion\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mstatus\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mreason\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0m_read_status\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 308\u001b[0m \u001b[0;32mif\u001b[0m \u001b[0mstatus\u001b[0m \u001b[0;34m!=\u001b[0m \u001b[0mCONTINUE\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n", | |
| "\u001b[0;32m~/conda/envs/python/lib/python3.6/http/client.py\u001b[0m in \u001b[0;36m_read_status\u001b[0;34m(self)\u001b[0m\n\u001b[1;32m 267\u001b[0m \u001b[0;32mdef\u001b[0m \u001b[0m_read_status\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mself\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m--> 268\u001b[0;31m \u001b[0mline\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mstr\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mfp\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mreadline\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0m_MAXLINE\u001b[0m \u001b[0;34m+\u001b[0m \u001b[0;36m1\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0;34m\"iso-8859-1\"\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 269\u001b[0m \u001b[0;32mif\u001b[0m \u001b[0mlen\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mline\u001b[0m\u001b[0;34m)\u001b[0m \u001b[0;34m>\u001b[0m \u001b[0m_MAXLINE\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n", | |
| "\u001b[0;32m~/conda/envs/python/lib/python3.6/socket.py\u001b[0m in \u001b[0;36mreadinto\u001b[0;34m(self, b)\u001b[0m\n\u001b[1;32m 585\u001b[0m \u001b[0;32mtry\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m--> 586\u001b[0;31m \u001b[0;32mreturn\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0m_sock\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mrecv_into\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mb\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 587\u001b[0m \u001b[0;32mexcept\u001b[0m \u001b[0mtimeout\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n", | |
| "\u001b[0;32m~/conda/envs/python/lib/python3.6/site-packages/urllib3/contrib/pyopenssl.py\u001b[0m in \u001b[0;36mrecv_into\u001b[0;34m(self, *args, **kwargs)\u001b[0m\n\u001b[1;32m 327\u001b[0m \u001b[0;32melse\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m--> 328\u001b[0;31m \u001b[0;32mreturn\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mrecv_into\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m*\u001b[0m\u001b[0margs\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0;34m**\u001b[0m\u001b[0mkwargs\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 329\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n", | |
| "\u001b[0;32m~/conda/envs/python/lib/python3.6/site-packages/urllib3/contrib/pyopenssl.py\u001b[0m in \u001b[0;36mrecv_into\u001b[0;34m(self, *args, **kwargs)\u001b[0m\n\u001b[1;32m 325\u001b[0m \u001b[0;32mif\u001b[0m \u001b[0;32mnot\u001b[0m \u001b[0mutil\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mwait_for_read\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0msocket\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0msocket\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mgettimeout\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m--> 326\u001b[0;31m \u001b[0;32mraise\u001b[0m \u001b[0mtimeout\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m\"The read operation timed out\"\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 327\u001b[0m \u001b[0;32melse\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n", | |
| "\u001b[0;31mtimeout\u001b[0m: The read operation timed out", | |
| "\nDuring handling of the above exception, another exception occurred:\n", | |
| "\u001b[0;31mReadTimeoutError\u001b[0m Traceback (most recent call last)", | |
| "\u001b[0;32m~/conda/envs/python/lib/python3.6/site-packages/requests/adapters.py\u001b[0m in \u001b[0;36msend\u001b[0;34m(self, request, stream, timeout, verify, cert, proxies)\u001b[0m\n\u001b[1;32m 448\u001b[0m \u001b[0mretries\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mmax_retries\u001b[0m\u001b[0;34m,\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m--> 449\u001b[0;31m \u001b[0mtimeout\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0mtimeout\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 450\u001b[0m )\n", | |
| "\u001b[0;32m~/conda/envs/python/lib/python3.6/site-packages/urllib3/connectionpool.py\u001b[0m in \u001b[0;36murlopen\u001b[0;34m(self, method, url, body, headers, retries, redirect, assert_same_host, timeout, pool_timeout, release_conn, chunked, body_pos, **response_kw)\u001b[0m\n\u001b[1;32m 724\u001b[0m retries = retries.increment(\n\u001b[0;32m--> 725\u001b[0;31m \u001b[0mmethod\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0murl\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0merror\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0me\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0m_pool\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0mself\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0m_stacktrace\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0msys\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mexc_info\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m[\u001b[0m\u001b[0;36m2\u001b[0m\u001b[0;34m]\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 726\u001b[0m )\n", | |
| "\u001b[0;32m~/conda/envs/python/lib/python3.6/site-packages/urllib3/util/retry.py\u001b[0m in \u001b[0;36mincrement\u001b[0;34m(self, method, url, response, error, _pool, _stacktrace)\u001b[0m\n\u001b[1;32m 402\u001b[0m \u001b[0;32mif\u001b[0m \u001b[0mread\u001b[0m \u001b[0;32mis\u001b[0m \u001b[0;32mFalse\u001b[0m \u001b[0;32mor\u001b[0m \u001b[0;32mnot\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0m_is_method_retryable\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mmethod\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m--> 403\u001b[0;31m \u001b[0;32mraise\u001b[0m \u001b[0msix\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mreraise\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mtype\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0merror\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0merror\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0m_stacktrace\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 404\u001b[0m \u001b[0;32melif\u001b[0m \u001b[0mread\u001b[0m \u001b[0;32mis\u001b[0m \u001b[0;32mnot\u001b[0m \u001b[0;32mNone\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n", | |
| "\u001b[0;32m~/conda/envs/python/lib/python3.6/site-packages/urllib3/packages/six.py\u001b[0m in \u001b[0;36mreraise\u001b[0;34m(tp, value, tb)\u001b[0m\n\u001b[1;32m 734\u001b[0m \u001b[0;32mraise\u001b[0m \u001b[0mvalue\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mwith_traceback\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mtb\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m--> 735\u001b[0;31m \u001b[0;32mraise\u001b[0m \u001b[0mvalue\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 736\u001b[0m \u001b[0;32mfinally\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n", | |
| "\u001b[0;32m~/conda/envs/python/lib/python3.6/site-packages/urllib3/connectionpool.py\u001b[0m in \u001b[0;36murlopen\u001b[0;34m(self, method, url, body, headers, retries, redirect, assert_same_host, timeout, pool_timeout, release_conn, chunked, body_pos, **response_kw)\u001b[0m\n\u001b[1;32m 676\u001b[0m \u001b[0mheaders\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0mheaders\u001b[0m\u001b[0;34m,\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m--> 677\u001b[0;31m \u001b[0mchunked\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0mchunked\u001b[0m\u001b[0;34m,\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 678\u001b[0m )\n", | |
| "\u001b[0;32m~/conda/envs/python/lib/python3.6/site-packages/urllib3/connectionpool.py\u001b[0m in \u001b[0;36m_make_request\u001b[0;34m(self, conn, method, url, timeout, chunked, **httplib_request_kw)\u001b[0m\n\u001b[1;32m 427\u001b[0m \u001b[0;32mexcept\u001b[0m \u001b[0;34m(\u001b[0m\u001b[0mSocketTimeout\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mBaseSSLError\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mSocketError\u001b[0m\u001b[0;34m)\u001b[0m \u001b[0;32mas\u001b[0m \u001b[0me\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m--> 428\u001b[0;31m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0m_raise_timeout\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0merr\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0me\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0murl\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0murl\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mtimeout_value\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0mread_timeout\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 429\u001b[0m \u001b[0;32mraise\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n", | |
| "\u001b[0;32m~/conda/envs/python/lib/python3.6/site-packages/urllib3/connectionpool.py\u001b[0m in \u001b[0;36m_raise_timeout\u001b[0;34m(self, err, url, timeout_value)\u001b[0m\n\u001b[1;32m 335\u001b[0m raise ReadTimeoutError(\n\u001b[0;32m--> 336\u001b[0;31m \u001b[0mself\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0murl\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0;34m\"Read timed out. (read timeout=%s)\"\u001b[0m \u001b[0;34m%\u001b[0m \u001b[0mtimeout_value\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 337\u001b[0m )\n", | |
| "\u001b[0;31mReadTimeoutError\u001b[0m: HTTPSConnectionPool(host='stats.nba.com', port=443): Read timed out. (read timeout=30)", | |
| "\nDuring handling of the above exception, another exception occurred:\n", | |
| "\u001b[0;31mReadTimeout\u001b[0m Traceback (most recent call last)", | |
| "\u001b[0;32m<ipython-input-23-c455b38b5f7c>\u001b[0m in \u001b[0;36m<module>\u001b[0;34m\u001b[0m\n\u001b[1;32m 1\u001b[0m \u001b[0;31m# Since https://stats.nba.com does lot allow api calls from Cloud IPs and Skills Network Labs uses a Cloud IP.\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 2\u001b[0m \u001b[0;31m# The following code is comment out, you can run it on jupyter labs on your own computer.\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m----> 3\u001b[0;31m \u001b[0mgamefinder\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mleaguegamefinder\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mLeagueGameFinder\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mteam_id_nullable\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0mid_warriors\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m", | |
| "\u001b[0;32m~/conda/envs/python/lib/python3.6/site-packages/nba_api/stats/endpoints/leaguegamefinder.py\u001b[0m in \u001b[0;36m__init__\u001b[0;34m(self, player_or_team_abbreviation, conference_nullable, date_from_nullable, date_to_nullable, division_simple_nullable, draft_number_nullable, draft_round_nullable, draft_team_id_nullable, draft_year_nullable, eq_ast_nullable, eq_blk_nullable, eq_dd_nullable, eq_dreb_nullable, eq_fg3a_nullable, eq_fg3m_nullable, eq_fg3_pct_nullable, eq_fga_nullable, eq_fgm_nullable, eq_fg_pct_nullable, eq_fta_nullable, eq_ftm_nullable, eq_ft_pct_nullable, eq_minutes_nullable, eq_oreb_nullable, eq_pf_nullable, eq_pts_nullable, eq_reb_nullable, eq_stl_nullable, eq_td_nullable, eq_tov_nullable, game_id_nullable, gt_ast_nullable, gt_blk_nullable, gt_dd_nullable, gt_dreb_nullable, gt_fg3a_nullable, gt_fg3m_nullable, gt_fg3_pct_nullable, gt_fga_nullable, gt_fgm_nullable, gt_fg_pct_nullable, gt_fta_nullable, gt_ftm_nullable, gt_ft_pct_nullable, gt_minutes_nullable, gt_oreb_nullable, gt_pf_nullable, gt_pts_nullable, gt_reb_nullable, gt_stl_nullable, gt_td_nullable, gt_tov_nullable, league_id_nullable, location_nullable, lt_ast_nullable, lt_blk_nullable, lt_dd_nullable, lt_dreb_nullable, lt_fg3a_nullable, lt_fg3m_nullable, lt_fg3_pct_nullable, lt_fga_nullable, lt_fgm_nullable, lt_fg_pct_nullable, lt_fta_nullable, lt_ftm_nullable, lt_ft_pct_nullable, lt_minutes_nullable, lt_oreb_nullable, lt_pf_nullable, lt_pts_nullable, lt_reb_nullable, lt_stl_nullable, lt_td_nullable, lt_tov_nullable, outcome_nullable, po_round_nullable, player_id_nullable, rookie_year_nullable, season_nullable, season_segment_nullable, season_type_nullable, starter_bench_nullable, team_id_nullable, vs_conference_nullable, vs_division_nullable, vs_team_id_nullable, years_experience_nullable, proxy, headers, timeout, get_request)\u001b[0m\n\u001b[1;32m 202\u001b[0m }\n\u001b[1;32m 203\u001b[0m \u001b[0;32mif\u001b[0m \u001b[0mget_request\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m--> 204\u001b[0;31m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mget_request\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 205\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 206\u001b[0m \u001b[0;32mdef\u001b[0m \u001b[0mget_request\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mself\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n", | |
| "\u001b[0;32m~/conda/envs/python/lib/python3.6/site-packages/nba_api/stats/endpoints/leaguegamefinder.py\u001b[0m in \u001b[0;36mget_request\u001b[0;34m(self)\u001b[0m\n\u001b[1;32m 210\u001b[0m \u001b[0mproxy\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mproxy\u001b[0m\u001b[0;34m,\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 211\u001b[0m \u001b[0mheaders\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mheaders\u001b[0m\u001b[0;34m,\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m--> 212\u001b[0;31m \u001b[0mtimeout\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mtimeout\u001b[0m\u001b[0;34m,\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 213\u001b[0m )\n\u001b[1;32m 214\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mload_response\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n", | |
| "\u001b[0;32m~/conda/envs/python/lib/python3.6/site-packages/nba_api/library/http.py\u001b[0m in \u001b[0;36msend_api_request\u001b[0;34m(self, endpoint, parameters, referer, proxy, headers, timeout, raise_exception_on_error)\u001b[0m\n\u001b[1;32m 126\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 127\u001b[0m \u001b[0;32mif\u001b[0m \u001b[0;32mnot\u001b[0m \u001b[0mcontents\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m--> 128\u001b[0;31m \u001b[0mresponse\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mrequests\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mget\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0murl\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0mbase_url\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mparams\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0mparameters\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mheaders\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0mrequest_headers\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mproxies\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0mproxies\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mtimeout\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0mtimeout\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 129\u001b[0m \u001b[0murl\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mresponse\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0murl\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 130\u001b[0m \u001b[0mstatus_code\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mresponse\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mstatus_code\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n", | |
| "\u001b[0;32m~/conda/envs/python/lib/python3.6/site-packages/requests/api.py\u001b[0m in \u001b[0;36mget\u001b[0;34m(url, params, **kwargs)\u001b[0m\n\u001b[1;32m 74\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 75\u001b[0m \u001b[0mkwargs\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0msetdefault\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m'allow_redirects'\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0;32mTrue\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m---> 76\u001b[0;31m \u001b[0;32mreturn\u001b[0m \u001b[0mrequest\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m'get'\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0murl\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mparams\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0mparams\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0;34m**\u001b[0m\u001b[0mkwargs\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 77\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 78\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n", | |
| "\u001b[0;32m~/conda/envs/python/lib/python3.6/site-packages/requests/api.py\u001b[0m in \u001b[0;36mrequest\u001b[0;34m(method, url, **kwargs)\u001b[0m\n\u001b[1;32m 59\u001b[0m \u001b[0;31m# cases, and look like a memory leak in others.\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 60\u001b[0m \u001b[0;32mwith\u001b[0m \u001b[0msessions\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mSession\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m)\u001b[0m \u001b[0;32mas\u001b[0m \u001b[0msession\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m---> 61\u001b[0;31m \u001b[0;32mreturn\u001b[0m \u001b[0msession\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mrequest\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mmethod\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0mmethod\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0murl\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0murl\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0;34m**\u001b[0m\u001b[0mkwargs\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 62\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 63\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n", | |
| "\u001b[0;32m~/conda/envs/python/lib/python3.6/site-packages/requests/sessions.py\u001b[0m in \u001b[0;36mrequest\u001b[0;34m(self, method, url, params, data, headers, cookies, files, auth, timeout, allow_redirects, proxies, hooks, stream, verify, cert, json)\u001b[0m\n\u001b[1;32m 528\u001b[0m }\n\u001b[1;32m 529\u001b[0m \u001b[0msend_kwargs\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mupdate\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0msettings\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m--> 530\u001b[0;31m \u001b[0mresp\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0msend\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mprep\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0;34m**\u001b[0m\u001b[0msend_kwargs\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 531\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 532\u001b[0m \u001b[0;32mreturn\u001b[0m \u001b[0mresp\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n", | |
| "\u001b[0;32m~/conda/envs/python/lib/python3.6/site-packages/requests/sessions.py\u001b[0m in \u001b[0;36msend\u001b[0;34m(self, request, **kwargs)\u001b[0m\n\u001b[1;32m 641\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 642\u001b[0m \u001b[0;31m# Send the request\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m--> 643\u001b[0;31m \u001b[0mr\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0madapter\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0msend\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mrequest\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0;34m**\u001b[0m\u001b[0mkwargs\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 644\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 645\u001b[0m \u001b[0;31m# Total elapsed time of the request (approximately)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n", | |
| "\u001b[0;32m~/conda/envs/python/lib/python3.6/site-packages/requests/adapters.py\u001b[0m in \u001b[0;36msend\u001b[0;34m(self, request, stream, timeout, verify, cert, proxies)\u001b[0m\n\u001b[1;32m 527\u001b[0m \u001b[0;32mraise\u001b[0m \u001b[0mSSLError\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0me\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mrequest\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0mrequest\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 528\u001b[0m \u001b[0;32melif\u001b[0m \u001b[0misinstance\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0me\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mReadTimeoutError\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m--> 529\u001b[0;31m \u001b[0;32mraise\u001b[0m \u001b[0mReadTimeout\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0me\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mrequest\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0mrequest\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 530\u001b[0m \u001b[0;32melse\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 531\u001b[0m \u001b[0;32mraise\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n", | |
| "\u001b[0;31mReadTimeout\u001b[0m: HTTPSConnectionPool(host='stats.nba.com', port=443): Read timed out. (read timeout=30)" | |
| ] | |
| } | |
| ], | |
| "source": [ | |
| "# Since https://stats.nba.com does lot allow api calls from Cloud IPs and Skills Network Labs uses a Cloud IP.\n", | |
| "# The following code is comment out, you can run it on jupyter labs on your own computer.\n", | |
| "gamefinder = leaguegamefinder.LeagueGameFinder(team_id_nullable=id_warriors)" | |
| ] | |
| }, | |
| { | |
| "cell_type": "markdown", | |
| "metadata": {}, | |
| "source": [ | |
| "we can see the json file by running the following line of code. " | |
| ] | |
| }, | |
| { | |
| "cell_type": "code", | |
| "execution_count": null, | |
| "metadata": {}, | |
| "outputs": [], | |
| "source": [ | |
| "# Since https://stats.nba.com does lot allow api calls from Cloud IPs and Skills Network Labs uses a Cloud IP.\n", | |
| "# The following code is comment out, you can run it on jupyter labs on your own computer.\n", | |
| "gamefinder.get_json()" | |
| ] | |
| }, | |
| { | |
| "cell_type": "markdown", | |
| "metadata": {}, | |
| "source": [ | |
| "The game finder object has a method <code>get_data_frames()</code>, that returns a dataframe. If we view the dataframe, we can see it contains information about all the games the Warriors played. The <code>PLUS_MINUS</code> column contains information on the score, if the value is negative the Warriors lost by that many points, if the value is positive, the warriors one by that amount of points. The column <code>MATCHUP </code>had the team the Warriors were playing, GSW stands for golden state and TOR means Toronto Raptors; <code>vs</code> signifies it was a home game and the <code>@ </code>symbol means an away game." | |
| ] | |
| }, | |
| { | |
| "cell_type": "code", | |
| "execution_count": null, | |
| "metadata": {}, | |
| "outputs": [], | |
| "source": [ | |
| "# Since https://stats.nba.com does lot allow api calls from Cloud IPs and Skills Network Labs uses a Cloud IP.\n", | |
| "# The following code is comment out, you can run it on jupyter labs on your own computer.\n", | |
| "games = gamefinder.get_data_frames()[0]\n", | |
| "games.head()" | |
| ] | |
| }, | |
| { | |
| "cell_type": "markdown", | |
| "metadata": {}, | |
| "source": [ | |
| "you can download the dataframe from the API call for Golden State and run the rest like a video." | |
| ] | |
| }, | |
| { | |
| "cell_type": "code", | |
| "execution_count": 27, | |
| "metadata": {}, | |
| "outputs": [ | |
| { | |
| "name": "stdout", | |
| "output_type": "stream", | |
| "text": [ | |
| "--2020-07-06 01:37:31-- https://s3-api.us-geo.objectstorage.softlayer.net/cf-courses-data/CognitiveClass/PY0101EN/Chapter%205/Labs/Golden_State.pkl\n", | |
| "Resolving s3-api.us-geo.objectstorage.softlayer.net (s3-api.us-geo.objectstorage.softlayer.net)... 67.228.254.196\n", | |
| "Connecting to s3-api.us-geo.objectstorage.softlayer.net (s3-api.us-geo.objectstorage.softlayer.net)|67.228.254.196|:443... connected.\n", | |
| "HTTP request sent, awaiting response... 200 OK\n", | |
| "Length: 811065 (792K) [application/octet-stream]\n", | |
| "Saving to: ‘Golden_State.pkl’\n", | |
| "\n", | |
| "Golden_State.pkl 100%[===================>] 792.06K 2.19MB/s in 0.4s \n", | |
| "\n", | |
| "2020-07-06 01:37:31 (2.19 MB/s) - ‘Golden_State.pkl’ saved [811065/811065]\n", | |
| "\n" | |
| ] | |
| } | |
| ], | |
| "source": [ | |
| "! wget https://s3-api.us-geo.objectstorage.softlayer.net/cf-courses-data/CognitiveClass/PY0101EN/Chapter%205/Labs/Golden_State.pkl" | |
| ] | |
| }, | |
| { | |
| "cell_type": "code", | |
| "execution_count": 28, | |
| "metadata": {}, | |
| "outputs": [ | |
| { | |
| "data": { | |
| "text/html": [ | |
| "<div>\n", | |
| "<style scoped>\n", | |
| " .dataframe tbody tr th:only-of-type {\n", | |
| " vertical-align: middle;\n", | |
| " }\n", | |
| "\n", | |
| " .dataframe tbody tr th {\n", | |
| " vertical-align: top;\n", | |
| " }\n", | |
| "\n", | |
| " .dataframe thead th {\n", | |
| " text-align: right;\n", | |
| " }\n", | |
| "</style>\n", | |
| "<table border=\"1\" class=\"dataframe\">\n", | |
| " <thead>\n", | |
| " <tr style=\"text-align: right;\">\n", | |
| " <th></th>\n", | |
| " <th>SEASON_ID</th>\n", | |
| " <th>TEAM_ID</th>\n", | |
| " <th>TEAM_ABBREVIATION</th>\n", | |
| " <th>TEAM_NAME</th>\n", | |
| " <th>GAME_ID</th>\n", | |
| " <th>GAME_DATE</th>\n", | |
| " <th>MATCHUP</th>\n", | |
| " <th>WL</th>\n", | |
| " <th>MIN</th>\n", | |
| " <th>PTS</th>\n", | |
| " <th>...</th>\n", | |
| " <th>FT_PCT</th>\n", | |
| " <th>OREB</th>\n", | |
| " <th>DREB</th>\n", | |
| " <th>REB</th>\n", | |
| " <th>AST</th>\n", | |
| " <th>STL</th>\n", | |
| " <th>BLK</th>\n", | |
| " <th>TOV</th>\n", | |
| " <th>PF</th>\n", | |
| " <th>PLUS_MINUS</th>\n", | |
| " </tr>\n", | |
| " </thead>\n", | |
| " <tbody>\n", | |
| " <tr>\n", | |
| " <th>0</th>\n", | |
| " <td>22019</td>\n", | |
| " <td>1610612744</td>\n", | |
| " <td>GSW</td>\n", | |
| " <td>Golden State Warriors</td>\n", | |
| " <td>1521900066</td>\n", | |
| " <td>2019-07-12</td>\n", | |
| " <td>GSW vs. LAL</td>\n", | |
| " <td>L</td>\n", | |
| " <td>200</td>\n", | |
| " <td>87</td>\n", | |
| " <td>...</td>\n", | |
| " <td>0.800</td>\n", | |
| " <td>13.0</td>\n", | |
| " <td>29.0</td>\n", | |
| " <td>42.0</td>\n", | |
| " <td>13</td>\n", | |
| " <td>10.0</td>\n", | |
| " <td>3</td>\n", | |
| " <td>11.0</td>\n", | |
| " <td>21</td>\n", | |
| " <td>3.2</td>\n", | |
| " </tr>\n", | |
| " <tr>\n", | |
| " <th>1</th>\n", | |
| " <td>22019</td>\n", | |
| " <td>1610612744</td>\n", | |
| " <td>GSW</td>\n", | |
| " <td>Golden State Warriors</td>\n", | |
| " <td>1521900058</td>\n", | |
| " <td>2019-07-10</td>\n", | |
| " <td>GSW @ DEN</td>\n", | |
| " <td>W</td>\n", | |
| " <td>201</td>\n", | |
| " <td>73</td>\n", | |
| " <td>...</td>\n", | |
| " <td>0.867</td>\n", | |
| " <td>7.0</td>\n", | |
| " <td>27.0</td>\n", | |
| " <td>34.0</td>\n", | |
| " <td>10</td>\n", | |
| " <td>11.0</td>\n", | |
| " <td>7</td>\n", | |
| " <td>20.0</td>\n", | |
| " <td>20</td>\n", | |
| " <td>-8.0</td>\n", | |
| " </tr>\n", | |
| " <tr>\n", | |
| " <th>2</th>\n", | |
| " <td>22019</td>\n", | |
| " <td>1610612744</td>\n", | |
| " <td>GSW</td>\n", | |
| " <td>Golden State Warriors</td>\n", | |
| " <td>1521900039</td>\n", | |
| " <td>2019-07-08</td>\n", | |
| " <td>GSW @ LAL</td>\n", | |
| " <td>W</td>\n", | |
| " <td>200</td>\n", | |
| " <td>88</td>\n", | |
| " <td>...</td>\n", | |
| " <td>0.621</td>\n", | |
| " <td>8.0</td>\n", | |
| " <td>29.0</td>\n", | |
| " <td>37.0</td>\n", | |
| " <td>21</td>\n", | |
| " <td>10.0</td>\n", | |
| " <td>4</td>\n", | |
| " <td>13.0</td>\n", | |
| " <td>22</td>\n", | |
| " <td>8.0</td>\n", | |
| " </tr>\n", | |
| " <tr>\n", | |
| " <th>3</th>\n", | |
| " <td>22019</td>\n", | |
| " <td>1610612744</td>\n", | |
| " <td>GSW</td>\n", | |
| " <td>Golden State Warriors</td>\n", | |
| " <td>1521900020</td>\n", | |
| " <td>2019-07-07</td>\n", | |
| " <td>GSW vs. TOR</td>\n", | |
| " <td>W</td>\n", | |
| " <td>201</td>\n", | |
| " <td>80</td>\n", | |
| " <td>...</td>\n", | |
| " <td>0.923</td>\n", | |
| " <td>6.0</td>\n", | |
| " <td>37.0</td>\n", | |
| " <td>43.0</td>\n", | |
| " <td>18</td>\n", | |
| " <td>8.0</td>\n", | |
| " <td>3</td>\n", | |
| " <td>20.0</td>\n", | |
| " <td>25</td>\n", | |
| " <td>10.0</td>\n", | |
| " </tr>\n", | |
| " <tr>\n", | |
| " <th>4</th>\n", | |
| " <td>22019</td>\n", | |
| " <td>1610612744</td>\n", | |
| " <td>GSW</td>\n", | |
| " <td>Golden State Warriors</td>\n", | |
| " <td>1521900007</td>\n", | |
| " <td>2019-07-05</td>\n", | |
| " <td>GSW vs. CHA</td>\n", | |
| " <td>L</td>\n", | |
| " <td>200</td>\n", | |
| " <td>85</td>\n", | |
| " <td>...</td>\n", | |
| " <td>0.889</td>\n", | |
| " <td>8.0</td>\n", | |
| " <td>28.0</td>\n", | |
| " <td>36.0</td>\n", | |
| " <td>19</td>\n", | |
| " <td>9.0</td>\n", | |
| " <td>3</td>\n", | |
| " <td>13.0</td>\n", | |
| " <td>15</td>\n", | |
| " <td>-8.0</td>\n", | |
| " </tr>\n", | |
| " </tbody>\n", | |
| "</table>\n", | |
| "<p>5 rows × 28 columns</p>\n", | |
| "</div>" | |
| ], | |
| "text/plain": [ | |
| " SEASON_ID TEAM_ID TEAM_ABBREVIATION TEAM_NAME GAME_ID \\\n", | |
| "0 22019 1610612744 GSW Golden State Warriors 1521900066 \n", | |
| "1 22019 1610612744 GSW Golden State Warriors 1521900058 \n", | |
| "2 22019 1610612744 GSW Golden State Warriors 1521900039 \n", | |
| "3 22019 1610612744 GSW Golden State Warriors 1521900020 \n", | |
| "4 22019 1610612744 GSW Golden State Warriors 1521900007 \n", | |
| "\n", | |
| " GAME_DATE MATCHUP WL MIN PTS ... FT_PCT OREB DREB REB AST \\\n", | |
| "0 2019-07-12 GSW vs. LAL L 200 87 ... 0.800 13.0 29.0 42.0 13 \n", | |
| "1 2019-07-10 GSW @ DEN W 201 73 ... 0.867 7.0 27.0 34.0 10 \n", | |
| "2 2019-07-08 GSW @ LAL W 200 88 ... 0.621 8.0 29.0 37.0 21 \n", | |
| "3 2019-07-07 GSW vs. TOR W 201 80 ... 0.923 6.0 37.0 43.0 18 \n", | |
| "4 2019-07-05 GSW vs. CHA L 200 85 ... 0.889 8.0 28.0 36.0 19 \n", | |
| "\n", | |
| " STL BLK TOV PF PLUS_MINUS \n", | |
| "0 10.0 3 11.0 21 3.2 \n", | |
| "1 11.0 7 20.0 20 -8.0 \n", | |
| "2 10.0 4 13.0 22 8.0 \n", | |
| "3 8.0 3 20.0 25 10.0 \n", | |
| "4 9.0 3 13.0 15 -8.0 \n", | |
| "\n", | |
| "[5 rows x 28 columns]" | |
| ] | |
| }, | |
| "execution_count": 28, | |
| "metadata": {}, | |
| "output_type": "execute_result" | |
| } | |
| ], | |
| "source": [ | |
| "file_name = \"Golden_State.pkl\"\n", | |
| "games = pd.read_pickle(file_name)\n", | |
| "games.head()" | |
| ] | |
| }, | |
| { | |
| "cell_type": "markdown", | |
| "metadata": {}, | |
| "source": [ | |
| "We can create two dataframes, one for the games that the Warriors faced the raptors at home and the second for away games." | |
| ] | |
| }, | |
| { | |
| "cell_type": "code", | |
| "execution_count": 29, | |
| "metadata": { | |
| "collapsed": false, | |
| "jupyter": { | |
| "outputs_hidden": false | |
| } | |
| }, | |
| "outputs": [], | |
| "source": [ | |
| "games_home=games [games ['MATCHUP']=='GSW vs. TOR']\n", | |
| "games_away=games [games ['MATCHUP']=='GSW @ TOR']" | |
| ] | |
| }, | |
| { | |
| "cell_type": "markdown", | |
| "metadata": {}, | |
| "source": [ | |
| "We can calculate the mean for the column <code>PLUS_MINUS</code> for the dataframes <code>games_home</code> and <code> games_away</code>:" | |
| ] | |
| }, | |
| { | |
| "cell_type": "code", | |
| "execution_count": 30, | |
| "metadata": { | |
| "collapsed": false, | |
| "jupyter": { | |
| "outputs_hidden": false | |
| } | |
| }, | |
| "outputs": [ | |
| { | |
| "data": { | |
| "text/plain": [ | |
| "3.730769230769231" | |
| ] | |
| }, | |
| "execution_count": 30, | |
| "metadata": {}, | |
| "output_type": "execute_result" | |
| } | |
| ], | |
| "source": [ | |
| "games_home.mean()['PLUS_MINUS']" | |
| ] | |
| }, | |
| { | |
| "cell_type": "code", | |
| "execution_count": 31, | |
| "metadata": { | |
| "collapsed": false, | |
| "jupyter": { | |
| "outputs_hidden": false | |
| } | |
| }, | |
| "outputs": [ | |
| { | |
| "data": { | |
| "text/plain": [ | |
| "-0.6071428571428571" | |
| ] | |
| }, | |
| "execution_count": 31, | |
| "metadata": {}, | |
| "output_type": "execute_result" | |
| } | |
| ], | |
| "source": [ | |
| "games_away.mean()['PLUS_MINUS']" | |
| ] | |
| }, | |
| { | |
| "cell_type": "markdown", | |
| "metadata": {}, | |
| "source": [ | |
| "We can plot out the <code>PLUS MINUS</code> column for for the dataframes <code>games_home</code> and <code> games_away</code>.\n", | |
| "We see the warriors played better at home." | |
| ] | |
| }, | |
| { | |
| "cell_type": "code", | |
| "execution_count": 33, | |
| "metadata": { | |
| "collapsed": false, | |
| "jupyter": { | |
| "outputs_hidden": false | |
| } | |
| }, | |
| "outputs": [ | |
| { | |
| "data": { | |
| "image/png": "iVBORw0KGgoAAAANSUhEUgAAAXkAAAEICAYAAAC6fYRZAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAADh0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uMy4xLjEsIGh0dHA6Ly9tYXRwbG90bGliLm9yZy8QZhcZAAAgAElEQVR4nOydd3ic1ZX/P3dGZdR7lyzJtlwkF9mWCxiMKTYl9La0hAQCJIT9JWGzG5JNSCOBhCS7kJDdkABhE0JoCRB6szEGbCO5y1W2LKtZXRr1MnN/f9wZ1ZE05R1Jlu7nefyM5p2Z970G+cx5z/2e7xFSSjQajUYzPTFN9gI0Go1G4z90kNdoNJppjA7yGo1GM43RQV6j0WimMTrIazQazTRGB3mNRqOZxgQYdSIhhBkoBCqllJcKIWKB54As4ARwvZSyaaxzxMfHy6ysLKOWpNFoNDOCoqKieillgqvXDAvywNeBg0Ck4/l9wPtSyoeEEPc5nn97rBNkZWVRWFho4JI0Go1m+iOEKBvtNUPKNUKIdOBzwB8HHb4CeNrx89PAlUZcS6PRaDTuY1RN/r+B/wDsg44lSSmrARyPiQZdS6PRaDRu4nOQF0JcCtRKKYu8/PydQohCIURhXV2dr8vRaDQazSCMqMmvBS4XQlwCWIBIIcRfgBohRIqUsloIkQLUuvqwlPJx4HGAgoICbaSj0WjGpLe3l4qKCrq6uiZ7KROOxWIhPT2dwMBAtz/jc5CXUn4H+A6AEGI98C0p5S1CiIeBW4GHHI+v+HotjUajqaioICIigqysLIQQk72cCUNKSUNDAxUVFWRnZ7v9OX/q5B8CNgghjgIbHM81Go3GJ7q6uoiLi5tRAR5ACEFcXJzHdzBGSiiRUm4GNjt+bgDON/L8Go1GA8y4AO/Em7+37njVTH8qCqG1ZrJXodFMCjrIa6Y3UsKfr4ItD0/2SjSaSUEHec30prMJuq3QeGyyV6LRTAo6yGumN9Yq9dh0YlKXoZl+XHnllaxYsYK8vDwef/xxnn/+ee69914AHnnkEWbPng3AsWPHOOusswD48Y9/zMqVK1m0aBF33nknUkqOHTvG8uXL+8979OhRVqxYYdg6Dd141WimHM4g31wOdhuYzJO7Ho2h/OifxRyoshp6ztzUSH5wWd6473vyySeJjY2ls7OTlStX8vbbb/Pww6os+NFHHxEXF0dlZSVbt27l7LPPBuCee+7h/vvvB+Dzn/88r732GpdddhlRUVHs3r2b/Px8nnrqKb74xS8a9vfRmbxmemOtUI/23oGAr9EYwKOPPsrSpUtZs2YN5eXllJeX09bWRmtrK+Xl5dx0001s2bKFjz76qD/Ib9q0idWrV7N48WI++OADiouLAfjyl7/MU089hc1m47nnnuOmm24ybJ06k9dMbwYH9qYTEJ0xaUvRGI87Gbc/2Lx5M++99x6ffvopoaGhrF+/nq6uLs444wyeeuop5s+fz9lnn82TTz7Jp59+yq9+9Su6urq4++67KSwsJCMjgx/+8If9mvdrrrmGH/3oR5x33nmsWLGCuLg4w9aqM3nN9MZaBSZHLqPr8hqDaGlpISYmhtDQUA4dOsS2bdsAWLduHb/85S9Zt24dy5YtY9OmTQQHBxMVFdUf0OPj42lra+PFF1/sP5/FYuHCCy/kq1/9Kl/60pcMXasO8prpjbUSkhaBMEPzqJbbGo1HXHTRRfT19bFkyRK+//3vs2bNGgDOPvtsysvLWbduHWazmYyMjP5N1+joaO644w4WL17MlVdeycqVK4ec8+abb0YIwcaNGw1dqy7XaKY3LZWQlKuklDqT1xhEcHAwb775psvXpBzwWXznnXeGvPbAAw/wwAMPuPzc1q1bue222zCbjRUH6CCvmb5Iqco1ORugs1kHec2U5aqrruLYsWN88MEHhp9bB3nN9KWrBXrbITIVetrg8FuTvSKNxiX/+Mc//HZuHeQ10xensiYyFWw90F4LPe0QFDa569JoJhC98aqZvlgr1WNkOsRkqZ+b9OarZmahg7xm+tIf5FMhOkv9rBU2mhmGLtdopi/WKkBARDIEhqpjevNVM8PQmbxm+mKthPAkMAdCaCwEReggrzGEEydOsGjRoslehlvoIK+ZvrRUQlSa+lkIiMnUQV4z49BBXjN9sVaperyTmCy98aoxDJvNxh133EFeXh4bN26ks7OT3bt3s2bNGpYsWcJVV11FU1MTAOvXr+eb3/wm69atY+HChXz22WdcffXV5OTk8L3vfa//nH/5y19YtWoV+fn53HXXXdhsNp/XqWvymumLtQrmnDvwPCYLSt5XTVIzdEbotOPN++DUPmPPmbwYLn5o3LcdPXqUZ599lj/84Q9cf/31vPTSS/ziF7/gN7/5Deeccw73338/P/rRj/jv//5vAIKCgtiyZQuPPPIIV1xxBUVFRcTGxjJnzhy++c1vUltby3PPPcfHH39MYGAgd999N8888wxf+MIXfPrr6CCvmZ50WaGndWgmH50JfZ3QVgsRSZO3Ns20IDs7m/z8fABWrFjBsWPHaG5u5pxzzgHg1ltv5brrrut//+WXXw7A4sWLycvLIyUlBYDZs2dTXl7O1q1bKSoq6ve06ezsJDEx0ed16iCvmZ70yyfTBo45tfLNZTrITxfcyLj9RXBwcP/PZrOZ5uZmt95vMpmGfNZkMtHX14eUkltvvZUHH3zQ0HXqmrxmejJWkNebrxo/EBUVRUxMDB999BEAf/7zn/uzenc4//zzefHFF6mtrQWgsbGRsjLf95B0Jq+Zngy2NHASPUs96iCv8RNPP/00X/nKV+jo6GD27Nk89dRTbn82NzeXBx54gI0bN2K32wkMDOSxxx4jMzPTpzWJwbaYXp1ACAuwBQhGfWm8KKX8gRAiFngOyAJOANdLKZvGOldBQYEsLCz0aT0aDQCbH1J/vlcLAUEDx3+1AOacD1c+Nnlr0/jEwYMHWbhw4WQvY9Jw9fcXQhRJKQtcvd+Ick03cJ6UcimQD1wkhFgD3Ae8L6XMAd53PNdoJoaWCghPHBrgwSGjPDEZK9JoJgWfg7xUtDmeBjr+SOAK4GnH8aeBK329lkbjNsM18k50kNfMMAzZeBVCmIUQu4Fa4F0p5XYgSUpZDeB49F0LpNG4i7Vq6Kark+hMtSnb1zPxa9IYhq9l5tMVb/7ehgR5KaVNSpkPpAOrhBBumzoIIe4UQhQKIQrr6uqMWI5GM3Ymj4SW8olekcYgLBYLDQ0NMy7QSylpaGjAYrF49DlD1TVSymYhxGbgIqBGCJEipawWQqSgsnxXn3kceBzUxquR69HMULpbobvFdSbfL6Mshbg5E7osjTGkp6dTUVHBTEwKLRYL6enpHn3G5yAvhEgAeh0BPgS4APg58CpwK/CQ4/EVX6+l0bhFv3zSVZB3yNF0Xf60JTAwkOzs7MlexmmDEZl8CvC0EMKMKv88L6V8TQjxKfC8EOJ24CRw3Vgn0WgMY/CwkOGEJ4M5WBuVaWYMPgd5KeVeYJmL4w3A+b6eX6PxGGcmH+UikzeZtOWwZkahbQ00048WRyYfkeL69Wgd5DUzBx3kNdMPayWEJUBAsOvXY7L0rFfNjEEHec30YzT5pJOYLOhqgc4xXTY0mmmBDvKa6Ye1CiLHkJlphY1mBqGDvGb6Ya0YP5MHrbDRzAh0kNdML7rbVClmrCAfrTN5zcxBB3nN9KK1Wj26aoRyYomEkFgd5DUzAh3kNdMLZyOUK438YKaTwmbvC/D3Oyd7FZopig7ymulFyxjdroOZTpbDu/4Me59Tnj0azTB0kNdML5zdrhHjBflMaD4Jdpv/1+RPbH1QWaR+rjs8uWvRTEl0kNdML6yVEBoHgePYscZkgb1voLxzulJbDD2OmT21ByZ3LZopiQ7ymunFaMNChjNdZJTlO9SjMEPtwcldi2ZKooO8ZnphrXQvyE8XGeXJbao0lbxYZ/Ial+ggr/Ebda3d1Ld1T+xFrZXjb7oCRKWr7Pd0D/LlOyBjFSTl6Uxe4xId5DV+4+t/28W9z++ZuAv2dCg/GneCvDlQBfrTWUZprYKWk5CxGhIXQlsNdDRO9qo0Uwwd5DV+QUrJ/soWjte1TdxFnY1QUW6ORzvdfeXLt6vHWY4gDzqb14xAB3mNX6hr7cba1UeNtQu7fYJG97ZUqEd3Mnk4/bXy5TsgIASSl0CCM8jrurxmKDrIa/xCSa3K4HttcuLq8mPNdnVFTBa010FPu9+W5FdOboO0Far0FJkKwVE6k9eMQAd5jV84WjtQpqlq6ZqYi1rHmQg1nNNZRtnTAaf2qk1XACFUyUYHec0wdJDX+IWjtQMt9lXNnRNzUWuVMh4LCnXv/dFZ6vF0LNlU7VLNXBmrB44lLoS6gyAnqDymOS3QQV7jF47WtDE7IQyYyCDvpkbeiTOTPx0VNuXb1KMzkwdIzFXqoraayVmTZkqig7zGLxyra6MgM4aQQDPVE1mucXfTFSA0FoIiTs9MvnwHxM9TfwcniQvUo9581QxCB3mN4TS291Df1sO8pAhSoi1Ut0xgucaTIC/E6SmjtNuVfHJwqQZUJg+6Lq8Zgg7yGsNxKmsWW2pYEVpHVfMEZPK9XdDRML6P/HBisk6/jdeGElWWGR7kw+IhLEFn8poh+BzkhRAZQohNQoiDQohiIcTXHcdjhRDvCiGOOh5jfF+u5nTAGeSXbb+Xb7Y8ODE1eaeyxpOaPAxo5U+nzUpnE9TwIA8Ohc2hiV2PZkpjRCbfB/yblHIhsAb4mhAiF7gPeF9KmQO873iumQEcrW0lI6iVoPoDpHYdw9xWRU+f3b8X7dfIe1CuAWVU1tcJbbXGr8lflG+DkBiIzxn5WmIu1B1SJR2NBgOCvJSyWkq50/FzK3AQSAOuAJ52vO1p4Epfr6U5PSipbePyyJL+5+tMe6mx+rlk0x/k3bQ0cNKvlT9h5Gr8S/kOlcULMfK1hAXKX76lfOLXpZmSGFqTF0JkAcuA7UCSlLIa1BcBkGjktTRTl6M1bZxtPgCWKLpDk1lv2u1/hU1/ucbNRignp5uMsqMR6o+4LtWA3nzVjMCwIC+ECAdeAr4hpbR68Lk7hRCFQojCuro6o5ajmSRau3o5Ze0kt2snZJ1NV9Z5rDXt51ST278S3mGtBEs0BIV59rnoWerxdMnknUNCRg3yWkapGYohQV4IEYgK8M9IKf/uOFwjhEhxvJ4CuCx6Sikfl1IWSCkLEhISjFiOZhIpqW1jlqglsrsaZq8neMGFRIpO7Ce3+/fC7k6EGk6gRdkgnDZBfhuYAiB1mevXLVGqZFWnN181CiPUNQJ4Ajgopfz1oJdeBW51/Hwr8Iqv19JMfY7WtnGWab96Mns9lnnn0YuZ2Kot/r2wtdJz+aST00lGWb4DUpaObd2QuFBn8pp+jMjk1wKfB84TQux2/LkEeAjYIIQ4CmxwPNdMc0pq2zjLXIyMSIW4uWCJ5EBALtnNn/j3wp42Qg0m+jRpiLL1QmXR6KUaJ4kLoO4I2PomZl2aKY0R6pqtUkohpVwipcx3/HlDStkgpTxfSpnjeNQja2YAx2qsrDUXI2av71d/HI5YQ0bP8QEFjNH0dSvLYG/KNaAyeWulOs9Upnov9HW5EeRzwdYNTaUTsy7NlEZ3vGoMRdbsI0q2wuxz+o+dSjhL/VDynn8u6q1G3klMFiAHho5MVcZqghpMoh4gohlAB3mNYXT22JjbVqSeZA8EeXNyHtUyFtvhd/xzYU+HhQwnJlM9TvXMt3ybUgONJxONnw8I3fmqAXSQ1xjIsbo2zhTFtEbMGRKIUmNC2GxbCqWbVV3ZaHwO8lnqcSrX5aUcaIIaj6BQiM3WmbwG0EFeYyDHTjWyynQIW+bZQ46nRIWw2b4Uc0/rgM7bSKzO2a4eNkI5CU8Gc/DUVti0lKtB5e4EeVAzX3VDlAYd5DUG0nF8G6Gim7CFG4YcT40K4WP7IuwiAEreNf7C1io13zQ4wrvPm0yqDDKVM/mTbtbjnSQuVG6VU30zWeN3dJDXGEZE5VZsmAicfdaQ40lRwbQRSlXEEjjqh81Xa5X3GnknTjfKqUr5dggKH7AtGI/EhSBtUH/Uv+vSTHl0kNcYRpa1kJPB8yAkesjx4AAz8eHB7A1ZBTX7wFpt7IU9nQjliqneEFW+DdILwBzg3vudXwa683XGo4O8xhC625tYYDtCTfwal6+nRVvYSr56YrSUssWIIJ8J3S1qGMdUo7sVaordL9WAakQzBejNV40O8hpjqNu/mQBhx5a1zuXrKVEh7OhIgYhUY+vyfT3QXuu9ssbJVFbYVBaBtA8d2j0eAUEQl6M3XzU6yGuMoefoJrpkIDHzz3L5upr12oWcez4c22xcy32ro/QznYP8ye2AgPSVnn0ucYHO5DU6yGuMIaLqYwrlfGanxLt8PTUqhPYeGx2Z56mySIVBUkpfu12dRDsboqZgXb58u6qxW6I8+1xirvrS6mn3y7I0pwc6yGt8p62WhI4SioOXYQk0u3xLSrQFgIroVapWfNSgko23s12HY4mEkNipl8nbbVDxGczyoB7vxGlvUHfY2DVpTit0kNf4TqmyER5t0xUgNToEgMquQLWBaFRdvj/I+5jJw9SUUdYdgm6rZ5uuTvSUKA06yGsMwH5sEy0yjKCM/FHfkxqlgnxVcxfMvQBO7YPWU75f3FoFwZEqE/eVmKypNwaw35TMg01XJzFZEGDRdfkZjg7yGt+QEtuxzXxiz2VO4ug144SIYAJMguqWTshxdMQaIaU0QiPvJCYTmk+qEslU4eR2CEuEmGzPP2syQ/w8ncnPcHSQ1/hGUymBrRV8bF9ETtLotgJmkyAp0kJ1cxckLVIj94yoyxuhkXcSkwX2voES0FSgfLvK4h3e/B6TmKuD/AxHB3mNbxzfDMAn9jzmJoaP+daUKAuVzZ0qYM09H45v8l1K6ctEqOH0yyinSMmmrVbZH88afa9jXBIXQmsVdDYbty7NaYUO8hrfOP4hTQEJdEVkEx48dst9SnQI1S1d6sncDdDVopQj3mLrhbYaNbjaCPpllCeMOZ+vuDskZCy0vcGMRwd5jffY7VC6hSLzEuaMUapxkhpt4VRLF3a7hNnrQZh9U9m0ngKkcZl8VLpa01QK8uZgNbjbW/SUqBmPDvIa76nZB52NvN25gJxEN4J8VAg9NjsN7T3KxCxjtW91eaM08k7MgSrQT5Ugf3I7pC6DgGDvzxGVDkERui4/g9FBXuM9xz8E4MOeXHKSxq7Hg6rJA0phA5BzAZzaC601Hl3W2tXLN/62i5aaE+qArzbDg4nJhMZjxp3PW3q7oHq3d9LJwQjhsDfQQX6mooO8xnuOb6Y9cg61xJAzzqYrDDREVTU7gvxc76SUn5TU8/LuKkqPO7zSjSrXgCojVe2CEx8bd05vqN4Nth7fNl2dJOopUTMZHeQ13tHXAyc/pTRSmWaNp6yBgUy+qtmx+Zq8WI3e87AuX1xlBaCroVwN0gg2oBHKyeqvqo3ct+6bXL28c9M13cdMHtTma0c9tNX5fi7NaYebEwg0mmFUfAa9HRSaFhMfHkx0aNC4H4kNCyI4wDRQrhFCdb8e+qeSUro5EOOAI8ibWh0aeW815K4ICoUNP4KXboc9z8KyW4w5r90O+18cMFQbj/0vQexsCE/w/dqDN1/Dz/H9fJrTCkOCvBDiSeBSoFZKuchxLBZ4DsgCTgDXSymn4EQGjVcc3wzCxLsd89wq1QAIIUiNDqHKKaMEVZff/Rf1pZF5hlvncWbyIV01kGKQfHIwi66B7f8L7/8Ycq/wfnbsYD77I7z575595ox7fL8uqKHeoEo2s3WQn2kYlcn/Cfgt8H+Djt0HvC+lfEgIcZ/j+bcNup5msin9EJm6nL0VkiuXuRfkQZVsqp01eYDZ5w5IKd0I8g1t3ZyydpEcaSG+u4Hu0AJ80J64Rgi46CH44/mw9b/g/Pt9O199Cbx7v7pruf7/ADfvPAJDfLuuk/BE5bCpZZQzEkNq8lLKLUDjsMNXAE87fn4auNKIa7nEbodT+7VvthO7Hbrb/Hf+LitUFNKetpbW7j63lDVOUqJCBmry4JBSrnJbSnmgWmXxV+YnkkgTdSbX/vU+k14AS/4FPvmtbx2wtj54+StKBnn5byEoTJWE3PljVBlKCFWX96IhqrWrF5tdGrMOzaiU1LZS39btl3P7c+M1SUpZDeB4TPTblco+hv9dCye2+u0Spw1SqnryI0uNH5jtpOwTkDZKI9zfdHWSGm2htrWLPpt94OBc96WUzlLNtfMCMQtJRV/0OJ/wgfN/AMIE7/3A+3N88ogqRX3uVxCZYtzaPMWpsJHuB+z27j7WPvQBf/vspB8XpgG4689FfP/l/X4596Sra4QQdwohCoUQhXV1Xu7+pxeAKVAHeYC9z0Px35Wa4tV7PPpH7TalH0KAhV0yB8CtRignqdEh2CXUtA7KWjxwpSyuspIWHcKcoBYADncZqKwZTlQanPUNKP4HlH3q+edP7YNND0LularOP5kkLlS+9B6Yr+0pb8ba1cfhU61+XJhGSkllcydp0QaV54bhzyBfI4RIAXA81rp6k5TycSllgZSyICHBSyVBYAikrVAZ5kympRLe+HfIWKNqyiXvQdGfjL/O8c0waw2HGnqJCgkkPnx8ZY2T/oaowXX55CUQnuSWlPJAVQu5qZGIVqVS2dvi/l2EV5z5/1RH7Vv3qTKYu/R1w9/vgtBY+NyvjVUAeUPioM1XNykqUzqJU4M3yjWG09DeQ1evnfSY0y/Ivwrc6vj5VuAVP14LstaqJhZ/1qKnMlKqzN3eC1f+DlbdBdnnwNv/CY2lxl2nrVZt4M1eT0ltGzmJ4QgPAlh/Q9TgwOGUUh59D0reH/WzHT19HK9vJzclUn2hAdsbLEh/3K04CQqFC36ompP2/s39z21+EGqL4fLfQFicv1bnPgkL1KMHm6+FziBv1UHen1Q2qYQnLSbUL+c3JMgLIZ4FPgXmCyEqhBC3Aw8BG4QQR4ENjuf+I3MtSJtxA6JPNwqfgGMfwMafQNwcMJlUsDeZ4eW7jWvscYz6I/scFeQ92HSFwQ1RnUNfOPNfISwe/nI1PHsjNB4f8dmD1a1ICXmpkWCtotdkoaIriLpW/2xY9bPoWkgrgPd+5F4ScXI7fPwILPs8zLvQv2tzl9BY5eFf697mq90u2XlSZ/ITQaXj38KULtdIKW+UUqZIKQOllOlSyieklA1SyvOllDmOx+HqG2PJWKWkeJPdjj4ZNByDd74Pc86DgtsHjkelw8U/h5OfwLbfGXOt45vAEk1DxAIa23uYk+BZkI+wBBIRHDC0XAOqnPC17Wqz8/iH8NhqpVMfFFSdypq8tCiwVtIXngoIDtf4uWZsMqnyV9spFbzHoqddqWki0+HCn/l3XZ6SuNDtTL6kro3Wrj7SokOoa+um1+ZBqUrjERVNHQCknYblmoklOAJS85XSZiZht8HLX1UOipf/dmTtd+mNMP9zKmD66l/S16MCcPbZHK1XQXqsaVCjMaIhyklAMJx9L/xrIeRdBR/9Cn5bAHtfACk5UNVCVEggqVEWsFZhjlbGZBOyMZixEhZfB588Cs3lo7/v3fvVXciVvzNm7qyRJOZC3WG37uoKT6gs/nNLUpAS/98tzWAqmzqJsAQQFRLol/NPnyAPkHkmVBZBb+f4750ufPKo8jm55Jeu3RiFgMseUf4u/7hLDdrwhq4W+Ot10FIOi66lpFZl2O52uw4mJdoyYG3gishUuPpxuO1t1cjz9y/DUxfTeXIXeamRag/AWklQTAbx4UEc8Xcm7+SCHwIC3vuh69ePfaA6W9d8DbLPnpg1eULCAujrdMtKuaisibiwINbMjgV0Xd6f+FNZA9MuyJ+lnPsqCid7JRNDTTFs+hksvFxlmaMRngCX/TdU74EtD3t+nZZKePJiJVG98n8g70pKatsICzL319g9ISUqRM16HY9Za+COTXDZo8j6I/y66et8q+d3Sk/fegoiU5mXFMHhmgnabI9Kh7X/T3nQnNw+9LXOZnj5axA/H87//sSsx1OcU6LcuKMrKmtkeWYMSZHq/6+uy/uPiqZOvylrYLoF+VlrADEzpJR9PUqiZ4mCS/9rfInewstgyQ2w5ZfqbsddTu2HP14AzSfh5hch/yYAjta2MtdDZY2T1CiLQzbmxmawyQwrbqXkX7bwlO0i8utfg98sV5vsUWnMS4qgpKZVTZsygOaOnrHvMtZ+XW1gvv2doZLKN7+tRhFe9b/G2REYTcJ89Vg3dpCvb+vmREMHKzJjSIlSfxejg3xXr42SWq2/B1WuSfeTsgamW5APiYbkRVA2A5qiPvy5msx02aNKleIOF/8cIpLhH19xr6R17AN48iL1821vwZxz+18qqW1jrgdNUINJcdyaVnsQOPY1wE/6Ps/J699VzW8ACQuYnxxBe4+tX6HgK9/9xz4u+81WrF2jlLWCwlTZprII9r2gjh14Vckr130L0pYbsg6/EByu5tiOk8nvdEgnCzJjiAkNJCjARI3B5Zo/fXKCC369hce3HPOvBHaK09LZS2t3ny7XeETmWij/TGW605Xyz2DrryH/FlhwifufC4mGK34L9UfURuxY7HoGnrkOomfBl99TX54OWjp7qbF2eyyfdJLqqiFqHA5UWQkOMJE+bxl8/mX45gHIPJN5jjUYUZeXUrLteCP1bT08tqlk9Dcuvh5Sl6vafNMJeO0bag7rOg9dJieDxNxxg3xRWRNBZhOL0qIQQpAcafHoC9kdTtQrn6mfvXGIH75aPGP9cQY08jrIu0/mWrW5VLVrslfiH3o6HBK9NLjoQc8/P+c8WHmHklSWfjTydSlh88/hlbsh6yy47c0RG7rOTde5HsonnbhsiBqH4iorC5IjCDCbVGnKsSanuscIGWVpfTuN7T3Ehwfz1NYTlDWMYnjnlFS2VsHj65XM86rfK4XTVCdxgfqSHyMJKiprYlFaJJZAMwDJkRbDN14rmztZkh7Fnetm8/SnZXzlL0V09kzikJZJol8+qTN5D8g8Uz1Oo5JNW3cfN/1hG//17hGVPTaU+CbR2/AjNZDi5buVo6QTW0jQUgUAACAASURBVK/qmt38M1h6E9z0gqr5D8NZS/U2k08erSFqFKSUFFe1kJs6ci2RFiWpPGKAjNLZxv/IDfkEmAUPvjFG49Cs1cqPprNJbbQ6bQMmiD6bnR2ljTz05iEu/K8tXP27j90reyTmgr1v1Lp8d5+NvZUtrMiM6T+WFGUxvCZf2dxJRkwo371kIT+6PI/3DtZwwx+2+c2JcariLDPqjVdPCItXUrFpsvnaZ7Pzr3/dySfHGjjw8auw4/ew+iuQvc77kwaFqczTWgFvf1cd67LCX6+HXX+Bc76tvkQCXHvSlNS2qdKJl5tFlkAzcWFBY29wDqKyuRNrV5/qdHXBvOQIjhigsCkqayLSEsAZs+P42rlzeav4FJ8eaxj9A5f8Eq78X1hzt8/XdoeGtm7+vrOCe/66k+U/eZfrf/8pf/zoOL12OztPNvc7dI5J9jmqaXD/Sy5f3l9ppafPPiTIp0SpTN6o2rmUkqrmTlKj1Zf9rWdm8ftbVnD4lJWrf/cJx+tmjjVJZVMnlkATsWHu+z95yvQL8qBKNie3KS/v05yfvHaATYfruCY3gh/K39Eeka26Qn0lY5VSiuz6szIxe+oS1eh0+W/h3O+OqdY5WtvGnIRwzCbvTbdSoi1DfeXHwBm8ckcJ8vOTIiipaxtqX+wFRWVNrMiMwWQS3H5WNmnRIfzktQOj14tDYyH/RqUA8gNSSvZXtvDo+0e58rGPKfjpe9z7/B62HW9kY14yv7t5OTvv38ALd52BScA7B8a3aiYiCXI2wp6/ufz34dx0XT44k4+00NNnp7nDyx6LYTR19NLVa+8v2wFszEvm2TvW0N7dxzX/8wlFZf5tkJ8qVDQpjbw3KjV3maZB/kzoaVMe5cOw2SUPv31o7AxtivDUx6U8/WkZXz4rm19EvUiSaOLxuG8r0ywjWP8dSFoE//w6NJXCzc/D8s+P+7GjNW0eeci7IiUqxO1MvrjKiknAwmTXQT4nKYKePjtljR1er6e5o4ejtW39Gawl0Mx3LlnAgWorLxaN0eHqJ/740XFW/+x9Lv3NVn797hGklHz9/BxevWctO757Pr+8bimXLE4h0hJIXHgwBZmxvOtOkAdYdrOSex4baQZXWNbIrNhQEiMG+h+SHVr5cTdfd/8V9jw37uWdm42pw+rQy2bF8Pe7zyQ6NIib/rCdN/f5aR7CFKKyudNvxmROpmmQX6seXVgc/OyNgzy26RhPbB1pgDWVeP9gDT957QAbcpP4ziULMR9+nT3RG3iiNNY9fbk7BATD1X+AeRfBl95UTpDj0NHTR2Vzp1edroNJi3azIQqlrJmdEE5IkOuMeb5j89WXuvyuk80ArMiM7T/2ucUpFGTG8PDbR2gdTVLpB+rbunnozUNkxIbyy+uW8tl/XsAr95zFNy6Yx5L0aEwu7qA25iVxsNpKuTtfdDkXQmi8uosbhJSSorJmCgZl8TCwhzKmjLKrBV7/lrJ1GKesM5YhV2ZcGC999UzyUiO5+687eWKrgQ6qU5DKZv82QsF0DfKRKWpjcZhZ2Z+3lfHE1lIiLAHsKG00rIHGaIqrWvjXZ3eRlxrFIzfkY+5tg456YrOW0Nbdx+bDLq35vSMpF256DlKWuPX2Y7VKceLtpquTlCgLrd19o+vRB3GgqkXZC4+CasryTWFTVNaE2SRYmjGwuSuE4P7Lcqlv6+Z3m495fW5PeXlXJX12yUNXL+baFekkRIw/xXZDbhLgZskmIEiNNjz8FrQP3NGebOygvq17SKkGBoL8mAqbXc9Ab7sycTu1b8zLV43juhgbFsRf71jDhbnJ/OS1A/zon9NTYtnR00dje49flTUwXYM8OOryn/R3JW4+XMsPXy3m/AWJ3H9pLtauPg5NwYk3p1q6uP1PhUSFBPLHWwsIDQro94OfNSePuLAg/rln8m5jjzqUNT6Xa5wNUeNk803tPVS1dI266QoQEmQmMzaUoz5svhaWNZKbEqn+ew9iSXo01yxP54mPSt3Lkn1ESsnzheXkZ0R7ZP6WGRfG/KQI3j1wyr0PLLtFzR7Y93z/Iae6aMWwIJ8YEYwQY5Rr7HbY8fiAZ/04w1+qmjsJCTQTHTq65NQSaOaxm5dz29psnvr4BF97Zic9fZPshNleD9v+13v/p2E4y1Y6k/eWzLXqFrK2mEOnrNzz113MT4rg0RuXceZc1SG6o3Rq1eXbu/u4/enPaO3q5ckvruz3DaFJBXlz/GwuXpzM+4dqaO+enE3lo7VtBJgEmXFhPp3H2RBVNU5dvt9e2IV8cjDKw8a7L+1em5095S0jgpuT/7hoPmaT4ME3fXTxdIO9FS0cqWnjuoJ0jz+7MS+JHaWNNLW70QiYlAupy5SaylFeKSprIiI4gHnDvlwCzSbiw4OpGS3Il7yrfkfP+Q815evo2GMcq1qUsma8zUazSd1J3XfxAt4qPsUHh9zcc/AXm36q1GhuGLy5Q8UEyCdhOgf5LFWXbz38Ibc99RlhwWae+GIBYcEBpEWHkBYdwvbSqbODb7NLvv63XRystvLbm5azcHB5wjnZKSaby5ak0tVr572Dk/MLX1LbRnZ8GIFm33513M3ki6vULNfRlDVO5iVFUFrfTnef5/sVh6pb6ey1jRrkkyIt3L1+Dm/sO8X24/5NDF4oKic4wMRlS1M9/uyG3CTsEt4/5GY5L/9mqNmvjOtQQT5/VrRL1dSYDVHb/1f5+Sy8XM3rLd+uDNtGobKpc8Sm61jcekaWKsedmkRpZU2xUqGtugPicww5ZX+3a7TeePWO6FnYozLY+/EbNHf28sStK/vNlgBWz45lR2njlPHN+OnrB3nvYC0/uCyPcxckDn2xqRRC48ASycqsWJIig3lt7+SUbLyZBuWKpIhgTIJxFTYHqqykRFnG1RHPS47AZpccrxulS3UMCh1yvYIs10Ee4I51s0mNsvDjsSSVPtLVa+OV3VVcvCiZSIvn3bOL06JIjrS4X7JZfC2Yg2H3M1i7ejlc00rBoI3nwSSP1hBVd0R5HBXcrjp+525Q5nHHN4962crmLo/q0CFBZtJjQiiZLP28lPDWd5Rd9znfNuy0FU2dBJoFiW7sufjCtA3ydrtku20B87v38ei/5LMobejt/ursWBraezg2BRov/vzpCZ78uJQvnpnFrWdmjXxDYynEZANgMgk+tziVDw/X0dI5cYoPUJ41ZQ3tXhuTDSbAbCIp0jKusVhxlXXMTVcn/QobL0o2RWVNpEZZhiQBw7EEmrnvkoUUV1l5aWeFx9dwh7eLT9Ha1cd1BRlefV4Iwca8JLYcqXdPgRUSAwsvhb3Ps6e0BilH1uOdjJrJ73gczEGw4ovqefpK1SU9Sl2+q9dGfVu3x5uNOYkRHJ2ouQHDOfIWlH6o+kdCXX8JekNlcycpUSEu1VJGMm2D/ENvHeIfTVnECysXJLaMeH11thquvO345JZsNh2u5QeODeHvX5rr+k1NpRCb3f/0sqUp9NjsvFPsZsZmEP/cU4VdwgULE8d/sxukRFnGLNd09tg4Vtc25qark+z4MAJMwusgP1xR4orLlqSwfFY0D799mDY/7Im8WFRBWnQIZ8z2fvD3htwkOnttbD1a794H8m+GrmZadr+CSUD+rGiXb0uOstDS2TvUX6arBfY8q+wdwhPUMXMAzD5XDWR3cZfsvBvwpFwDaqP/eH37xKts+nrg7f+E+HlQcJuhp65s6vB7PR6maZD/6/aTPL7lOKlLzlcHToz0scmMCyUxIpgdk1iXP1ht5Z5ndrIgOZJHb1zmuoO0rwdaKvozeYD8jGjSY0ImvGTzQlEFC5IjWJw29iaou6REj90QdbimFbvEpWfNcIICTMxOCPO4blvV3El1S9cIbbgrlKQyj7rWbv5n8xgulV5Q2dzJ1pJ6rl2R7lNmtzo7jghLAO+4W7KZvR4i08k48XcWJEcSHhzg8m3Ohqgh2fzuv6qmw9V3DX1zzgZorVb1/mE45ZPeBPmePvuEKJyG8NkfoPGYmtdrsAGds9vV30y7IL/lSB3ff2U/6+cncM81GyE82aWPjRCC1bPj2F7aMCl1+ab2Hm7/02eEWwL6N4Rd0lIO0j4kkxdCcOmSVLaW1NPojpLCAI7UtLKnvJlrV6Qb1oKdGqUsbEf77+/cdHUnkwfV+eppJj8gG3TvNjw/I5qrl6XxB4MllS8VVSAlXLvCc1XNYIICTJw7P5H3D9a6l/WazNiX3MDiriLOTRm9/NevlXfW5Z2yyfRVSqUzGGdT3dGRJZuKcTTyo+FsvjtaO4Hl1fYG5cg69wL1xWUg3X02alu7/Wox7GRaBfnDp1r52jM7yUkM5zc3LiMgwKwsDso+dnnruDo7lhprNycnOjsAvvfKfurauvnjF1aOWQserKwZzKVLUrDZJW/tn5iSzQuF5QSYBFctczFH1ktSo0Po7rOP+kVVXGUl0hLg9i3t/KQITjZ20NHjfimlqKyJkEAzC1Lc32f494vmYxaCh94aw6XSA+x2yYtFFZw5J46MWN+VFhvzkmho72HnySa33l+SfjkmIfmc3DzqewYaohx3XiXvqYHlw7N4UINpkher9wyjqrkTIQbO5y5z+oP8BNblN/9M3als/Knhp3aWKf05EcrJtAnyda3d3Panz7AEmXniiyuJcKoTstaqW8emke3Rq7NV9rZ9guvyr+6p4vW91XzjgnksTh+nFOFcd+zQIJ+XGsns+DD+uafKT6scoNdm5x+7Kjl/YSJx4cYpAZxfbqMZlR2ospLrHNztBk59tydNUUVlTeRnRHskCU2JCuEr58zh9b3VfHbC99+d7aWNnGzs8Eob74pz5iUQZDa5vWezvSmKbfaF5FS9OqolQX+5psVhBbzj9+ouOfcK1yedu0GZBHYN3Q+rau4kMSKYoADPQk+kJZDkSAslEzXPt+YAFD4JK29XHvwGM5a1g9FMiyDf2WPjy/9XSEN7N0/cWjD0P1zmWerxxEgfm7mJ4cSGBbFtApuiaqxdfP/l/SybFc1d62aP/4HGUggMhfCkIYeFEFy6NJVtpQ3UGjzQYTibDtVS39bDdSu8U32MhtNq1lVDlM0uOXTKSm6K+/X/+cmeKWw6evo4UG0dVVEyFneum01KlIUf/9N3SeULReVEBAdwUV6KT+dxEmEJ5Iw5cbxzoMatUmRhWRNvB55PYEspnPzU5XvCggOICA5Q/jX1R1WWvvL20evUOa6llFXNXR7X4/tPmRQ+MTJKKVXTU3CEMvHzA85hIdNi41UIcZEQ4rAQokQIcZ8/rrG/qoUjp1p55IZlLEkfpg5ImK805i7MyoQQrMqKnbDNVykl//HiXrr7bPzquqVqytF4NJVCTJZL69/LlqQgJbzhZ7e+F4oqiA8PZv38BEPP68zkXY0BPF7XRlev3e16PMCs2FCCA0xuB/nd5c3Y7JIVY+jjRyMkyMx3LlnIvsoWnvTBRKu1q5c3953i0qWpoxqwecPGvCTKGjrcqmEXlTXRlHUxBIUrD5pRSI6yqI3yHX8YKpt0RfoqCI4aUZdXPvLeBbY5CeGU1Lb533Pq6DtwfJMK8AZKJgdT2dSJyYuylTf4NcgLIczAY8DFQC5woxBiFJ2g96zMimXLf5zLhXnJrhYxUJd3werZsVQ0dRo2CHosnt1RzodH6vjOxQuZ7e7ovMbjI+rxTnKSIliQHME//aiyqWvtZtOhWq5Znubel5IHxIUFEWQ2ufRE6bczSHM/yJtNgrmJ4Rx285a+3zs9w/MgD+pLdmNuEg+/c9jrGbOv762ms9dmWKnGyQULHYZl45RsaqxdVDR1sigrFfKuguJ/qHGGLkiOstDS3AS7n4G8qyF8DCmtOQDmrB8ipZRSKmtdHzL5jh7buFYYPmHrVVl8XA6s/LLfLlPR3ElypMXnznF38PcVVgElUsrjUsoe4G/AKEU83xjTqS9zLTSfhOaRvuCrHHV5f/vYnGzo4IHXD7B2bhyfX5Pp3ofsduWTEes6yIPagC0qa/Lbl5TTEdHoIASqsSsl2uJy1mtxlZWgABNzPJwjOz8pwm3L4cKyJnISw4kawyhrLIQQ/OzqxUQEB3Dv87vp9WJoyQtFFcxJCGNZhmt9urckRVrIz4ge12PeqS4qyIpVpmW97XDg5VHPWdD8pkM2eef4i5i7Qc3BrSkGoKG9h+4+e79vkafkOJrwSvypsPnsj2q85oU/9evM3oqmzglR1oD/g3waMDiyVjiOTSz9/vIjpZQLkiOJtAT4dfPVZpd864U9mIXg4WuXuq+DbjsFfV2qXDMKly5RHiev7zV+A1ZKyQtFyhHRiC5XV6REWVzOei2uamF+UoTHmc685AhOWbvG7Qa22yU7y5rGtDJwh/jwYH561WL2V1r5zQeeaedLatsoKmvi+oIMv0wG2piXxJ6KljF7EYrKmggOMKmu4ozVEDd31JJNSmQQ1/S+jkxbCWkrxl+AU0rp6H7ttxj2UlHilFH6Lch3NMLmB9Ww+5yN/rmGg8oJ0siD/4O8q9/cIQU1IcSdQohCIURhXV2df1aRlKfqgy6Ge5tNglXZsX41K3tyayk7TjTyg8vzPKtHNrpW1gwmKz6MJelRfrEfdjoiXu9lm707pEaFjKjJSyk5UGX1qB7vZH6/wmbsbP5YXRvWrj6Wz/ItyANctCiZq5el8dimEvaUj27MNZwXiyowmwRXLfdP3rPR4TH/3hjZfGFZE0vTo5XaRQjVAXvyE2gY6Z+f37OTbNMpWpZ8yb0FRKZA0uJ+V8qBRijvMvmYsCDiwoJ8spQek80PQneranzy4zi+PpudU9auCZFPgv+DfAUwOEKkA0NSTinl41LKAillQUKCsRt7/ZjMkHnGqMO9V2XHUlrf7heVypGaVh5++zAbc5O4xtN/zE2uNfLDuXRJCvsqWzhR77k511i8UFSOJdDEpUuNUX24IiXaQk1r9xCFSnVLF00dveM6T7pinkNhM57tcOHgMoUB/ODyPBIjgrn3+d1u+cb02ez8fWcF6+clDBm1ZyRzEsKZHR826iCRrl4bxZUtQzeel94IwqTq7sNYWvU3amU0JxLHnyDWT84FUL4NuqxUOqSyvmSwcxP9pLCpPQSfPaGsCxIXGn/+QTh/36dLueYzIEcIkS2ECAJuAF718zVdk3mmqrW1jtyIcvrYGJ3N99rs3Pv8biIsAfzs6sWe35I3loIwQ/SsMd/2OUfJ5jUDSzZOR8SL8rxzRHSXlKgQbHZJbevAF6xzcLc3mXxqlIXw4IBx6/JFZU3EhgWRFWdMNhUVEsjD1y7lWF07D799eNz3bzlaR21rt9dmZO4ghGBDXhKfHmtwWb7aU95Mn12yYvDdTGQKzDkfdj8L9kFfVg3HiK/ewjN953Oq3YO9h7kbwN4HxzdT2dRJaJCZqBDvf59yksI5WtNqfJf6O/+p1EXrv2vseV1Q4Wi+nBblGillH3AP8DZwEHheSlnsz2uOilMv70Jlk5caSViQ2XAp5W8+KGF/pZWfXrWYeG+aiJpKISp93A2gtOgQCjJjDPWycToi+rNUA4O08oMaog5UWRFC7Zd4ihCCnKTwcTP5orImls+KMbQWflZOPF84I5MnPy4dd1D8C4UVxIYFcd5wW2mD2ZibRJ9duhwZWeToiB1hzrbsFrVhenzTwLEdjyNNgfzVdr5ry+HRyFilLHpL3u2XT/ry33xuQjjWrj7qWru9PscIjr6rdP/rvw1h3pvDuUt/I9Q0yeSRUr4hpZwnpZwjpTS+P9hdUpZCYJjLkk2A2cSKrFi2G6iw2VPezGObSrh6WRoXLXIh7XSHxtIx6/GDuXRJCodOtXot5RvOi0UVpMeEsMYHR0R3cO5RDN58La5qITsubHQ/n3GYnxTBkTHqtg1t3ZTWt/u86eqK+y5eQGZsKN96Yc+ow78b23t472ANV+anedz56Sn5GTHEhwe7VNnsLGtidkLYSK/++RcrG+Jdf1HPu1vVZmzeVbSYY6n2pKxpDlQmaEffo6q5w+fs1TkS0TAPG6dkMnYOrLzDmHOOw8CwkGkS5KcM5gCYtdpl5ysoi4MjNW2GGH519dq49/ndJEYE84PL87w/UVPpuPV4J5csScEk4DUDbA6cjojXLPfNEdEd+huiBilADlRbvarHO5mXFEFjew/1ba6zvZ0n1eaoN52u4xEaFMCvrs+nuqWTB15zPS7w5V2V9Nok1680XpY6HLNJcMHCRDYfrhsyNUtKSVFZ09BSjZOAYFh8PRx6XSlOdj8LPa2I1V8hMXKMMYCjkaOklCHNh71uhOo/ldEKm6I/Qf0R2PiAGnA+AVQ0dRIfHowl0Ljmt7GYOUEelJSy7uCQCfVOVvfr5X0v2Tz89mGO1bXzi2uXeF9/7GyGzia3M/nECAurs+N4bW+1z/VKoxwR3SHSEkBYkLm/XNPS0UtFU+e4M13Hot/eYJS6fGFZI4FmYZhl8nBWZMZw1zlzeK6w3OVc0heKKlicFuVVOcobNuYl0dbdN2R2wvH6dpo6eke/m1l2C9h6YN8Lym0ybQWkryA50jL6QO/RcEgp87sKSfNSWeMkISKYCEuAcUZl+19Sd/nzLzbmfG5Q2TxxGnmYiUEelERsGEvSowkOMPlcsvn0WANPflzKF87I5OwcH9RCbiprBnPZ0lSO17f3b1x6g9GOiOMhhBjiK19c7d5M17FwGpWNVpffWdbEorQov2ZS37gghwXJEXz7pX1DBmvvr2zhYLXVL81lo3HmnHhCg8xDul8HLJZHCfIpS5ST5KafQsNRWP0VQHW91niqQotMpTtuIetNe3zO5IUQ5CSGGyOjtPVC1W4VF/womRxOZXPnhHjWOJlZQT5tOQRYXNblgwJMLJ8V41Mm39rVy7de2ENmbCj3Xeyjc12/Rt4NEzMHFy1KJsAkfNqANdoR0R1SogaywwM+KGucxIcHERMa6HJ/oqfPzp6KFtdlCgMJDjDz6+vzae7o4XuvDAzPeKGwnCCzicu9GNTtLZZAM+fMS+DdAzX9vi9FJ5qIDg1kdvwYHcX5tygXybBEyL0SGBgD6OndYm3SOgpMh8kI9X2iVk5ihDFjO2sPQF+ne41dBmG3K2uH9Amqx8NMC/IBwWoGpYtJUaB8bA5UW72enfrIe0epaunkV9fnExrk3aZhP/2ZfJbbH4kNC2Lt3Hj+uafK65KN0Y6I7pAWHdK/8XqgykpSZLB3aiQHQgjmJUVw2EW5Zn9VCz19dr9sug4nNzWSb1wwj9f3VvPqniq6+2y8sqeKjXlJRIdOTP3Xyca8JGpbu9lbqe6Uik4qddGYey5LroegCOUZ76hXJ0dZ6Oq1e/xvpCRyDYHCRnZrodd/Byc5SeHUt/X4vn9W4VjLBAb5+rZuevrsulzjVzLXwql9quY9jFXZsUgJRWWeZ/PH69r40ycnuGFlhjEbeo2lKoMK9sy75bKlqVQ2d7LLg85LJ/5yRByPlKgQ6tt66O6zuT24ezzmJ0dwtKZtxJddvymZnzN5J3etm82yWdF8/+X9PLPtJM0dvX7Vxo/GufMTMZsE7xSformjh5LatvF/T0Nj4Rt74ax7+w8NDA/xrGSzVyzAKkOIrdri8dqHM8eozdfKncqh1oNEyle8nYzlCzMwyJ8JSCjfPuKl5bNiCDQLr3xsfvbGISyBZu7dMN+ARTKuMdlobMxLIshs4jUvbA785Yg4HimOzbiyhg5K6tp82nR1Mi8pgtbuvhGbhIUnmsiIDSEx0v8Wr6Dkub++Pp/uPhs/fu0AKVEWzpobPyHXHkx0aBCrs2N550BN/8Qot5KR0FgwDYSJgeEhngX5cmsvRaalmI69N+pgEncxTGFTWQhpBRNbj3fIJyfK0gBmYpBPXwmmwBHDDEDVLpemR7PNw7r81qP1vHewhnvOmzu2G6YnNLovnxxMpCWQc+Yn8EJhOX/bcdKjgRYvFFUwNzHccEfE8Uh1yCg/PFyHzS59qsc7me/C3kBKSdHJJgrcnOdqFNnxYXznYtUqf/XyNNcD2yeAjblJlNS29XvmLB0+e8ENRsx6dZOq5k4Ohq8CayXUupaWuktqVAihQWbfFDZdVqg7DOkFPq3FUyqaJrYRCmZikA8KVbrdfS+q3fVhrJ4dy/7KFtq73dsg6rPZ+clrB5gVG8qX1mYZs8a+bvWPwYtMHuB7n1vIgpQI7vv7Pq587GO3yk/H6pQj4nUGDup2F2cm72zY8UVZ42Re4kgZZUVTJ3Wt3SM7PCeAz6/J5JEb8vnKOXMm/NpOLnAYlr2x7xR5qZFeleScPjuelmuqmjupind0nZeMHPDtCSaT6B8g4jVVOwGpxBgTSGVzB1EhgYR72ejnDTMvyINy2muvdTloeFV2HDa77JeYjcdzheUcrmnlu5csIDjAoDp2UxkgvcrkATLjwnj+rjN45IZ86lq7ueZ/PuWbz+0eU/r2QqF/HRHHwpnJF5Y1EhEcQIYBt7JRoYEkRQYPyeQLHV92BZMQ5E0mwRX5aQOzhyeB9JjQ/rskb/eNggJMxIcHeSSjtNslVS1dhCXOgsS8EdOivMFnGWVlkXqcwE1XUOWaiZRPwkwN8vMuhLCEgbbtQazIjMFsEm5JKa1dvfzqnSOszo51PZXKW0YZ3u0JQqig8v6/ncM9587l9b3VnPvLzfxuc8mQzkcYcEQ8d77/HBHHIiTITExoIHYJC1MjDeuynZcUMSQQFJU1ER4c0K+jn4lscGTzvogDkqM8a4hqaO9RipLoEOVKefJTVS7xgblJ4Zyydo1qHTEuFUXKOz9kYr/wfZmM5S0zM8ibA2HJv8CRt6BtqId9eHAAi9Ki3GqK+u0HJTR19PD9S3ONLXE0et4INRphwQF868L5vHvvOtbOjecXbx1m439t4b1BQ54/OlpPbWs31xo8qNsTnPYGRihrnMxPiuBobWv/vkRRWTPLZkVPWk18KvAvKzO4Ij+VdfO8b9RLjrR41Md8LwAAIABJREFUVJN3GnKlRoUMuFKWfuj19UEZlYGXm69SOjZdJzaLl1JO6EQoJzMzyIMq2dj7YN/zI15anR3LnvKWMX3BT9S389THpVy/IoNFRrfHN5Uq29Mw41QYmXFh/OELBfzfbasIMAm+/H+FfPGpzzhW18YLReUT4og4Fk43SiM2XZ3MS46gq9dOeWMHrV29HD5l9YtfzelESlQIj9ywzCf76OQoi0c1+YFhISEwa43S3vtYsvHJqKylAtpqlLJmAmnu6KWjx6Yz+QkjKRdSlyt3vWGSrtXZsfTY7Ow6ObrW/GdvHCTIbOLfLpxn/Nqcyho/bICum5fAW99Yx/cvzWVnWRMX/tcW3imu4apl/ndEHAtnJm+EfNLJYHuD3eXN2KV/TMlmGsmRFpo7et0ajgKDx/6FOFwpz1H7YT5IKTNiQggKMHHMmyDvrMenT3A9vnni5ZMwk4M8wLKbobYYqnYNOVyQFYsQjFqy+aSknncO1PC18+b6p4bdVAqxWcaf10Gg2cTtZ2Wz6d/Xc83ydEKCzNy4avJKNaCC76zYUOYmetb8NRZOPfWRU60UnmjCJCB/guWh05Ekh1be3c3XyuZOwoMDiLQ4FCU5G3yWUgaYTcyOD/Muk68sBHOQGk04gVQ0qWEheuN1Ill0rfKyGTbqLCokkIXJkS43X212yY9fO0B6TAi3rfW9Zj4Cu12pawyox49HfHgwP792CXt/sNFvg7rd5cplaWz5j3MNvZsICw4gIzaEI7Vt7DzZxPzkyElVt0wXBuyh3QvyaliIZWDfau4G9eijlHJuYrh3WvmKIkheMmHWwv2XnWAfeSczO8iHRMOCS5Wdau/QX9hV2bHsPNlET9/QUWfPF5Zz6FQr371koX9cDFurwNbtk7LGUyZaFz+RzE+K4GC1lV0nm1mRqbN4I0iOUg1/nmTyQ9wno9IgMdf3unxiBBVNnXT2uFc2AsDWB9W7vW6C6ujx3mCtsrmTsCAz0aETm2jM7CAPqmTT1QKHXx9yeM3sWLp67eyrHKjLW7t6+eXbh1mVFcvF3k57Gg8DlTUaVZcvqW2jrbtvwjtdpyvJjkzeXYVNVXPXSIvhnA1wcpsaSuIlOUnhSIlnjpR1B6G3w6tN1wffOEjBA+/119Y9pdKhrJnopEoH+exzICpjhGZ+ZZYKCIMHLTy2qYRGf0gmB2OARl4zwGBNvN50NYbw4ADCgwPcKtd09thobO8ZWaJYdC3Ye9XQDi+Z642HjdN50sNN12e2l/H7Lcfp6LEN8eX3hIqmidfIgw7yYDLD0hvh2CYlrXIQFx5MTmI42x11+bKGdp7aeoJrl6ezON0/E4UAaDwOpgCInFiTsOmKM8gnRgRP+IbXdCYpMtitck1Vyyh1aOdQkl1/9noNWXFhmE3Cs7p8ZSGExHp0p/zhkTruf6WY8xYkMichzOW8XLcuPcEToZzoIA+QfxMgYc+zQw6vnh1L0YlG+mx2HnzjEAFmwb9faJDL5Gg0lkL0LDWTVuMzsxNUIFiRGTOt9x4mmpSoELcy+SEa+eHk3wLVe+DU/pGvuUFQgImsuFDPMvnKnaoJys3fhUOnrHztmZ3MS4rg0RuXcWFeMttLG2nu8MzLvrWrl5bO3gmXT4IO8orYbMg6e4RmflV2HO09Np78uJS3ik/xtXPn+t+i1oPh3ZrxsQSa+eHleXx1/eQZg01HkiLdGwPotNZNdTXbdcn1Sso4TN3mCUph42aQ725Vsk03N11rW7u4/U+FhAWbefKLBYQHB7AhNwmbXbLpcK1H66ycBB95JzrIO8m/WQXYQaMBncO9H3rzEGnRIdx+lp+Dr5TQeELX4w3m82syWeKFra5mdJKjgqlt7R7XyrqquROTGNDWDyE0Vg3Q3vsc9Hk35SknMYKyho4RKjjXi9mFcp4cP8h39ti44+lCGtt7eOLWlf2y0aXp0SRGBPNOsWclm8pJsBh2ooO8k9zLVbv1oKwiKdJCVlwodgnfuWSBXwc/A9DZBN0tOpPXTHmSo0Kw2SX1bd1jvq+yuYvkSAuB5lFCTf4t0NGgfKS8ICcpHJtdcqKhffw394/7G9te2G6XfPO53eytbOHRG5cNsS0xmQQbcpP48Eid2x2/MKjb9XTL5IUQ1wkhioUQdiFEwbDXviOEKBFCHBZCXOjbMieAoDBYdBUU/0Pd1jm4riCDSxYn87nFEzDztFErazSnB+5OiKoarpEfzpzzICLF65KNU2Hjlu1wZRHEzlZ3EGPw87cO8VbxKb73udx+187BbMhNoqPHxifH6t1eZ2VTp8Om2aChQh7gaya/H7gaGDK4UQiRC9wA5AEXAb8TQkzc0FBvyb9FaWiLX+4/9LVz5/K7m1dMzKZdk9bIa04PUtyc9VrVMk6QNwfA0htUY1Sr59LEOQnhCIF7CpvKonFLNc/uOMnvtxzn82syuW2UIUBnzIkjPDjAo5KNUz5plI22J/gU5KWUB6WUh128dAXwNyllt5SyFCgBVvlyrQkhYxXE5fi0EeQT/Y1QWZNzfY3GTZLcyOTtdkm1q0ao4eTfAtIGe/7m8TosgWYyYkLH33xtqYTW6jE3XT86Wsf3Xt7P+vkJ/OCy0XthggPMrJ+fwHsHa9wer1kxCT7yTvxVk08Dygc9r3AcG4EQ4k4hRKEQorCurs7VWyYOIVQH7MlPob5k4q/fVArhyWpEoUYzhYkLCyLQLMbM5Ovbuumx2UlzpawZTPxcyFijkisvnClzEsPHd6OsdNbjXTdBHalp5e6/7CQnMZzf3LiMgNH2EBxsyE2ivq2H3eXuTZCbjIlQTsYN8kKI94QQ+138uWKsj7k45vL/npTycSllgZSyICHB+0EGhrHkBhCmycnmG0t1PV5zWmAyCRIjxh4eUtnsgaJk2c1Qf2Rgc9QD5iaGc7yunT7bGAqbyiIl10we6TxZ19rNl576DEuQmSe+uNItE7tzFyQSaBZulWy6em3Ut3VP3UxeSnmBlHKRiz+vjPGxCmCwd206UOXrYieEyBSYe4G6dbR7YHxkBFojrzmNSI4aO8hXNavXxi3XAORdBYGhsHvkSM7xmJsYTo/NzsnGjtHfVFGkAnzA0I3Prl4bd/xfIQ3t3Txxa4HbgTjSEsia2XG8M2jC2mh49GXnB/xVrnkVuEEIESyEyAZygB1+upbxLLtFuUEe2zRx1+ztVDVDnclrThOSx2mIqmxWQdetIB8cAblXwr6XoGeMYO0C55SoUTtf7TalkXdRqvnhq8XsqWjmkRuWedxLsTE3idL69nEN0ionyWLYia8SyquEEBXAGcDrQoi3AaSUxcDzwAHgLeBrUsoJTot9YN7F/7+9M42Oq7gS8HclWZJlIWFbaLENFsYythwWg2MCBLPLJBCWIYztQMIyGQKBTEKSmYQYzpDFWSAzYQ9hDgkJJywJCRPIYBazhDABjM0YG9t4QwZL3rHlDcmWpTs/qlr91Opudau71VLnfufo6HW9evXqdr26Xa/q1r3Ov0UKfjWSZsc6999G8sYgIRTQO9ZIdkNLGwcVFSQeanDKpbB/N6x4Kql6dJlRxlLyW1ZA+94eljVLm3by6JvrufqUccyYnLxX2bO8eeWzvUzZdNnIj8jOWluq1jVPqOoYVS1S1SpVnRE4N1dVj1DVI1V1XupV7UcKCt2W65VPp+QKNSnMRt4YZFSXFdPa3sGutug+1nv4ke+NsSc7y7Ikp2xKiwqoKS+OPZLvCvcXVvKqyvf+vIyK0kKuP2N8UvcLUVM+lGPGlPfqsKxpx0fk5wlVB/W/jTzYjtfYTLkMOvbD0sf7535mI28MMqrL44cB3JCs10URZ07Z+Er4zTZBxleWxlHyC6H4YLcRyvP00k28uW4H32w4MqVoYWfXV7F4fUv8aasdrVSXFfdqsZMpTMnHovooFyKsv6ZstjdCUVmvu/EMY6AQUvKxvFGGwv4lxbGzAYHFj/SaNUhdpQsO0xnNbr1pUTfPk23tHfzw6RVMqinjkqmpxTZu8NM88UbzzS3ZM58EU/LxmXIZbFoCm5Zm/l47Gt2rqrnDNQYJIdcGm6Mo+Y/2H2DHR+3JTdcAlI+BcafB4oddvOMEGV9ZSmt7R8+oTfv2uGhQgamaB15tpLmllZvPm0R+ijtQ6ypLGTuyJK6Sb9qRHT/yIUzJx+OoS5xt7Wv3wv4EHCClgtnIG4OMyjI3xxxtQ9SGVFzrTrkMdn4A6/6a8CV1VTGiRG1cDNrZtei6ZVcb9760hob6Kk46oiL5ukUgIjTUV/G3tdvY3dbe43x7Ryebd7VlxTFZCFPy8SgZ4RZg334YflILD10Er9/nojelk84OaPmg25yhYQx0igryGTmsMOp0TXMyNvKRTDwPist7hOSMx/hDYij5pu47XX/63Er2d3TynU9PSr5eMWiYXE17h/Lyyp479jftbKNTs2cjD6bke+e8O+ALT8K0q6FlPTzzLbhzCtw1FZ6dA+/9pc++sLvY2eTiXdqiqzHIiBU8JKWR/JBiFwN2xZPQtjOhS4YPK6SitLCno7LmhW4adNhI3mneye8XNXHlyYdTWzEs+XrF4LjDhjNyWGHUKZsmbyOfjYhQISzGXG/kF8C4U93fjLluFL/qOVj9LCy4H1672/mhP+I0qJsBE2ZAaWVy97Dg3cYgpaa8mA1RRvIbWlrJzxMq+2o2OOUyWPgAvPNHmHplQpdEjRLV/BYcdqI3mVzOiJK+m0zGIj9POHNSJfOWbmL/gU4KC8Jj56YdbmNXtjZCgY3kk2fEOPjENfD5J+DfGmHWw/Cxf3Ar+E9eD3ccA1tXJVfmdjOfNAYnVeXRR/Ipmw2OmgKV9UlN2YQsbLo2Z+3aCLuaYcxUnnlnEwsat/P1hgmJb85Kgob6anbvO8AbjR92Sw8tBNcka2WURkzJp0JRKUw8F86/E76+HK5+GfIK4LmbkitnR6Nb4C0blYlaGkbGqCkrZvve/T2iJDX3xXwyiIgLydm8ELZG82bek7qqUna3HWDLbh+tynue3Fc9hR/OW8HE6oOYmaLJZCw+WVfB0CH5PRyWNe9opaqsiKKC7IXTMCWfLkTc6GP6v7qpnDXzE792eyMcPBbyBn5cFcMIUuVt5bfs6h4GsNdgIYlw9Ew3aEpwNB9afO2KEtW0EPKG8Ou1Zazf3srN59VnbENS8ZB8pk+o4PkIh2WhYCHZxJR8ujnhS27a5dk50BF9u3cPdpj5pDE46QoDGJiy6ehUNu1sS125lR4CE85xHmE7eponRjK+y4zSL742L6L9kMnc+cp6zppUxcnjUzeZjEdDfTWbdrWxtDm8WNzc0sroLC66gin59FNQBA0/gK3vwqJf9Z5fFbavs/l4Y1ASLQzgtj37aO/Q1Efy4KZs9m5J6M34kNIiyocOcYuv3vPkm+3j2Heggznnps9kMhZnTKwkPy/sY76jU9m400byucnEc6H2FHhpLrT2Ejnmow+d5z0byRuDkNB0zaad4Z2mTel0rVt3NgyrTGjKRkTCFjZbV8L+PTy+uYrLT6zl8DSaTMZi+LBCPl47nOeWu1i1W3a30d6hWXVpAKbkM4MInPMjaG2Bv9waP29oY5WN5I1ByEFFBZQU5rNpZ3hOPmQjn5aRfP4QOGYmrHombIUWhzrvqEyb3gTgvcIj+cqZdanXI0Ea6qtZtXkP67btDfuRNyWfo1QfBcd9wdnSb1sdO5+5GDYGMSLiIkTtCo/kw0o+TWaDx1/prM9+fhK8chu0x/b4OL6ylO1797Nm8Svs1BIubjiN8qHpN5mMxdnex/zzyzeH/cjbdE0Oc8ZNUDA0vknljkZAnHWNYQxCqsu6hwHc0NJKWXFBSi58uzHyCPjy6y4s54s/gHumwYo/Rw36HQogcuCDN1k95EhmT+vffnXoiBIm1ZTx/PLN4WkrG8nnMKWVMP2b7lVzzQvR82xvdPbxQ7K3WcIwUqG6vJjNARPK5pa29EzVBBk+FmY+5FyMDCmBxy6Fhy6ELe92y1ZXdRBDaWMCH1A58aSs+HBvqK9i4fvbWdLUwohhhZQUZtexgCn5TPOJa53vjFgmlRa82xjkhGK9hny5N7dk0KJk3KlwzavwqVtd3NafnwTzvu3Wv4BR5cWcNHQ9+aIcdtT0zNShF86ur6JTYf6KLVm3rAFT8pmny6RyBbz1YM/z2xthRG1/18ow0kZ1eTEHOpVte91ofkOyYf+SJb/A7Uf5yltu3euN++Cu42DRg4h2ctuJfjA1Zmr8cjLE5FFljD54KB2dakr+74aJ5zmTyhfndo04ABfQYO8WG8kbg5pw8JB97Nl3gJ2tfQgW0heGVcBnbocv/QUqJsBTX4X/Op0R7z/t1riGZXbzUyxEpGsBNtvmk2BKvn8QgRk/dDbzr9wWTg/FsTTLGmMQEw4D2MrGliwsNtYcA1fOg4sfgD1bXeBu7z8+WzR4JZ/tRVcwV8P9R83RcNzn3avl8VdCxXgL3m3kBMGA3iE3u6P72+uiCBz1WecG4f8egsNP7d/7R3DCuJHcdO4kPnNM9p0O2ki+PznjZmdS+fzN7rPZyBs5QMWwIgryhI0727psw/tluiYaRaXO2KGqPjv39+TnCV88ZRwVpX30p59GTMn3J6WVMP0bsPJpWPuSG8kXHwxDh2e7ZobRZ/J8cJBNu9rY0NJKQZ5QeZCZBA8UUlLyInKbiLwrIktE5AkROThw7kYRWSMiK0VkRupVzRFOuNYtCj37HfhwjY3ijZyg2gcP2dDSRnV5Mfl5ku0qGZ5UR/LPAx9T1aOBVcCNACJSD8wCJgPnAPeKiDlLB7fpqeH7sGU5NL5i8/FGTlBdXtw1XZO1qRojKikpeVV9TlVDO3xeB8b44wuAR1V1n6o2AmuAaancK6eYdD6MPdkd20jeyAGqyorZvLON5gEQJMPoTjrn5K8C5vnj0cD6wLkmn9YDEblaRBaKyMKtW7emsToDmJBJZd4QqD4627UxjJSpKS9m7/4OHxHK5uMHEr2aUIrIfKA6yqk5qvonn2cOcAD4beiyKPl7ehMCVPV+4H6AqVOnRs2Tk4w6Fr65yhZdjZygym+IUs2iZY0RlV6VvKqeFe+8iFwOnAecqeHghk1AMGLuGGBDXyuZs5SMyHYNDCMt1JSHFbtN1wwsUrWuOQf4FnC+qn4UOPUkMEtEikTkcKAOWJDKvQzDGLiEXBuAKfmBRqo7Xu8GioDnRQTgdVW9RlWXicjvgOW4aZzrVLUjxXsZhjFAqSwLb/qpMSU/oEhJyavq+Djn5gJzUynfMIzBQfGQfEYMK6SjUyktMm8pAwlrDcMw0kJVmVnVDERMyRuGkRYuP3EsYhtdBxym5A3DSAuzph2W7SoYUTAHZYZhGDmMKXnDMIwcxpS8YRhGDmNK3jAMI4cxJW8YhpHDmJI3DMPIYUzJG4Zh5DCm5A3DMHIYCXsHzj4ishV4P4UiKoBtaarOQMTkG/zkuowmX3YYq6qHRDsxoJR8qojIQlWdmu16ZAqTb/CT6zKafAMPm64xDMPIYUzJG4Zh5DC5puTvz3YFMozJN/jJdRlNvgFGTs3JG4ZhGN3JtZG8YRiGEURVM/IHHAq8BKwAlgFf9ekjgOeB1f7/cJ8+0uffA9wdUdZMYIkv59Y49zweWAqsAe4k/KbyM2Cx/1sFtMS4vgh4zF//BlDr008PXL8YaAMuTJeMwEER5W8Dbo9Rx7nAemBPInWPcv3XcbF3lwAv4EyvQuc6AnV4Ms1t+Azwti/nPiA/Sfli1jvBNhwLLPKyLQOuSVY+f+5GX/ZKYEYgfTbu2VviZa1I8hm9xqcvBl4F6mNcPx14Cxc7+bOB9GOB17wcS4CZfemHsWQESoD/Ad715fw4Tj9MtQ2j5iN6P5wPbAHeCVx/jP8ulgJPAWU+vRD4lU9/GzitD/0vI+0Xrf8lq3Njtke6CooiTA1wXOBLXAXUA7cC3/bp3wZ+4o+HAZ/0X1ZQAY4EPgAO8Z9/DZwZ454LgBMBAeYBn4qS5yvAL2Nc/2XgPn88C3gsSp4RwHb/0KdFxij3WARMj3HuE/6+kR2o17oHOkqJP742mC9KmWmTj3BHE+APwKwk5YtZ70S+B1wHL/LHpcA6nGJMRr56nHIoAg4H1gL5uOA7W/CK3V9/SzLPaOj78cfnA8/EuL4WOBr4Dd2V/ASgzh+PAjYCB/ehDWPJWAKcHvgu/0qU/pWmNuw1H+F+eDZwHN2V/JvAqf74KuD7/vg64Ff+uBLXz/KS7H8Zab9o/S9dfxlT8lGE+5NvkJVAjU+rAVZG5LuC7kr+48D8wOfPA/dGKb8GeDfweTbwiyj5/gacHaOOzwIn+uMC3C+6ROS5GvhtOmWMOFeHGwVJtPOxHohE6h6ljCnA/yb6kKVJviG40dXMZOSLV+8+tGFo4DAqGflwI9wbI+/lZdqKe1sQ3JvK1Sk8o7OBeb18Pw8SoSQizr+NV/rpkDFKOXcA/5yJNkwkX7Af4hRnUMnvIjzCPhRY7o/vAS4L5HsBmBZRbsz+l+n2i/d9pfLXL3PyIlKLa6w3gCpV3Qjg/1f2cvkaYKKI1IpIAeFpkkhGA02Bz00+LViPsbjRyYsx7jUa18Co6gFgJ04hBJkFPBJ5YYoyBpmNG7loEtckWvdI/gk3GglRLCILReR1EbkwmDEd8onIs7gR727g8USuSbDeQWJ+DyJyqIgs8ed/oqobAnWrpXf5usr2NAGjVbUdN+JcCmzAjYYfiFG3mM+oiFwnImtxo+x/ifcFxENEpuFG22sj0mvpo4wR5RwMfAanJPtKvDZMJF/Ufuh5BzeaBriEsL54G7hARApE5HDc1EukLonX/zLdfjH7XypkXMmLSCnu9fxrqror2etVdQf+lQ33irgON5/V41bRLo/4PAt4XFU7YlU3XhkiUgMchRvdEEhPScYodYz18MYjEfnDmUUuA6YCtwWSD1O3m+9zwO0icoTPmxb5VHUGbjRUBJzRlzJi1Ltblmi39vdfr6pHA+OBy0WkypeZqHxRyxaRIbhndApuqmQJbkSccN18/e5R1SOAbwE3xalH7Aq6Z/Qh4EpV7QykpyRjoJwC3PN5p6q+18c69taGcfPF6ocBrgKuE5FFuCmq/T79lzjFvBC4HfdWH6lL4vW/TLdf1P6XKhlV8v7h/wPuteqPPnmzb6RQY23prRxVfUpVT1DVE3GvmatFJF9EFvu/7+Eab0zgsjG4UVWQbg0oInNDZfikJvwvu3+Yy3HzfiH+EXjCj9zSKqPPewxQoKqL/OdIGeMRte5RZEREzgLmAOer6r5Qemhk6zvvy8CUdMrny27DLepekKR8UevdhzYMybkMOCVJ+brK9oSesWN9uWv9CPB3wEl9fEYBHsW9sUaTL973U4ZbHL1JVV8PpKdDxhD3A6tV9XZ/bSbaMOYz6unRD4Oo6ruq2qCqx+P6+1qffkBVb1DVY1X1AtyaxerAPXvrfxltv2j9r7drEiITc0D+TUdwiwu3R6TfRvcFn1sjzl9Bz0W7Sv9/OG7leUKMe76JW/QJLYp8OnDuSNxbQMx5atzCTHDR7ncR51/HLz6lW0af/mPguwl+v5Fz8nHrHsg3BffQ10WkDye8MFmBe/jr0yEfbqEzNP9bgHsruz5J+aLWO9E2xHXIoQFZV+FGgwnLB0ym+6Lke7hFydBCZ8g44PvAfyTzjAblwk2FLOxFzgfpvvBaiJs++Voq/TCWjP7cD3A/Fj0WK9PchnHz0bMf1tJ9Tj6kL/K87Ff5zyXAMH98NvBKsv0vg+0Xtf8l8j332g7pKCSGEJ/EvcosIWwW9Gnc/OgLXogXgBGBa9bhRl17cL+a9T79EZxJ1XJiWGX4fFNx83FrgbsJKHTgFuKYffk8xcDvcesAC4BxEQ9Sc/ABT6eM/tx7wMRe6nirv67T/7+lt7pHXD8f2EyEqRZwEmHTsqW4udC0yAdU4TpHyAz2LtyIKRn5otY70TbEdeolXr4luIW7vsg3xz9fKwlYl+Asilb4sp4CRibzjOIWMpf5OrwETI5x/cf997IX+BBY5tMvA9rpbgp4bLpkxP1IqpcxVM4XM9SGMfMR0Q9xumGjl70J99x+FfcjvgqnuCVw7Uovw3wiTDhJrP9lqv169L906WLb8WoYhpHD2I5XwzCMHMaUvGEYRg5jSt4wDCOHMSVvGIaRw5iSNwzDyGFMyRuGYeQwpuSNQYmIVInIwyLynogsEpHXROSiwPk7RKRZRPICaVeIiIrImYG0i3zaZ/3nl0VkZWCnY0wfOyJyi7/HYhFZLSJ/FJH6iDyHiEi7iHwpkPaGv+YDEdkauFetiKwTkaWBtDvT9Z0Zf58UZLsChpEsIiLAfwO/VtXP+bSxeKdUXrFfhHO0NR23RTzEUpwTqpBzrVm4DShBLlXVhQlW52eq+lN/35nAiyJylKpu9ecvwe3QnA38AkBVT/D5rwCmqur1AdnA7ebcluD9DSMuNpI3BiNnAPtV9b5Qgqq+r6p3+Y+n43Yl/hynXIP8FZgmIkO8067xuF2KKaOqjwHP4RxMhZgNfAMYIyKjo15oGBnElLwxGJmMi64Ti9m47e5PAOd5B10hFLelfQZwAc5ZWiS/DUyXxPWUGIW3gIngXBsD1aq6AOe0bGaCZbwUuP8NSd7fMLph0zXGoEdE7sH5aNkPnIzzzXKDqu4WkTeABpx3xhCP4vx9l+NG2d+JKDKZ6Zoe1Qkcz8Ip99A9HwD+M4EybLrGSBum5I3ByDLg4tAHVb1ORCpwfsLPwSnvpX5+uwT4iICSV9UFIvIxoFVVV/l86WKKrwe4N4oqEbnUfx4lInWqujr6pYaRfmy6xhiMvIiLonNtIK3E/5+N845Yq6q1OHe5DSJSElHGjfQcwaeEiFyMe2t4RESOxLm1HR2oy49wo3vD6DdMyRuDDnWuUy8EThWRRhFZgAvw/u+4ufbgqH0v8CrOx3ewjHmq+lJ6bYO+AAAAfUlEQVSMWwTn5Of3Up0bQiaUOHe/Z3jLmtm4NYEgf6DnQnA0gnPyv0kgv2HExFwNG4Zh5DA2kjcMw8hhbOHVMHpBRObgNjUF+b2qzs1GfQwjGWy6xjAMI4ex6RrDMIwcxpS8YRhGDmNK3jAMI4cxJW8YhpHDmJI3DMPIYf4frzZmBso2ycUAAAAASUVORK5CYII=\n", | |
| "text/plain": [ | |
| "<Figure size 432x288 with 1 Axes>" | |
| ] | |
| }, | |
| "metadata": { | |
| "needs_background": "light" | |
| }, | |
| "output_type": "display_data" | |
| } | |
| ], | |
| "source": [ | |
| "fig, ax = plt.subplots()\n", | |
| "\n", | |
| "games_away.plot(x='GAME_DATE',y='PLUS_MINUS', ax=ax)\n", | |
| "games_home.plot(x='GAME_DATE',y='PLUS_MINUS', ax=ax)\n", | |
| "ax.legend([\"away\", \"home\"])\n", | |
| "plt.show()" | |
| ] | |
| }, | |
| { | |
| "cell_type": "markdown", | |
| "metadata": {}, | |
| "source": [ | |
| " <a href=\"http://cocl.us/NotebooksPython101bottom\"><img src = \"https://ibm.box.com/shared/static/irypdxea2q4th88zu1o1tsd06dya10go.png\" width = 750, align = \"center\"></a>\n" | |
| ] | |
| }, | |
| { | |
| "cell_type": "markdown", | |
| "metadata": {}, | |
| "source": [ | |
| "#### About the Authors: \n", | |
| "\n", | |
| " [Joseph Santarcangelo]( https://www.linkedin.com/in/joseph-s-50398b136/) has a PhD in Electrical Engineering, his research focused on using machine learning, signal processing, and computer vision to determine how videos impact human cognition. Joseph has been working for IBM since he completed his PhD.\n" | |
| ] | |
| }, | |
| { | |
| "cell_type": "markdown", | |
| "metadata": {}, | |
| "source": [ | |
| "Copyright © 2017 [cognitiveclass.ai](https:cognitiveclass.ai). This notebook and its source code are released under the terms of the [MIT License](cognitiveclass.ai)." | |
| ] | |
| } | |
| ], | |
| "metadata": { | |
| "kernelspec": { | |
| "display_name": "Python", | |
| "language": "python", | |
| "name": "conda-env-python-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.6.10" | |
| } | |
| }, | |
| "nbformat": 4, | |
| "nbformat_minor": 4 | |
| } |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment