Skip to content

Instantly share code, notes, and snippets.

@MisterPotz
Last active August 16, 2019 12:27
Show Gist options
  • Save MisterPotz/7556872d27a277040cd5bb2507a266d8 to your computer and use it in GitHub Desktop.
Save MisterPotz/7556872d27a277040cd5bb2507a266d8 to your computer and use it in GitHub Desktop.
Display the source blob
Display the rendered blob
Raw
{
"nbformat_minor": 2,
"cells": [
{
"source": "<a><img src=\"https://ibm.box.com/shared/static/ugcqz6ohbvff804xp84y4kqnvvk3bq1g.png\" width=\"200\" align=\"center\"></a>",
"cell_type": "markdown",
"metadata": {}
},
{
"source": "<h1>Scraping and Analyzing Basketball Statistics with Python </h1>\n<h2>Description</h2>\n",
"cell_type": "markdown",
"metadata": {}
},
{
"source": "Web scraping involves extracting data from websites. In this assignment, you will web scrape basketball statistics from Wikipedia of some of the greatest basketball players. You will perform some analysis on the data using Pandas, plot, data answer some basic questions then store the data on IBM cloud.",
"cell_type": "markdown",
"metadata": {}
},
{
"source": "The players we will use are shown in the following figure from left to right we have <a href='https://en.wikipedia.org/wiki/Michael_Jordan'>Michael Jordan </a>,\n<a href='https://en.wikipedia.org/wiki/Kobe_Bryant'>Kobe Bryant</a>,\n<a href='https://en.wikipedia.org/wiki/LeBron_James'>Lebron James</a> and <a href='https://en.wikipedia.org/wiki/Stephen_Curry'>Stephen Curry</a>.",
"cell_type": "markdown",
"metadata": {}
},
{
"source": "\n<img src=\"https://s3-api.us-geo.objectstorage.softlayer.net/cf-courses-data/CognitiveClass/PY0101EN/projects/EdX/Images/Michael_Jordan.jpg\" alt=\"Trulli\" width=\"100\" height=\"200\">\n<img src=\"https://s3-api.us-geo.objectstorage.softlayer.net/cf-courses-data/CognitiveClass/PY0101EN/projects/EdX/Images/Kobe_Bryant.jpg\" alt=\"Trulli\" width=\"100\" height=\"75\">\n<img src=\"https://s3-api.us-geo.objectstorage.softlayer.net/cf-courses-data/CognitiveClass/PY0101EN/projects/EdX/Images/Lebron.jpg\" alt=\"Trulli\" width=\"100\" height=\"200\">\n<img src=\"https://s3-api.us-geo.objectstorage.softlayer.net/cf-courses-data/CognitiveClass/PY0101EN/projects/EdX/Images/Stephen_Curry_Shooting.jpg\" alt=\"Trulli\" width=\"100\" height=\"75\">\n",
"cell_type": "markdown",
"metadata": {}
},
{
"source": "<center>Figure: following figure from left to right we have <a href='https://en.wikipedia.org/wiki/Michael_Jordan'>Michael Jordan </a>,\n<a href='https://en.wikipedia.org/wiki/Kobe_Bryant'>Kobe Bryant</a>,\n<a href='https://en.wikipedia.org/wiki/LeBron_James'>Lebron James</a> and <a href='https://en.wikipedia.org/wiki/Stephen_Curry'>Stephen Curry</a></center> <i>(image source Wikipedia)</i>",
"cell_type": "markdown",
"metadata": {}
},
{
"source": "<b>Wikipedia.org</b> has the statistics of each Basketball Player in different tables; we will use the table <bb>regular season</b>. The Table for <a href='https://en.wikipedia.org/wiki/Michael_Jordan'>Michael Jordan </a> is shown here:",
"cell_type": "markdown",
"metadata": {}
},
{
"source": "<table class=\"wikitable sortable\" style=\"font-size:95%; text-align:right;\">\n<tbody><tr>\n<th>Year\n</th>\n<th>Team\n</th>\n<th><abbr title=\"Games played\">GP</abbr>\n</th>\n<th><abbr title=\"Games started\">GS</abbr>\n</th>\n<th><abbr title=\"Minutes per game\">MPG</abbr>\n</th>\n<th><abbr title=\"Field goal percentage\">FG%</abbr>\n</th>\n<th><abbr title=\"3-point field-goal percentage\">3P%</abbr>\n</th>\n<th><abbr title=\"Free-throw percentage\">FT%</abbr>\n</th>\n<th><abbr title=\"Rebounds per game\">RPG</abbr>\n</th>\n<th><abbr title=\"Assists per game\">APG</abbr>\n</th>\n<th><abbr title=\"Steals per game\">SPG</abbr>\n</th>\n<th><abbr title=\"Blocks per game\">BPG</abbr>\n</th>\n<th><abbr title=\"Points per game\">PPG</abbr>\n</th></tr>\n<tr>\n<td style=\"text-align:left;\"><a href=\"/wiki/1984%E2%80%9385_NBA_season\" title=\"1984\u201385 NBA season\">1984\u201385</a>\n</td>\n<td style=\"text-align:left;\"><a href=\"/wiki/1984%E2%80%9385_Chicago_Bulls_season\" title=\"1984\u201385 Chicago Bulls season\">Chicago</a>\n</td>\n<td><b>82</b></td>\n<td><b>82</b></td>\n<td>38.3</td>\n<td>.515</td>\n<td>.173</td>\n<td>.845</td>\n<td>6.5</td>\n<td>5.9</td>\n<td>2.4</td>\n<td>.8</td>\n<td>28.2\n</td></tr>\n<tr>\n<td style=\"text-align:left;\"><a href=\"/wiki/1985%E2%80%9386_NBA_season\" title=\"1985\u201386 NBA season\">1985\u201386</a>\n</td>\n<td style=\"text-align:left;\"><a href=\"/wiki/1985%E2%80%9386_Chicago_Bulls_season\" title=\"1985\u201386 Chicago Bulls season\">Chicago</a>\n</td>\n<td>18</td>\n<td>7</td>\n<td>25.1</td>\n<td>.457</td>\n<td>.167</td>\n<td>.840</td>\n<td>3.6</td>\n<td>2.9</td>\n<td>2.1</td>\n<td>1.2</td>\n<td>22.7\n</td></tr>\n<tr>\n<td style=\"text-align:left;\"><a href=\"/wiki/1986%E2%80%9387_NBA_season\" title=\"1986\u201387 NBA season\">1986\u201387</a>\n</td>\n<td style=\"text-align:left;\"><a href=\"/wiki/1986%E2%80%9387_Chicago_Bulls_season\" title=\"1986\u201387 Chicago Bulls season\">Chicago</a>\n</td>\n<td><b>82</b></td>\n<td><b>82</b></td>\n<td>40.0</td>\n<td>.482</td>\n<td>.182</td>\n<td><b>.857</b></td>\n<td>5.2</td>\n<td>4.6</td>\n<td>2.9</td>\n<td>1.5</td>\n<td style=\"background:#cfecec;\"><b>37.1</b>*\n</td></tr>\n<tr>\n<td style=\"text-align:left;\"><a href=\"/wiki/1987%E2%80%9388_NBA_season\" title=\"1987\u201388 NBA season\">1987\u201388</a>\n</td>\n<td style=\"text-align:left;\"><a href=\"/wiki/1987%E2%80%9388_Chicago_Bulls_season\" title=\"1987\u201388 Chicago Bulls season\">Chicago</a>\n</td>\n<td><b>82</b></td>\n<td><b>82</b></td>\n<td bgcolor=\"CFECEC\"><b>40.4</b>*</td>\n<td>.535</td>\n<td>.132</td>\n<td>.841</td>\n<td>5.5</td>\n<td>5.9</td>\n<td bgcolor=\"CFECEC\"><b>3.2</b>*</td>\n<td><b>1.6</b></td>\n<td style=\"background:#cfecec;\">35.0*\n</td></tr>\n<tr>\n<td style=\"text-align:left;\"><a href=\"/wiki/1988%E2%80%9389_NBA_season\" title=\"1988\u201389 NBA season\">1988\u201389</a>\n</td>\n<td style=\"text-align:left;\"><a href=\"/wiki/1988%E2%80%9389_Chicago_Bulls_season\" title=\"1988\u201389 Chicago Bulls season\">Chicago</a>\n</td>\n<td>81</td>\n<td>81</td>\n<td bgcolor=\"CFECEC\">40.2*</td>\n<td>.538</td>\n<td>.276</td>\n<td>.850</td>\n<td><b>8.0</b></td>\n<td><b>8.0</b></td>\n<td>2.9</td>\n<td>.8</td>\n<td style=\"background:#cfecec;\">32.5*\n</td></tr>\n<tr>\n<td style=\"text-align:left;\"><a href=\"/wiki/1989%E2%80%9390_NBA_season\" title=\"1989\u201390 NBA season\">1989\u201390</a>\n</td>\n<td style=\"text-align:left;\"><a href=\"/wiki/1989%E2%80%9390_Chicago_Bulls_season\" title=\"1989\u201390 Chicago Bulls season\">Chicago</a>\n</td>\n<td><b>82</b></td>\n<td><b>82</b></td>\n<td>39.0</td>\n<td>.526</td>\n<td>.376</td>\n<td>.848</td>\n<td>6.9</td>\n<td>6.3</td>\n<td bgcolor=\"CFECEC\">2.8*</td>\n<td>.7</td>\n<td style=\"background:#cfecec;\">33.6*\n</td></tr>\n<tr>\n<td style=\"text-align:left;background:#afe6ba;\"><a href=\"/wiki/1990%E2%80%9391_NBA_season\" title=\"1990\u201391 NBA season\">1990\u201391</a>\u2020\n</td>\n<td style=\"text-align:left;\"><a href=\"/wiki/1990%E2%80%9391_Chicago_Bulls_season\" title=\"1990\u201391 Chicago Bulls season\">Chicago</a>\n</td>\n<td><b>82</b></td>\n<td><b>82</b></td>\n<td>37.0</td>\n<td><b>.539</b></td>\n<td>.312</td>\n<td>.851</td>\n<td>6.0</td>\n<td>5.5</td>\n<td>2.7</td>\n<td>1.0</td>\n<td style=\"background:#cfecec;\">31.5*\n</td></tr>\n<tr>\n<td style=\"text-align:left;background:#afe6ba;\"><a href=\"/wiki/1991%E2%80%9392_NBA_season\" title=\"1991\u201392 NBA season\">1991\u201392</a>\u2020\n</td>\n<td style=\"text-align:left;\"><a href=\"/wiki/1991%E2%80%9392_Chicago_Bulls_season\" title=\"1991\u201392 Chicago Bulls season\">Chicago</a>\n</td>\n<td>80</td>\n<td>80</td>\n<td>38.8</td>\n<td>.519</td>\n<td>.270</td>\n<td>.832</td>\n<td>6.4</td>\n<td>6.1</td>\n<td>2.3</td>\n<td>.9</td>\n<td style=\"background:#cfecec;\">30.1*\n</td></tr>\n<tr>\n<td style=\"text-align:left;background:#afe6ba;\"><a href=\"/wiki/1992%E2%80%9393_NBA_season\" title=\"1992\u201393 NBA season\">1992\u201393</a>\u2020\n</td>\n<td style=\"text-align:left;\"><a href=\"/wiki/1992%E2%80%9393_Chicago_Bulls_season\" title=\"1992\u201393 Chicago Bulls season\">Chicago</a>\n</td>\n<td>78</td>\n<td>78</td>\n<td>39.3</td>\n<td>.495</td>\n<td>.352</td>\n<td>.837</td>\n<td>6.7</td>\n<td>5.5</td>\n<td bgcolor=\"CFECEC\">2.8*</td>\n<td>.8</td>\n<td style=\"background:#cfecec;\">32.6*\n</td></tr>\n<tr>\n<td style=\"text-align:left;\"><a href=\"/wiki/1994%E2%80%9395_NBA_season\" title=\"1994\u201395 NBA season\">1994\u201395</a>\n</td>\n<td style=\"text-align:left;\"><a href=\"/wiki/1994%E2%80%9395_Chicago_Bulls_season\" title=\"1994\u201395 Chicago Bulls season\">Chicago</a>\n</td>\n<td>17</td>\n<td>17</td>\n<td>39.3</td>\n<td>.411</td>\n<td><b>.500</b></td>\n<td>.801</td>\n<td>6.9</td>\n<td>5.3</td>\n<td>1.8</td>\n<td>.8</td>\n<td>26.9\n</td></tr>\n<tr>\n<td style=\"text-align:left;background:#afe6ba;\"><a href=\"/wiki/1995%E2%80%9396_NBA_season\" title=\"1995\u201396 NBA season\">1995\u201396</a>\u2020\n</td>\n<td style=\"text-align:left;\"><a href=\"/wiki/1995%E2%80%9396_Chicago_Bulls_season\" title=\"1995\u201396 Chicago Bulls season\">Chicago</a>\n</td>\n<td><b>82</b></td>\n<td><b>82</b></td>\n<td>37.7</td>\n<td>.495</td>\n<td>.427</td>\n<td>.834</td>\n<td>6.6</td>\n<td>4.3</td>\n<td>2.2</td>\n<td>.5</td>\n<td style=\"background:#cfecec;\">30.4*\n</td></tr>\n<tr>\n<td style=\"text-align:left;background:#afe6ba;\"><a href=\"/wiki/1996%E2%80%9397_NBA_season\" title=\"1996\u201397 NBA season\">1996\u201397</a>\u2020\n</td>\n<td style=\"text-align:left;\"><a href=\"/wiki/1996%E2%80%9397_Chicago_Bulls_season\" title=\"1996\u201397 Chicago Bulls season\">Chicago</a>\n</td>\n<td><b>82</b></td>\n<td><b>82</b></td>\n<td>37.9</td>\n<td>.486</td>\n<td>.374</td>\n<td>.833</td>\n<td>5.9</td>\n<td>4.3</td>\n<td>1.7</td>\n<td>.5</td>\n<td style=\"background:#cfecec;\">29.6*\n</td></tr>\n<tr>\n<td style=\"text-align:left;background:#afe6ba;\"><a href=\"/wiki/1997%E2%80%9398_NBA_season\" title=\"1997\u201398 NBA season\">1997\u201398</a>\u2020\n</td>\n<td style=\"text-align:left;\"><a href=\"/wiki/1997%E2%80%9398_Chicago_Bulls_season\" title=\"1997\u201398 Chicago Bulls season\">Chicago</a>\n</td>\n<td><b>82</b></td>\n<td><b>82</b></td>\n<td>38.8</td>\n<td>.465</td>\n<td>.238</td>\n<td>.784</td>\n<td>5.8</td>\n<td>3.5</td>\n<td>1.7</td>\n<td>.5</td>\n<td style=\"background:#cfecec;\">28.7*\n</td></tr>\n<tr>\n<td style=\"text-align:left;\"><a href=\"/wiki/2001%E2%80%9302_NBA_season\" title=\"2001\u201302 NBA season\">2001\u201302</a>\n</td>\n<td style=\"text-align:left;\"><a href=\"/wiki/2001%E2%80%9302_Washington_Wizards_season\" title=\"2001\u201302 Washington Wizards season\">Washington</a>\n</td>\n<td>60</td>\n<td>53</td>\n<td>34.9</td>\n<td>.416</td>\n<td>.189</td>\n<td>.790</td>\n<td>5.7</td>\n<td>5.2</td>\n<td>1.4</td>\n<td>.4</td>\n<td>22.9\n</td></tr>\n<tr>\n<td style=\"text-align:left;\"><a href=\"/wiki/2002%E2%80%9303_NBA_season\" title=\"2002\u201303 NBA season\">2002\u201303</a>\n</td>\n<td style=\"text-align:left;\"><a href=\"/wiki/2002%E2%80%9303_Washington_Wizards_season\" title=\"2002\u201303 Washington Wizards season\">Washington</a>\n</td>\n<td><b>82</b></td>\n<td>67</td>\n<td>37.0</td>\n<td>.445</td>\n<td>.291</td>\n<td>.821</td>\n<td>6.1</td>\n<td>3.8</td>\n<td>1.5</td>\n<td>.5</td>\n<td>20.0\n</td></tr>\n<tr class=\"sortbottom\">\n<td colspan=\"2\" style=\"text-align:center;\"><b>Career</b>\n</td>\n<td>1,072</td>\n<td>1,039</td>\n<td>38.3</td>\n<td>.497</td>\n<td>.327</td>\n<td>.835</td>\n<td>6.2</td>\n<td>5.3</td>\n<td>2.3</td>\n<td>.8</td>\n<td style=\"background:#E0CEF2; width:3em\">30.1<img alt=\"double-dagger\" data-file-height=\"14\" data-file-width=\"9\" decoding=\"async\" height=\"14\" src=\"//upload.wikimedia.org/wikipedia/commons/f/f9/Double-dagger-14-plain.png\" width=\"9\"/>\n</td></tr>\n<tr class=\"sortbottom\">\n<td colspan=\"2\" style=\"text-align:center;\"><b>All-Star</b>\n</td>\n<td>13</td>\n<td>13</td>\n<td>29.4</td>\n<td>.472</td>\n<td>.273</td>\n<td>.750</td>\n<td>4.7</td>\n<td>4.2</td>\n<td>2.8</td>\n<td>.5</td>\n<td>20.2\n</td></tr></tbody></table>",
"cell_type": "markdown",
"metadata": {}
},
{
"source": "We will scrape the data for each year for each player convert the data for each player into a Pandas Dataframe, plot the results for Points per game, perform some analysis. Finally, we will store the results in the IBM cloud.",
"cell_type": "markdown",
"metadata": {}
},
{
"source": "<h2>Table of Contents</h2>\n<div class=\"alert alert-block alert-info\" style=\"margin-top: 20px\">\n <ul>\n <li><a href=\"#Section_1\">Define a Web Scraping Function </a></li>\n <li><a href=\"#Section_2\">Web Scraping and Converting to Pandas Dataframe</a> </li>\n <li><a href=\"#Section_3\">Plot the Points per game</a></li>\n <li><a href=\"#Section_4\">Store the Player Statistics in IBM Object Storage </a></li>\n <li><a href=\"#Section_5\">How to submit </a></li>\n </ul>\n<p>\n Estimated Time Needed: <strong>180 min</strong></p>\n</div>\n\n<hr>",
"cell_type": "markdown",
"metadata": {}
},
{
"source": "<h2 id=\"Section_1\"> Define a Web Scraping Function </h2>",
"cell_type": "markdown",
"metadata": {}
},
{
"source": "In this section, we define the function <code>get_basketball_stats</code>. The function will return a dictionary corresponding to the Regular season statistics of each basketball player scraped from m <a href=\"http://en.wikipedia.org\">en.wikipedia.org</a>. \nThe <a href=\"https://en.wikipedia.org/wiki/Parameter_(computer_programming)\"> Formal Parameter </a> or input <code> link</code> is going to be the URL of the Wikipedia page for each player. This function will return a Python dictionary. The keys will be the column names, and the values will be a list that contains a different columns; the element of each list will be a separate row for that column.\nYou don't have to know how the function works just the input in the output. ",
"cell_type": "markdown",
"metadata": {}
},
{
"execution_count": 1,
"cell_type": "code",
"metadata": {},
"outputs": [],
"source": "from bs4 import BeautifulSoup as bs\nimport requests\nimport pandas as pd\nimport numpy as np\nimport boto3"
},
{
"execution_count": 2,
"cell_type": "code",
"metadata": {},
"outputs": [],
"source": "def get_basketball_stats(link='https://en.wikipedia.org/wiki/Michael_Jordan'):\n \n def findNecessaryTableV2(css_class):\n \"\"\"\n function to use for filter / understand if the extracted element is the right one\n checks for surrounding tags and matches them \n \"\"\"\n def checkElementId(element, id):\n if element['id'] != id:\n return False\n else:\n return True\n prevs = css_class.find_previous('span', string=False)\n nextvs = css_class.find_next('span', string=False)\n if prevs is None or nextvs is None:\n return False\n elif checkElementId(prevs, 'Regular_season') and checkElementId(nextvs, 'Playoffs'):\n return True\n else:\n return False\n # read the webpage \n response = requests.get(link)\n # create a BeautifulSoup object to parse the HTML \n soup = bs(response.text, 'html.parser')\n # the player stats are defined with the attribute CSS class set to 'wikitable sortable'; \n #therefore we create a tag object \"table\"\n table=soup.select('table.wikitable')\n table=list(filter(findNecessaryTableV2, table))[0]\n #the headers of the table are the first table row (tr) we create a tag object that has the first row \n headers=table.tr\n #the table column names are displayed as an abbreviation; therefore we find all the abbr tags and returs an Iterator\n titles=headers.find_all(\"abbr\")\n #we create a dictionary and pass the table headers as the keys \n data = {title['title']:[] for title in titles}\n #we will store each column as a list in a dictionary, the header of the column will be the dictionary key \n #we iterate over each table row by fining each table tag tr and assign it to the objed\n for i,row in enumerate(table.find_all('tr')[1:-2]):\n #we iterate over each cell in the table, as each cell corresponds to a different column we all obtain the correspondin key corresponding the column n \n for key,a in zip(data.keys(),row.find_all(\"td\")[2:]): \n # we append each elment and strip any extra HTML contnet \n data[key].append(''.join(c for c in a.text if (c.isdigit() or c == \".\")))\n for key in data.keys():\n data[key]=list(map(lambda x: float(x), data[key]))\n return data\n\n"
},
{
"source": "<h2 id=\"Section_2\"> Question 1: Web Scraping the data and Converting to Pandas Dataframe </h2>",
"cell_type": "markdown",
"metadata": {}
},
{
"source": "For this question, you must use the function <code>get_basketball_stats</code> to extract a Python Dictionary of the player statistics, convert the dictionary to a Python Dataframe. To get full marks, you must display the first five rows of the dataframe for each player using the method head with the name of each player printed above. As shown in the following figuer **the order of the columns may be different depending on the version of Python**.",
"cell_type": "markdown",
"metadata": {}
},
{
"source": " <img src=\"https://s3-api.us-geo.objectstorage.softlayer.net/cf-courses-data/CognitiveClass/PY0101EN/projects/EdX/Images/question_one_answer.jpeg\" alt=\"Trulli\" width=\"1000\" height=\"1000\">",
"cell_type": "markdown",
"metadata": {}
},
{
"source": "You will need the following libraries ",
"cell_type": "markdown",
"metadata": {}
},
{
"execution_count": 3,
"cell_type": "code",
"metadata": {},
"outputs": [],
"source": "import pandas as pd\nimport matplotlib.pyplot as plt\nfrom IPython.display import display\n"
},
{
"source": "The list <code>links</code> contain the link the Wikipedia article for each player. The list <code>names</codes> contains the names of each player.",
"cell_type": "markdown",
"metadata": {}
},
{
"execution_count": 4,
"cell_type": "code",
"metadata": {},
"outputs": [],
"source": "links=['https://en.wikipedia.org/wiki/Michael_Jordan'\\\n ,'https://en.wikipedia.org/wiki/Kobe_Bryant'\\\n ,'https://en.wikipedia.org/wiki/LeBron_James'\\\n \n ,'https://en.wikipedia.org/wiki/Stephen_Curry']\nnames=['Michael Jordan','Kobe Bryant','Lebron James','Stephen Curry']"
},
{
"source": "You can use the function get_basketball_stats to extract the <b>Regular season table </b> and store it to a Python dictionary. For example, you can extract the table for Michael Jordan and convert it to a Python dictionary as follows:",
"cell_type": "markdown",
"metadata": {}
},
{
"source": "#using the link \n<code>\nmichael_jordan_dict=get_basketball_stats('https://en.wikipedia.org/wiki/Michael_Jordan')\n</code>\n\n#using the list\n\n<code>\nmichael_jordan_dict=get_basketball_stats(links[0])\n</code>",
"cell_type": "markdown",
"metadata": {}
},
{
"source": "<h5>For each Player create a Python dictionary from the table <b>Regular season table </b>.</h5>",
"cell_type": "markdown",
"metadata": {}
},
{
"execution_count": 5,
"cell_type": "code",
"metadata": {},
"outputs": [],
"source": "player_stats=[get_basketball_stats(player) for player in links]"
},
{
"source": "<h5>For each Player convert the Python Dictionary to a Pandas Dataframe using the constructor <code>pd.DataFrame()</code> </h5>\n\n",
"cell_type": "markdown",
"metadata": {}
},
{
"execution_count": 6,
"cell_type": "code",
"metadata": {},
"outputs": [],
"source": "dtframes = [pd.DataFrame(player_stat) for player_stat in player_stats]"
},
{
"source": "<h5>For each player display the first five columns of the Dataframe, print the name of each Player above the Dataframe.</h5>",
"cell_type": "markdown",
"metadata": {}
},
{
"source": "If you perform the process in a loop you will have to use the function <code>display</code> as follows:\n\n<code>display(df)</code>\n\n",
"cell_type": "markdown",
"metadata": {}
},
{
"execution_count": 7,
"cell_type": "code",
"metadata": {},
"outputs": [
{
"output_type": "display_data",
"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>Games played</th>\n <th>Games started</th>\n <th>Minutes per game</th>\n <th>Field goal percentage</th>\n <th>3-point field-goal percentage</th>\n <th>Free-throw percentage</th>\n <th>Rebounds per game</th>\n <th>Assists per game</th>\n <th>Steals per game</th>\n <th>Blocks per game</th>\n <th>Points per game</th>\n </tr>\n </thead>\n <tbody>\n <tr>\n <th>0</th>\n <td>82.0</td>\n <td>82.0</td>\n <td>38.3</td>\n <td>0.515</td>\n <td>0.173</td>\n <td>0.845</td>\n <td>6.5</td>\n <td>5.9</td>\n <td>2.4</td>\n <td>0.8</td>\n <td>28.2</td>\n </tr>\n <tr>\n <th>1</th>\n <td>18.0</td>\n <td>7.0</td>\n <td>25.1</td>\n <td>0.457</td>\n <td>0.167</td>\n <td>0.840</td>\n <td>3.6</td>\n <td>2.9</td>\n <td>2.1</td>\n <td>1.2</td>\n <td>22.7</td>\n </tr>\n <tr>\n <th>2</th>\n <td>82.0</td>\n <td>82.0</td>\n <td>40.0</td>\n <td>0.482</td>\n <td>0.182</td>\n <td>0.857</td>\n <td>5.2</td>\n <td>4.6</td>\n <td>2.9</td>\n <td>1.5</td>\n <td>37.1</td>\n </tr>\n <tr>\n <th>3</th>\n <td>82.0</td>\n <td>82.0</td>\n <td>40.4</td>\n <td>0.535</td>\n <td>0.132</td>\n <td>0.841</td>\n <td>5.5</td>\n <td>5.9</td>\n <td>3.2</td>\n <td>1.6</td>\n <td>35.0</td>\n </tr>\n <tr>\n <th>4</th>\n <td>81.0</td>\n <td>81.0</td>\n <td>40.2</td>\n <td>0.538</td>\n <td>0.276</td>\n <td>0.850</td>\n <td>8.0</td>\n <td>8.0</td>\n <td>2.9</td>\n <td>0.8</td>\n <td>32.5</td>\n </tr>\n <tr>\n <th>5</th>\n <td>82.0</td>\n <td>82.0</td>\n <td>39.0</td>\n <td>0.526</td>\n <td>0.376</td>\n <td>0.848</td>\n <td>6.9</td>\n <td>6.3</td>\n <td>2.8</td>\n <td>0.7</td>\n <td>33.6</td>\n </tr>\n <tr>\n <th>6</th>\n <td>82.0</td>\n <td>82.0</td>\n <td>37.0</td>\n <td>0.539</td>\n <td>0.312</td>\n <td>0.851</td>\n <td>6.0</td>\n <td>5.5</td>\n <td>2.7</td>\n <td>1.0</td>\n <td>31.5</td>\n </tr>\n <tr>\n <th>7</th>\n <td>80.0</td>\n <td>80.0</td>\n <td>38.8</td>\n <td>0.519</td>\n <td>0.270</td>\n <td>0.832</td>\n <td>6.4</td>\n <td>6.1</td>\n <td>2.3</td>\n <td>0.9</td>\n <td>30.1</td>\n </tr>\n <tr>\n <th>8</th>\n <td>78.0</td>\n <td>78.0</td>\n <td>39.3</td>\n <td>0.495</td>\n <td>0.352</td>\n <td>0.837</td>\n <td>6.7</td>\n <td>5.5</td>\n <td>2.8</td>\n <td>0.8</td>\n <td>32.6</td>\n </tr>\n <tr>\n <th>9</th>\n <td>17.0</td>\n <td>17.0</td>\n <td>39.3</td>\n <td>0.411</td>\n <td>0.500</td>\n <td>0.801</td>\n <td>6.9</td>\n <td>5.3</td>\n <td>1.8</td>\n <td>0.8</td>\n <td>26.9</td>\n </tr>\n <tr>\n <th>10</th>\n <td>82.0</td>\n <td>82.0</td>\n <td>37.7</td>\n <td>0.495</td>\n <td>0.427</td>\n <td>0.834</td>\n <td>6.6</td>\n <td>4.3</td>\n <td>2.2</td>\n <td>0.5</td>\n <td>30.4</td>\n </tr>\n <tr>\n <th>11</th>\n <td>82.0</td>\n <td>82.0</td>\n <td>37.9</td>\n <td>0.486</td>\n <td>0.374</td>\n <td>0.833</td>\n <td>5.9</td>\n <td>4.3</td>\n <td>1.7</td>\n <td>0.5</td>\n <td>29.6</td>\n </tr>\n <tr>\n <th>12</th>\n <td>82.0</td>\n <td>82.0</td>\n <td>38.8</td>\n <td>0.465</td>\n <td>0.238</td>\n <td>0.784</td>\n <td>5.8</td>\n <td>3.5</td>\n <td>1.7</td>\n <td>0.5</td>\n <td>28.7</td>\n </tr>\n <tr>\n <th>13</th>\n <td>60.0</td>\n <td>53.0</td>\n <td>34.9</td>\n <td>0.416</td>\n <td>0.189</td>\n <td>0.790</td>\n <td>5.7</td>\n <td>5.2</td>\n <td>1.4</td>\n <td>0.4</td>\n <td>22.9</td>\n </tr>\n <tr>\n <th>14</th>\n <td>82.0</td>\n <td>67.0</td>\n <td>37.0</td>\n <td>0.445</td>\n <td>0.291</td>\n <td>0.821</td>\n <td>6.1</td>\n <td>3.8</td>\n <td>1.5</td>\n <td>0.5</td>\n <td>20.0</td>\n </tr>\n </tbody>\n</table>\n</div>",
"text/plain": " Games played Games started Minutes per game Field goal percentage \\\n0 82.0 82.0 38.3 0.515 \n1 18.0 7.0 25.1 0.457 \n2 82.0 82.0 40.0 0.482 \n3 82.0 82.0 40.4 0.535 \n4 81.0 81.0 40.2 0.538 \n5 82.0 82.0 39.0 0.526 \n6 82.0 82.0 37.0 0.539 \n7 80.0 80.0 38.8 0.519 \n8 78.0 78.0 39.3 0.495 \n9 17.0 17.0 39.3 0.411 \n10 82.0 82.0 37.7 0.495 \n11 82.0 82.0 37.9 0.486 \n12 82.0 82.0 38.8 0.465 \n13 60.0 53.0 34.9 0.416 \n14 82.0 67.0 37.0 0.445 \n\n 3-point field-goal percentage Free-throw percentage Rebounds per game \\\n0 0.173 0.845 6.5 \n1 0.167 0.840 3.6 \n2 0.182 0.857 5.2 \n3 0.132 0.841 5.5 \n4 0.276 0.850 8.0 \n5 0.376 0.848 6.9 \n6 0.312 0.851 6.0 \n7 0.270 0.832 6.4 \n8 0.352 0.837 6.7 \n9 0.500 0.801 6.9 \n10 0.427 0.834 6.6 \n11 0.374 0.833 5.9 \n12 0.238 0.784 5.8 \n13 0.189 0.790 5.7 \n14 0.291 0.821 6.1 \n\n Assists per game Steals per game Blocks per game Points per game \n0 5.9 2.4 0.8 28.2 \n1 2.9 2.1 1.2 22.7 \n2 4.6 2.9 1.5 37.1 \n3 5.9 3.2 1.6 35.0 \n4 8.0 2.9 0.8 32.5 \n5 6.3 2.8 0.7 33.6 \n6 5.5 2.7 1.0 31.5 \n7 6.1 2.3 0.9 30.1 \n8 5.5 2.8 0.8 32.6 \n9 5.3 1.8 0.8 26.9 \n10 4.3 2.2 0.5 30.4 \n11 4.3 1.7 0.5 29.6 \n12 3.5 1.7 0.5 28.7 \n13 5.2 1.4 0.4 22.9 \n14 3.8 1.5 0.5 20.0 "
},
"metadata": {}
},
{
"output_type": "display_data",
"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>Games played</th>\n <th>Games started</th>\n <th>Minutes per game</th>\n <th>Field goal percentage</th>\n <th>3-point field-goal percentage</th>\n <th>Free-throw percentage</th>\n <th>Rebounds per game</th>\n <th>Assists per game</th>\n <th>Steals per game</th>\n <th>Blocks per game</th>\n <th>Points per game</th>\n </tr>\n </thead>\n <tbody>\n <tr>\n <th>0</th>\n <td>71.0</td>\n <td>6.0</td>\n <td>15.5</td>\n <td>0.417</td>\n <td>0.375</td>\n <td>0.819</td>\n <td>1.9</td>\n <td>1.3</td>\n <td>0.7</td>\n <td>0.3</td>\n <td>7.6</td>\n </tr>\n <tr>\n <th>1</th>\n <td>79.0</td>\n <td>1.0</td>\n <td>26.0</td>\n <td>0.428</td>\n <td>0.341</td>\n <td>0.794</td>\n <td>3.1</td>\n <td>2.5</td>\n <td>0.9</td>\n <td>0.5</td>\n <td>15.4</td>\n </tr>\n <tr>\n <th>2</th>\n <td>50.0</td>\n <td>50.0</td>\n <td>37.9</td>\n <td>0.465</td>\n <td>0.267</td>\n <td>0.839</td>\n <td>5.3</td>\n <td>3.8</td>\n <td>1.4</td>\n <td>1.0</td>\n <td>19.9</td>\n </tr>\n <tr>\n <th>3</th>\n <td>66.0</td>\n <td>62.0</td>\n <td>38.2</td>\n <td>0.468</td>\n <td>0.319</td>\n <td>0.821</td>\n <td>6.3</td>\n <td>4.9</td>\n <td>1.6</td>\n <td>0.9</td>\n <td>22.5</td>\n </tr>\n <tr>\n <th>4</th>\n <td>68.0</td>\n <td>68.0</td>\n <td>40.9</td>\n <td>0.464</td>\n <td>0.305</td>\n <td>0.853</td>\n <td>5.9</td>\n <td>5.0</td>\n <td>1.7</td>\n <td>0.6</td>\n <td>28.5</td>\n </tr>\n <tr>\n <th>5</th>\n <td>80.0</td>\n <td>80.0</td>\n <td>38.3</td>\n <td>0.469</td>\n <td>0.250</td>\n <td>0.829</td>\n <td>5.5</td>\n <td>5.5</td>\n <td>1.5</td>\n <td>0.4</td>\n <td>25.2</td>\n </tr>\n <tr>\n <th>6</th>\n <td>82.0</td>\n <td>82.0</td>\n <td>41.5</td>\n <td>0.451</td>\n <td>0.383</td>\n <td>0.843</td>\n <td>6.9</td>\n <td>5.9</td>\n <td>2.2</td>\n <td>0.8</td>\n <td>30.0</td>\n </tr>\n <tr>\n <th>7</th>\n <td>65.0</td>\n <td>64.0</td>\n <td>37.6</td>\n <td>0.438</td>\n <td>0.327</td>\n <td>0.852</td>\n <td>5.5</td>\n <td>5.1</td>\n <td>1.7</td>\n <td>0.4</td>\n <td>24.0</td>\n </tr>\n <tr>\n <th>8</th>\n <td>66.0</td>\n <td>66.0</td>\n <td>40.7</td>\n <td>0.433</td>\n <td>0.339</td>\n <td>0.816</td>\n <td>5.9</td>\n <td>6.0</td>\n <td>1.3</td>\n <td>0.8</td>\n <td>27.6</td>\n </tr>\n <tr>\n <th>9</th>\n <td>80.0</td>\n <td>80.0</td>\n <td>41.0</td>\n <td>0.450</td>\n <td>0.347</td>\n <td>0.850</td>\n <td>5.3</td>\n <td>4.5</td>\n <td>1.8</td>\n <td>0.4</td>\n <td>35.4</td>\n </tr>\n <tr>\n <th>10</th>\n <td>77.0</td>\n <td>77.0</td>\n <td>40.8</td>\n <td>0.463</td>\n <td>0.344</td>\n <td>0.868</td>\n <td>5.7</td>\n <td>5.4</td>\n <td>1.4</td>\n <td>0.5</td>\n <td>31.6</td>\n </tr>\n <tr>\n <th>11</th>\n <td>82.0</td>\n <td>82.0</td>\n <td>38.9</td>\n <td>0.459</td>\n <td>0.361</td>\n <td>0.840</td>\n <td>6.3</td>\n <td>5.4</td>\n <td>1.8</td>\n <td>0.5</td>\n <td>28.3</td>\n </tr>\n <tr>\n <th>12</th>\n <td>82.0</td>\n <td>82.0</td>\n <td>36.1</td>\n <td>0.467</td>\n <td>0.351</td>\n <td>0.856</td>\n <td>5.2</td>\n <td>4.9</td>\n <td>1.5</td>\n <td>0.5</td>\n <td>26.8</td>\n </tr>\n <tr>\n <th>13</th>\n <td>73.0</td>\n <td>73.0</td>\n <td>38.8</td>\n <td>0.456</td>\n <td>0.329</td>\n <td>0.811</td>\n <td>5.4</td>\n <td>5.0</td>\n <td>1.5</td>\n <td>0.3</td>\n <td>27.0</td>\n </tr>\n <tr>\n <th>14</th>\n <td>82.0</td>\n <td>82.0</td>\n <td>33.9</td>\n <td>0.451</td>\n <td>0.323</td>\n <td>0.828</td>\n <td>5.1</td>\n <td>4.7</td>\n <td>1.2</td>\n <td>0.1</td>\n <td>25.3</td>\n </tr>\n <tr>\n <th>15</th>\n <td>58.0</td>\n <td>58.0</td>\n <td>38.5</td>\n <td>0.430</td>\n <td>0.303</td>\n <td>0.845</td>\n <td>5.4</td>\n <td>4.6</td>\n <td>1.2</td>\n <td>0.3</td>\n <td>27.9</td>\n </tr>\n <tr>\n <th>16</th>\n <td>78.0</td>\n <td>78.0</td>\n <td>38.6</td>\n <td>0.463</td>\n <td>0.324</td>\n <td>0.839</td>\n <td>5.6</td>\n <td>6.0</td>\n <td>1.4</td>\n <td>0.3</td>\n <td>27.3</td>\n </tr>\n <tr>\n <th>17</th>\n <td>6.0</td>\n <td>6.0</td>\n <td>29.5</td>\n <td>0.425</td>\n <td>0.188</td>\n <td>0.857</td>\n <td>4.3</td>\n <td>6.3</td>\n <td>1.2</td>\n <td>0.2</td>\n <td>13.8</td>\n </tr>\n <tr>\n <th>18</th>\n <td>35.0</td>\n <td>35.0</td>\n <td>34.5</td>\n <td>0.373</td>\n <td>0.293</td>\n <td>0.813</td>\n <td>5.7</td>\n <td>5.6</td>\n <td>1.3</td>\n <td>0.2</td>\n <td>22.3</td>\n </tr>\n <tr>\n <th>19</th>\n <td>66.0</td>\n <td>66.0</td>\n <td>28.2</td>\n <td>0.358</td>\n <td>0.285</td>\n <td>0.826</td>\n <td>3.7</td>\n <td>2.8</td>\n <td>0.9</td>\n <td>0.2</td>\n <td>17.6</td>\n </tr>\n </tbody>\n</table>\n</div>",
"text/plain": " Games played Games started Minutes per game Field goal percentage \\\n0 71.0 6.0 15.5 0.417 \n1 79.0 1.0 26.0 0.428 \n2 50.0 50.0 37.9 0.465 \n3 66.0 62.0 38.2 0.468 \n4 68.0 68.0 40.9 0.464 \n5 80.0 80.0 38.3 0.469 \n6 82.0 82.0 41.5 0.451 \n7 65.0 64.0 37.6 0.438 \n8 66.0 66.0 40.7 0.433 \n9 80.0 80.0 41.0 0.450 \n10 77.0 77.0 40.8 0.463 \n11 82.0 82.0 38.9 0.459 \n12 82.0 82.0 36.1 0.467 \n13 73.0 73.0 38.8 0.456 \n14 82.0 82.0 33.9 0.451 \n15 58.0 58.0 38.5 0.430 \n16 78.0 78.0 38.6 0.463 \n17 6.0 6.0 29.5 0.425 \n18 35.0 35.0 34.5 0.373 \n19 66.0 66.0 28.2 0.358 \n\n 3-point field-goal percentage Free-throw percentage Rebounds per game \\\n0 0.375 0.819 1.9 \n1 0.341 0.794 3.1 \n2 0.267 0.839 5.3 \n3 0.319 0.821 6.3 \n4 0.305 0.853 5.9 \n5 0.250 0.829 5.5 \n6 0.383 0.843 6.9 \n7 0.327 0.852 5.5 \n8 0.339 0.816 5.9 \n9 0.347 0.850 5.3 \n10 0.344 0.868 5.7 \n11 0.361 0.840 6.3 \n12 0.351 0.856 5.2 \n13 0.329 0.811 5.4 \n14 0.323 0.828 5.1 \n15 0.303 0.845 5.4 \n16 0.324 0.839 5.6 \n17 0.188 0.857 4.3 \n18 0.293 0.813 5.7 \n19 0.285 0.826 3.7 \n\n Assists per game Steals per game Blocks per game Points per game \n0 1.3 0.7 0.3 7.6 \n1 2.5 0.9 0.5 15.4 \n2 3.8 1.4 1.0 19.9 \n3 4.9 1.6 0.9 22.5 \n4 5.0 1.7 0.6 28.5 \n5 5.5 1.5 0.4 25.2 \n6 5.9 2.2 0.8 30.0 \n7 5.1 1.7 0.4 24.0 \n8 6.0 1.3 0.8 27.6 \n9 4.5 1.8 0.4 35.4 \n10 5.4 1.4 0.5 31.6 \n11 5.4 1.8 0.5 28.3 \n12 4.9 1.5 0.5 26.8 \n13 5.0 1.5 0.3 27.0 \n14 4.7 1.2 0.1 25.3 \n15 4.6 1.2 0.3 27.9 \n16 6.0 1.4 0.3 27.3 \n17 6.3 1.2 0.2 13.8 \n18 5.6 1.3 0.2 22.3 \n19 2.8 0.9 0.2 17.6 "
},
"metadata": {}
},
{
"output_type": "display_data",
"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>Games played</th>\n <th>Games started</th>\n <th>Minutes per game</th>\n <th>Field goal percentage</th>\n <th>3-point field-goal percentage</th>\n <th>Free-throw percentage</th>\n <th>Rebounds per game</th>\n <th>Assists per game</th>\n <th>Steals per game</th>\n <th>Blocks per game</th>\n <th>Points per game</th>\n </tr>\n </thead>\n <tbody>\n <tr>\n <th>0</th>\n <td>79.0</td>\n <td>79.0</td>\n <td>39.5</td>\n <td>0.417</td>\n <td>0.290</td>\n <td>0.754</td>\n <td>5.5</td>\n <td>5.9</td>\n <td>1.6</td>\n <td>0.7</td>\n <td>20.9</td>\n </tr>\n <tr>\n <th>1</th>\n <td>80.0</td>\n <td>80.0</td>\n <td>42.4</td>\n <td>0.472</td>\n <td>0.351</td>\n <td>0.750</td>\n <td>7.4</td>\n <td>7.2</td>\n <td>2.2</td>\n <td>0.7</td>\n <td>27.2</td>\n </tr>\n <tr>\n <th>2</th>\n <td>79.0</td>\n <td>79.0</td>\n <td>42.5</td>\n <td>0.480</td>\n <td>0.335</td>\n <td>0.738</td>\n <td>7.0</td>\n <td>6.6</td>\n <td>1.6</td>\n <td>0.8</td>\n <td>31.4</td>\n </tr>\n <tr>\n <th>3</th>\n <td>78.0</td>\n <td>78.0</td>\n <td>40.9</td>\n <td>0.476</td>\n <td>0.319</td>\n <td>0.698</td>\n <td>6.7</td>\n <td>6.0</td>\n <td>1.6</td>\n <td>0.7</td>\n <td>27.3</td>\n </tr>\n <tr>\n <th>4</th>\n <td>75.0</td>\n <td>74.0</td>\n <td>40.4</td>\n <td>0.484</td>\n <td>0.315</td>\n <td>0.712</td>\n <td>7.9</td>\n <td>7.2</td>\n <td>1.8</td>\n <td>1.1</td>\n <td>30.0</td>\n </tr>\n <tr>\n <th>5</th>\n <td>81.0</td>\n <td>81.0</td>\n <td>37.7</td>\n <td>0.489</td>\n <td>0.344</td>\n <td>0.780</td>\n <td>7.6</td>\n <td>7.2</td>\n <td>1.7</td>\n <td>1.1</td>\n <td>28.4</td>\n </tr>\n <tr>\n <th>6</th>\n <td>76.0</td>\n <td>76.0</td>\n <td>39.0</td>\n <td>0.503</td>\n <td>0.333</td>\n <td>0.767</td>\n <td>7.3</td>\n <td>8.6</td>\n <td>1.6</td>\n <td>1.0</td>\n <td>29.7</td>\n </tr>\n <tr>\n <th>7</th>\n <td>79.0</td>\n <td>79.0</td>\n <td>38.8</td>\n <td>0.510</td>\n <td>0.330</td>\n <td>0.759</td>\n <td>7.5</td>\n <td>7.0</td>\n <td>1.6</td>\n <td>0.6</td>\n <td>26.7</td>\n </tr>\n <tr>\n <th>8</th>\n <td>62.0</td>\n <td>62.0</td>\n <td>37.5</td>\n <td>0.531</td>\n <td>0.362</td>\n <td>0.771</td>\n <td>7.9</td>\n <td>6.2</td>\n <td>1.9</td>\n <td>0.8</td>\n <td>27.1</td>\n </tr>\n <tr>\n <th>9</th>\n <td>76.0</td>\n <td>76.0</td>\n <td>37.9</td>\n <td>0.565</td>\n <td>0.406</td>\n <td>0.753</td>\n <td>8.0</td>\n <td>7.3</td>\n <td>1.7</td>\n <td>0.9</td>\n <td>26.8</td>\n </tr>\n <tr>\n <th>10</th>\n <td>77.0</td>\n <td>77.0</td>\n <td>37.7</td>\n <td>0.567</td>\n <td>0.379</td>\n <td>0.750</td>\n <td>6.9</td>\n <td>6.4</td>\n <td>1.6</td>\n <td>0.3</td>\n <td>27.1</td>\n </tr>\n <tr>\n <th>11</th>\n <td>69.0</td>\n <td>69.0</td>\n <td>36.1</td>\n <td>0.488</td>\n <td>0.354</td>\n <td>0.710</td>\n <td>6.0</td>\n <td>7.4</td>\n <td>1.6</td>\n <td>0.7</td>\n <td>25.3</td>\n </tr>\n <tr>\n <th>12</th>\n <td>76.0</td>\n <td>76.0</td>\n <td>35.6</td>\n <td>0.520</td>\n <td>0.309</td>\n <td>0.731</td>\n <td>7.4</td>\n <td>6.8</td>\n <td>1.4</td>\n <td>0.6</td>\n <td>25.3</td>\n </tr>\n <tr>\n <th>13</th>\n <td>74.0</td>\n <td>74.0</td>\n <td>37.8</td>\n <td>0.548</td>\n <td>0.363</td>\n <td>0.674</td>\n <td>8.6</td>\n <td>8.7</td>\n <td>1.2</td>\n <td>0.6</td>\n <td>26.4</td>\n </tr>\n <tr>\n <th>14</th>\n <td>82.0</td>\n <td>82.0</td>\n <td>36.9</td>\n <td>0.542</td>\n <td>0.367</td>\n <td>0.731</td>\n <td>8.6</td>\n <td>9.1</td>\n <td>1.4</td>\n <td>0.9</td>\n <td>27.5</td>\n </tr>\n <tr>\n <th>15</th>\n <td>55.0</td>\n <td>55.0</td>\n <td>35.2</td>\n <td>0.510</td>\n <td>0.339</td>\n <td>0.665</td>\n <td>8.5</td>\n <td>8.3</td>\n <td>1.3</td>\n <td>0.6</td>\n <td>27.4</td>\n </tr>\n </tbody>\n</table>\n</div>",
"text/plain": " Games played Games started Minutes per game Field goal percentage \\\n0 79.0 79.0 39.5 0.417 \n1 80.0 80.0 42.4 0.472 \n2 79.0 79.0 42.5 0.480 \n3 78.0 78.0 40.9 0.476 \n4 75.0 74.0 40.4 0.484 \n5 81.0 81.0 37.7 0.489 \n6 76.0 76.0 39.0 0.503 \n7 79.0 79.0 38.8 0.510 \n8 62.0 62.0 37.5 0.531 \n9 76.0 76.0 37.9 0.565 \n10 77.0 77.0 37.7 0.567 \n11 69.0 69.0 36.1 0.488 \n12 76.0 76.0 35.6 0.520 \n13 74.0 74.0 37.8 0.548 \n14 82.0 82.0 36.9 0.542 \n15 55.0 55.0 35.2 0.510 \n\n 3-point field-goal percentage Free-throw percentage Rebounds per game \\\n0 0.290 0.754 5.5 \n1 0.351 0.750 7.4 \n2 0.335 0.738 7.0 \n3 0.319 0.698 6.7 \n4 0.315 0.712 7.9 \n5 0.344 0.780 7.6 \n6 0.333 0.767 7.3 \n7 0.330 0.759 7.5 \n8 0.362 0.771 7.9 \n9 0.406 0.753 8.0 \n10 0.379 0.750 6.9 \n11 0.354 0.710 6.0 \n12 0.309 0.731 7.4 \n13 0.363 0.674 8.6 \n14 0.367 0.731 8.6 \n15 0.339 0.665 8.5 \n\n Assists per game Steals per game Blocks per game Points per game \n0 5.9 1.6 0.7 20.9 \n1 7.2 2.2 0.7 27.2 \n2 6.6 1.6 0.8 31.4 \n3 6.0 1.6 0.7 27.3 \n4 7.2 1.8 1.1 30.0 \n5 7.2 1.7 1.1 28.4 \n6 8.6 1.6 1.0 29.7 \n7 7.0 1.6 0.6 26.7 \n8 6.2 1.9 0.8 27.1 \n9 7.3 1.7 0.9 26.8 \n10 6.4 1.6 0.3 27.1 \n11 7.4 1.6 0.7 25.3 \n12 6.8 1.4 0.6 25.3 \n13 8.7 1.2 0.6 26.4 \n14 9.1 1.4 0.9 27.5 \n15 8.3 1.3 0.6 27.4 "
},
"metadata": {}
},
{
"output_type": "display_data",
"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>Games played</th>\n <th>Games started</th>\n <th>Minutes per game</th>\n <th>Field goal percentage</th>\n <th>3-point field-goal percentage</th>\n <th>Free-throw percentage</th>\n <th>Rebounds per game</th>\n <th>Assists per game</th>\n <th>Steals per game</th>\n <th>Blocks per game</th>\n <th>Points per game</th>\n </tr>\n </thead>\n <tbody>\n <tr>\n <th>0</th>\n <td>80.0</td>\n <td>77.0</td>\n <td>36.2</td>\n <td>0.462</td>\n <td>0.437</td>\n <td>0.885</td>\n <td>4.5</td>\n <td>5.9</td>\n <td>1.9</td>\n <td>0.2</td>\n <td>17.5</td>\n </tr>\n <tr>\n <th>1</th>\n <td>74.0</td>\n <td>74.0</td>\n <td>33.6</td>\n <td>0.480</td>\n <td>0.442</td>\n <td>0.934</td>\n <td>3.9</td>\n <td>5.8</td>\n <td>1.5</td>\n <td>0.3</td>\n <td>18.6</td>\n </tr>\n <tr>\n <th>2</th>\n <td>26.0</td>\n <td>23.0</td>\n <td>28.2</td>\n <td>0.490</td>\n <td>0.455</td>\n <td>0.809</td>\n <td>3.4</td>\n <td>5.3</td>\n <td>1.5</td>\n <td>0.3</td>\n <td>14.7</td>\n </tr>\n <tr>\n <th>3</th>\n <td>78.0</td>\n <td>78.0</td>\n <td>38.2</td>\n <td>0.451</td>\n <td>0.453</td>\n <td>0.900</td>\n <td>4.0</td>\n <td>6.9</td>\n <td>1.6</td>\n <td>0.2</td>\n <td>22.9</td>\n </tr>\n <tr>\n <th>4</th>\n <td>78.0</td>\n <td>78.0</td>\n <td>36.5</td>\n <td>0.471</td>\n <td>0.424</td>\n <td>0.885</td>\n <td>4.3</td>\n <td>8.5</td>\n <td>1.6</td>\n <td>0.2</td>\n <td>24.0</td>\n </tr>\n <tr>\n <th>5</th>\n <td>80.0</td>\n <td>80.0</td>\n <td>32.7</td>\n <td>0.487</td>\n <td>0.443</td>\n <td>0.914</td>\n <td>4.3</td>\n <td>7.7</td>\n <td>2.0</td>\n <td>0.2</td>\n <td>23.8</td>\n </tr>\n <tr>\n <th>6</th>\n <td>79.0</td>\n <td>79.0</td>\n <td>34.2</td>\n <td>0.504</td>\n <td>0.454</td>\n <td>0.908</td>\n <td>5.4</td>\n <td>6.7</td>\n <td>2.1</td>\n <td>0.2</td>\n <td>30.1</td>\n </tr>\n <tr>\n <th>7</th>\n <td>79.0</td>\n <td>79.0</td>\n <td>33.4</td>\n <td>0.468</td>\n <td>0.411</td>\n <td>0.898</td>\n <td>4.5</td>\n <td>6.6</td>\n <td>1.8</td>\n <td>0.2</td>\n <td>25.3</td>\n </tr>\n <tr>\n <th>8</th>\n <td>51.0</td>\n <td>51.0</td>\n <td>32.0</td>\n <td>0.495</td>\n <td>0.423</td>\n <td>0.921</td>\n <td>5.1</td>\n <td>6.1</td>\n <td>1.6</td>\n <td>0.2</td>\n <td>26.4</td>\n </tr>\n <tr>\n <th>9</th>\n <td>69.0</td>\n <td>69.0</td>\n <td>33.8</td>\n <td>0.472</td>\n <td>0.437</td>\n <td>0.916</td>\n <td>5.3</td>\n <td>5.2</td>\n <td>1.3</td>\n <td>0.4</td>\n <td>27.3</td>\n </tr>\n </tbody>\n</table>\n</div>",
"text/plain": " Games played Games started Minutes per game Field goal percentage \\\n0 80.0 77.0 36.2 0.462 \n1 74.0 74.0 33.6 0.480 \n2 26.0 23.0 28.2 0.490 \n3 78.0 78.0 38.2 0.451 \n4 78.0 78.0 36.5 0.471 \n5 80.0 80.0 32.7 0.487 \n6 79.0 79.0 34.2 0.504 \n7 79.0 79.0 33.4 0.468 \n8 51.0 51.0 32.0 0.495 \n9 69.0 69.0 33.8 0.472 \n\n 3-point field-goal percentage Free-throw percentage Rebounds per game \\\n0 0.437 0.885 4.5 \n1 0.442 0.934 3.9 \n2 0.455 0.809 3.4 \n3 0.453 0.900 4.0 \n4 0.424 0.885 4.3 \n5 0.443 0.914 4.3 \n6 0.454 0.908 5.4 \n7 0.411 0.898 4.5 \n8 0.423 0.921 5.1 \n9 0.437 0.916 5.3 \n\n Assists per game Steals per game Blocks per game Points per game \n0 5.9 1.9 0.2 17.5 \n1 5.8 1.5 0.3 18.6 \n2 5.3 1.5 0.3 14.7 \n3 6.9 1.6 0.2 22.9 \n4 8.5 1.6 0.2 24.0 \n5 7.7 2.0 0.2 23.8 \n6 6.7 2.1 0.2 30.1 \n7 6.6 1.8 0.2 25.3 \n8 6.1 1.6 0.2 26.4 \n9 5.2 1.3 0.4 27.3 "
},
"metadata": {}
}
],
"source": "for player in dtframes:\n display(player)"
},
{
"source": "<h2 id=\"Section_3\"> Question 2: plot the Points per game for a player using the function plt.plot().</h2>",
"cell_type": "markdown",
"metadata": {}
},
{
"source": "Import the plotting library ",
"cell_type": "markdown",
"metadata": {}
},
{
"execution_count": 8,
"cell_type": "code",
"metadata": {},
"outputs": [],
"source": "import matplotlib.pyplot as plt"
},
{
"source": "Using the function <code>plt.plot()</code> plot the Points per game, for one player Just a note you can plot a dataframe column like a numpy array. You can also plot them for each player. Find out how to add a xlabel 'years', a ylabel 'Points per game' and a legend.",
"cell_type": "markdown",
"metadata": {}
},
{
"execution_count": 16,
"cell_type": "code",
"metadata": {},
"outputs": [
{
"output_type": "display_data",
"data": {
"image/png": "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\n",
"text/plain": "<Figure size 432x288 with 1 Axes>"
},
"metadata": {
"needs_background": "light"
}
}
],
"source": "def plot_player(player_df, name):\n #here we crating a dataframe from column 'Points per game' and pass it\n plt.plot(player_df[['Points per game']],label=name)\n plt.legend()\n plt.xlabel('years')\n plt.ylabel('Points per game')\nfor i,player in enumerate(dtframes):\n plot_player(player, names[i])\nplt.savefig('plot.png', bbox_inches='tight')\n"
},
{
"source": "<h2 id=\"Section_3\"> Question 3: Store the Player Statistics in Object Storage (optional). </h2>",
"cell_type": "markdown",
"metadata": {}
},
{
"source": "Save one player's dataframe as a csv file using the method <code>dataframe.to_csv(csv_name)</code>. The string that contains the name of the csv file should be assigned the <code>csv_name</code>",
"cell_type": "markdown",
"metadata": {}
},
{
"execution_count": 12,
"cell_type": "code",
"metadata": {},
"outputs": [],
"source": "csv_names = [\"player\" + str(i) + '.csv' for i in range(0, len(dtframes))]\nfor i,dtframe in enumerate(dtframes):\n dtframe.to_csv(csv_names[i])\n"
},
{
"source": "From the tutorial <i>PROVISIONING AN OBJECT STORAGE INSTANCE ON IBM CLOUD</i> View credentials to obtain the JSON object containing the credentials you created. You\u2019ll want to store everything you see in a credentials variable like the one below (obviously, replace the placeholder values with your own). Take special note of your access_key_id and secret_access_key. <b>Do not delete <code># @hidden_cell </code> as this will not allow people to see your credentials when you share your notebook. </b>",
"cell_type": "markdown",
"metadata": {}
},
{
"source": "<code>\ncredentials = {<br>\n &nbsp; \"apikey\": \"your-api-key\",<br>\n &nbsp; \"cos_hmac_keys\": {<br>\n &nbsp; \"access_key_id\": \"your-access-key-here\", <br>\n &nbsp; \"secret_access_key\": \"your-secret-access-key-here\"<br>\n &nbsp; },<br>\n</code>\n<code>\n &nbsp;\"endpoints\": \"your-endpoints\",<br>\n &nbsp; \"iam_apikey_description\": \"your-iam_apikey_description\",<br>\n &nbsp; \"iam_apikey_name\": \"your-iam_apikey_name\",<br>\n &nbsp; \"iam_role_crn\": \"your-iam_apikey_name\",<br>\n &nbsp; \"iam_serviceid_crn\": \"your-iam_serviceid_crn\",<br>\n &nbsp;\"resource_instance_id\": \"your-resource_instance_id\"<br>\n}\n</code>",
"cell_type": "markdown",
"metadata": {}
},
{
"execution_count": 13,
"cell_type": "code",
"metadata": {},
"outputs": [],
"source": "# The code was removed by Watson Studio for sharing."
},
{
"source": "From the tutorial <i> PROVISIONING AN OBJECT STORAGE INSTANCE ON IBM CLOUD </i> assign the name of your bucket to the variable <code>bucket_name </code> ",
"cell_type": "markdown",
"metadata": {}
},
{
"source": "We can access IBM Cloud Object Storage with Python is to use the <code>ibm_boto3</code> library, which we\u2019ll import below.",
"cell_type": "markdown",
"metadata": {}
},
{
"execution_count": 14,
"cell_type": "code",
"metadata": {},
"outputs": [],
"source": "import ibm_boto3\nfrom ibm_botocore.client import Config\n"
},
{
"source": "The primary way to interact with IBM Cloud Object Storage through <code>ibm_boto3</code> is by using an <code>ibm_boto3.resource</code> object. This resource-based interface abstracts away the low-level REST interface between you and your Object Storage instance. Run the cell below to create a resource Python object using the IBM Cloud Object Storage credentials you filled in above.\n\n",
"cell_type": "markdown",
"metadata": {}
},
{
"execution_count": 17,
"cell_type": "code",
"metadata": {},
"outputs": [],
"source": "resource = ibm_boto3.resource('s3',\n ibm_api_key_id=credentials['apikey'],\n ibm_service_instance_id=credentials['iam_serviceid_crn'],\n ibm_auth_endpoint=auth_endpoint,\n config=Config(signature_version='oauth'),\n endpoint_url=service_endpoint)"
},
{
"source": "We are going to use <code>open</code> to create a file object. To get the path of the file, you are going to concentrate the name of the file stored in the variable csv_name, and the directory stored in the variable directory using the <code>+</code> operator and assign it to the variable \n<code>csv_path</code>. We will use the function <code>getcwd()</code> to find current working directory .",
"cell_type": "markdown",
"metadata": {}
},
{
"execution_count": 15,
"cell_type": "code",
"metadata": {},
"outputs": [],
"source": "import os\n\ndirectory=os.getcwd()\ncsv_paths = [directory+'/'+name for name in csv_names]\n"
},
{
"source": "Now you must read the csv file, use the function <code>f=open(file, mode)</code> to create a file object and assign it to the variable <code>f</code>. The parameter <code> file<code> should be the variable <code>csv_path </code> , the mode should be <code>\"r\"</code> for read. ",
"cell_type": "markdown",
"metadata": {}
},
{
"execution_count": 18,
"cell_type": "code",
"metadata": {},
"outputs": [],
"source": "files =[open(csv_path, 'r') for csv_path in csv_paths]"
},
{
"source": "To load your dataset into the bucket we will use the method <code>put_object</code>, you must set the parameter name to the name of the bucket, the parameter <code>Key</code> should be the name of the csv file and the value for the parameter Body should be set to <code>f.read()</code>.",
"cell_type": "markdown",
"metadata": {}
},
{
"execution_count": 19,
"cell_type": "code",
"metadata": {},
"outputs": [
{
"ename": "ClientError",
"evalue": "An error occurred (AccessDenied) when calling the PutObject operation: Access Denied",
"traceback": [
"\u001b[0;31m---------------------------------------------------------------------------\u001b[0m",
"\u001b[0;31mClientError\u001b[0m Traceback (most recent call last)",
"\u001b[0;32m<ipython-input-19-2969494649a7>\u001b[0m in \u001b[0;36m<module>\u001b[0;34m\u001b[0m\n\u001b[1;32m 1\u001b[0m \u001b[0;32mfor\u001b[0m \u001b[0mcsv_name\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mf\u001b[0m \u001b[0;32min\u001b[0m \u001b[0mzip\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mcsv_names\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mfiles\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----> 2\u001b[0;31m \u001b[0mresource\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mBucket\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mname\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0mbucket_name\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mput_object\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mKey\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0mcsv_name\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mBody\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0mf\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mread\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[0m",
"\u001b[0;32m/opt/conda/envs/Python36/lib/python3.6/site-packages/ibm_boto3/resources/factory.py\u001b[0m in \u001b[0;36mdo_action\u001b[0;34m(self, *args, **kwargs)\u001b[0m\n\u001b[1;32m 518\u001b[0m \u001b[0;31m# instance via ``self``.\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 519\u001b[0m \u001b[0;32mdef\u001b[0m \u001b[0mdo_action\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mself\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[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m--> 520\u001b[0;31m \u001b[0mresponse\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0maction\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mself\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 521\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 522\u001b[0m \u001b[0;32mif\u001b[0m \u001b[0mhasattr\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mself\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0;34m'load'\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/opt/conda/envs/Python36/lib/python3.6/site-packages/ibm_boto3/resources/action.py\u001b[0m in \u001b[0;36m__call__\u001b[0;34m(self, parent, *args, **kwargs)\u001b[0m\n\u001b[1;32m 81\u001b[0m operation_name, params)\n\u001b[1;32m 82\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m---> 83\u001b[0;31m \u001b[0mresponse\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mgetattr\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mparent\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mmeta\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mclient\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0moperation_name\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m**\u001b[0m\u001b[0mparams\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 84\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 85\u001b[0m \u001b[0mlogger\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mdebug\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m'Response: %r'\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mresponse\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n",
"\u001b[0;32m/opt/conda/envs/Python36/lib/python3.6/site-packages/ibm_botocore/client.py\u001b[0m in \u001b[0;36m_api_call\u001b[0;34m(self, *args, **kwargs)\u001b[0m\n\u001b[1;32m 355\u001b[0m \"%s() only accepts keyword arguments.\" % py_operation_name)\n\u001b[1;32m 356\u001b[0m \u001b[0;31m# The \"self\" in this scope is referring to the BaseClient.\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m--> 357\u001b[0;31m \u001b[0;32mreturn\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0m_make_api_call\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0moperation_name\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 358\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 359\u001b[0m \u001b[0m_api_call\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0m__name__\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mstr\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mpy_operation_name\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n",
"\u001b[0;32m/opt/conda/envs/Python36/lib/python3.6/site-packages/ibm_botocore/client.py\u001b[0m in \u001b[0;36m_make_api_call\u001b[0;34m(self, operation_name, api_params)\u001b[0m\n\u001b[1;32m 659\u001b[0m \u001b[0merror_code\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mparsed_response\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mget\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m\"Error\"\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[0mget\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m\"Code\"\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 660\u001b[0m \u001b[0merror_class\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mexceptions\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mfrom_code\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0merror_code\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m--> 661\u001b[0;31m \u001b[0;32mraise\u001b[0m \u001b[0merror_class\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mparsed_response\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0moperation_name\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 662\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 663\u001b[0m \u001b[0;32mreturn\u001b[0m \u001b[0mparsed_response\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n",
"\u001b[0;31mClientError\u001b[0m: An error occurred (AccessDenied) when calling the PutObject operation: Access Denied"
],
"output_type": "error"
}
],
"source": "for csv_name, f in zip(csv_names, files):\n resource.Bucket(name=bucket_name).put_object(Key=csv_name, Body=f.read())"
},
{
"source": "<h2 id=\"Section_4\"> Question 4: Create URL to Share .csv (optional)</h2>",
"cell_type": "markdown",
"metadata": {}
},
{
"execution_count": null,
"cell_type": "code",
"metadata": {},
"outputs": [],
"source": "import boto3"
},
{
"source": "In this section, you will use a <code>client</code> object, you will use this to create a <code> url </code> to share the file you created.",
"cell_type": "markdown",
"metadata": {}
},
{
"source": "This line of code will create a client object using the boto3 library using your credentials.",
"cell_type": "markdown",
"metadata": {}
},
{
"execution_count": null,
"cell_type": "code",
"metadata": {},
"outputs": [],
"source": "client = boto3.client(\n 's3',\n aws_access_key_id = credentials[\"cos_hmac_keys\"]['access_key_id'],\n aws_secret_access_key = credentials[\"cos_hmac_keys\"][\"secret_access_key\"],\n endpoint_url=service_endpoint,\n\n)"
},
{
"source": "This line of code will create a client object using the boto3 library.",
"cell_type": "markdown",
"metadata": {}
},
{
"source": "In the dictionary <code> Parms</code> provide the bucket name as the value for the key <i>'Bucket'</i>. Also for the value of the key <i>'Key' </i> add the name of the <code>csv </code> file, both values should be strings.",
"cell_type": "markdown",
"metadata": {}
},
{
"execution_count": null,
"cell_type": "code",
"metadata": {},
"outputs": [],
"source": "Params = [{'Bucket': bucket_name, 'Key': csv_name} for csv_name in csv_names]\n"
},
{
"source": "execute the following lines of code to generate the URL, you will have to submit it so take note.",
"cell_type": "markdown",
"metadata": {}
},
{
"execution_count": null,
"cell_type": "code",
"metadata": {},
"outputs": [],
"source": "time=7*24*60**2+10\n\nurls = [client.generate_presigned_url('get_object',Params=Param,ExpiresIn=time) for Param in Params]\nprint(url)"
},
{
"source": "<h2 id=\"Section_5\"> How to submit </h2>",
"cell_type": "markdown",
"metadata": {}
},
{
"source": "<p>Once you complete your notebook you will have to share it to be marked. Select the icon on the top right a marked in red in the image below, a dialogue box should open, select the option all&nbsp;content excluding sensitive code cells.</p>\n\n<p><img height=\"440\" width=\"700\" src=\"https://s3-api.us-geo.objectstorage.softlayer.net/cf-courses-data/CognitiveClass/PY0101EN/projects/EdX/ReadMe%20files/share_noteook1.png\" alt=\"share notebook\" /></p>\n<p></p>\n\n<p>You can then share the notebook&nbsp; via a&nbsp; URL by scrolling down as shown in the following image:</p>\n<p style=\"text-align: center;\"> <img height=\"308\" width=\"350\" src=\"https://s3-api.us-geo.objectstorage.softlayer.net/cf-courses-data/CognitiveClass/PY0101EN/projects/EdX/ReadMe%20files/link2.png\" alt=\"share notebook\" /> </p>",
"cell_type": "markdown",
"metadata": {}
},
{
"source": "<hr>\n<p>Copyright &copy; 2019 IBM Developer Skills Network. This notebook and its source code are released under the terms of the <a href=\"https://cognitiveclass.ai/mit-license/\">MIT License</a>.</p>",
"cell_type": "markdown",
"metadata": {}
},
{
"source": "<h2>About the Authors:</h2> \n\n<a href=\"https://www.linkedin.com/in/joseph-s-50398b136/\">Joseph Santarcangelo</a> 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<p>\nOther contributors: <a href=\"https://www.linkedin.com/in/michelleccarey/\">Michelle Carey</a>, <a href=\"www.linkedin.com/in/jiahui-mavis-zhou-a4537814a\">Mavis Zhou</a> \n</p>",
"cell_type": "markdown",
"metadata": {}
},
{
"execution_count": null,
"cell_type": "code",
"metadata": {},
"outputs": [],
"source": ""
}
],
"metadata": {
"kernelspec": {
"display_name": "Python 3.6",
"name": "python3",
"language": "python"
},
"language_info": {
"mimetype": "text/x-python",
"nbconvert_exporter": "python",
"version": "3.6.8",
"name": "python",
"file_extension": ".py",
"pygments_lexer": "ipython3",
"codemirror_mode": {
"version": 3,
"name": "ipython"
}
}
},
"nbformat": 4
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment