{ "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "## Scraping NBA team information from Wikipedia (Revisited)\n", "\n", "__Update__ (March 6, 2018): This simple Wikipedia table is the subject of a lot of editing! Somebody modified it again in early February. In this case, the editor felt that US state postal codes would be unfamiliar to international NBA fans. Instead, the table current uses the full name of the US states (and Ontario, in the case of Toronto). The URL below was changed to reflect an historical snapshot of the table prior to this change.\n", "\n", "In this notebook, we are going to take another look at scraping [NBA team information from Wikipedia](https://en.wikipedia.org/wiki/National_Basketball_Association#Teams). We will also see how generate a map of NBA arena locations.\n", "\n", "In [an earlier notebook](https://github.com/practicallypredictable/posts/blob/master/notebooks/scrape_wikipedia_nba_team_info-part1.ipynb), we scraped the table using the [Requests](http://docs.python-requests.org/en/master/) and [BeautifulSoup](https://www.crummy.com/software/BeautifulSoup/) packages.\n", "\n", "Unfortunately, somebody modified the table in mid-December. As a result, the original code in that notebook no longer works.\n", "\n", "Web content changes all the time, which will occasionally break web scraping code. This is particularly true of Wikipedia, where pages are open to edits by the community.\n", "\n", "In this particular case, we could just move on and ignore the table changes. The NBA team data are basically unchanged. We could just use the saved CSV file from the prior scraping. That's a major reason why you should always save the result of web scraping.\n", "\n", "On the other hand, I think this is a good opportunity to try to scrape the table in a more robust and general way. You will also see examples of some useful `pandas` techniques to clean up the Wikipedia data. I think you will find these techniques useful in your own sports analytics projects.\n", "\n", "I also wanted to do something useful with the Wikipedia information, beyond using it as an example to learn web scraping. Later in this post, we'll discuss why arena location data can be useful in sports analytics. Drawing a map is a perfect way to learn how to start using geographic data in Python. \n", "\n", "### What Changed\n", "\n", "The change the person made to the table was relatively simple. This person decided to group together certain cells in the table for the two New York teams (the Knicks and the Nets) and the LA teams (the Clippers and the Lakers). In particular, this person added HTML `rowspan` tags in the City columns, as well as in the Arena column for the LA teams.\n", "\n", "Think of `rowspan` and `colspan` tags in an HTML table as being similar to merged cells in a spreadsheet program like Microsoft Excel or Google Sheets.\n", "\n", "You can [look at the Wikipedia page prior to the table change here](https://en.wikipedia.org/w/index.php?title=National_Basketball_Association&direction=prev&oldid=815465296), and compare to the current table. Try to use your browser's inspection tools to find the `rowspan` tags that changed.\n", "\n", "We want to figure out how to read these merged cells, and \"unspan\" them to make the table layout simpler." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Scraping the Table, Again\n", "\n", "We are going to use a general approach for scraping HTML tables. This approach will work for Wikipedia and other web pages, and will automatically handle the spanning that broke our original code.\n", "\n", "The scraping code is part of the [pracpred package, which you can find on GitHub](https://github.com/practicallypredictable/pracpred) or [find on from PyPI](https://pypi.python.org/pypi/pracpred). You can install the package using the command `pip install pracpred` in your sports analytics environment." ] }, { "cell_type": "code", "execution_count": 1, "metadata": {}, "outputs": [], "source": [ "import pracpred.scrape as pps" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "As usual, we will do our data analysis using [`pandas`](https://pandas.pydata.org/). We will also use the [Matplotlib Basemap](https://matplotlib.org/basemap/) package for plotting a map at the end of this notebook." ] }, { "cell_type": "code", "execution_count": 2, "metadata": {}, "outputs": [], "source": [ "import numpy as np\n", "import pandas as pd" ] }, { "cell_type": "code", "execution_count": 3, "metadata": {}, "outputs": [], "source": [ "import matplotlib.pyplot as plt\n", "from mpl_toolkits.basemap import Basemap\n", "from matplotlib.patches import Polygon\n", "from matplotlib.collections import PatchCollection\n", "from matplotlib.colors import rgb2hex\n", "%matplotlib notebook" ] }, { "cell_type": "code", "execution_count": 4, "metadata": {}, "outputs": [], "source": [ "from pathlib import Path\n", "import warnings" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "You'll notice we are going to use the [`warnings`](https://docs.python.org/3/library/warnings.html?highlight=warnings#module-warnings) module from the Python standard library. This is purely cosmetic, because as you'll see toward the end of this notebook, Basemap emits some warning messages that I want to suppress." ] }, { "cell_type": "code", "execution_count": 5, "metadata": {}, "outputs": [], "source": [ "PARENT_DIR = Path.cwd().parent" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Getting the Raw HTML Table\n", "\n", "f you inspect the HTML for the Wikipedia page, you'll see that it has 5 HTML tables. We really only want the one for the NBA teams. If you inspect this table in your browser, you'll see that it has the HTML tag ``. We can specify this class to make sure we only get back the table we want." ] }, { "cell_type": "code", "execution_count": 6, "metadata": {}, "outputs": [], "source": [ "#URL = 'https://en.wikipedia.org/wiki/National_Basketball_Association'\n", "URL = 'https://en.wikipedia.org/w/index.php?title=National_Basketball_Association&oldid=823837048'\n", "NBA_TEAM_INFO = 'navbox wikitable'" ] }, { "cell_type": "code", "execution_count": 7, "metadata": {}, "outputs": [], "source": [ "USER_AGENT = (\n", " 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_6) ' +\n", " 'AppleWebKit/537.36 (KHTML, like Gecko) ' +\n", " 'Chrome/61.0.3163.100 Safari/537.36'\n", ")\n", "\n", "REQUEST_HEADERS = {\n", " 'user-agent': USER_AGENT,\n", "}" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Now we can call the scraping code. You can [find the source code on GitHub here](https://github.com/practicallypredictable/pracpred/blob/master/pracpred/scrape/html_tables.py). The package defines two Python classes, `HTMLTables` and `HTMLTable`. The `HTMLTables` `class` is basically a wrapper on top of Requests and BeautifulSoup. This `class` gets and stores the HTML for one or more tables from a URL. The `HTMLTable` `class` has the code to unspan the table and convert it to a `pandas` `DataFrame`." ] }, { "cell_type": "code", "execution_count": 8, "metadata": {}, "outputs": [], "source": [ "tables = pps.HTMLTables(URL, table_class=NBA_TEAM_INFO, headers=REQUEST_HEADERS)" ] }, { "cell_type": "code", "execution_count": 9, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "1" ] }, "execution_count": 9, "metadata": {}, "output_type": "execute_result" } ], "source": [ "len(tables)" ] }, { "cell_type": "code", "execution_count": 10, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "(33, 9)" ] }, "execution_count": 10, "metadata": {}, "output_type": "execute_result" } ], "source": [ "tables[0].shape" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "We got back one table, which has 33 rows and 9 columns. Notice that the table dimensions are the largest number of rows in any column, and the largest number of columns in any row. This is the key to getting the unspanning to work. We want to view the table as a grid of cells to remove the spanning structure.\n", "\n", "Now, let's convert the HTML table to a `pandas` `DataFrame`. For this particular table, we want to have any spanned cells repeat the values when we unspan the table." ] }, { "cell_type": "code", "execution_count": 11, "metadata": {}, "outputs": [ { "data": { "text/html": [ "
\n", "\n", "
\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
012345678
0DivisionTeamCityArenaCapacityCoordinatesFoundedJoinedHead coach
1Eastern ConferenceEastern ConferenceEastern ConferenceEastern ConferenceEastern ConferenceEastern ConferenceEastern ConferenceEastern ConferenceEastern Conference
2AtlanticBoston CelticsBoston, MATD Garden18,62442°21′59″N 71°03′44″W / 42.366303°N 71.06222...19461946Brad Stevens
3AtlanticBrooklyn NetsNew York City, NYBarclays Center17,73240°40′58″N 73°58′29″W / 40.68265°N 73.974689...1967*1976Kenny Atkinson
4AtlanticNew York KnicksNew York City, NYMadison Square Garden19,81240°45′02″N 73°59′37″W / 40.750556°N 73.99361...19461946Jeff Hornacek
5AtlanticPhiladelphia 76ersPhiladelphia, PAWells Fargo Center21,60039°54′04″N 75°10′19″W / 39.901111°N 75.17194...1946*1949Brett Brown
6AtlanticToronto RaptorsToronto, ONAir Canada Centre19,80043°38′36″N 79°22′45″W / 43.643333°N 79.37916...19951995Dwane Casey
7CentralChicago BullsChicago, ILUnited Center20,91741°52′50″N 87°40′27″W / 41.880556°N 87.67416...19661966Fred Hoiberg
8CentralCleveland CavaliersCleveland, OHQuicken Loans Arena20,56241°29′47″N 81°41′17″W / 41.496389°N 81.68805...19701970Tyronn Lue
9CentralDetroit PistonsDetroit, MILittle Caesars Arena20,49142°41′49″N 83°14′44″W / 42.696944°N 83.24555...1941*1948Stan Van Gundy
10CentralIndiana PacersIndianapolis, INBankers Life Fieldhouse17,92339°45′50″N 86°09′20″W / 39.763889°N 86.15555...19671976Nate McMillan
11CentralMilwaukee BucksMilwaukee, WIBradley Center18,71743°02′37″N 87°55′01″W / 43.043611°N 87.91694...19681968Joe Prunty
12SoutheastAtlanta HawksAtlanta, GAPhilips Arena15,71133°45′26″N 84°23′47″W / 33.757222°N 84.39638...1946*1949Mike Budenholzer
13SoutheastCharlotte HornetsCharlotte, NCSpectrum Center19,07735°13′30″N 80°50′21″W / 35.225°N 80.839167°W...1988*1988*Steve Clifford
14SoutheastMiami HeatMiami, FLAmerican Airlines Arena19,60025°46′53″N 80°11′17″W / 25.781389°N 80.18805...19881988Erik Spoelstra
15SoutheastOrlando MagicOrlando, FLAmway Center18,84628°32′21″N 81°23′01″W / 28.539167°N 81.38361...19891989Frank Vogel
16SoutheastWashington WizardsWashington, D.C.Capital One Arena20,35638°53′53″N 77°01′15″W / 38.898056°N 77.02083...1961*1961*Scott Brooks
17Western ConferenceWestern ConferenceWestern ConferenceWestern ConferenceWestern ConferenceWestern ConferenceWestern ConferenceWestern ConferenceWestern Conference
18NorthwestDenver NuggetsDenver, COPepsi Center19,52039°44′55″N 105°00′27″W / 39.748611°N 105.007...19671976Michael Malone
19NorthwestMinnesota TimberwolvesMinneapolis, MNTarget Center19,35644°58′46″N 93°16′34″W / 44.979444°N 93.27611...19891989Tom Thibodeau
20NorthwestOklahoma City ThunderOklahoma City, OKChesapeake Energy Arena18,20335°27′48″N 97°30′54″W / 35.463333°N 97.515°W...1967*1967*Billy Donovan
21NorthwestPortland Trail BlazersPortland, ORModa Center19,44145°31′54″N 122°40′00″W / 45.531667°N 122.666...19701970Terry Stotts
22NorthwestUtah JazzSalt Lake City, UTVivint Smart Home Arena19,91140°46′06″N 111°54′04″W / 40.768333°N 111.901...1974*1974*Quin Snyder
23PacificGolden State WarriorsOakland, CAOracle Arena19,59637°45′01″N 122°12′11″W / 37.750278°N 122.203...1946*1946*Steve Kerr
24PacificLos Angeles ClippersLos Angeles, CAStaples Center19,06034°02′35″N 118°16′02″W / 34.043056°N 118.267...1970*1970*Doc Rivers
25PacificLos Angeles LakersLos Angeles, CAStaples Center18,99734°02′35″N 118°16′02″W / 34.043056°N 118.267...1947*1948Luke Walton
26PacificPhoenix SunsPhoenix, AZTalking Stick Resort Arena18,05533°26′45″N 112°04′17″W / 33.445833°N 112.071...19681968Jay Triano
27PacificSacramento KingsSacramento, CAGolden 1 Center17,50038°38′57″N 121°31′05″W / 38.649167°N 121.518...1923*1948Dave Joerger
28SouthwestDallas MavericksDallas, TXAmerican Airlines Center19,20032°47′26″N 96°48′37″W / 32.790556°N 96.81027...19801980Rick Carlisle
29SouthwestHouston RocketsHouston, TXToyota Center18,05529°45′03″N 95°21′44″W / 29.750833°N 95.36222...1967*1967*Mike D'Antoni
30SouthwestMemphis GrizzliesMemphis, TNFedExForum18,11935°08′18″N 90°03′02″W / 35.138333°N 90.05055...1995*1995*J. B. Bickerstaff
31SouthwestNew Orleans PelicansNew Orleans, LASmoothie King Center16,86729°56′56″N 90°04′55″W / 29.948889°N 90.08194...2002*2002*Alvin Gentry
32SouthwestSan Antonio SpursSan Antonio, TXAT&T Center18,41829°25′37″N 98°26′15″W / 29.426944°N 98.4375°...1967*1976Gregg Popovich
\n", "" ], "text/plain": [ " 0 1 2 \\\n", "0 Division Team City \n", "1 Eastern Conference Eastern Conference Eastern Conference \n", "2 Atlantic Boston Celtics Boston, MA \n", "3 Atlantic Brooklyn Nets New York City, NY \n", "4 Atlantic New York Knicks New York City, NY \n", "5 Atlantic Philadelphia 76ers Philadelphia, PA \n", "6 Atlantic Toronto Raptors Toronto, ON \n", "7 Central Chicago Bulls Chicago, IL \n", "8 Central Cleveland Cavaliers Cleveland, OH \n", "9 Central Detroit Pistons Detroit, MI \n", "10 Central Indiana Pacers Indianapolis, IN \n", "11 Central Milwaukee Bucks Milwaukee, WI \n", "12 Southeast Atlanta Hawks Atlanta, GA \n", "13 Southeast Charlotte Hornets Charlotte, NC \n", "14 Southeast Miami Heat Miami, FL \n", "15 Southeast Orlando Magic Orlando, FL \n", "16 Southeast Washington Wizards Washington, D.C. \n", "17 Western Conference Western Conference Western Conference \n", "18 Northwest Denver Nuggets Denver, CO \n", "19 Northwest Minnesota Timberwolves Minneapolis, MN \n", "20 Northwest Oklahoma City Thunder Oklahoma City, OK \n", "21 Northwest Portland Trail Blazers Portland, OR \n", "22 Northwest Utah Jazz Salt Lake City, UT \n", "23 Pacific Golden State Warriors Oakland, CA \n", "24 Pacific Los Angeles Clippers Los Angeles, CA \n", "25 Pacific Los Angeles Lakers Los Angeles, CA \n", "26 Pacific Phoenix Suns Phoenix, AZ \n", "27 Pacific Sacramento Kings Sacramento, CA \n", "28 Southwest Dallas Mavericks Dallas, TX \n", "29 Southwest Houston Rockets Houston, TX \n", "30 Southwest Memphis Grizzlies Memphis, TN \n", "31 Southwest New Orleans Pelicans New Orleans, LA \n", "32 Southwest San Antonio Spurs San Antonio, TX \n", "\n", " 3 4 \\\n", "0 Arena Capacity \n", "1 Eastern Conference Eastern Conference \n", "2 TD Garden 18,624 \n", "3 Barclays Center 17,732 \n", "4 Madison Square Garden 19,812 \n", "5 Wells Fargo Center 21,600 \n", "6 Air Canada Centre 19,800 \n", "7 United Center 20,917 \n", "8 Quicken Loans Arena 20,562 \n", "9 Little Caesars Arena 20,491 \n", "10 Bankers Life Fieldhouse 17,923 \n", "11 Bradley Center 18,717 \n", "12 Philips Arena 15,711 \n", "13 Spectrum Center 19,077 \n", "14 American Airlines Arena 19,600 \n", "15 Amway Center 18,846 \n", "16 Capital One Arena 20,356 \n", "17 Western Conference Western Conference \n", "18 Pepsi Center 19,520 \n", "19 Target Center 19,356 \n", "20 Chesapeake Energy Arena 18,203 \n", "21 Moda Center 19,441 \n", "22 Vivint Smart Home Arena 19,911 \n", "23 Oracle Arena 19,596 \n", "24 Staples Center 19,060 \n", "25 Staples Center 18,997 \n", "26 Talking Stick Resort Arena 18,055 \n", "27 Golden 1 Center 17,500 \n", "28 American Airlines Center 19,200 \n", "29 Toyota Center 18,055 \n", "30 FedExForum 18,119 \n", "31 Smoothie King Center 16,867 \n", "32 AT&T Center 18,418 \n", "\n", " 5 6 \\\n", "0 Coordinates Founded \n", "1 Eastern Conference Eastern Conference \n", "2 42°21′59″N 71°03′44″W / 42.366303°N 71.06222... 1946 \n", "3 40°40′58″N 73°58′29″W / 40.68265°N 73.974689... 1967* \n", "4 40°45′02″N 73°59′37″W / 40.750556°N 73.99361... 1946 \n", "5 39°54′04″N 75°10′19″W / 39.901111°N 75.17194... 1946* \n", "6 43°38′36″N 79°22′45″W / 43.643333°N 79.37916... 1995 \n", "7 41°52′50″N 87°40′27″W / 41.880556°N 87.67416... 1966 \n", "8 41°29′47″N 81°41′17″W / 41.496389°N 81.68805... 1970 \n", "9 42°41′49″N 83°14′44″W / 42.696944°N 83.24555... 1941* \n", "10 39°45′50″N 86°09′20″W / 39.763889°N 86.15555... 1967 \n", "11 43°02′37″N 87°55′01″W / 43.043611°N 87.91694... 1968 \n", "12 33°45′26″N 84°23′47″W / 33.757222°N 84.39638... 1946* \n", "13 35°13′30″N 80°50′21″W / 35.225°N 80.839167°W... 1988* \n", "14 25°46′53″N 80°11′17″W / 25.781389°N 80.18805... 1988 \n", "15 28°32′21″N 81°23′01″W / 28.539167°N 81.38361... 1989 \n", "16 38°53′53″N 77°01′15″W / 38.898056°N 77.02083... 1961* \n", "17 Western Conference Western Conference \n", "18 39°44′55″N 105°00′27″W / 39.748611°N 105.007... 1967 \n", "19 44°58′46″N 93°16′34″W / 44.979444°N 93.27611... 1989 \n", "20 35°27′48″N 97°30′54″W / 35.463333°N 97.515°W... 1967* \n", "21 45°31′54″N 122°40′00″W / 45.531667°N 122.666... 1970 \n", "22 40°46′06″N 111°54′04″W / 40.768333°N 111.901... 1974* \n", "23 37°45′01″N 122°12′11″W / 37.750278°N 122.203... 1946* \n", "24 34°02′35″N 118°16′02″W / 34.043056°N 118.267... 1970* \n", "25 34°02′35″N 118°16′02″W / 34.043056°N 118.267... 1947* \n", "26 33°26′45″N 112°04′17″W / 33.445833°N 112.071... 1968 \n", "27 38°38′57″N 121°31′05″W / 38.649167°N 121.518... 1923* \n", "28 32°47′26″N 96°48′37″W / 32.790556°N 96.81027... 1980 \n", "29 29°45′03″N 95°21′44″W / 29.750833°N 95.36222... 1967* \n", "30 35°08′18″N 90°03′02″W / 35.138333°N 90.05055... 1995* \n", "31 29°56′56″N 90°04′55″W / 29.948889°N 90.08194... 2002* \n", "32 29°25′37″N 98°26′15″W / 29.426944°N 98.4375°... 1967* \n", "\n", " 7 8 \n", "0 Joined Head coach \n", "1 Eastern Conference Eastern Conference \n", "2 1946 Brad Stevens \n", "3 1976 Kenny Atkinson \n", "4 1946 Jeff Hornacek \n", "5 1949 Brett Brown \n", "6 1995 Dwane Casey \n", "7 1966 Fred Hoiberg \n", "8 1970 Tyronn Lue \n", "9 1948 Stan Van Gundy \n", "10 1976 Nate McMillan \n", "11 1968 Joe Prunty \n", "12 1949 Mike Budenholzer \n", "13 1988* Steve Clifford \n", "14 1988 Erik Spoelstra \n", "15 1989 Frank Vogel \n", "16 1961* Scott Brooks \n", "17 Western Conference Western Conference \n", "18 1976 Michael Malone \n", "19 1989 Tom Thibodeau \n", "20 1967* Billy Donovan \n", "21 1970 Terry Stotts \n", "22 1974* Quin Snyder \n", "23 1946* Steve Kerr \n", "24 1970* Doc Rivers \n", "25 1948 Luke Walton \n", "26 1968 Jay Triano \n", "27 1948 Dave Joerger \n", "28 1980 Rick Carlisle \n", "29 1967* Mike D'Antoni \n", "30 1995* J. B. Bickerstaff \n", "31 2002* Alvin Gentry \n", "32 1976 Gregg Popovich " ] }, "execution_count": 11, "metadata": {}, "output_type": "execute_result" } ], "source": [ "raw = tables[0].to_df(repeat_span=True)\n", "raw" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Cleaning Up the Table\n", "\n", "Now let's clean up the raw information in the table.\n", "\n", "#### Column Headers\n", "\n", "First, notice that our generic scraping function doesn't know anything about what columns are in the table. We need to create useful column headers." ] }, { "cell_type": "code", "execution_count": 12, "metadata": {}, "outputs": [], "source": [ "def setup_columns(raw):\n", " df = raw.copy()\n", " df.columns = df.loc[0, :]\n", " return df.drop(df.index[0])" ] }, { "cell_type": "code", "execution_count": 13, "metadata": {}, "outputs": [ { "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
DivisionTeamCityArenaCapacityCoordinatesFoundedJoinedHead coach
1Eastern ConferenceEastern ConferenceEastern ConferenceEastern ConferenceEastern ConferenceEastern ConferenceEastern ConferenceEastern ConferenceEastern Conference
2AtlanticBoston CelticsBoston, MATD Garden18,62442°21′59″N 71°03′44″W / 42.366303°N 71.06222...19461946Brad Stevens
3AtlanticBrooklyn NetsNew York City, NYBarclays Center17,73240°40′58″N 73°58′29″W / 40.68265°N 73.974689...1967*1976Kenny Atkinson
4AtlanticNew York KnicksNew York City, NYMadison Square Garden19,81240°45′02″N 73°59′37″W / 40.750556°N 73.99361...19461946Jeff Hornacek
5AtlanticPhiladelphia 76ersPhiladelphia, PAWells Fargo Center21,60039°54′04″N 75°10′19″W / 39.901111°N 75.17194...1946*1949Brett Brown
6AtlanticToronto RaptorsToronto, ONAir Canada Centre19,80043°38′36″N 79°22′45″W / 43.643333°N 79.37916...19951995Dwane Casey
7CentralChicago BullsChicago, ILUnited Center20,91741°52′50″N 87°40′27″W / 41.880556°N 87.67416...19661966Fred Hoiberg
8CentralCleveland CavaliersCleveland, OHQuicken Loans Arena20,56241°29′47″N 81°41′17″W / 41.496389°N 81.68805...19701970Tyronn Lue
9CentralDetroit PistonsDetroit, MILittle Caesars Arena20,49142°41′49″N 83°14′44″W / 42.696944°N 83.24555...1941*1948Stan Van Gundy
10CentralIndiana PacersIndianapolis, INBankers Life Fieldhouse17,92339°45′50″N 86°09′20″W / 39.763889°N 86.15555...19671976Nate McMillan
11CentralMilwaukee BucksMilwaukee, WIBradley Center18,71743°02′37″N 87°55′01″W / 43.043611°N 87.91694...19681968Joe Prunty
12SoutheastAtlanta HawksAtlanta, GAPhilips Arena15,71133°45′26″N 84°23′47″W / 33.757222°N 84.39638...1946*1949Mike Budenholzer
13SoutheastCharlotte HornetsCharlotte, NCSpectrum Center19,07735°13′30″N 80°50′21″W / 35.225°N 80.839167°W...1988*1988*Steve Clifford
14SoutheastMiami HeatMiami, FLAmerican Airlines Arena19,60025°46′53″N 80°11′17″W / 25.781389°N 80.18805...19881988Erik Spoelstra
15SoutheastOrlando MagicOrlando, FLAmway Center18,84628°32′21″N 81°23′01″W / 28.539167°N 81.38361...19891989Frank Vogel
16SoutheastWashington WizardsWashington, D.C.Capital One Arena20,35638°53′53″N 77°01′15″W / 38.898056°N 77.02083...1961*1961*Scott Brooks
17Western ConferenceWestern ConferenceWestern ConferenceWestern ConferenceWestern ConferenceWestern ConferenceWestern ConferenceWestern ConferenceWestern Conference
18NorthwestDenver NuggetsDenver, COPepsi Center19,52039°44′55″N 105°00′27″W / 39.748611°N 105.007...19671976Michael Malone
19NorthwestMinnesota TimberwolvesMinneapolis, MNTarget Center19,35644°58′46″N 93°16′34″W / 44.979444°N 93.27611...19891989Tom Thibodeau
20NorthwestOklahoma City ThunderOklahoma City, OKChesapeake Energy Arena18,20335°27′48″N 97°30′54″W / 35.463333°N 97.515°W...1967*1967*Billy Donovan
21NorthwestPortland Trail BlazersPortland, ORModa Center19,44145°31′54″N 122°40′00″W / 45.531667°N 122.666...19701970Terry Stotts
22NorthwestUtah JazzSalt Lake City, UTVivint Smart Home Arena19,91140°46′06″N 111°54′04″W / 40.768333°N 111.901...1974*1974*Quin Snyder
23PacificGolden State WarriorsOakland, CAOracle Arena19,59637°45′01″N 122°12′11″W / 37.750278°N 122.203...1946*1946*Steve Kerr
24PacificLos Angeles ClippersLos Angeles, CAStaples Center19,06034°02′35″N 118°16′02″W / 34.043056°N 118.267...1970*1970*Doc Rivers
25PacificLos Angeles LakersLos Angeles, CAStaples Center18,99734°02′35″N 118°16′02″W / 34.043056°N 118.267...1947*1948Luke Walton
26PacificPhoenix SunsPhoenix, AZTalking Stick Resort Arena18,05533°26′45″N 112°04′17″W / 33.445833°N 112.071...19681968Jay Triano
27PacificSacramento KingsSacramento, CAGolden 1 Center17,50038°38′57″N 121°31′05″W / 38.649167°N 121.518...1923*1948Dave Joerger
28SouthwestDallas MavericksDallas, TXAmerican Airlines Center19,20032°47′26″N 96°48′37″W / 32.790556°N 96.81027...19801980Rick Carlisle
29SouthwestHouston RocketsHouston, TXToyota Center18,05529°45′03″N 95°21′44″W / 29.750833°N 95.36222...1967*1967*Mike D'Antoni
30SouthwestMemphis GrizzliesMemphis, TNFedExForum18,11935°08′18″N 90°03′02″W / 35.138333°N 90.05055...1995*1995*J. B. Bickerstaff
31SouthwestNew Orleans PelicansNew Orleans, LASmoothie King Center16,86729°56′56″N 90°04′55″W / 29.948889°N 90.08194...2002*2002*Alvin Gentry
32SouthwestSan Antonio SpursSan Antonio, TXAT&T Center18,41829°25′37″N 98°26′15″W / 29.426944°N 98.4375°...1967*1976Gregg Popovich
\n", "
" ], "text/plain": [ "0 Division Team City \\\n", "1 Eastern Conference Eastern Conference Eastern Conference \n", "2 Atlantic Boston Celtics Boston, MA \n", "3 Atlantic Brooklyn Nets New York City, NY \n", "4 Atlantic New York Knicks New York City, NY \n", "5 Atlantic Philadelphia 76ers Philadelphia, PA \n", "6 Atlantic Toronto Raptors Toronto, ON \n", "7 Central Chicago Bulls Chicago, IL \n", "8 Central Cleveland Cavaliers Cleveland, OH \n", "9 Central Detroit Pistons Detroit, MI \n", "10 Central Indiana Pacers Indianapolis, IN \n", "11 Central Milwaukee Bucks Milwaukee, WI \n", "12 Southeast Atlanta Hawks Atlanta, GA \n", "13 Southeast Charlotte Hornets Charlotte, NC \n", "14 Southeast Miami Heat Miami, FL \n", "15 Southeast Orlando Magic Orlando, FL \n", "16 Southeast Washington Wizards Washington, D.C. \n", "17 Western Conference Western Conference Western Conference \n", "18 Northwest Denver Nuggets Denver, CO \n", "19 Northwest Minnesota Timberwolves Minneapolis, MN \n", "20 Northwest Oklahoma City Thunder Oklahoma City, OK \n", "21 Northwest Portland Trail Blazers Portland, OR \n", "22 Northwest Utah Jazz Salt Lake City, UT \n", "23 Pacific Golden State Warriors Oakland, CA \n", "24 Pacific Los Angeles Clippers Los Angeles, CA \n", "25 Pacific Los Angeles Lakers Los Angeles, CA \n", "26 Pacific Phoenix Suns Phoenix, AZ \n", "27 Pacific Sacramento Kings Sacramento, CA \n", "28 Southwest Dallas Mavericks Dallas, TX \n", "29 Southwest Houston Rockets Houston, TX \n", "30 Southwest Memphis Grizzlies Memphis, TN \n", "31 Southwest New Orleans Pelicans New Orleans, LA \n", "32 Southwest San Antonio Spurs San Antonio, TX \n", "\n", "0 Arena Capacity \\\n", "1 Eastern Conference Eastern Conference \n", "2 TD Garden 18,624 \n", "3 Barclays Center 17,732 \n", "4 Madison Square Garden 19,812 \n", "5 Wells Fargo Center 21,600 \n", "6 Air Canada Centre 19,800 \n", "7 United Center 20,917 \n", "8 Quicken Loans Arena 20,562 \n", "9 Little Caesars Arena 20,491 \n", "10 Bankers Life Fieldhouse 17,923 \n", "11 Bradley Center 18,717 \n", "12 Philips Arena 15,711 \n", "13 Spectrum Center 19,077 \n", "14 American Airlines Arena 19,600 \n", "15 Amway Center 18,846 \n", "16 Capital One Arena 20,356 \n", "17 Western Conference Western Conference \n", "18 Pepsi Center 19,520 \n", "19 Target Center 19,356 \n", "20 Chesapeake Energy Arena 18,203 \n", "21 Moda Center 19,441 \n", "22 Vivint Smart Home Arena 19,911 \n", "23 Oracle Arena 19,596 \n", "24 Staples Center 19,060 \n", "25 Staples Center 18,997 \n", "26 Talking Stick Resort Arena 18,055 \n", "27 Golden 1 Center 17,500 \n", "28 American Airlines Center 19,200 \n", "29 Toyota Center 18,055 \n", "30 FedExForum 18,119 \n", "31 Smoothie King Center 16,867 \n", "32 AT&T Center 18,418 \n", "\n", "0 Coordinates Founded \\\n", "1 Eastern Conference Eastern Conference \n", "2 42°21′59″N 71°03′44″W / 42.366303°N 71.06222... 1946 \n", "3 40°40′58″N 73°58′29″W / 40.68265°N 73.974689... 1967* \n", "4 40°45′02″N 73°59′37″W / 40.750556°N 73.99361... 1946 \n", "5 39°54′04″N 75°10′19″W / 39.901111°N 75.17194... 1946* \n", "6 43°38′36″N 79°22′45″W / 43.643333°N 79.37916... 1995 \n", "7 41°52′50″N 87°40′27″W / 41.880556°N 87.67416... 1966 \n", "8 41°29′47″N 81°41′17″W / 41.496389°N 81.68805... 1970 \n", "9 42°41′49″N 83°14′44″W / 42.696944°N 83.24555... 1941* \n", "10 39°45′50″N 86°09′20″W / 39.763889°N 86.15555... 1967 \n", "11 43°02′37″N 87°55′01″W / 43.043611°N 87.91694... 1968 \n", "12 33°45′26″N 84°23′47″W / 33.757222°N 84.39638... 1946* \n", "13 35°13′30″N 80°50′21″W / 35.225°N 80.839167°W... 1988* \n", "14 25°46′53″N 80°11′17″W / 25.781389°N 80.18805... 1988 \n", "15 28°32′21″N 81°23′01″W / 28.539167°N 81.38361... 1989 \n", "16 38°53′53″N 77°01′15″W / 38.898056°N 77.02083... 1961* \n", "17 Western Conference Western Conference \n", "18 39°44′55″N 105°00′27″W / 39.748611°N 105.007... 1967 \n", "19 44°58′46″N 93°16′34″W / 44.979444°N 93.27611... 1989 \n", "20 35°27′48″N 97°30′54″W / 35.463333°N 97.515°W... 1967* \n", "21 45°31′54″N 122°40′00″W / 45.531667°N 122.666... 1970 \n", "22 40°46′06″N 111°54′04″W / 40.768333°N 111.901... 1974* \n", "23 37°45′01″N 122°12′11″W / 37.750278°N 122.203... 1946* \n", "24 34°02′35″N 118°16′02″W / 34.043056°N 118.267... 1970* \n", "25 34°02′35″N 118°16′02″W / 34.043056°N 118.267... 1947* \n", "26 33°26′45″N 112°04′17″W / 33.445833°N 112.071... 1968 \n", "27 38°38′57″N 121°31′05″W / 38.649167°N 121.518... 1923* \n", "28 32°47′26″N 96°48′37″W / 32.790556°N 96.81027... 1980 \n", "29 29°45′03″N 95°21′44″W / 29.750833°N 95.36222... 1967* \n", "30 35°08′18″N 90°03′02″W / 35.138333°N 90.05055... 1995* \n", "31 29°56′56″N 90°04′55″W / 29.948889°N 90.08194... 2002* \n", "32 29°25′37″N 98°26′15″W / 29.426944°N 98.4375°... 1967* \n", "\n", "0 Joined Head coach \n", "1 Eastern Conference Eastern Conference \n", "2 1946 Brad Stevens \n", "3 1976 Kenny Atkinson \n", "4 1946 Jeff Hornacek \n", "5 1949 Brett Brown \n", "6 1995 Dwane Casey \n", "7 1966 Fred Hoiberg \n", "8 1970 Tyronn Lue \n", "9 1948 Stan Van Gundy \n", "10 1976 Nate McMillan \n", "11 1968 Joe Prunty \n", "12 1949 Mike Budenholzer \n", "13 1988* Steve Clifford \n", "14 1988 Erik Spoelstra \n", "15 1989 Frank Vogel \n", "16 1961* Scott Brooks \n", "17 Western Conference Western Conference \n", "18 1976 Michael Malone \n", "19 1989 Tom Thibodeau \n", "20 1967* Billy Donovan \n", "21 1970 Terry Stotts \n", "22 1974* Quin Snyder \n", "23 1946* Steve Kerr \n", "24 1970* Doc Rivers \n", "25 1948 Luke Walton \n", "26 1968 Jay Triano \n", "27 1948 Dave Joerger \n", "28 1980 Rick Carlisle \n", "29 1967* Mike D'Antoni \n", "30 1995* J. B. Bickerstaff \n", "31 2002* Alvin Gentry \n", "32 1976 Gregg Popovich " ] }, "execution_count": 13, "metadata": {}, "output_type": "execute_result" } ], "source": [ "df = setup_columns(raw)\n", "df" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "#### NBA Conference Information\n", "\n", "Next, notice that the Eastern and Western Conference repeat across the entire row. What we want is to remove those rows, and create a new column showing the conference for each team." ] }, { "cell_type": "code", "execution_count": 14, "metadata": {}, "outputs": [], "source": [ "def cleanup_nba_conferences(df):\n", " df['temporary'] = df['Division']\n", " df = df.set_index('temporary')\n", " eastern = df.index.get_loc('Eastern Conference')\n", " western = df.index.get_loc('Western Conference')\n", " df.loc[eastern+1:western, 'Conference'] = 'Eastern'\n", " df.loc[western+1:, 'Conference'] = 'Western'\n", " df = df.drop(df.index[eastern]).drop(df.index[western])\n", " df['Conference'] = df['Conference'].astype('category')\n", " df['Division'] = df['Division'].astype('category')\n", " return df.reset_index(drop=True)" ] }, { "cell_type": "code", "execution_count": 15, "metadata": {}, "outputs": [ { "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
DivisionTeamCityArenaCapacityCoordinatesFoundedJoinedHead coachConference
0AtlanticBoston CelticsBoston, MATD Garden18,62442°21′59″N 71°03′44″W / 42.366303°N 71.06222...19461946Brad StevensEastern
1AtlanticBrooklyn NetsNew York City, NYBarclays Center17,73240°40′58″N 73°58′29″W / 40.68265°N 73.974689...1967*1976Kenny AtkinsonEastern
2AtlanticNew York KnicksNew York City, NYMadison Square Garden19,81240°45′02″N 73°59′37″W / 40.750556°N 73.99361...19461946Jeff HornacekEastern
3AtlanticPhiladelphia 76ersPhiladelphia, PAWells Fargo Center21,60039°54′04″N 75°10′19″W / 39.901111°N 75.17194...1946*1949Brett BrownEastern
4AtlanticToronto RaptorsToronto, ONAir Canada Centre19,80043°38′36″N 79°22′45″W / 43.643333°N 79.37916...19951995Dwane CaseyEastern
5CentralChicago BullsChicago, ILUnited Center20,91741°52′50″N 87°40′27″W / 41.880556°N 87.67416...19661966Fred HoibergEastern
6CentralCleveland CavaliersCleveland, OHQuicken Loans Arena20,56241°29′47″N 81°41′17″W / 41.496389°N 81.68805...19701970Tyronn LueEastern
7CentralDetroit PistonsDetroit, MILittle Caesars Arena20,49142°41′49″N 83°14′44″W / 42.696944°N 83.24555...1941*1948Stan Van GundyEastern
8CentralIndiana PacersIndianapolis, INBankers Life Fieldhouse17,92339°45′50″N 86°09′20″W / 39.763889°N 86.15555...19671976Nate McMillanEastern
9CentralMilwaukee BucksMilwaukee, WIBradley Center18,71743°02′37″N 87°55′01″W / 43.043611°N 87.91694...19681968Joe PruntyEastern
10SoutheastAtlanta HawksAtlanta, GAPhilips Arena15,71133°45′26″N 84°23′47″W / 33.757222°N 84.39638...1946*1949Mike BudenholzerEastern
11SoutheastCharlotte HornetsCharlotte, NCSpectrum Center19,07735°13′30″N 80°50′21″W / 35.225°N 80.839167°W...1988*1988*Steve CliffordEastern
12SoutheastMiami HeatMiami, FLAmerican Airlines Arena19,60025°46′53″N 80°11′17″W / 25.781389°N 80.18805...19881988Erik SpoelstraEastern
13SoutheastOrlando MagicOrlando, FLAmway Center18,84628°32′21″N 81°23′01″W / 28.539167°N 81.38361...19891989Frank VogelEastern
14SoutheastWashington WizardsWashington, D.C.Capital One Arena20,35638°53′53″N 77°01′15″W / 38.898056°N 77.02083...1961*1961*Scott BrooksEastern
15NorthwestDenver NuggetsDenver, COPepsi Center19,52039°44′55″N 105°00′27″W / 39.748611°N 105.007...19671976Michael MaloneWestern
16NorthwestMinnesota TimberwolvesMinneapolis, MNTarget Center19,35644°58′46″N 93°16′34″W / 44.979444°N 93.27611...19891989Tom ThibodeauWestern
17NorthwestOklahoma City ThunderOklahoma City, OKChesapeake Energy Arena18,20335°27′48″N 97°30′54″W / 35.463333°N 97.515°W...1967*1967*Billy DonovanWestern
18NorthwestPortland Trail BlazersPortland, ORModa Center19,44145°31′54″N 122°40′00″W / 45.531667°N 122.666...19701970Terry StottsWestern
19NorthwestUtah JazzSalt Lake City, UTVivint Smart Home Arena19,91140°46′06″N 111°54′04″W / 40.768333°N 111.901...1974*1974*Quin SnyderWestern
20PacificGolden State WarriorsOakland, CAOracle Arena19,59637°45′01″N 122°12′11″W / 37.750278°N 122.203...1946*1946*Steve KerrWestern
21PacificLos Angeles ClippersLos Angeles, CAStaples Center19,06034°02′35″N 118°16′02″W / 34.043056°N 118.267...1970*1970*Doc RiversWestern
22PacificLos Angeles LakersLos Angeles, CAStaples Center18,99734°02′35″N 118°16′02″W / 34.043056°N 118.267...1947*1948Luke WaltonWestern
23PacificPhoenix SunsPhoenix, AZTalking Stick Resort Arena18,05533°26′45″N 112°04′17″W / 33.445833°N 112.071...19681968Jay TrianoWestern
24PacificSacramento KingsSacramento, CAGolden 1 Center17,50038°38′57″N 121°31′05″W / 38.649167°N 121.518...1923*1948Dave JoergerWestern
25SouthwestDallas MavericksDallas, TXAmerican Airlines Center19,20032°47′26″N 96°48′37″W / 32.790556°N 96.81027...19801980Rick CarlisleWestern
26SouthwestHouston RocketsHouston, TXToyota Center18,05529°45′03″N 95°21′44″W / 29.750833°N 95.36222...1967*1967*Mike D'AntoniWestern
27SouthwestMemphis GrizzliesMemphis, TNFedExForum18,11935°08′18″N 90°03′02″W / 35.138333°N 90.05055...1995*1995*J. B. BickerstaffWestern
28SouthwestNew Orleans PelicansNew Orleans, LASmoothie King Center16,86729°56′56″N 90°04′55″W / 29.948889°N 90.08194...2002*2002*Alvin GentryWestern
29SouthwestSan Antonio SpursSan Antonio, TXAT&T Center18,41829°25′37″N 98°26′15″W / 29.426944°N 98.4375°...1967*1976Gregg PopovichWestern
\n", "
" ], "text/plain": [ "0 Division Team City \\\n", "0 Atlantic Boston Celtics Boston, MA \n", "1 Atlantic Brooklyn Nets New York City, NY \n", "2 Atlantic New York Knicks New York City, NY \n", "3 Atlantic Philadelphia 76ers Philadelphia, PA \n", "4 Atlantic Toronto Raptors Toronto, ON \n", "5 Central Chicago Bulls Chicago, IL \n", "6 Central Cleveland Cavaliers Cleveland, OH \n", "7 Central Detroit Pistons Detroit, MI \n", "8 Central Indiana Pacers Indianapolis, IN \n", "9 Central Milwaukee Bucks Milwaukee, WI \n", "10 Southeast Atlanta Hawks Atlanta, GA \n", "11 Southeast Charlotte Hornets Charlotte, NC \n", "12 Southeast Miami Heat Miami, FL \n", "13 Southeast Orlando Magic Orlando, FL \n", "14 Southeast Washington Wizards Washington, D.C. \n", "15 Northwest Denver Nuggets Denver, CO \n", "16 Northwest Minnesota Timberwolves Minneapolis, MN \n", "17 Northwest Oklahoma City Thunder Oklahoma City, OK \n", "18 Northwest Portland Trail Blazers Portland, OR \n", "19 Northwest Utah Jazz Salt Lake City, UT \n", "20 Pacific Golden State Warriors Oakland, CA \n", "21 Pacific Los Angeles Clippers Los Angeles, CA \n", "22 Pacific Los Angeles Lakers Los Angeles, CA \n", "23 Pacific Phoenix Suns Phoenix, AZ \n", "24 Pacific Sacramento Kings Sacramento, CA \n", "25 Southwest Dallas Mavericks Dallas, TX \n", "26 Southwest Houston Rockets Houston, TX \n", "27 Southwest Memphis Grizzlies Memphis, TN \n", "28 Southwest New Orleans Pelicans New Orleans, LA \n", "29 Southwest San Antonio Spurs San Antonio, TX \n", "\n", "0 Arena Capacity \\\n", "0 TD Garden 18,624 \n", "1 Barclays Center 17,732 \n", "2 Madison Square Garden 19,812 \n", "3 Wells Fargo Center 21,600 \n", "4 Air Canada Centre 19,800 \n", "5 United Center 20,917 \n", "6 Quicken Loans Arena 20,562 \n", "7 Little Caesars Arena 20,491 \n", "8 Bankers Life Fieldhouse 17,923 \n", "9 Bradley Center 18,717 \n", "10 Philips Arena 15,711 \n", "11 Spectrum Center 19,077 \n", "12 American Airlines Arena 19,600 \n", "13 Amway Center 18,846 \n", "14 Capital One Arena 20,356 \n", "15 Pepsi Center 19,520 \n", "16 Target Center 19,356 \n", "17 Chesapeake Energy Arena 18,203 \n", "18 Moda Center 19,441 \n", "19 Vivint Smart Home Arena 19,911 \n", "20 Oracle Arena 19,596 \n", "21 Staples Center 19,060 \n", "22 Staples Center 18,997 \n", "23 Talking Stick Resort Arena 18,055 \n", "24 Golden 1 Center 17,500 \n", "25 American Airlines Center 19,200 \n", "26 Toyota Center 18,055 \n", "27 FedExForum 18,119 \n", "28 Smoothie King Center 16,867 \n", "29 AT&T Center 18,418 \n", "\n", "0 Coordinates Founded Joined \\\n", "0 42°21′59″N 71°03′44″W / 42.366303°N 71.06222... 1946 1946 \n", "1 40°40′58″N 73°58′29″W / 40.68265°N 73.974689... 1967* 1976 \n", "2 40°45′02″N 73°59′37″W / 40.750556°N 73.99361... 1946 1946 \n", "3 39°54′04″N 75°10′19″W / 39.901111°N 75.17194... 1946* 1949 \n", "4 43°38′36″N 79°22′45″W / 43.643333°N 79.37916... 1995 1995 \n", "5 41°52′50″N 87°40′27″W / 41.880556°N 87.67416... 1966 1966 \n", "6 41°29′47″N 81°41′17″W / 41.496389°N 81.68805... 1970 1970 \n", "7 42°41′49″N 83°14′44″W / 42.696944°N 83.24555... 1941* 1948 \n", "8 39°45′50″N 86°09′20″W / 39.763889°N 86.15555... 1967 1976 \n", "9 43°02′37″N 87°55′01″W / 43.043611°N 87.91694... 1968 1968 \n", "10 33°45′26″N 84°23′47″W / 33.757222°N 84.39638... 1946* 1949 \n", "11 35°13′30″N 80°50′21″W / 35.225°N 80.839167°W... 1988* 1988* \n", "12 25°46′53″N 80°11′17″W / 25.781389°N 80.18805... 1988 1988 \n", "13 28°32′21″N 81°23′01″W / 28.539167°N 81.38361... 1989 1989 \n", "14 38°53′53″N 77°01′15″W / 38.898056°N 77.02083... 1961* 1961* \n", "15 39°44′55″N 105°00′27″W / 39.748611°N 105.007... 1967 1976 \n", "16 44°58′46″N 93°16′34″W / 44.979444°N 93.27611... 1989 1989 \n", "17 35°27′48″N 97°30′54″W / 35.463333°N 97.515°W... 1967* 1967* \n", "18 45°31′54″N 122°40′00″W / 45.531667°N 122.666... 1970 1970 \n", "19 40°46′06″N 111°54′04″W / 40.768333°N 111.901... 1974* 1974* \n", "20 37°45′01″N 122°12′11″W / 37.750278°N 122.203... 1946* 1946* \n", "21 34°02′35″N 118°16′02″W / 34.043056°N 118.267... 1970* 1970* \n", "22 34°02′35″N 118°16′02″W / 34.043056°N 118.267... 1947* 1948 \n", "23 33°26′45″N 112°04′17″W / 33.445833°N 112.071... 1968 1968 \n", "24 38°38′57″N 121°31′05″W / 38.649167°N 121.518... 1923* 1948 \n", "25 32°47′26″N 96°48′37″W / 32.790556°N 96.81027... 1980 1980 \n", "26 29°45′03″N 95°21′44″W / 29.750833°N 95.36222... 1967* 1967* \n", "27 35°08′18″N 90°03′02″W / 35.138333°N 90.05055... 1995* 1995* \n", "28 29°56′56″N 90°04′55″W / 29.948889°N 90.08194... 2002* 2002* \n", "29 29°25′37″N 98°26′15″W / 29.426944°N 98.4375°... 1967* 1976 \n", "\n", "0 Head coach Conference \n", "0 Brad Stevens Eastern \n", "1 Kenny Atkinson Eastern \n", "2 Jeff Hornacek Eastern \n", "3 Brett Brown Eastern \n", "4 Dwane Casey Eastern \n", "5 Fred Hoiberg Eastern \n", "6 Tyronn Lue Eastern \n", "7 Stan Van Gundy Eastern \n", "8 Nate McMillan Eastern \n", "9 Joe Prunty Eastern \n", "10 Mike Budenholzer Eastern \n", "11 Steve Clifford Eastern \n", "12 Erik Spoelstra Eastern \n", "13 Frank Vogel Eastern \n", "14 Scott Brooks Eastern \n", "15 Michael Malone Western \n", "16 Tom Thibodeau Western \n", "17 Billy Donovan Western \n", "18 Terry Stotts Western \n", "19 Quin Snyder Western \n", "20 Steve Kerr Western \n", "21 Doc Rivers Western \n", "22 Luke Walton Western \n", "23 Jay Triano Western \n", "24 Dave Joerger Western \n", "25 Rick Carlisle Western \n", "26 Mike D'Antoni Western \n", "27 J. B. Bickerstaff Western \n", "28 Alvin Gentry Western \n", "29 Gregg Popovich Western " ] }, "execution_count": 15, "metadata": {}, "output_type": "execute_result" } ], "source": [ "df = cleanup_nba_conferences(df)\n", "df" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "#### City and Postal Code\n", "\n", "Next, we want to split the city and the postal code into two separate columns.\n", "\n", "To do this, we need to use [`pandas` string-handling methods](https://pandas.pydata.org/pandas-docs/stable/text.html)." ] }, { "cell_type": "code", "execution_count": 16, "metadata": {}, "outputs": [], "source": [ "def split_city_postal(df):\n", " df['Postal'] = df['City'].str.rsplit(',', n=1).str.get(1).str.replace('.', '').str.strip()\n", " df['City'] = df['City'].str.rsplit(',', n=1).str.get(0)\n", " return df" ] }, { "cell_type": "code", "execution_count": 17, "metadata": {}, "outputs": [ { "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
DivisionTeamCityArenaCapacityCoordinatesFoundedJoinedHead coachConferencePostal
0AtlanticBoston CelticsBostonTD Garden18,62442°21′59″N 71°03′44″W / 42.366303°N 71.06222...19461946Brad StevensEasternMA
1AtlanticBrooklyn NetsNew York CityBarclays Center17,73240°40′58″N 73°58′29″W / 40.68265°N 73.974689...1967*1976Kenny AtkinsonEasternNY
2AtlanticNew York KnicksNew York CityMadison Square Garden19,81240°45′02″N 73°59′37″W / 40.750556°N 73.99361...19461946Jeff HornacekEasternNY
3AtlanticPhiladelphia 76ersPhiladelphiaWells Fargo Center21,60039°54′04″N 75°10′19″W / 39.901111°N 75.17194...1946*1949Brett BrownEasternPA
4AtlanticToronto RaptorsTorontoAir Canada Centre19,80043°38′36″N 79°22′45″W / 43.643333°N 79.37916...19951995Dwane CaseyEasternON
\n", "
" ], "text/plain": [ "0 Division Team City Arena \\\n", "0 Atlantic Boston Celtics Boston TD Garden \n", "1 Atlantic Brooklyn Nets New York City Barclays Center \n", "2 Atlantic New York Knicks New York City Madison Square Garden \n", "3 Atlantic Philadelphia 76ers Philadelphia Wells Fargo Center \n", "4 Atlantic Toronto Raptors Toronto Air Canada Centre \n", "\n", "0 Capacity Coordinates Founded Joined \\\n", "0 18,624 42°21′59″N 71°03′44″W / 42.366303°N 71.06222... 1946 1946 \n", "1 17,732 40°40′58″N 73°58′29″W / 40.68265°N 73.974689... 1967* 1976 \n", "2 19,812 40°45′02″N 73°59′37″W / 40.750556°N 73.99361... 1946 1946 \n", "3 21,600 39°54′04″N 75°10′19″W / 39.901111°N 75.17194... 1946* 1949 \n", "4 19,800 43°38′36″N 79°22′45″W / 43.643333°N 79.37916... 1995 1995 \n", "\n", "0 Head coach Conference Postal \n", "0 Brad Stevens Eastern MA \n", "1 Kenny Atkinson Eastern NY \n", "2 Jeff Hornacek Eastern NY \n", "3 Brett Brown Eastern PA \n", "4 Dwane Casey Eastern ON " ] }, "execution_count": 17, "metadata": {}, "output_type": "execute_result" } ], "source": [ "df = split_city_postal(df)\n", "df.head()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "#### Arena Latitude and Longitude\n", "\n", "Lastly, we need to clean up the arena latitude and longitude. This is a little tricky, since there is a lot of content packed into the Coordinates column in the `DataFrame`. Let's focus on one row to see what's going on." ] }, { "cell_type": "code", "execution_count": 18, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "[['42°21′59″N 71°03′44″W\\ufeff ',\n", " ' \\ufeff42.366303°N 71.062228°W\\ufeff ',\n", " ' 42.366303; -71.062228\\ufeff (Boston Celtics)']]" ] }, "execution_count": 18, "metadata": {}, "output_type": "execute_result" } ], "source": [ "row = list(df.loc[df['Team'] == 'Boston Celtics', 'Coordinates'].str.split('/'))\n", "row" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "There are 3 elements per row, with different formats for the latitude and longitude. In case you were wondering, the `\\ufeff` appearing in the text strings are a special [Unicode](https://en.wikipedia.org/wiki/Byte_order_mark) character. We are going to ignore the first two elements and just get the third.\n", "\n", "We need to split this third element into latitude and longitude by the semi-colon (;) and extract the numbers. Again, we will use `pandas` string-handling methods, along with [regular expressions](https://docs.python.org/3/howto/regex.html). Regular expressions are a very general way to find and extract text in many computer languages, including Python. In this particular case, the regular expression just gets numbers with a decimal point, potentially starting with a negative sign." ] }, { "cell_type": "code", "execution_count": 19, "metadata": {}, "outputs": [], "source": [ "def get_arena_lat_lon(df):\n", " df['Coordinates'] = df['Coordinates'].str.split('/').str.get(2).str.split(';')\n", " df['Latitude'] = df['Coordinates'].str.get(0).astype(float)\n", " df['Longitude'] = df['Coordinates'].str.get(1).str.extract('(-+[\\d]*\\.[\\d]*)', expand=False).astype(float)\n", " return df" ] }, { "cell_type": "code", "execution_count": 20, "metadata": {}, "outputs": [ { "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
DivisionTeamCityArenaCapacityCoordinatesFoundedJoinedHead coachConferencePostalLatitudeLongitude
0AtlanticBoston CelticsBostonTD Garden18,624[ 42.366303, -71.062228 (Boston Celtics)]19461946Brad StevensEasternMA42.366303-71.062228
1AtlanticBrooklyn NetsNew York CityBarclays Center17,732[ 40.68265, -73.974689 (Brooklyn Nets)]1967*1976Kenny AtkinsonEasternNY40.682650-73.974689
2AtlanticNew York KnicksNew York CityMadison Square Garden19,812[ 40.750556, -73.993611 (New York Knicks)]19461946Jeff HornacekEasternNY40.750556-73.993611
3AtlanticPhiladelphia 76ersPhiladelphiaWells Fargo Center21,600[ 39.901111, -75.171944 (Philadelphia 76ers)]1946*1949Brett BrownEasternPA39.901111-75.171944
4AtlanticToronto RaptorsTorontoAir Canada Centre19,800[ 43.643333, -79.379167 (Toronto Raptors)]19951995Dwane CaseyEasternON43.643333-79.379167
\n", "
" ], "text/plain": [ "0 Division Team City Arena \\\n", "0 Atlantic Boston Celtics Boston TD Garden \n", "1 Atlantic Brooklyn Nets New York City Barclays Center \n", "2 Atlantic New York Knicks New York City Madison Square Garden \n", "3 Atlantic Philadelphia 76ers Philadelphia Wells Fargo Center \n", "4 Atlantic Toronto Raptors Toronto Air Canada Centre \n", "\n", "0 Capacity Coordinates Founded Joined \\\n", "0 18,624 [ 42.366303, -71.062228 (Boston Celtics)] 1946 1946 \n", "1 17,732 [ 40.68265, -73.974689 (Brooklyn Nets)] 1967* 1976 \n", "2 19,812 [ 40.750556, -73.993611 (New York Knicks)] 1946 1946 \n", "3 21,600 [ 39.901111, -75.171944 (Philadelphia 76ers)] 1946* 1949 \n", "4 19,800 [ 43.643333, -79.379167 (Toronto Raptors)] 1995 1995 \n", "\n", "0 Head coach Conference Postal Latitude Longitude \n", "0 Brad Stevens Eastern MA 42.366303 -71.062228 \n", "1 Kenny Atkinson Eastern NY 40.682650 -73.974689 \n", "2 Jeff Hornacek Eastern NY 40.750556 -73.993611 \n", "3 Brett Brown Eastern PA 39.901111 -75.171944 \n", "4 Dwane Casey Eastern ON 43.643333 -79.379167 " ] }, "execution_count": 20, "metadata": {}, "output_type": "execute_result" } ], "source": [ "df = get_arena_lat_lon(df)\n", "df.head()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "#### Putting It All Together\n", "\n", "Now we'll just put all these steps into one function. This function will combine all the steps, do a few more simple cleanups, and drop columns that we don't need at the end. We also want to save the final, cleaned-up results." ] }, { "cell_type": "code", "execution_count": 21, "metadata": {}, "outputs": [], "source": [ "def wiki_teams_info(raw):\n", " df = setup_columns(raw)\n", " df = cleanup_nba_conferences(df)\n", " df = split_city_postal(df)\n", " df = get_arena_lat_lon(df)\n", " df['Capacity'] = df['Capacity'].str.replace(',', '').astype(int)\n", " df['Founded'] = df['Founded'].str.replace('*', '').astype(int)\n", " df['Joined'] = df['Joined'].str.replace('*', '').astype(int)\n", " cols = [\n", " 'Team',\n", " 'Conference',\n", " 'Division',\n", " 'City',\n", " 'Postal',\n", " 'Arena',\n", " 'Capacity',\n", " 'Latitude',\n", " 'Longitude',\n", " 'Founded',\n", " 'Joined',\n", " 'Head coach',\n", " ]\n", " return df[cols].reset_index(drop=True)" ] }, { "cell_type": "code", "execution_count": 22, "metadata": {}, "outputs": [ { "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
TeamConferenceDivisionCityPostalArenaCapacityLatitudeLongitudeFoundedJoinedHead coach
0Boston CelticsEasternAtlanticBostonMATD Garden1862442.366303-71.06222819461946Brad Stevens
1Brooklyn NetsEasternAtlanticNew York CityNYBarclays Center1773240.682650-73.97468919671976Kenny Atkinson
2New York KnicksEasternAtlanticNew York CityNYMadison Square Garden1981240.750556-73.99361119461946Jeff Hornacek
3Philadelphia 76ersEasternAtlanticPhiladelphiaPAWells Fargo Center2160039.901111-75.17194419461949Brett Brown
4Toronto RaptorsEasternAtlanticTorontoONAir Canada Centre1980043.643333-79.37916719951995Dwane Casey
5Chicago BullsEasternCentralChicagoILUnited Center2091741.880556-87.67416719661966Fred Hoiberg
6Cleveland CavaliersEasternCentralClevelandOHQuicken Loans Arena2056241.496389-81.68805619701970Tyronn Lue
7Detroit PistonsEasternCentralDetroitMILittle Caesars Arena2049142.696944-83.24555619411948Stan Van Gundy
8Indiana PacersEasternCentralIndianapolisINBankers Life Fieldhouse1792339.763889-86.15555619671976Nate McMillan
9Milwaukee BucksEasternCentralMilwaukeeWIBradley Center1871743.043611-87.91694419681968Joe Prunty
10Atlanta HawksEasternSoutheastAtlantaGAPhilips Arena1571133.757222-84.39638919461949Mike Budenholzer
11Charlotte HornetsEasternSoutheastCharlotteNCSpectrum Center1907735.225000-80.83916719881988Steve Clifford
12Miami HeatEasternSoutheastMiamiFLAmerican Airlines Arena1960025.781389-80.18805619881988Erik Spoelstra
13Orlando MagicEasternSoutheastOrlandoFLAmway Center1884628.539167-81.38361119891989Frank Vogel
14Washington WizardsEasternSoutheastWashingtonDCCapital One Arena2035638.898056-77.02083319611961Scott Brooks
15Denver NuggetsWesternNorthwestDenverCOPepsi Center1952039.748611-105.00750019671976Michael Malone
16Minnesota TimberwolvesWesternNorthwestMinneapolisMNTarget Center1935644.979444-93.27611119891989Tom Thibodeau
17Oklahoma City ThunderWesternNorthwestOklahoma CityOKChesapeake Energy Arena1820335.463333-97.51500019671967Billy Donovan
18Portland Trail BlazersWesternNorthwestPortlandORModa Center1944145.531667-122.66666719701970Terry Stotts
19Utah JazzWesternNorthwestSalt Lake CityUTVivint Smart Home Arena1991140.768333-111.90111119741974Quin Snyder
20Golden State WarriorsWesternPacificOaklandCAOracle Arena1959637.750278-122.20305619461946Steve Kerr
21Los Angeles ClippersWesternPacificLos AngelesCAStaples Center1906034.043056-118.26722219701970Doc Rivers
22Los Angeles LakersWesternPacificLos AngelesCAStaples Center1899734.043056-118.26722219471948Luke Walton
23Phoenix SunsWesternPacificPhoenixAZTalking Stick Resort Arena1805533.445833-112.07138919681968Jay Triano
24Sacramento KingsWesternPacificSacramentoCAGolden 1 Center1750038.649167-121.51805619231948Dave Joerger
25Dallas MavericksWesternSouthwestDallasTXAmerican Airlines Center1920032.790556-96.81027819801980Rick Carlisle
26Houston RocketsWesternSouthwestHoustonTXToyota Center1805529.750833-95.36222219671967Mike D'Antoni
27Memphis GrizzliesWesternSouthwestMemphisTNFedExForum1811935.138333-90.05055619951995J. B. Bickerstaff
28New Orleans PelicansWesternSouthwestNew OrleansLASmoothie King Center1686729.948889-90.08194420022002Alvin Gentry
29San Antonio SpursWesternSouthwestSan AntonioTXAT&T Center1841829.426944-98.43750019671976Gregg Popovich
\n", "
" ], "text/plain": [ "0 Team Conference Division City Postal \\\n", "0 Boston Celtics Eastern Atlantic Boston MA \n", "1 Brooklyn Nets Eastern Atlantic New York City NY \n", "2 New York Knicks Eastern Atlantic New York City NY \n", "3 Philadelphia 76ers Eastern Atlantic Philadelphia PA \n", "4 Toronto Raptors Eastern Atlantic Toronto ON \n", "5 Chicago Bulls Eastern Central Chicago IL \n", "6 Cleveland Cavaliers Eastern Central Cleveland OH \n", "7 Detroit Pistons Eastern Central Detroit MI \n", "8 Indiana Pacers Eastern Central Indianapolis IN \n", "9 Milwaukee Bucks Eastern Central Milwaukee WI \n", "10 Atlanta Hawks Eastern Southeast Atlanta GA \n", "11 Charlotte Hornets Eastern Southeast Charlotte NC \n", "12 Miami Heat Eastern Southeast Miami FL \n", "13 Orlando Magic Eastern Southeast Orlando FL \n", "14 Washington Wizards Eastern Southeast Washington DC \n", "15 Denver Nuggets Western Northwest Denver CO \n", "16 Minnesota Timberwolves Western Northwest Minneapolis MN \n", "17 Oklahoma City Thunder Western Northwest Oklahoma City OK \n", "18 Portland Trail Blazers Western Northwest Portland OR \n", "19 Utah Jazz Western Northwest Salt Lake City UT \n", "20 Golden State Warriors Western Pacific Oakland CA \n", "21 Los Angeles Clippers Western Pacific Los Angeles CA \n", "22 Los Angeles Lakers Western Pacific Los Angeles CA \n", "23 Phoenix Suns Western Pacific Phoenix AZ \n", "24 Sacramento Kings Western Pacific Sacramento CA \n", "25 Dallas Mavericks Western Southwest Dallas TX \n", "26 Houston Rockets Western Southwest Houston TX \n", "27 Memphis Grizzlies Western Southwest Memphis TN \n", "28 New Orleans Pelicans Western Southwest New Orleans LA \n", "29 San Antonio Spurs Western Southwest San Antonio TX \n", "\n", "0 Arena Capacity Latitude Longitude Founded \\\n", "0 TD Garden 18624 42.366303 -71.062228 1946 \n", "1 Barclays Center 17732 40.682650 -73.974689 1967 \n", "2 Madison Square Garden 19812 40.750556 -73.993611 1946 \n", "3 Wells Fargo Center 21600 39.901111 -75.171944 1946 \n", "4 Air Canada Centre 19800 43.643333 -79.379167 1995 \n", "5 United Center 20917 41.880556 -87.674167 1966 \n", "6 Quicken Loans Arena 20562 41.496389 -81.688056 1970 \n", "7 Little Caesars Arena 20491 42.696944 -83.245556 1941 \n", "8 Bankers Life Fieldhouse 17923 39.763889 -86.155556 1967 \n", "9 Bradley Center 18717 43.043611 -87.916944 1968 \n", "10 Philips Arena 15711 33.757222 -84.396389 1946 \n", "11 Spectrum Center 19077 35.225000 -80.839167 1988 \n", "12 American Airlines Arena 19600 25.781389 -80.188056 1988 \n", "13 Amway Center 18846 28.539167 -81.383611 1989 \n", "14 Capital One Arena 20356 38.898056 -77.020833 1961 \n", "15 Pepsi Center 19520 39.748611 -105.007500 1967 \n", "16 Target Center 19356 44.979444 -93.276111 1989 \n", "17 Chesapeake Energy Arena 18203 35.463333 -97.515000 1967 \n", "18 Moda Center 19441 45.531667 -122.666667 1970 \n", "19 Vivint Smart Home Arena 19911 40.768333 -111.901111 1974 \n", "20 Oracle Arena 19596 37.750278 -122.203056 1946 \n", "21 Staples Center 19060 34.043056 -118.267222 1970 \n", "22 Staples Center 18997 34.043056 -118.267222 1947 \n", "23 Talking Stick Resort Arena 18055 33.445833 -112.071389 1968 \n", "24 Golden 1 Center 17500 38.649167 -121.518056 1923 \n", "25 American Airlines Center 19200 32.790556 -96.810278 1980 \n", "26 Toyota Center 18055 29.750833 -95.362222 1967 \n", "27 FedExForum 18119 35.138333 -90.050556 1995 \n", "28 Smoothie King Center 16867 29.948889 -90.081944 2002 \n", "29 AT&T Center 18418 29.426944 -98.437500 1967 \n", "\n", "0 Joined Head coach \n", "0 1946 Brad Stevens \n", "1 1976 Kenny Atkinson \n", "2 1946 Jeff Hornacek \n", "3 1949 Brett Brown \n", "4 1995 Dwane Casey \n", "5 1966 Fred Hoiberg \n", "6 1970 Tyronn Lue \n", "7 1948 Stan Van Gundy \n", "8 1976 Nate McMillan \n", "9 1968 Joe Prunty \n", "10 1949 Mike Budenholzer \n", "11 1988 Steve Clifford \n", "12 1988 Erik Spoelstra \n", "13 1989 Frank Vogel \n", "14 1961 Scott Brooks \n", "15 1976 Michael Malone \n", "16 1989 Tom Thibodeau \n", "17 1967 Billy Donovan \n", "18 1970 Terry Stotts \n", "19 1974 Quin Snyder \n", "20 1946 Steve Kerr \n", "21 1970 Doc Rivers \n", "22 1948 Luke Walton \n", "23 1968 Jay Triano \n", "24 1948 Dave Joerger \n", "25 1980 Rick Carlisle \n", "26 1967 Mike D'Antoni \n", "27 1995 J. B. Bickerstaff \n", "28 2002 Alvin Gentry \n", "29 1976 Gregg Popovich " ] }, "execution_count": 22, "metadata": {}, "output_type": "execute_result" } ], "source": [ "df = wiki_teams_info(raw)\n", "df" ] }, { "cell_type": "code", "execution_count": 23, "metadata": {}, "outputs": [], "source": [ "OUTPUT_DIR = PARENT_DIR / 'data' / 'scraped'\n", "OUTPUT_DIR.mkdir(exist_ok=True, parents=True)\n", "csvfile = OUTPUT_DIR.joinpath('wiki-nba_team_info.csv')\n", "df.to_csv(csvfile, index=False)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "You can use these HTML scraping tools and techniques in your own sports analytics projects. But we're not done yet.\n", "\n", "### A Map of NBA Arenas\n", "\n", "We haven't done anything useful with the NBA team data from Wikipedia. One nice thing we can do is to draw a map of NBA arena locations using the latitude and longitude information.\n", "\n", "There's a more practical use for this arena data. Most serious [strength of schedule](https://en.wikipedia.org/wiki/Strength_of_schedule) analysis in the NBA looks at road games, rest and distance traveled. In a future post, we'll see how to incorporate this geographic information to estimate travel distance between games.\n", "\n", "#### Another HTML Table to Scrape\n", "\n", "We are going to use Python's [Basemap package](https://basemaptutorial.readthedocs.io/en/latest/) to draw a map of North America with NBA arenas. We are also going to going to fill in the U.S. states having NBA arenas using a different color for each NBA Division. Sorry Toronto and Washington fans. Any coloring for Washington, D.C. wouldn't be visible anyway, and this example won't fill in the province of Ontario.\n", "\n", "In order to do this coloring, we need to use [shapefiles](https://basemaptutorial.readthedocs.io/en/latest/shapefile.html). These files contain information about the shapes of various geographic features (in this case, U.S. states). We will overlay these shapes on our map filled with the correct color. The shapefiles we will use come from the [U.S. Census Bureau](https://www.census.gov/geo/maps-data/data/prev_cartbndry_names.html).\n", "\n", "In order to use these particular shapefiles, we need to be able to move between state names and postal abbreviations. Our arena data has only the postal abbreviations, and the shapefiles use state names.\n", "\n", "There are plenty of ways to get this information (including typing it in to a Python program yourself). However, since this technical guide is about scraping HTML tables, we can use it as another opportunity to scrape a Wikipedia table.\n", "\n", "Let's scrape [Wikipedia's list of U.S. state abbreviations](https://en.wikipedia.org/wiki/List_of_U.S._state_abbreviations)." ] }, { "cell_type": "code", "execution_count": 24, "metadata": {}, "outputs": [], "source": [ "ABBR_URL = 'https://en.wikipedia.org/wiki/List_of_U.S._state_abbreviations'" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "We can use the same HTML table scraping function as before. In this case, we want to use a table class of `'sortable'` to get the right table." ] }, { "cell_type": "code", "execution_count": 25, "metadata": {}, "outputs": [], "source": [ "abbr_tables = pps.HTMLTables(ABBR_URL, headers=REQUEST_HEADERS, table_class='sortable')" ] }, { "cell_type": "code", "execution_count": 26, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "1" ] }, "execution_count": 26, "metadata": {}, "output_type": "execute_result" } ], "source": [ "len(abbr_tables)" ] }, { "cell_type": "code", "execution_count": 27, "metadata": {}, "outputs": [ { "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
0123456789
0Codes: ISO ISO 3166 codes (2-letter, 3-l...NaNNaNNaNNaNNaNNaNNaNNaNNaN
1Name and status of regionNaNISOANSINaNUSPSUSCGGPOAPOther abbreviations
2NaNNaNNaN
3United States of AmericaFederal stateUS USA 840US00U.S.U.S.U.S.A.
4AlabamaStateUS-ALAL01ALALAla.Ala.
5AlaskaStateUS-AKAK02AKAKAlaskaAlaskaAlas.
6ArizonaStateUS-AZAZ04AZAZAriz.Ariz.Az.
7ArkansasStateUS-ARAR05ARARArk.Ark.
8CaliforniaStateUS-CACA06CACFCalif.Calif.Ca., Cal.
9ColoradoStateUS-COCO08COCLColo.Colo.Col.
10ConnecticutStateUS-CTCT09CTCTConn.Conn.Ct.
11DelawareStateUS-DEDE10DEDLDel.Del.De.
12District of ColumbiaFederal districtUS-DCDC11DCDCD.C.D.C.Wash. D.C.
13FloridaStateUS-FLFL12FLFLFla.Fla.Fl., Flor.
14GeorgiaStateUS-GAGA13GAGAGa.Ga.
15HawaiiStateUS-HIHI15HIHAHawaiiHawaiiH.I.
16IdahoStateUS-IDID16IDIDIdahoIdahoId., Ida.
17IllinoisStateUS-ILIL17ILILIll.Ill.Il., Ills., Ill's
18IndianaStateUS-ININ18ININInd.Ind.In.
19IowaStateUS-IAIA19IAIAIowaIowaIa., Ioa.
20KansasStateUS-KSKS20KSKAKans.Kan.Ks., Ka.
21KentuckyState (Commonwealth)US-KYKY21KYKYKy.Ky.Ken., Kent.
22LouisianaStateUS-LALA22LALALa.La.
23MaineStateUS-MEME23MEMEMaineMaineMe.
24MarylandStateUS-MDMD24MDMDMd.Md.
25MassachusettsState (Commonwealth)US-MAMA25MAMSMass.Mass.
26MichiganStateUS-MIMI26MIMCMich.Mich.
27MinnesotaStateUS-MNMN27MNMNMinn.Minn.Mn.
28MississippiStateUS-MSMS28MSMIMiss.Miss.
29MissouriStateUS-MOMO29MOMOMo.Mo.
.................................
51WashingtonStateUS-WAWA53WAWNWash.Wash.Wa., Wn.
52West VirginiaStateUS-WVWV54WVWVW. Va.W.Va.W.V., W. Virg.
53WisconsinStateUS-WIWI55WIWSWis.Wis.Wi., Wisc.
54WyomingStateUS-WYWY56WYWYWyo.Wyo.Wy.
55American SamoaInsular area (Territory)AS ASM 016 US-ASAS60ASASA.S.
56GuamInsular area (Territory)GU GUM 316 US-GUGU66GUGUGuam
57Northern Mariana IslandsInsular area (Commonwealth)MP MNP 580 US-MPMP69MPCMM.P.CNMI
58Puerto RicoInsular area (Territory)PR PRI 630 US-PRPR72PRPRP.R.
59U.S. Virgin IslandsInsular area (Territory)VI VIR 850 US-VIVI78VIVIV.I.U.S.V.I.
60U.S. Minor Outlying IslandsInsular areasUM UMI 581 US-UMUM74
61Baker IslandislandUM-8181XB
62Howland IslandislandUM-8484XH
63Jarvis IslandislandUM-8686XQ
64Johnston AtollatollUM-6767XU
65Kingman ReefatollUM-8989XM
66Midway IslandsatollUM-7171QM
67Navassa IslandislandUM-7676XV
68Palmyra AtollatollUM-9595XL
69Wake IslandatollUM-7979QW
70MicronesiaFreely associated stateFM FSM 583FM64FM
71Marshall IslandsFreely associated stateMH MHL 584MH68MH
72PalauFreely associated statePW PLW 585PW70PW
73U.S. Armed Forces – AmericasUS military mail codeAA
74U.S. Armed Forces – EuropeUS military mail codeAE
75U.S. Armed Forces – PacificUS military mail codeAP
76Northern Mariana IslandsObsolete postal codeCM
77Panama Canal ZoneObsolete postal codePZ PCZ 594CZ
78NebraskaObsolete postal codeNB
79Philippine IslandsObsolete postal codePH PHL 608PI
80Trust Territory of the Pacific IslandsObsolete postal codePC PCI 582TT
\n", "

81 rows × 10 columns

\n", "
" ], "text/plain": [ " 0 \\\n", "0 Codes: ISO ISO 3166 codes (2-letter, 3-l... \n", "1 Name and status of region \n", "2 \n", "3 United States of America \n", "4 Alabama \n", "5 Alaska \n", "6 Arizona \n", "7 Arkansas \n", "8 California \n", "9 Colorado \n", "10 Connecticut \n", "11 Delaware \n", "12 District of Columbia \n", "13 Florida \n", "14 Georgia \n", "15 Hawaii \n", "16 Idaho \n", "17 Illinois \n", "18 Indiana \n", "19 Iowa \n", "20 Kansas \n", "21 Kentucky \n", "22 Louisiana \n", "23 Maine \n", "24 Maryland \n", "25 Massachusetts \n", "26 Michigan \n", "27 Minnesota \n", "28 Mississippi \n", "29 Missouri \n", ".. ... \n", "51 Washington \n", "52 West Virginia \n", "53 Wisconsin \n", "54 Wyoming \n", "55 American Samoa \n", "56 Guam \n", "57 Northern Mariana Islands \n", "58 Puerto Rico \n", "59 U.S. Virgin Islands \n", "60 U.S. Minor Outlying Islands \n", "61 Baker Island \n", "62 Howland Island \n", "63 Jarvis Island \n", "64 Johnston Atoll \n", "65 Kingman Reef \n", "66 Midway Islands \n", "67 Navassa Island \n", "68 Palmyra Atoll \n", "69 Wake Island \n", "70 Micronesia \n", "71 Marshall Islands \n", "72 Palau \n", "73 U.S. Armed Forces – Americas \n", "74 U.S. Armed Forces – Europe \n", "75 U.S. Armed Forces – Pacific \n", "76 Northern Mariana Islands \n", "77 Panama Canal Zone \n", "78 Nebraska \n", "79 Philippine Islands \n", "80 Trust Territory of the Pacific Islands \n", "\n", " 1 2 3 4 5 6 \\\n", "0 NaN NaN NaN NaN NaN NaN \n", "1 NaN ISO ANSI NaN USPS USCG \n", "2 \n", "3 Federal state US USA 840 US 00 \n", "4 State US-AL AL 01 AL AL \n", "5 State US-AK AK 02 AK AK \n", "6 State US-AZ AZ 04 AZ AZ \n", "7 State US-AR AR 05 AR AR \n", "8 State US-CA CA 06 CA CF \n", "9 State US-CO CO 08 CO CL \n", "10 State US-CT CT 09 CT CT \n", "11 State US-DE DE 10 DE DL \n", "12 Federal district US-DC DC 11 DC DC \n", "13 State US-FL FL 12 FL FL \n", "14 State US-GA GA 13 GA GA \n", "15 State US-HI HI 15 HI HA \n", "16 State US-ID ID 16 ID ID \n", "17 State US-IL IL 17 IL IL \n", "18 State US-IN IN 18 IN IN \n", "19 State US-IA IA 19 IA IA \n", "20 State US-KS KS 20 KS KA \n", "21 State (Commonwealth) US-KY KY 21 KY KY \n", "22 State US-LA LA 22 LA LA \n", "23 State US-ME ME 23 ME ME \n", "24 State US-MD MD 24 MD MD \n", "25 State (Commonwealth) US-MA MA 25 MA MS \n", "26 State US-MI MI 26 MI MC \n", "27 State US-MN MN 27 MN MN \n", "28 State US-MS MS 28 MS MI \n", "29 State US-MO MO 29 MO MO \n", ".. ... ... ... ... ... ... \n", "51 State US-WA WA 53 WA WN \n", "52 State US-WV WV 54 WV WV \n", "53 State US-WI WI 55 WI WS \n", "54 State US-WY WY 56 WY WY \n", "55 Insular area (Territory) AS ASM 016 US-AS AS 60 AS AS \n", "56 Insular area (Territory) GU GUM 316 US-GU GU 66 GU GU \n", "57 Insular area (Commonwealth) MP MNP 580 US-MP MP 69 MP CM \n", "58 Insular area (Territory) PR PRI 630 US-PR PR 72 PR PR \n", "59 Insular area (Territory) VI VIR 850 US-VI VI 78 VI VI \n", "60 Insular areas UM UMI 581 US-UM UM 74 \n", "61 island UM-81 81 \n", "62 island UM-84 84 \n", "63 island UM-86 86 \n", "64 atoll UM-67 67 \n", "65 atoll UM-89 89 \n", "66 atoll UM-71 71 \n", "67 island UM-76 76 \n", "68 atoll UM-95 95 \n", "69 atoll UM-79 79 \n", "70 Freely associated state FM FSM 583 FM 64 FM \n", "71 Freely associated state MH MHL 584 MH 68 MH \n", "72 Freely associated state PW PLW 585 PW 70 PW \n", "73 US military mail code AA \n", "74 US military mail code AE \n", "75 US military mail code AP \n", "76 Obsolete postal code CM \n", "77 Obsolete postal code PZ PCZ 594 CZ \n", "78 Obsolete postal code NB \n", "79 Obsolete postal code PH PHL 608 PI \n", "80 Obsolete postal code PC PCI 582 TT \n", "\n", " 7 8 9 \n", "0 NaN NaN NaN \n", "1 GPO AP Other abbreviations \n", "2 NaN NaN NaN \n", "3 U.S. U.S. U.S.A. \n", "4 Ala. Ala. \n", "5 Alaska Alaska Alas. \n", "6 Ariz. Ariz. Az. \n", "7 Ark. Ark. \n", "8 Calif. Calif. Ca., Cal. \n", "9 Colo. Colo. Col. \n", "10 Conn. Conn. Ct. \n", "11 Del. Del. De. \n", "12 D.C. D.C. Wash. D.C. \n", "13 Fla. Fla. Fl., Flor. \n", "14 Ga. Ga. \n", "15 Hawaii Hawaii H.I. \n", "16 Idaho Idaho Id., Ida. \n", "17 Ill. Ill. Il., Ills., Ill's \n", "18 Ind. Ind. In. \n", "19 Iowa Iowa Ia., Ioa. \n", "20 Kans. Kan. Ks., Ka. \n", "21 Ky. Ky. Ken., Kent. \n", "22 La. La. \n", "23 Maine Maine Me. \n", "24 Md. Md. \n", "25 Mass. Mass. \n", "26 Mich. Mich. \n", "27 Minn. Minn. Mn. \n", "28 Miss. Miss. \n", "29 Mo. Mo. \n", ".. ... ... ... \n", "51 Wash. Wash. Wa., Wn. \n", "52 W. Va. W.Va. W.V., W. Virg. \n", "53 Wis. Wis. Wi., Wisc. \n", "54 Wyo. Wyo. Wy. \n", "55 A.S. \n", "56 Guam \n", "57 M.P. CNMI \n", "58 P.R. \n", "59 V.I. U.S.V.I. \n", "60 \n", "61 XB \n", "62 XH \n", "63 XQ \n", "64 XU \n", "65 XM \n", "66 QM \n", "67 XV \n", "68 XL \n", "69 QW \n", "70 \n", "71 \n", "72 \n", "73 \n", "74 \n", "75 \n", "76 \n", "77 \n", "78 \n", "79 \n", "80 \n", "\n", "[81 rows x 10 columns]" ] }, "execution_count": 27, "metadata": {}, "output_type": "execute_result" } ], "source": [ "abbr_df = abbr_tables[0].to_df()\n", "abbr_df" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "#### Cleaning an Ugly Table\n", "\n", "This is a relatively ugly table. Notice that many of the cells are blank. One of the reasons I wanted to use this example is to show how this general web scraping framework works, even for ugly tables.\n", "\n", "In this case, we just want the name, status and USPS columns. We can also filter out any obsolete postal codes." ] }, { "cell_type": "code", "execution_count": 28, "metadata": {}, "outputs": [], "source": [ "def usps_abbrs(raw):\n", " df = raw.drop(raw.index[:4]).reset_index(drop=True)\n", " df = df.iloc[:, [0, 1, 5]]\n", " df.columns = ['Name', 'Status', 'USPS']\n", " df = df.loc[(df['USPS'] != '') & (~df['Status'].str.contains('Obsolete')), ['Name', 'Status', 'USPS']]\n", " return df.reset_index(drop=True)" ] }, { "cell_type": "code", "execution_count": 29, "metadata": {}, "outputs": [ { "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
NameStatusUSPS
42TennesseeStateTN
43TexasStateTX
44UtahStateUT
45VermontStateVT
46VirginiaState (Commonwealth)VA
47WashingtonStateWA
48West VirginiaStateWV
49WisconsinStateWI
50WyomingStateWY
51American SamoaInsular area (Territory)AS
52GuamInsular area (Territory)GU
53Northern Mariana IslandsInsular area (Commonwealth)MP
54Puerto RicoInsular area (Territory)PR
55U.S. Virgin IslandsInsular area (Territory)VI
56MicronesiaFreely associated stateFM
57Marshall IslandsFreely associated stateMH
58PalauFreely associated statePW
59U.S. Armed Forces – AmericasUS military mail codeAA
60U.S. Armed Forces – EuropeUS military mail codeAE
61U.S. Armed Forces – PacificUS military mail codeAP
\n", "
" ], "text/plain": [ " Name Status USPS\n", "42 Tennessee State TN\n", "43 Texas State TX\n", "44 Utah State UT\n", "45 Vermont State VT\n", "46 Virginia State (Commonwealth) VA\n", "47 Washington State WA\n", "48 West Virginia State WV\n", "49 Wisconsin State WI\n", "50 Wyoming State WY\n", "51 American Samoa Insular area (Territory) AS\n", "52 Guam Insular area (Territory) GU\n", "53 Northern Mariana Islands Insular area (Commonwealth) MP\n", "54 Puerto Rico Insular area (Territory) PR\n", "55 U.S. Virgin Islands Insular area (Territory) VI\n", "56 Micronesia Freely associated state FM\n", "57 Marshall Islands Freely associated state MH\n", "58 Palau Freely associated state PW\n", "59 U.S. Armed Forces – Americas US military mail code AA\n", "60 U.S. Armed Forces – Europe US military mail code AE\n", "61 U.S. Armed Forces – Pacific US military mail code AP" ] }, "execution_count": 29, "metadata": {}, "output_type": "execute_result" } ], "source": [ "usps_df = usps_abbrs(abbr_df)\n", "usps_df.tail(20)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "This simple table is just what we need. Now, we can build a function which will return the postal abbreviation given the state name." ] }, { "cell_type": "code", "execution_count": 30, "metadata": {}, "outputs": [], "source": [ "def state_abbr_mapper(usps_df):\n", " name_usps = usps_df[['Name', 'USPS']].set_index('Name').to_dict(orient='Index')\n", " def inner(name):\n", " return name_usps[name]['USPS']\n", " return inner" ] }, { "cell_type": "code", "execution_count": 31, "metadata": {}, "outputs": [], "source": [ "name2abbr = state_abbr_mapper(usps_df)" ] }, { "cell_type": "code", "execution_count": 32, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "'AL'" ] }, "execution_count": 32, "metadata": {}, "output_type": "execute_result" } ], "source": [ "name2abbr('Alabama')" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Take another look at what this function does. We used an inner function, which we return. This inner function \"remembers\" the `DataFrame` which was passed in to the outer function. It will be very easy to use this simple function as a wrapper to the `DataFrame` in our map-drawing code below.\n", "\n", "#### Drawing the Map\n", "\n", "Now we can start putting the pieces of the map together.\n", "\n", "First, we need a function to create a Basemap of the lower 48 U.S. states, along with portions of Canada and Mexico." ] }, { "cell_type": "code", "execution_count": 33, "metadata": {}, "outputs": [], "source": [ "def draw_basemap():\n", " \"\"\"Lambert Conformal map of lower 48 U.S. states with portions of Canada and Mexico.\"\"\"\n", " m = Basemap(\n", " llcrnrlon=-119,\n", " llcrnrlat=22,\n", " urcrnrlon=-64,\n", " urcrnrlat=49,\n", " projection='lcc',\n", " lat_1=32,\n", " lat_2=45,\n", " lon_0=-95,\n", " )\n", " m.fillcontinents(color='lightgray')\n", " return m" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "#### Reading the Shapefiles\n", "\n", "Next, we read in our shapefiles for the U.S. states." ] }, { "cell_type": "code", "execution_count": 34, "metadata": {}, "outputs": [], "source": [ "def read_shape_files(m):\n", " \"\"\" Get U.S. state shape boundaries.\"\"\"\n", " # Shapefiles downloaded from https://www.census.gov/geo/maps-data/data/prev_cartbndry_names.html\n", " MAP_DATA_DIR = PARENT_DIR / 'data'\n", " SHAPEFILE = MAP_DATA_DIR.joinpath('st99_d00')\n", " return m.readshapefile(\n", " shapefile=str(SHAPEFILE),\n", " name='states',\n", " drawbounds=True,\n", " color='white',\n", " linewidth=1,\n", " )" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "#### Making a Colormap for NBA Divisions\n", "\n", "Next, we create a colormap with a distinct color for each of the NBA Divisions." ] }, { "cell_type": "code", "execution_count": 35, "metadata": {}, "outputs": [], "source": [ "def make_colormap(divisions, colormap='Set3'):\n", " \"\"\"Create colormap with distinct value for each NBA division.\"\"\"\n", " cmap = plt.get_cmap(colormap, len(divisions)) \n", " return {div: cmap(divisions.index(div))[:3] for div in divisions}" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "We want to assign a color to each state that has an NBA arena. Of course, we can't use the U.S. state shapefiles for Toronto." ] }, { "cell_type": "code", "execution_count": 36, "metadata": {}, "outputs": [], "source": [ "def get_state_colors(df):\n", " colors = make_colormap(list(df['Division'].str.strip().unique()))\n", " state_color = {}\n", " for abbr in list(df['Postal'].str.strip().unique()):\n", " div = list(df.loc[df['Postal'] == abbr, 'Division'].unique())\n", " assert len(div) == 1 # there can only be one Division applicable for teams from one U.S. state\n", " div = str(div[0])\n", " color = colors[div]\n", " state_color[abbr] = rgb2hex(color)\n", " return state_color" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Next, we need to get the information from the shapefile for each U.S. state. This is where we need to use our function to look up the postal abbreviation given a U.S. state name from the shapefile." ] }, { "cell_type": "code", "execution_count": 37, "metadata": {}, "outputs": [], "source": [ "def get_state_polygons(m):\n", " state_polygons = {}\n", " for info, shape in zip(m.states_info, m.states):\n", " abbr = name2abbr(info['NAME'])\n", " if abbr in state_polygons:\n", " state_polygons[abbr].append(Polygon(shape, True))\n", " else:\n", " state_polygons[abbr] = [Polygon(shape, True)]\n", " return state_polygons" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "#### Putting It All Together and Drawing the Map\n", "\n", "To draw the map, we need to perform the following steps:\n", "\n", "- Create the Basemap;\n", "- Read in the state shapefiles and assign the colors for the states that need to be filled in;\n", "- Fill in the states with the correct colors\n", "- Draw markers for the arenas using the latitude and longitude information\n", "- Create text labels for the arenas using the team names\n", "- Show the map\n", "\n", "As I mentioned above, Basemap may emit some warnings when you run this code. The warnings I get are harmless, and I've filtered them out using the `warnings` module. You can run this code without the `warnings` module if you want, and the map should still be fine." ] }, { "cell_type": "code", "execution_count": 38, "metadata": {}, "outputs": [], "source": [ "def draw_nba_map(df):\n", " \"\"\"Draw map with locations of NBA arenas.\"\"\"\n", " \n", " fig, ax = plt.subplots(figsize=(12,8))\n", " m = draw_basemap()\n", " state_shapes = read_shape_files(m)\n", " state_polygons = get_state_polygons(m)\n", " state_colors = get_state_colors(df)\n", " \n", " # Color in states (skip Ontario and Washington, DC)\n", " for abbr in state_colors:\n", " if abbr not in ['ON', 'DC']:\n", " ax.add_collection(PatchCollection(\n", " state_polygons[abbr],\n", " facecolor=state_colors[abbr],\n", " edgecolor='white',\n", " linewidth=1,\n", " zorder=2)\n", " )\n", "\n", " # Display markers and labels for arenas\n", " cities = set()\n", " for _, row in df.iterrows():\n", " city = row['City']\n", " x, y = m(row['Longitude'], row['Latitude'])\n", " m.plot(x=x, y=y, color='black', marker='o', markersize=5)\n", " team = row['Team'].split()[-1]\n", " \n", " # If a city has already been plotted, offset the text so labels don't overlap\n", " if city in cities:\n", " label_x = x+40000\n", " label_y = y+40000\n", " else:\n", " label_x = x+40000\n", " label_y = y-40000\n", " cities.add(city)\n", " plt.text(x=label_x, y=label_y, s=team, fontsize='smaller')\n", "\n", " # Remove the box surrounding the plot\n", " for spine in ax.spines.values():\n", " spine.set_visible(False)\n", " plt.show()" ] }, { "cell_type": "code", "execution_count": 39, "metadata": {}, "outputs": [ { "data": { "image/png": "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cflwOIzNZuNHP/oRJ598MsuXL+fRRx/FYrFwxRVX8JOf/IS///3vWCwWrr781vTrmpvrufeB21nx3Z/y93/8iY82voskyVz7tZuYXtHzew3mPpnNViZNrMCT073xiWEY+Hw+Jk2axK233orD4eA73/kON9xwA6FQCMMwWLlyJf/4xz946623ePvtt3nsscf4yle+QkNDA3a7naeffhq/38+ll15KSUkJO3bs4N577+Xss8/miiuuYNeuXQiCwKpVq9KR3WAwiKIoiJKEWZL6JWTtskK+xUaexUap1UmxzYFFklG7Io8mUSJyUMR1XyRESzR0zFSBwaQxHOCzZVN4pWEXDeEAumEQSvTtmtgUCSIIAmVlZdTVJbuMyrJMVVUVp512Gi6Xi1gshsVi4bLLLmPp0qUsWbKEto4Odgc6sGsGTfv28fvf/5633noLSZbBMFi1ahX79+/nS1/6Evfeey8VFRVcf/31vPbaa7jd7qw6T/aXIW/lMBI/NMWmYHFZqKmqGe5NyUrcbjeGZkBoEE4cugFBFaPL9cIADEkAi4JglTFsCpJNwWF34LDZKcjNT6cppCJ6wGjx0gAwmwe/SCQlLvuSHy2KYlr8poSvLMtIkpSO/FoslnQEOPX3SAPmg0XxweK4J5Hc3Nw86G4OoigOqFJ5JKLrGhZrdnQMOmXBUqZNm0Nl1SZisQg2m42FCxeybNmybsutWbOGM844gx07dvDjH/84LSoOZtOmTXzwwQe89NJLeDxePli3l3//5x80NO7hxb89zc0rfkFubgHvf/AWv37gOSRJzsi179B9MputVEybwykLluLJsaLrenpwKooiY8aM4c9//nNaaDY3N2M2m3nooYfweDyUlJRw5ZVXpsX7888/T3l5Oc888wxPPvkkDz74IJdffjltbW28+eab7N69m5tvvpnTTz+dyspK3nvvvbSzjWEYaJqGzWYjoeu839rI/LxinIrpiF2+ZEEgx2wl12ylwGKnrKswSxAE4rqGJAhIgkhnLMIufwf7YmHaomH2R8PDVkiW4s+1lXxl0hw+UzYZvev88l5LPetaez8LE9WSfrsTncluaVarlQkTJnDWWWeRm5vLU089xZ133okgCMybNw+AktJS3q2tZruvHTUcxrJ+LfPmzTsQTe86H/7ud7/jxhtvpKKiAoC7776bFStWkEgkuOWWW5g6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\n", "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "with warnings.catch_warnings():\n", " warnings.simplefilter(\"ignore\")\n", " draw_nba_map(df)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "This simple example only scratches the surface of what you can do with geographical data in Python." ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [] } ], "metadata": { "kernelspec": { "display_name": "Python [conda env:sports_py36]", "language": "python", "name": "conda-env-sports_py36-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.4" } }, "nbformat": 4, "nbformat_minor": 2 }