Skip to content

Instantly share code, notes, and snippets.

@tmthyjames
Created July 21, 2016 23:25
Show Gist options
  • Save tmthyjames/8845394b920c58b0b0dbf18a992e5152 to your computer and use it in GitHub Desktop.
Save tmthyjames/8845394b920c58b0b0dbf18a992e5152 to your computer and use it in GitHub Desktop.
Point Spread Predictions for NBA/NCAA
Display the source blob
Display the rendered blob
Raw
{
"cells": [
{
"cell_type": "code",
"execution_count": 1,
"metadata": {
"collapsed": true
},
"outputs": [],
"source": [
"import requests\n",
"import json, csv, re\n",
"from bs4 import BeautifulSoup\n",
"from sqlalchemy import create_engine\n",
"engine = create_engine('postgresql://tdobbins:@localhost:5432/sports1')\n",
"enginepi = create_engine('postgres://pi@192.168.1.80:5432/nba')\n",
"# engine = create_engine('postgres://postgres@107.170.76.179:5432/sports')\n",
"from datetime import date, timedelta, datetime\n",
"import time\n",
"import numpy as np\n",
"import pandas as pd\n",
"from pandas.stats.api import ols\n",
"import statsmodels.api as sm\n",
"import random\n",
"pd.options.display.max_columns = None\n",
"%matplotlib inline\n",
"\n",
"import matplotlib.pyplot as plt \n",
"\n",
"# cdf = cdf.convert_objects(convert_numeric=True) # covert ncaa strings to numerics"
]
},
{
"cell_type": "code",
"execution_count": 10,
"metadata": {
"collapsed": true
},
"outputs": [],
"source": [
"df = pd.read_excel('/Users/tdobbins/nba/ncaaMASTER.xlsx', sheetname='Master')"
]
},
{
"cell_type": "code",
"execution_count": 19,
"metadata": {
"collapsed": false
},
"outputs": [],
"source": [
"df = df[[u'Conference', u'Date', u'Team', u'OPP', u'Points', u'Field Goals', u'Field Goals ATT', u'Free Throws', u'Free Throws ATT', u'3-pointers', u'3-pointers ATT', u'Off. Rebounds', u'Def. Rebounds', u'Total Rebounds', u'Assists', u'Blocks', u'Fouls', u'Steals', u'Turnovers', u'Home/Away.1']]"
]
},
{
"cell_type": "code",
"execution_count": 20,
"metadata": {
"collapsed": false
},
"outputs": [],
"source": [
"df.columns = ['conference', 'dateof', 'team', 'opp', 'points', 'fg', 'fgatt', 'ft', 'ftatt', 'fg3', 'fg3att', 'offrebounds', 'defrebounds', 'totalrebounds', 'assists', 'blocks', 'fouls', 'steals', 'turnovers', 'side']"
]
},
{
"cell_type": "code",
"execution_count": 37,
"metadata": {
"collapsed": false
},
"outputs": [],
"source": [
"df = df.head(11404)"
]
},
{
"cell_type": "code",
"execution_count": 30,
"metadata": {
"collapsed": true
},
"outputs": [],
"source": [
"df.to_sql('nbateamstats1516', con=enginepi, if_exists='append', index=False, chunksize=500)"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {
"collapsed": true
},
"outputs": [],
"source": []
},
{
"cell_type": "code",
"execution_count": 2,
"metadata": {
"collapsed": true
},
"outputs": [],
"source": [
"# df.to_sql('nbateamstats1516', con=enginepi, if_exists='replace', index=False)"
]
},
{
"cell_type": "code",
"execution_count": 7,
"metadata": {
"collapsed": false
},
"outputs": [],
"source": [
"sql = \"\"\"select distinct '' as blank, '' as blank1, h.dateof, h.team, h.opp, h.points, h.fg, h.fgatt, h.ft, h.ftatt, \n",
" h.fg3, h.fg3att, h.offrebounds, h.defrebounds, h.totalrebounds,\n",
" h.assists, h.blocks, h.fouls, h.steals, h.turnovers,\n",
" a.points as opoints, a.fg as ofg, a.fgatt as ofgatt, a.ft as oft, a.ftatt as oftatt, \n",
" a.fg3 as ofg3, a.fg3att as ofg3att, a.offrebounds as ooffrebounds, a.defrebounds as odefrebounds,\n",
" a.totalrebounds as ototalrebounds, a.assists as oassists, a.blocks as oblocks, a.fouls as ofouls,\n",
" a.steals as osteals, a.turnovers as oturnovers, h.side\n",
" --(h.fgatt + h.turnovers + (0.4*h.ftatt) - h.offrebounds) as poss_calc,\n",
" --(a.fgatt + a.turnovers + (0.4*a.ftatt) - a.offrebounds) as oposs_calc\n",
" from nbateamstats1516 h\n",
" join nbateamstats1516 a \n",
" on h.opp = a.team \n",
" and h.team = a.opp\n",
" and (h.team <> 'EAS' and a.team <> 'EAS')\n",
" and (h.opp <> 'WES' and a.opp <> 'WES')\n",
" where h.dateof = a.dateof\n",
" --and h.dateof >= '2016-03-14'\n",
" order by h.dateof asc\"\"\"\n",
"\n",
"df = pd.read_sql_query(sql, enginepi)"
]
},
{
"cell_type": "code",
"execution_count": 15,
"metadata": {
"collapsed": false
},
"outputs": [],
"source": [
"# df['dateof'].strftime('%Y-%m-%d')\n",
"df['dateof'] = df['dateof'].apply(lambda x: x.strftime('%Y-%m-%d'))"
]
},
{
"cell_type": "code",
"execution_count": 21,
"metadata": {
"collapsed": false,
"scrolled": true
},
"outputs": [
{
"data": {
"text/plain": [
"(16, 13)"
]
},
"execution_count": 21,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"len(df[(df.dateof<'2015-12-25')&(df.team=='LAC')&(df.points>df.opoints)]), len(df[(df.dateof<'2015-12-25')&(df.team=='LAC')&(df.points<df.opoints)])"
]
},
{
"cell_type": "code",
"execution_count": 22,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/plain": [
"(28, 14)"
]
},
"execution_count": 22,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"len(df[(df.dateof>'2015-12-25')&(df.team=='LAC')&(df.points>df.opoints)]), len(df[(df.dateof>'2015-12-25')&(df.team=='LAC')&(df.points<df.opoints)])"
]
},
{
"cell_type": "code",
"execution_count": 23,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/html": [
"<div>\n",
"<table border=\"1\" class=\"dataframe\">\n",
" <thead>\n",
" <tr style=\"text-align: right;\">\n",
" <th></th>\n",
" <th>blank</th>\n",
" <th>blank1</th>\n",
" <th>dateof</th>\n",
" <th>team</th>\n",
" <th>opp</th>\n",
" <th>points</th>\n",
" <th>fg</th>\n",
" <th>fgatt</th>\n",
" <th>ft</th>\n",
" <th>ftatt</th>\n",
" <th>fg3</th>\n",
" <th>fg3att</th>\n",
" <th>offrebounds</th>\n",
" <th>defrebounds</th>\n",
" <th>totalrebounds</th>\n",
" <th>assists</th>\n",
" <th>blocks</th>\n",
" <th>fouls</th>\n",
" <th>steals</th>\n",
" <th>turnovers</th>\n",
" <th>opoints</th>\n",
" <th>ofg</th>\n",
" <th>ofgatt</th>\n",
" <th>oft</th>\n",
" <th>oftatt</th>\n",
" <th>ofg3</th>\n",
" <th>ofg3att</th>\n",
" <th>ooffrebounds</th>\n",
" <th>odefrebounds</th>\n",
" <th>ototalrebounds</th>\n",
" <th>oassists</th>\n",
" <th>oblocks</th>\n",
" <th>ofouls</th>\n",
" <th>osteals</th>\n",
" <th>oturnovers</th>\n",
" <th>side</th>\n",
" </tr>\n",
" </thead>\n",
" <tbody>\n",
" <tr>\n",
" <th>0</th>\n",
" <td></td>\n",
" <td></td>\n",
" <td>2015-10-27</td>\n",
" <td>ATL</td>\n",
" <td>DET</td>\n",
" <td>94</td>\n",
" <td>37</td>\n",
" <td>82</td>\n",
" <td>12</td>\n",
" <td>15</td>\n",
" <td>8</td>\n",
" <td>27</td>\n",
" <td>7</td>\n",
" <td>33</td>\n",
" <td>40</td>\n",
" <td>22</td>\n",
" <td>4</td>\n",
" <td>25</td>\n",
" <td>9</td>\n",
" <td>15</td>\n",
" <td>106</td>\n",
" <td>37</td>\n",
" <td>96</td>\n",
" <td>20</td>\n",
" <td>26</td>\n",
" <td>12</td>\n",
" <td>29</td>\n",
" <td>23</td>\n",
" <td>36</td>\n",
" <td>59</td>\n",
" <td>23</td>\n",
" <td>3</td>\n",
" <td>15</td>\n",
" <td>5</td>\n",
" <td>15</td>\n",
" <td>home</td>\n",
" </tr>\n",
" <tr>\n",
" <th>1</th>\n",
" <td></td>\n",
" <td></td>\n",
" <td>2015-10-27</td>\n",
" <td>CHI</td>\n",
" <td>CLE</td>\n",
" <td>97</td>\n",
" <td>37</td>\n",
" <td>87</td>\n",
" <td>16</td>\n",
" <td>23</td>\n",
" <td>7</td>\n",
" <td>19</td>\n",
" <td>7</td>\n",
" <td>40</td>\n",
" <td>47</td>\n",
" <td>13</td>\n",
" <td>10</td>\n",
" <td>22</td>\n",
" <td>6</td>\n",
" <td>13</td>\n",
" <td>95</td>\n",
" <td>38</td>\n",
" <td>94</td>\n",
" <td>10</td>\n",
" <td>17</td>\n",
" <td>9</td>\n",
" <td>29</td>\n",
" <td>11</td>\n",
" <td>39</td>\n",
" <td>50</td>\n",
" <td>26</td>\n",
" <td>7</td>\n",
" <td>21</td>\n",
" <td>5</td>\n",
" <td>11</td>\n",
" <td>home</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2</th>\n",
" <td></td>\n",
" <td></td>\n",
" <td>2015-10-27</td>\n",
" <td>CLE</td>\n",
" <td>CHI</td>\n",
" <td>95</td>\n",
" <td>38</td>\n",
" <td>94</td>\n",
" <td>10</td>\n",
" <td>17</td>\n",
" <td>9</td>\n",
" <td>29</td>\n",
" <td>11</td>\n",
" <td>39</td>\n",
" <td>50</td>\n",
" <td>26</td>\n",
" <td>7</td>\n",
" <td>21</td>\n",
" <td>5</td>\n",
" <td>11</td>\n",
" <td>97</td>\n",
" <td>37</td>\n",
" <td>87</td>\n",
" <td>16</td>\n",
" <td>23</td>\n",
" <td>7</td>\n",
" <td>19</td>\n",
" <td>7</td>\n",
" <td>40</td>\n",
" <td>47</td>\n",
" <td>13</td>\n",
" <td>10</td>\n",
" <td>22</td>\n",
" <td>6</td>\n",
" <td>13</td>\n",
" <td>away</td>\n",
" </tr>\n",
" <tr>\n",
" <th>3</th>\n",
" <td></td>\n",
" <td></td>\n",
" <td>2015-10-27</td>\n",
" <td>DET</td>\n",
" <td>ATL</td>\n",
" <td>106</td>\n",
" <td>37</td>\n",
" <td>96</td>\n",
" <td>20</td>\n",
" <td>26</td>\n",
" <td>12</td>\n",
" <td>29</td>\n",
" <td>23</td>\n",
" <td>36</td>\n",
" <td>59</td>\n",
" <td>23</td>\n",
" <td>3</td>\n",
" <td>15</td>\n",
" <td>5</td>\n",
" <td>15</td>\n",
" <td>94</td>\n",
" <td>37</td>\n",
" <td>82</td>\n",
" <td>12</td>\n",
" <td>15</td>\n",
" <td>8</td>\n",
" <td>27</td>\n",
" <td>7</td>\n",
" <td>33</td>\n",
" <td>40</td>\n",
" <td>22</td>\n",
" <td>4</td>\n",
" <td>25</td>\n",
" <td>9</td>\n",
" <td>15</td>\n",
" <td>away</td>\n",
" </tr>\n",
" <tr>\n",
" <th>4</th>\n",
" <td></td>\n",
" <td></td>\n",
" <td>2015-10-27</td>\n",
" <td>GS</td>\n",
" <td>NO</td>\n",
" <td>111</td>\n",
" <td>41</td>\n",
" <td>96</td>\n",
" <td>20</td>\n",
" <td>22</td>\n",
" <td>9</td>\n",
" <td>30</td>\n",
" <td>21</td>\n",
" <td>35</td>\n",
" <td>56</td>\n",
" <td>29</td>\n",
" <td>7</td>\n",
" <td>29</td>\n",
" <td>8</td>\n",
" <td>20</td>\n",
" <td>95</td>\n",
" <td>35</td>\n",
" <td>83</td>\n",
" <td>19</td>\n",
" <td>27</td>\n",
" <td>6</td>\n",
" <td>18</td>\n",
" <td>8</td>\n",
" <td>25</td>\n",
" <td>33</td>\n",
" <td>21</td>\n",
" <td>3</td>\n",
" <td>26</td>\n",
" <td>9</td>\n",
" <td>19</td>\n",
" <td>home</td>\n",
" </tr>\n",
" <tr>\n",
" <th>5</th>\n",
" <td></td>\n",
" <td></td>\n",
" <td>2015-10-27</td>\n",
" <td>NO</td>\n",
" <td>GS</td>\n",
" <td>95</td>\n",
" <td>35</td>\n",
" <td>83</td>\n",
" <td>19</td>\n",
" <td>27</td>\n",
" <td>6</td>\n",
" <td>18</td>\n",
" <td>8</td>\n",
" <td>25</td>\n",
" <td>33</td>\n",
" <td>21</td>\n",
" <td>3</td>\n",
" <td>26</td>\n",
" <td>9</td>\n",
" <td>19</td>\n",
" <td>111</td>\n",
" <td>41</td>\n",
" <td>96</td>\n",
" <td>20</td>\n",
" <td>22</td>\n",
" <td>9</td>\n",
" <td>30</td>\n",
" <td>21</td>\n",
" <td>35</td>\n",
" <td>56</td>\n",
" <td>29</td>\n",
" <td>7</td>\n",
" <td>29</td>\n",
" <td>8</td>\n",
" <td>20</td>\n",
" <td>away</td>\n",
" </tr>\n",
" <tr>\n",
" <th>6</th>\n",
" <td></td>\n",
" <td></td>\n",
" <td>2015-10-28</td>\n",
" <td>BKN</td>\n",
" <td>CHI</td>\n",
" <td>100</td>\n",
" <td>39</td>\n",
" <td>93</td>\n",
" <td>22</td>\n",
" <td>28</td>\n",
" <td>0</td>\n",
" <td>9</td>\n",
" <td>16</td>\n",
" <td>29</td>\n",
" <td>45</td>\n",
" <td>19</td>\n",
" <td>5</td>\n",
" <td>18</td>\n",
" <td>11</td>\n",
" <td>13</td>\n",
" <td>115</td>\n",
" <td>42</td>\n",
" <td>78</td>\n",
" <td>17</td>\n",
" <td>20</td>\n",
" <td>14</td>\n",
" <td>28</td>\n",
" <td>5</td>\n",
" <td>34</td>\n",
" <td>39</td>\n",
" <td>20</td>\n",
" <td>3</td>\n",
" <td>24</td>\n",
" <td>9</td>\n",
" <td>20</td>\n",
" <td>home</td>\n",
" </tr>\n",
" <tr>\n",
" <th>7</th>\n",
" <td></td>\n",
" <td></td>\n",
" <td>2015-10-28</td>\n",
" <td>BOS</td>\n",
" <td>PHI</td>\n",
" <td>112</td>\n",
" <td>39</td>\n",
" <td>85</td>\n",
" <td>26</td>\n",
" <td>27</td>\n",
" <td>8</td>\n",
" <td>24</td>\n",
" <td>10</td>\n",
" <td>31</td>\n",
" <td>41</td>\n",
" <td>31</td>\n",
" <td>7</td>\n",
" <td>23</td>\n",
" <td>10</td>\n",
" <td>17</td>\n",
" <td>95</td>\n",
" <td>34</td>\n",
" <td>84</td>\n",
" <td>20</td>\n",
" <td>23</td>\n",
" <td>7</td>\n",
" <td>22</td>\n",
" <td>15</td>\n",
" <td>32</td>\n",
" <td>47</td>\n",
" <td>12</td>\n",
" <td>6</td>\n",
" <td>22</td>\n",
" <td>11</td>\n",
" <td>24</td>\n",
" <td>home</td>\n",
" </tr>\n",
" <tr>\n",
" <th>8</th>\n",
" <td></td>\n",
" <td></td>\n",
" <td>2015-10-28</td>\n",
" <td>CHA</td>\n",
" <td>MIA</td>\n",
" <td>94</td>\n",
" <td>33</td>\n",
" <td>84</td>\n",
" <td>22</td>\n",
" <td>29</td>\n",
" <td>6</td>\n",
" <td>24</td>\n",
" <td>11</td>\n",
" <td>32</td>\n",
" <td>43</td>\n",
" <td>16</td>\n",
" <td>1</td>\n",
" <td>16</td>\n",
" <td>4</td>\n",
" <td>9</td>\n",
" <td>104</td>\n",
" <td>36</td>\n",
" <td>73</td>\n",
" <td>20</td>\n",
" <td>21</td>\n",
" <td>12</td>\n",
" <td>20</td>\n",
" <td>2</td>\n",
" <td>39</td>\n",
" <td>41</td>\n",
" <td>23</td>\n",
" <td>7</td>\n",
" <td>25</td>\n",
" <td>5</td>\n",
" <td>13</td>\n",
" <td>away</td>\n",
" </tr>\n",
" <tr>\n",
" <th>9</th>\n",
" <td></td>\n",
" <td></td>\n",
" <td>2015-10-28</td>\n",
" <td>CHI</td>\n",
" <td>BKN</td>\n",
" <td>115</td>\n",
" <td>42</td>\n",
" <td>78</td>\n",
" <td>17</td>\n",
" <td>20</td>\n",
" <td>14</td>\n",
" <td>28</td>\n",
" <td>5</td>\n",
" <td>34</td>\n",
" <td>39</td>\n",
" <td>20</td>\n",
" <td>3</td>\n",
" <td>24</td>\n",
" <td>9</td>\n",
" <td>20</td>\n",
" <td>100</td>\n",
" <td>39</td>\n",
" <td>93</td>\n",
" <td>22</td>\n",
" <td>28</td>\n",
" <td>0</td>\n",
" <td>9</td>\n",
" <td>16</td>\n",
" <td>29</td>\n",
" <td>45</td>\n",
" <td>19</td>\n",
" <td>5</td>\n",
" <td>18</td>\n",
" <td>11</td>\n",
" <td>13</td>\n",
" <td>away</td>\n",
" </tr>\n",
" <tr>\n",
" <th>10</th>\n",
" <td></td>\n",
" <td></td>\n",
" <td>2015-10-28</td>\n",
" <td>CLE</td>\n",
" <td>MEM</td>\n",
" <td>106</td>\n",
" <td>41</td>\n",
" <td>84</td>\n",
" <td>11</td>\n",
" <td>17</td>\n",
" <td>13</td>\n",
" <td>29</td>\n",
" <td>12</td>\n",
" <td>42</td>\n",
" <td>54</td>\n",
" <td>29</td>\n",
" <td>2</td>\n",
" <td>25</td>\n",
" <td>7</td>\n",
" <td>19</td>\n",
" <td>76</td>\n",
" <td>29</td>\n",
" <td>82</td>\n",
" <td>16</td>\n",
" <td>22</td>\n",
" <td>2</td>\n",
" <td>16</td>\n",
" <td>11</td>\n",
" <td>29</td>\n",
" <td>40</td>\n",
" <td>15</td>\n",
" <td>3</td>\n",
" <td>18</td>\n",
" <td>8</td>\n",
" <td>16</td>\n",
" <td>away</td>\n",
" </tr>\n",
" <tr>\n",
" <th>11</th>\n",
" <td></td>\n",
" <td></td>\n",
" <td>2015-10-28</td>\n",
" <td>DAL</td>\n",
" <td>PHO</td>\n",
" <td>111</td>\n",
" <td>40</td>\n",
" <td>85</td>\n",
" <td>21</td>\n",
" <td>31</td>\n",
" <td>10</td>\n",
" <td>21</td>\n",
" <td>6</td>\n",
" <td>42</td>\n",
" <td>48</td>\n",
" <td>24</td>\n",
" <td>3</td>\n",
" <td>25</td>\n",
" <td>7</td>\n",
" <td>8</td>\n",
" <td>95</td>\n",
" <td>34</td>\n",
" <td>87</td>\n",
" <td>21</td>\n",
" <td>33</td>\n",
" <td>6</td>\n",
" <td>24</td>\n",
" <td>13</td>\n",
" <td>40</td>\n",
" <td>53</td>\n",
" <td>15</td>\n",
" <td>3</td>\n",
" <td>30</td>\n",
" <td>3</td>\n",
" <td>18</td>\n",
" <td>away</td>\n",
" </tr>\n",
" <tr>\n",
" <th>12</th>\n",
" <td></td>\n",
" <td></td>\n",
" <td>2015-10-28</td>\n",
" <td>DEN</td>\n",
" <td>HOU</td>\n",
" <td>105</td>\n",
" <td>40</td>\n",
" <td>79</td>\n",
" <td>12</td>\n",
" <td>18</td>\n",
" <td>13</td>\n",
" <td>27</td>\n",
" <td>9</td>\n",
" <td>40</td>\n",
" <td>49</td>\n",
" <td>26</td>\n",
" <td>10</td>\n",
" <td>26</td>\n",
" <td>9</td>\n",
" <td>21</td>\n",
" <td>85</td>\n",
" <td>30</td>\n",
" <td>87</td>\n",
" <td>17</td>\n",
" <td>26</td>\n",
" <td>8</td>\n",
" <td>35</td>\n",
" <td>15</td>\n",
" <td>29</td>\n",
" <td>44</td>\n",
" <td>17</td>\n",
" <td>8</td>\n",
" <td>19</td>\n",
" <td>13</td>\n",
" <td>17</td>\n",
" <td>away</td>\n",
" </tr>\n",
" <tr>\n",
" <th>13</th>\n",
" <td></td>\n",
" <td></td>\n",
" <td>2015-10-28</td>\n",
" <td>DET</td>\n",
" <td>UTA</td>\n",
" <td>92</td>\n",
" <td>30</td>\n",
" <td>74</td>\n",
" <td>25</td>\n",
" <td>34</td>\n",
" <td>7</td>\n",
" <td>19</td>\n",
" <td>8</td>\n",
" <td>35</td>\n",
" <td>43</td>\n",
" <td>16</td>\n",
" <td>4</td>\n",
" <td>20</td>\n",
" <td>2</td>\n",
" <td>12</td>\n",
" <td>87</td>\n",
" <td>35</td>\n",
" <td>75</td>\n",
" <td>15</td>\n",
" <td>21</td>\n",
" <td>2</td>\n",
" <td>12</td>\n",
" <td>4</td>\n",
" <td>34</td>\n",
" <td>38</td>\n",
" <td>15</td>\n",
" <td>5</td>\n",
" <td>25</td>\n",
" <td>4</td>\n",
" <td>12</td>\n",
" <td>home</td>\n",
" </tr>\n",
" <tr>\n",
" <th>14</th>\n",
" <td></td>\n",
" <td></td>\n",
" <td>2015-10-28</td>\n",
" <td>HOU</td>\n",
" <td>DEN</td>\n",
" <td>85</td>\n",
" <td>30</td>\n",
" <td>87</td>\n",
" <td>17</td>\n",
" <td>26</td>\n",
" <td>8</td>\n",
" <td>35</td>\n",
" <td>15</td>\n",
" <td>29</td>\n",
" <td>44</td>\n",
" <td>17</td>\n",
" <td>8</td>\n",
" <td>19</td>\n",
" <td>13</td>\n",
" <td>17</td>\n",
" <td>105</td>\n",
" <td>40</td>\n",
" <td>79</td>\n",
" <td>12</td>\n",
" <td>18</td>\n",
" <td>13</td>\n",
" <td>27</td>\n",
" <td>9</td>\n",
" <td>40</td>\n",
" <td>49</td>\n",
" <td>26</td>\n",
" <td>10</td>\n",
" <td>26</td>\n",
" <td>9</td>\n",
" <td>21</td>\n",
" <td>home</td>\n",
" </tr>\n",
" <tr>\n",
" <th>15</th>\n",
" <td></td>\n",
" <td></td>\n",
" <td>2015-10-28</td>\n",
" <td>IND</td>\n",
" <td>TOR</td>\n",
" <td>99</td>\n",
" <td>32</td>\n",
" <td>86</td>\n",
" <td>26</td>\n",
" <td>31</td>\n",
" <td>9</td>\n",
" <td>23</td>\n",
" <td>8</td>\n",
" <td>32</td>\n",
" <td>40</td>\n",
" <td>23</td>\n",
" <td>3</td>\n",
" <td>30</td>\n",
" <td>14</td>\n",
" <td>13</td>\n",
" <td>106</td>\n",
" <td>36</td>\n",
" <td>80</td>\n",
" <td>27</td>\n",
" <td>39</td>\n",
" <td>7</td>\n",
" <td>18</td>\n",
" <td>9</td>\n",
" <td>41</td>\n",
" <td>50</td>\n",
" <td>19</td>\n",
" <td>2</td>\n",
" <td>24</td>\n",
" <td>8</td>\n",
" <td>21</td>\n",
" <td>away</td>\n",
" </tr>\n",
" <tr>\n",
" <th>16</th>\n",
" <td></td>\n",
" <td></td>\n",
" <td>2015-10-28</td>\n",
" <td>LAC</td>\n",
" <td>SAC</td>\n",
" <td>111</td>\n",
" <td>42</td>\n",
" <td>80</td>\n",
" <td>21</td>\n",
" <td>31</td>\n",
" <td>6</td>\n",
" <td>19</td>\n",
" <td>6</td>\n",
" <td>36</td>\n",
" <td>42</td>\n",
" <td>20</td>\n",
" <td>9</td>\n",
" <td>19</td>\n",
" <td>8</td>\n",
" <td>15</td>\n",
" <td>104</td>\n",
" <td>41</td>\n",
" <td>94</td>\n",
" <td>11</td>\n",
" <td>18</td>\n",
" <td>11</td>\n",
" <td>24</td>\n",
" <td>12</td>\n",
" <td>37</td>\n",
" <td>49</td>\n",
" <td>24</td>\n",
" <td>3</td>\n",
" <td>27</td>\n",
" <td>8</td>\n",
" <td>18</td>\n",
" <td>away</td>\n",
" </tr>\n",
" <tr>\n",
" <th>17</th>\n",
" <td></td>\n",
" <td></td>\n",
" <td>2015-10-28</td>\n",
" <td>LAL</td>\n",
" <td>MIN</td>\n",
" <td>111</td>\n",
" <td>35</td>\n",
" <td>93</td>\n",
" <td>32</td>\n",
" <td>35</td>\n",
" <td>9</td>\n",
" <td>35</td>\n",
" <td>15</td>\n",
" <td>36</td>\n",
" <td>51</td>\n",
" <td>18</td>\n",
" <td>4</td>\n",
" <td>29</td>\n",
" <td>2</td>\n",
" <td>14</td>\n",
" <td>112</td>\n",
" <td>38</td>\n",
" <td>83</td>\n",
" <td>31</td>\n",
" <td>37</td>\n",
" <td>5</td>\n",
" <td>20</td>\n",
" <td>6</td>\n",
" <td>33</td>\n",
" <td>39</td>\n",
" <td>24</td>\n",
" <td>4</td>\n",
" <td>26</td>\n",
" <td>3</td>\n",
" <td>8</td>\n",
" <td>home</td>\n",
" </tr>\n",
" <tr>\n",
" <th>18</th>\n",
" <td></td>\n",
" <td></td>\n",
" <td>2015-10-28</td>\n",
" <td>MEM</td>\n",
" <td>CLE</td>\n",
" <td>76</td>\n",
" <td>29</td>\n",
" <td>82</td>\n",
" <td>16</td>\n",
" <td>22</td>\n",
" <td>2</td>\n",
" <td>16</td>\n",
" <td>11</td>\n",
" <td>29</td>\n",
" <td>40</td>\n",
" <td>15</td>\n",
" <td>3</td>\n",
" <td>18</td>\n",
" <td>8</td>\n",
" <td>16</td>\n",
" <td>106</td>\n",
" <td>41</td>\n",
" <td>84</td>\n",
" <td>11</td>\n",
" <td>17</td>\n",
" <td>13</td>\n",
" <td>29</td>\n",
" <td>12</td>\n",
" <td>42</td>\n",
" <td>54</td>\n",
" <td>29</td>\n",
" <td>2</td>\n",
" <td>25</td>\n",
" <td>7</td>\n",
" <td>19</td>\n",
" <td>home</td>\n",
" </tr>\n",
" <tr>\n",
" <th>19</th>\n",
" <td></td>\n",
" <td></td>\n",
" <td>2015-10-28</td>\n",
" <td>MIA</td>\n",
" <td>CHA</td>\n",
" <td>104</td>\n",
" <td>36</td>\n",
" <td>73</td>\n",
" <td>20</td>\n",
" <td>21</td>\n",
" <td>12</td>\n",
" <td>20</td>\n",
" <td>2</td>\n",
" <td>39</td>\n",
" <td>41</td>\n",
" <td>23</td>\n",
" <td>7</td>\n",
" <td>25</td>\n",
" <td>5</td>\n",
" <td>13</td>\n",
" <td>94</td>\n",
" <td>33</td>\n",
" <td>84</td>\n",
" <td>22</td>\n",
" <td>29</td>\n",
" <td>6</td>\n",
" <td>24</td>\n",
" <td>11</td>\n",
" <td>32</td>\n",
" <td>43</td>\n",
" <td>16</td>\n",
" <td>1</td>\n",
" <td>16</td>\n",
" <td>4</td>\n",
" <td>9</td>\n",
" <td>home</td>\n",
" </tr>\n",
" <tr>\n",
" <th>20</th>\n",
" <td></td>\n",
" <td></td>\n",
" <td>2015-10-28</td>\n",
" <td>MIL</td>\n",
" <td>NY</td>\n",
" <td>97</td>\n",
" <td>30</td>\n",
" <td>86</td>\n",
" <td>28</td>\n",
" <td>31</td>\n",
" <td>9</td>\n",
" <td>18</td>\n",
" <td>18</td>\n",
" <td>29</td>\n",
" <td>47</td>\n",
" <td>17</td>\n",
" <td>4</td>\n",
" <td>27</td>\n",
" <td>7</td>\n",
" <td>18</td>\n",
" <td>122</td>\n",
" <td>42</td>\n",
" <td>93</td>\n",
" <td>29</td>\n",
" <td>35</td>\n",
" <td>9</td>\n",
" <td>23</td>\n",
" <td>19</td>\n",
" <td>30</td>\n",
" <td>49</td>\n",
" <td>24</td>\n",
" <td>7</td>\n",
" <td>28</td>\n",
" <td>11</td>\n",
" <td>11</td>\n",
" <td>home</td>\n",
" </tr>\n",
" <tr>\n",
" <th>21</th>\n",
" <td></td>\n",
" <td></td>\n",
" <td>2015-10-28</td>\n",
" <td>MIN</td>\n",
" <td>LAL</td>\n",
" <td>112</td>\n",
" <td>38</td>\n",
" <td>83</td>\n",
" <td>31</td>\n",
" <td>37</td>\n",
" <td>5</td>\n",
" <td>20</td>\n",
" <td>6</td>\n",
" <td>33</td>\n",
" <td>39</td>\n",
" <td>24</td>\n",
" <td>4</td>\n",
" <td>26</td>\n",
" <td>3</td>\n",
" <td>8</td>\n",
" <td>111</td>\n",
" <td>35</td>\n",
" <td>93</td>\n",
" <td>32</td>\n",
" <td>35</td>\n",
" <td>9</td>\n",
" <td>35</td>\n",
" <td>15</td>\n",
" <td>36</td>\n",
" <td>51</td>\n",
" <td>18</td>\n",
" <td>4</td>\n",
" <td>29</td>\n",
" <td>2</td>\n",
" <td>14</td>\n",
" <td>away</td>\n",
" </tr>\n",
" <tr>\n",
" <th>22</th>\n",
" <td></td>\n",
" <td></td>\n",
" <td>2015-10-28</td>\n",
" <td>NO</td>\n",
" <td>POR</td>\n",
" <td>94</td>\n",
" <td>36</td>\n",
" <td>91</td>\n",
" <td>11</td>\n",
" <td>18</td>\n",
" <td>11</td>\n",
" <td>33</td>\n",
" <td>5</td>\n",
" <td>34</td>\n",
" <td>39</td>\n",
" <td>19</td>\n",
" <td>2</td>\n",
" <td>17</td>\n",
" <td>7</td>\n",
" <td>11</td>\n",
" <td>112</td>\n",
" <td>44</td>\n",
" <td>88</td>\n",
" <td>12</td>\n",
" <td>14</td>\n",
" <td>12</td>\n",
" <td>32</td>\n",
" <td>6</td>\n",
" <td>45</td>\n",
" <td>51</td>\n",
" <td>22</td>\n",
" <td>4</td>\n",
" <td>21</td>\n",
" <td>7</td>\n",
" <td>12</td>\n",
" <td>away</td>\n",
" </tr>\n",
" <tr>\n",
" <th>23</th>\n",
" <td></td>\n",
" <td></td>\n",
" <td>2015-10-28</td>\n",
" <td>NY</td>\n",
" <td>MIL</td>\n",
" <td>122</td>\n",
" <td>42</td>\n",
" <td>93</td>\n",
" <td>29</td>\n",
" <td>35</td>\n",
" <td>9</td>\n",
" <td>23</td>\n",
" <td>19</td>\n",
" <td>30</td>\n",
" <td>49</td>\n",
" <td>24</td>\n",
" <td>7</td>\n",
" <td>28</td>\n",
" <td>11</td>\n",
" <td>11</td>\n",
" <td>97</td>\n",
" <td>30</td>\n",
" <td>86</td>\n",
" <td>28</td>\n",
" <td>31</td>\n",
" <td>9</td>\n",
" <td>18</td>\n",
" <td>18</td>\n",
" <td>29</td>\n",
" <td>47</td>\n",
" <td>17</td>\n",
" <td>4</td>\n",
" <td>27</td>\n",
" <td>7</td>\n",
" <td>18</td>\n",
" <td>away</td>\n",
" </tr>\n",
" <tr>\n",
" <th>24</th>\n",
" <td></td>\n",
" <td></td>\n",
" <td>2015-10-28</td>\n",
" <td>OKC</td>\n",
" <td>SA</td>\n",
" <td>112</td>\n",
" <td>42</td>\n",
" <td>86</td>\n",
" <td>21</td>\n",
" <td>22</td>\n",
" <td>7</td>\n",
" <td>19</td>\n",
" <td>11</td>\n",
" <td>34</td>\n",
" <td>45</td>\n",
" <td>21</td>\n",
" <td>4</td>\n",
" <td>19</td>\n",
" <td>7</td>\n",
" <td>19</td>\n",
" <td>106</td>\n",
" <td>45</td>\n",
" <td>93</td>\n",
" <td>11</td>\n",
" <td>13</td>\n",
" <td>5</td>\n",
" <td>15</td>\n",
" <td>7</td>\n",
" <td>29</td>\n",
" <td>36</td>\n",
" <td>22</td>\n",
" <td>9</td>\n",
" <td>18</td>\n",
" <td>11</td>\n",
" <td>13</td>\n",
" <td>home</td>\n",
" </tr>\n",
" <tr>\n",
" <th>25</th>\n",
" <td></td>\n",
" <td></td>\n",
" <td>2015-10-28</td>\n",
" <td>ORL</td>\n",
" <td>WAS</td>\n",
" <td>87</td>\n",
" <td>37</td>\n",
" <td>100</td>\n",
" <td>8</td>\n",
" <td>12</td>\n",
" <td>5</td>\n",
" <td>26</td>\n",
" <td>17</td>\n",
" <td>39</td>\n",
" <td>56</td>\n",
" <td>20</td>\n",
" <td>6</td>\n",
" <td>22</td>\n",
" <td>9</td>\n",
" <td>16</td>\n",
" <td>88</td>\n",
" <td>33</td>\n",
" <td>84</td>\n",
" <td>15</td>\n",
" <td>25</td>\n",
" <td>7</td>\n",
" <td>28</td>\n",
" <td>15</td>\n",
" <td>34</td>\n",
" <td>49</td>\n",
" <td>17</td>\n",
" <td>9</td>\n",
" <td>14</td>\n",
" <td>8</td>\n",
" <td>18</td>\n",
" <td>home</td>\n",
" </tr>\n",
" <tr>\n",
" <th>26</th>\n",
" <td></td>\n",
" <td></td>\n",
" <td>2015-10-28</td>\n",
" <td>PHI</td>\n",
" <td>BOS</td>\n",
" <td>95</td>\n",
" <td>34</td>\n",
" <td>84</td>\n",
" <td>20</td>\n",
" <td>23</td>\n",
" <td>7</td>\n",
" <td>22</td>\n",
" <td>15</td>\n",
" <td>32</td>\n",
" <td>47</td>\n",
" <td>12</td>\n",
" <td>6</td>\n",
" <td>22</td>\n",
" <td>11</td>\n",
" <td>24</td>\n",
" <td>112</td>\n",
" <td>39</td>\n",
" <td>85</td>\n",
" <td>26</td>\n",
" <td>27</td>\n",
" <td>8</td>\n",
" <td>24</td>\n",
" <td>10</td>\n",
" <td>31</td>\n",
" <td>41</td>\n",
" <td>31</td>\n",
" <td>7</td>\n",
" <td>23</td>\n",
" <td>10</td>\n",
" <td>17</td>\n",
" <td>away</td>\n",
" </tr>\n",
" <tr>\n",
" <th>27</th>\n",
" <td></td>\n",
" <td></td>\n",
" <td>2015-10-28</td>\n",
" <td>PHO</td>\n",
" <td>DAL</td>\n",
" <td>95</td>\n",
" <td>34</td>\n",
" <td>87</td>\n",
" <td>21</td>\n",
" <td>33</td>\n",
" <td>6</td>\n",
" <td>24</td>\n",
" <td>13</td>\n",
" <td>40</td>\n",
" <td>53</td>\n",
" <td>15</td>\n",
" <td>3</td>\n",
" <td>30</td>\n",
" <td>3</td>\n",
" <td>18</td>\n",
" <td>111</td>\n",
" <td>40</td>\n",
" <td>85</td>\n",
" <td>21</td>\n",
" <td>31</td>\n",
" <td>10</td>\n",
" <td>21</td>\n",
" <td>6</td>\n",
" <td>42</td>\n",
" <td>48</td>\n",
" <td>24</td>\n",
" <td>3</td>\n",
" <td>25</td>\n",
" <td>7</td>\n",
" <td>8</td>\n",
" <td>home</td>\n",
" </tr>\n",
" <tr>\n",
" <th>28</th>\n",
" <td></td>\n",
" <td></td>\n",
" <td>2015-10-28</td>\n",
" <td>POR</td>\n",
" <td>NO</td>\n",
" <td>112</td>\n",
" <td>44</td>\n",
" <td>88</td>\n",
" <td>12</td>\n",
" <td>14</td>\n",
" <td>12</td>\n",
" <td>32</td>\n",
" <td>6</td>\n",
" <td>45</td>\n",
" <td>51</td>\n",
" <td>22</td>\n",
" <td>4</td>\n",
" <td>21</td>\n",
" <td>7</td>\n",
" <td>12</td>\n",
" <td>94</td>\n",
" <td>36</td>\n",
" <td>91</td>\n",
" <td>11</td>\n",
" <td>18</td>\n",
" <td>11</td>\n",
" <td>33</td>\n",
" <td>5</td>\n",
" <td>34</td>\n",
" <td>39</td>\n",
" <td>19</td>\n",
" <td>2</td>\n",
" <td>17</td>\n",
" <td>7</td>\n",
" <td>11</td>\n",
" <td>home</td>\n",
" </tr>\n",
" <tr>\n",
" <th>29</th>\n",
" <td></td>\n",
" <td></td>\n",
" <td>2015-10-28</td>\n",
" <td>SA</td>\n",
" <td>OKC</td>\n",
" <td>106</td>\n",
" <td>45</td>\n",
" <td>93</td>\n",
" <td>11</td>\n",
" <td>13</td>\n",
" <td>5</td>\n",
" <td>15</td>\n",
" <td>7</td>\n",
" <td>29</td>\n",
" <td>36</td>\n",
" <td>22</td>\n",
" <td>9</td>\n",
" <td>18</td>\n",
" <td>11</td>\n",
" <td>13</td>\n",
" <td>112</td>\n",
" <td>42</td>\n",
" <td>86</td>\n",
" <td>21</td>\n",
" <td>22</td>\n",
" <td>7</td>\n",
" <td>19</td>\n",
" <td>11</td>\n",
" <td>34</td>\n",
" <td>45</td>\n",
" <td>21</td>\n",
" <td>4</td>\n",
" <td>19</td>\n",
" <td>7</td>\n",
" <td>19</td>\n",
" <td>away</td>\n",
" </tr>\n",
" <tr>\n",
" <th>...</th>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2192</th>\n",
" <td></td>\n",
" <td></td>\n",
" <td>2016-03-28</td>\n",
" <td>BOS</td>\n",
" <td>LAC</td>\n",
" <td>90</td>\n",
" <td>31</td>\n",
" <td>89</td>\n",
" <td>21</td>\n",
" <td>27</td>\n",
" <td>7</td>\n",
" <td>19</td>\n",
" <td>18</td>\n",
" <td>31</td>\n",
" <td>49</td>\n",
" <td>14</td>\n",
" <td>4</td>\n",
" <td>17</td>\n",
" <td>7</td>\n",
" <td>16</td>\n",
" <td>114</td>\n",
" <td>44</td>\n",
" <td>84</td>\n",
" <td>15</td>\n",
" <td>18</td>\n",
" <td>11</td>\n",
" <td>25</td>\n",
" <td>9</td>\n",
" <td>36</td>\n",
" <td>45</td>\n",
" <td>29</td>\n",
" <td>5</td>\n",
" <td>23</td>\n",
" <td>13</td>\n",
" <td>15</td>\n",
" <td>away</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2193</th>\n",
" <td></td>\n",
" <td></td>\n",
" <td>2016-03-28</td>\n",
" <td>CHI</td>\n",
" <td>ATL</td>\n",
" <td>100</td>\n",
" <td>40</td>\n",
" <td>105</td>\n",
" <td>11</td>\n",
" <td>15</td>\n",
" <td>9</td>\n",
" <td>22</td>\n",
" <td>18</td>\n",
" <td>40</td>\n",
" <td>58</td>\n",
" <td>22</td>\n",
" <td>5</td>\n",
" <td>17</td>\n",
" <td>4</td>\n",
" <td>9</td>\n",
" <td>102</td>\n",
" <td>36</td>\n",
" <td>85</td>\n",
" <td>25</td>\n",
" <td>28</td>\n",
" <td>5</td>\n",
" <td>22</td>\n",
" <td>7</td>\n",
" <td>40</td>\n",
" <td>47</td>\n",
" <td>22</td>\n",
" <td>12</td>\n",
" <td>13</td>\n",
" <td>5</td>\n",
" <td>8</td>\n",
" <td>home</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2194</th>\n",
" <td></td>\n",
" <td></td>\n",
" <td>2016-03-28</td>\n",
" <td>DAL</td>\n",
" <td>DEN</td>\n",
" <td>97</td>\n",
" <td>36</td>\n",
" <td>88</td>\n",
" <td>14</td>\n",
" <td>15</td>\n",
" <td>11</td>\n",
" <td>32</td>\n",
" <td>9</td>\n",
" <td>25</td>\n",
" <td>34</td>\n",
" <td>23</td>\n",
" <td>6</td>\n",
" <td>20</td>\n",
" <td>14</td>\n",
" <td>4</td>\n",
" <td>88</td>\n",
" <td>31</td>\n",
" <td>70</td>\n",
" <td>17</td>\n",
" <td>19</td>\n",
" <td>9</td>\n",
" <td>24</td>\n",
" <td>6</td>\n",
" <td>38</td>\n",
" <td>44</td>\n",
" <td>20</td>\n",
" <td>4</td>\n",
" <td>20</td>\n",
" <td>3</td>\n",
" <td>21</td>\n",
" <td>away</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2195</th>\n",
" <td></td>\n",
" <td></td>\n",
" <td>2016-03-28</td>\n",
" <td>DEN</td>\n",
" <td>DAL</td>\n",
" <td>88</td>\n",
" <td>31</td>\n",
" <td>70</td>\n",
" <td>17</td>\n",
" <td>19</td>\n",
" <td>9</td>\n",
" <td>24</td>\n",
" <td>6</td>\n",
" <td>38</td>\n",
" <td>44</td>\n",
" <td>20</td>\n",
" <td>4</td>\n",
" <td>20</td>\n",
" <td>3</td>\n",
" <td>21</td>\n",
" <td>97</td>\n",
" <td>36</td>\n",
" <td>88</td>\n",
" <td>14</td>\n",
" <td>15</td>\n",
" <td>11</td>\n",
" <td>32</td>\n",
" <td>9</td>\n",
" <td>25</td>\n",
" <td>34</td>\n",
" <td>23</td>\n",
" <td>6</td>\n",
" <td>20</td>\n",
" <td>14</td>\n",
" <td>4</td>\n",
" <td>home</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2196</th>\n",
" <td></td>\n",
" <td></td>\n",
" <td>2016-03-28</td>\n",
" <td>LAC</td>\n",
" <td>BOS</td>\n",
" <td>114</td>\n",
" <td>44</td>\n",
" <td>84</td>\n",
" <td>15</td>\n",
" <td>18</td>\n",
" <td>11</td>\n",
" <td>25</td>\n",
" <td>9</td>\n",
" <td>36</td>\n",
" <td>45</td>\n",
" <td>29</td>\n",
" <td>5</td>\n",
" <td>23</td>\n",
" <td>13</td>\n",
" <td>15</td>\n",
" <td>90</td>\n",
" <td>31</td>\n",
" <td>89</td>\n",
" <td>21</td>\n",
" <td>27</td>\n",
" <td>7</td>\n",
" <td>19</td>\n",
" <td>18</td>\n",
" <td>31</td>\n",
" <td>49</td>\n",
" <td>14</td>\n",
" <td>4</td>\n",
" <td>17</td>\n",
" <td>7</td>\n",
" <td>16</td>\n",
" <td>home</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2197</th>\n",
" <td></td>\n",
" <td></td>\n",
" <td>2016-03-28</td>\n",
" <td>LAL</td>\n",
" <td>UTA</td>\n",
" <td>75</td>\n",
" <td>26</td>\n",
" <td>85</td>\n",
" <td>16</td>\n",
" <td>22</td>\n",
" <td>7</td>\n",
" <td>20</td>\n",
" <td>7</td>\n",
" <td>30</td>\n",
" <td>37</td>\n",
" <td>11</td>\n",
" <td>6</td>\n",
" <td>19</td>\n",
" <td>5</td>\n",
" <td>9</td>\n",
" <td>123</td>\n",
" <td>46</td>\n",
" <td>89</td>\n",
" <td>14</td>\n",
" <td>19</td>\n",
" <td>17</td>\n",
" <td>32</td>\n",
" <td>13</td>\n",
" <td>44</td>\n",
" <td>57</td>\n",
" <td>26</td>\n",
" <td>7</td>\n",
" <td>18</td>\n",
" <td>4</td>\n",
" <td>7</td>\n",
" <td>away</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2198</th>\n",
" <td></td>\n",
" <td></td>\n",
" <td>2016-03-28</td>\n",
" <td>MEM</td>\n",
" <td>SA</td>\n",
" <td>87</td>\n",
" <td>33</td>\n",
" <td>83</td>\n",
" <td>15</td>\n",
" <td>24</td>\n",
" <td>6</td>\n",
" <td>19</td>\n",
" <td>13</td>\n",
" <td>26</td>\n",
" <td>39</td>\n",
" <td>19</td>\n",
" <td>4</td>\n",
" <td>22</td>\n",
" <td>8</td>\n",
" <td>14</td>\n",
" <td>101</td>\n",
" <td>37</td>\n",
" <td>72</td>\n",
" <td>22</td>\n",
" <td>30</td>\n",
" <td>5</td>\n",
" <td>15</td>\n",
" <td>10</td>\n",
" <td>33</td>\n",
" <td>43</td>\n",
" <td>23</td>\n",
" <td>7</td>\n",
" <td>21</td>\n",
" <td>9</td>\n",
" <td>15</td>\n",
" <td>home</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2199</th>\n",
" <td></td>\n",
" <td></td>\n",
" <td>2016-03-28</td>\n",
" <td>MIA</td>\n",
" <td>BKN</td>\n",
" <td>110</td>\n",
" <td>48</td>\n",
" <td>84</td>\n",
" <td>9</td>\n",
" <td>12</td>\n",
" <td>5</td>\n",
" <td>16</td>\n",
" <td>7</td>\n",
" <td>25</td>\n",
" <td>32</td>\n",
" <td>25</td>\n",
" <td>4</td>\n",
" <td>14</td>\n",
" <td>11</td>\n",
" <td>13</td>\n",
" <td>99</td>\n",
" <td>41</td>\n",
" <td>77</td>\n",
" <td>14</td>\n",
" <td>18</td>\n",
" <td>3</td>\n",
" <td>11</td>\n",
" <td>10</td>\n",
" <td>26</td>\n",
" <td>36</td>\n",
" <td>20</td>\n",
" <td>2</td>\n",
" <td>10</td>\n",
" <td>8</td>\n",
" <td>20</td>\n",
" <td>home</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2200</th>\n",
" <td></td>\n",
" <td></td>\n",
" <td>2016-03-28</td>\n",
" <td>MIN</td>\n",
" <td>PHO</td>\n",
" <td>121</td>\n",
" <td>41</td>\n",
" <td>81</td>\n",
" <td>32</td>\n",
" <td>40</td>\n",
" <td>7</td>\n",
" <td>26</td>\n",
" <td>11</td>\n",
" <td>30</td>\n",
" <td>41</td>\n",
" <td>22</td>\n",
" <td>3</td>\n",
" <td>18</td>\n",
" <td>10</td>\n",
" <td>18</td>\n",
" <td>116</td>\n",
" <td>41</td>\n",
" <td>84</td>\n",
" <td>19</td>\n",
" <td>23</td>\n",
" <td>15</td>\n",
" <td>33</td>\n",
" <td>7</td>\n",
" <td>29</td>\n",
" <td>36</td>\n",
" <td>22</td>\n",
" <td>2</td>\n",
" <td>34</td>\n",
" <td>9</td>\n",
" <td>21</td>\n",
" <td>home</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2201</th>\n",
" <td></td>\n",
" <td></td>\n",
" <td>2016-03-28</td>\n",
" <td>NO</td>\n",
" <td>NY</td>\n",
" <td>99</td>\n",
" <td>32</td>\n",
" <td>75</td>\n",
" <td>27</td>\n",
" <td>37</td>\n",
" <td>8</td>\n",
" <td>19</td>\n",
" <td>6</td>\n",
" <td>41</td>\n",
" <td>47</td>\n",
" <td>18</td>\n",
" <td>3</td>\n",
" <td>16</td>\n",
" <td>11</td>\n",
" <td>13</td>\n",
" <td>91</td>\n",
" <td>36</td>\n",
" <td>89</td>\n",
" <td>9</td>\n",
" <td>13</td>\n",
" <td>10</td>\n",
" <td>31</td>\n",
" <td>6</td>\n",
" <td>36</td>\n",
" <td>42</td>\n",
" <td>26</td>\n",
" <td>6</td>\n",
" <td>26</td>\n",
" <td>9</td>\n",
" <td>14</td>\n",
" <td>home</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2202</th>\n",
" <td></td>\n",
" <td></td>\n",
" <td>2016-03-28</td>\n",
" <td>NY</td>\n",
" <td>NO</td>\n",
" <td>91</td>\n",
" <td>36</td>\n",
" <td>89</td>\n",
" <td>9</td>\n",
" <td>13</td>\n",
" <td>10</td>\n",
" <td>31</td>\n",
" <td>6</td>\n",
" <td>36</td>\n",
" <td>42</td>\n",
" <td>26</td>\n",
" <td>6</td>\n",
" <td>26</td>\n",
" <td>9</td>\n",
" <td>14</td>\n",
" <td>99</td>\n",
" <td>32</td>\n",
" <td>75</td>\n",
" <td>27</td>\n",
" <td>37</td>\n",
" <td>8</td>\n",
" <td>19</td>\n",
" <td>6</td>\n",
" <td>41</td>\n",
" <td>47</td>\n",
" <td>18</td>\n",
" <td>3</td>\n",
" <td>16</td>\n",
" <td>11</td>\n",
" <td>13</td>\n",
" <td>away</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2203</th>\n",
" <td></td>\n",
" <td></td>\n",
" <td>2016-03-28</td>\n",
" <td>OKC</td>\n",
" <td>TOR</td>\n",
" <td>119</td>\n",
" <td>41</td>\n",
" <td>86</td>\n",
" <td>26</td>\n",
" <td>32</td>\n",
" <td>11</td>\n",
" <td>26</td>\n",
" <td>12</td>\n",
" <td>41</td>\n",
" <td>53</td>\n",
" <td>29</td>\n",
" <td>5</td>\n",
" <td>22</td>\n",
" <td>7</td>\n",
" <td>10</td>\n",
" <td>100</td>\n",
" <td>38</td>\n",
" <td>93</td>\n",
" <td>16</td>\n",
" <td>23</td>\n",
" <td>8</td>\n",
" <td>24</td>\n",
" <td>12</td>\n",
" <td>28</td>\n",
" <td>40</td>\n",
" <td>19</td>\n",
" <td>7</td>\n",
" <td>21</td>\n",
" <td>4</td>\n",
" <td>11</td>\n",
" <td>away</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2204</th>\n",
" <td></td>\n",
" <td></td>\n",
" <td>2016-03-28</td>\n",
" <td>PHO</td>\n",
" <td>MIN</td>\n",
" <td>116</td>\n",
" <td>41</td>\n",
" <td>84</td>\n",
" <td>19</td>\n",
" <td>23</td>\n",
" <td>15</td>\n",
" <td>33</td>\n",
" <td>7</td>\n",
" <td>29</td>\n",
" <td>36</td>\n",
" <td>22</td>\n",
" <td>2</td>\n",
" <td>34</td>\n",
" <td>9</td>\n",
" <td>21</td>\n",
" <td>121</td>\n",
" <td>41</td>\n",
" <td>81</td>\n",
" <td>32</td>\n",
" <td>40</td>\n",
" <td>7</td>\n",
" <td>26</td>\n",
" <td>11</td>\n",
" <td>30</td>\n",
" <td>41</td>\n",
" <td>22</td>\n",
" <td>3</td>\n",
" <td>18</td>\n",
" <td>10</td>\n",
" <td>18</td>\n",
" <td>away</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2205</th>\n",
" <td></td>\n",
" <td></td>\n",
" <td>2016-03-28</td>\n",
" <td>POR</td>\n",
" <td>SAC</td>\n",
" <td>105</td>\n",
" <td>38</td>\n",
" <td>80</td>\n",
" <td>15</td>\n",
" <td>18</td>\n",
" <td>14</td>\n",
" <td>29</td>\n",
" <td>5</td>\n",
" <td>37</td>\n",
" <td>42</td>\n",
" <td>25</td>\n",
" <td>10</td>\n",
" <td>23</td>\n",
" <td>6</td>\n",
" <td>19</td>\n",
" <td>93</td>\n",
" <td>37</td>\n",
" <td>89</td>\n",
" <td>12</td>\n",
" <td>19</td>\n",
" <td>7</td>\n",
" <td>15</td>\n",
" <td>11</td>\n",
" <td>32</td>\n",
" <td>43</td>\n",
" <td>20</td>\n",
" <td>2</td>\n",
" <td>20</td>\n",
" <td>11</td>\n",
" <td>15</td>\n",
" <td>home</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2206</th>\n",
" <td></td>\n",
" <td></td>\n",
" <td>2016-03-28</td>\n",
" <td>SA</td>\n",
" <td>MEM</td>\n",
" <td>101</td>\n",
" <td>37</td>\n",
" <td>72</td>\n",
" <td>22</td>\n",
" <td>30</td>\n",
" <td>5</td>\n",
" <td>15</td>\n",
" <td>10</td>\n",
" <td>33</td>\n",
" <td>43</td>\n",
" <td>23</td>\n",
" <td>7</td>\n",
" <td>21</td>\n",
" <td>9</td>\n",
" <td>15</td>\n",
" <td>87</td>\n",
" <td>33</td>\n",
" <td>83</td>\n",
" <td>15</td>\n",
" <td>24</td>\n",
" <td>6</td>\n",
" <td>19</td>\n",
" <td>13</td>\n",
" <td>26</td>\n",
" <td>39</td>\n",
" <td>19</td>\n",
" <td>4</td>\n",
" <td>22</td>\n",
" <td>8</td>\n",
" <td>14</td>\n",
" <td>away</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2207</th>\n",
" <td></td>\n",
" <td></td>\n",
" <td>2016-03-28</td>\n",
" <td>SAC</td>\n",
" <td>POR</td>\n",
" <td>93</td>\n",
" <td>37</td>\n",
" <td>89</td>\n",
" <td>12</td>\n",
" <td>19</td>\n",
" <td>7</td>\n",
" <td>15</td>\n",
" <td>11</td>\n",
" <td>32</td>\n",
" <td>43</td>\n",
" <td>20</td>\n",
" <td>2</td>\n",
" <td>20</td>\n",
" <td>11</td>\n",
" <td>15</td>\n",
" <td>105</td>\n",
" <td>38</td>\n",
" <td>80</td>\n",
" <td>15</td>\n",
" <td>18</td>\n",
" <td>14</td>\n",
" <td>29</td>\n",
" <td>5</td>\n",
" <td>37</td>\n",
" <td>42</td>\n",
" <td>25</td>\n",
" <td>10</td>\n",
" <td>23</td>\n",
" <td>6</td>\n",
" <td>19</td>\n",
" <td>away</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2208</th>\n",
" <td></td>\n",
" <td></td>\n",
" <td>2016-03-28</td>\n",
" <td>TOR</td>\n",
" <td>OKC</td>\n",
" <td>100</td>\n",
" <td>38</td>\n",
" <td>93</td>\n",
" <td>16</td>\n",
" <td>23</td>\n",
" <td>8</td>\n",
" <td>24</td>\n",
" <td>12</td>\n",
" <td>28</td>\n",
" <td>40</td>\n",
" <td>19</td>\n",
" <td>7</td>\n",
" <td>21</td>\n",
" <td>4</td>\n",
" <td>11</td>\n",
" <td>119</td>\n",
" <td>41</td>\n",
" <td>86</td>\n",
" <td>26</td>\n",
" <td>32</td>\n",
" <td>11</td>\n",
" <td>26</td>\n",
" <td>12</td>\n",
" <td>41</td>\n",
" <td>53</td>\n",
" <td>29</td>\n",
" <td>5</td>\n",
" <td>22</td>\n",
" <td>7</td>\n",
" <td>10</td>\n",
" <td>home</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2209</th>\n",
" <td></td>\n",
" <td></td>\n",
" <td>2016-03-28</td>\n",
" <td>UTA</td>\n",
" <td>LAL</td>\n",
" <td>123</td>\n",
" <td>46</td>\n",
" <td>89</td>\n",
" <td>14</td>\n",
" <td>19</td>\n",
" <td>17</td>\n",
" <td>32</td>\n",
" <td>13</td>\n",
" <td>44</td>\n",
" <td>57</td>\n",
" <td>26</td>\n",
" <td>7</td>\n",
" <td>18</td>\n",
" <td>4</td>\n",
" <td>7</td>\n",
" <td>75</td>\n",
" <td>26</td>\n",
" <td>85</td>\n",
" <td>16</td>\n",
" <td>22</td>\n",
" <td>7</td>\n",
" <td>20</td>\n",
" <td>7</td>\n",
" <td>30</td>\n",
" <td>37</td>\n",
" <td>11</td>\n",
" <td>6</td>\n",
" <td>19</td>\n",
" <td>5</td>\n",
" <td>9</td>\n",
" <td>home</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2210</th>\n",
" <td></td>\n",
" <td></td>\n",
" <td>2016-03-29</td>\n",
" <td>BKN</td>\n",
" <td>ORL</td>\n",
" <td>105</td>\n",
" <td>37</td>\n",
" <td>79</td>\n",
" <td>26</td>\n",
" <td>39</td>\n",
" <td>5</td>\n",
" <td>14</td>\n",
" <td>14</td>\n",
" <td>25</td>\n",
" <td>39</td>\n",
" <td>19</td>\n",
" <td>5</td>\n",
" <td>18</td>\n",
" <td>7</td>\n",
" <td>18</td>\n",
" <td>139</td>\n",
" <td>56</td>\n",
" <td>91</td>\n",
" <td>13</td>\n",
" <td>19</td>\n",
" <td>14</td>\n",
" <td>27</td>\n",
" <td>5</td>\n",
" <td>30</td>\n",
" <td>35</td>\n",
" <td>40</td>\n",
" <td>5</td>\n",
" <td>29</td>\n",
" <td>11</td>\n",
" <td>10</td>\n",
" <td>away</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2211</th>\n",
" <td></td>\n",
" <td></td>\n",
" <td>2016-03-29</td>\n",
" <td>CHA</td>\n",
" <td>PHI</td>\n",
" <td>100</td>\n",
" <td>38</td>\n",
" <td>87</td>\n",
" <td>17</td>\n",
" <td>18</td>\n",
" <td>7</td>\n",
" <td>25</td>\n",
" <td>9</td>\n",
" <td>56</td>\n",
" <td>65</td>\n",
" <td>26</td>\n",
" <td>6</td>\n",
" <td>7</td>\n",
" <td>6</td>\n",
" <td>16</td>\n",
" <td>85</td>\n",
" <td>30</td>\n",
" <td>96</td>\n",
" <td>9</td>\n",
" <td>10</td>\n",
" <td>16</td>\n",
" <td>44</td>\n",
" <td>9</td>\n",
" <td>36</td>\n",
" <td>45</td>\n",
" <td>20</td>\n",
" <td>5</td>\n",
" <td>18</td>\n",
" <td>8</td>\n",
" <td>10</td>\n",
" <td>away</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2212</th>\n",
" <td></td>\n",
" <td></td>\n",
" <td>2016-03-29</td>\n",
" <td>CHI</td>\n",
" <td>IND</td>\n",
" <td>98</td>\n",
" <td>37</td>\n",
" <td>87</td>\n",
" <td>14</td>\n",
" <td>16</td>\n",
" <td>10</td>\n",
" <td>26</td>\n",
" <td>12</td>\n",
" <td>29</td>\n",
" <td>41</td>\n",
" <td>22</td>\n",
" <td>6</td>\n",
" <td>19</td>\n",
" <td>5</td>\n",
" <td>17</td>\n",
" <td>96</td>\n",
" <td>39</td>\n",
" <td>90</td>\n",
" <td>15</td>\n",
" <td>17</td>\n",
" <td>3</td>\n",
" <td>19</td>\n",
" <td>13</td>\n",
" <td>31</td>\n",
" <td>44</td>\n",
" <td>20</td>\n",
" <td>6</td>\n",
" <td>16</td>\n",
" <td>9</td>\n",
" <td>12</td>\n",
" <td>away</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2213</th>\n",
" <td></td>\n",
" <td></td>\n",
" <td>2016-03-29</td>\n",
" <td>CLE</td>\n",
" <td>HOU</td>\n",
" <td>100</td>\n",
" <td>31</td>\n",
" <td>86</td>\n",
" <td>24</td>\n",
" <td>28</td>\n",
" <td>14</td>\n",
" <td>40</td>\n",
" <td>10</td>\n",
" <td>28</td>\n",
" <td>38</td>\n",
" <td>21</td>\n",
" <td>5</td>\n",
" <td>31</td>\n",
" <td>5</td>\n",
" <td>13</td>\n",
" <td>106</td>\n",
" <td>38</td>\n",
" <td>79</td>\n",
" <td>21</td>\n",
" <td>42</td>\n",
" <td>9</td>\n",
" <td>25</td>\n",
" <td>14</td>\n",
" <td>41</td>\n",
" <td>55</td>\n",
" <td>23</td>\n",
" <td>5</td>\n",
" <td>24</td>\n",
" <td>7</td>\n",
" <td>15</td>\n",
" <td>home</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2214</th>\n",
" <td></td>\n",
" <td></td>\n",
" <td>2016-03-29</td>\n",
" <td>DET</td>\n",
" <td>OKC</td>\n",
" <td>88</td>\n",
" <td>33</td>\n",
" <td>87</td>\n",
" <td>18</td>\n",
" <td>20</td>\n",
" <td>4</td>\n",
" <td>19</td>\n",
" <td>16</td>\n",
" <td>37</td>\n",
" <td>53</td>\n",
" <td>20</td>\n",
" <td>4</td>\n",
" <td>18</td>\n",
" <td>6</td>\n",
" <td>16</td>\n",
" <td>82</td>\n",
" <td>31</td>\n",
" <td>82</td>\n",
" <td>14</td>\n",
" <td>22</td>\n",
" <td>6</td>\n",
" <td>21</td>\n",
" <td>14</td>\n",
" <td>31</td>\n",
" <td>45</td>\n",
" <td>16</td>\n",
" <td>7</td>\n",
" <td>21</td>\n",
" <td>10</td>\n",
" <td>19</td>\n",
" <td>home</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2215</th>\n",
" <td></td>\n",
" <td></td>\n",
" <td>2016-03-29</td>\n",
" <td>GS</td>\n",
" <td>WAS</td>\n",
" <td>102</td>\n",
" <td>38</td>\n",
" <td>87</td>\n",
" <td>15</td>\n",
" <td>23</td>\n",
" <td>11</td>\n",
" <td>25</td>\n",
" <td>7</td>\n",
" <td>48</td>\n",
" <td>55</td>\n",
" <td>27</td>\n",
" <td>6</td>\n",
" <td>23</td>\n",
" <td>11</td>\n",
" <td>16</td>\n",
" <td>94</td>\n",
" <td>36</td>\n",
" <td>86</td>\n",
" <td>17</td>\n",
" <td>27</td>\n",
" <td>5</td>\n",
" <td>23</td>\n",
" <td>7</td>\n",
" <td>41</td>\n",
" <td>48</td>\n",
" <td>26</td>\n",
" <td>7</td>\n",
" <td>19</td>\n",
" <td>6</td>\n",
" <td>17</td>\n",
" <td>home</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2216</th>\n",
" <td></td>\n",
" <td></td>\n",
" <td>2016-03-29</td>\n",
" <td>HOU</td>\n",
" <td>CLE</td>\n",
" <td>106</td>\n",
" <td>38</td>\n",
" <td>79</td>\n",
" <td>21</td>\n",
" <td>42</td>\n",
" <td>9</td>\n",
" <td>25</td>\n",
" <td>14</td>\n",
" <td>41</td>\n",
" <td>55</td>\n",
" <td>23</td>\n",
" <td>5</td>\n",
" <td>24</td>\n",
" <td>7</td>\n",
" <td>15</td>\n",
" <td>100</td>\n",
" <td>31</td>\n",
" <td>86</td>\n",
" <td>24</td>\n",
" <td>28</td>\n",
" <td>14</td>\n",
" <td>40</td>\n",
" <td>10</td>\n",
" <td>28</td>\n",
" <td>38</td>\n",
" <td>21</td>\n",
" <td>5</td>\n",
" <td>31</td>\n",
" <td>5</td>\n",
" <td>13</td>\n",
" <td>away</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2217</th>\n",
" <td></td>\n",
" <td></td>\n",
" <td>2016-03-29</td>\n",
" <td>IND</td>\n",
" <td>CHI</td>\n",
" <td>96</td>\n",
" <td>39</td>\n",
" <td>90</td>\n",
" <td>15</td>\n",
" <td>17</td>\n",
" <td>3</td>\n",
" <td>19</td>\n",
" <td>13</td>\n",
" <td>31</td>\n",
" <td>44</td>\n",
" <td>20</td>\n",
" <td>6</td>\n",
" <td>16</td>\n",
" <td>9</td>\n",
" <td>12</td>\n",
" <td>98</td>\n",
" <td>37</td>\n",
" <td>87</td>\n",
" <td>14</td>\n",
" <td>16</td>\n",
" <td>10</td>\n",
" <td>26</td>\n",
" <td>12</td>\n",
" <td>29</td>\n",
" <td>41</td>\n",
" <td>22</td>\n",
" <td>6</td>\n",
" <td>19</td>\n",
" <td>5</td>\n",
" <td>17</td>\n",
" <td>home</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2218</th>\n",
" <td></td>\n",
" <td></td>\n",
" <td>2016-03-29</td>\n",
" <td>OKC</td>\n",
" <td>DET</td>\n",
" <td>82</td>\n",
" <td>31</td>\n",
" <td>82</td>\n",
" <td>14</td>\n",
" <td>22</td>\n",
" <td>6</td>\n",
" <td>21</td>\n",
" <td>14</td>\n",
" <td>31</td>\n",
" <td>45</td>\n",
" <td>16</td>\n",
" <td>7</td>\n",
" <td>21</td>\n",
" <td>10</td>\n",
" <td>19</td>\n",
" <td>88</td>\n",
" <td>33</td>\n",
" <td>87</td>\n",
" <td>18</td>\n",
" <td>20</td>\n",
" <td>4</td>\n",
" <td>19</td>\n",
" <td>16</td>\n",
" <td>37</td>\n",
" <td>53</td>\n",
" <td>20</td>\n",
" <td>4</td>\n",
" <td>18</td>\n",
" <td>6</td>\n",
" <td>16</td>\n",
" <td>away</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2219</th>\n",
" <td></td>\n",
" <td></td>\n",
" <td>2016-03-29</td>\n",
" <td>ORL</td>\n",
" <td>BKN</td>\n",
" <td>139</td>\n",
" <td>56</td>\n",
" <td>91</td>\n",
" <td>13</td>\n",
" <td>19</td>\n",
" <td>14</td>\n",
" <td>27</td>\n",
" <td>5</td>\n",
" <td>30</td>\n",
" <td>35</td>\n",
" <td>40</td>\n",
" <td>5</td>\n",
" <td>29</td>\n",
" <td>11</td>\n",
" <td>10</td>\n",
" <td>105</td>\n",
" <td>37</td>\n",
" <td>79</td>\n",
" <td>26</td>\n",
" <td>39</td>\n",
" <td>5</td>\n",
" <td>14</td>\n",
" <td>14</td>\n",
" <td>25</td>\n",
" <td>39</td>\n",
" <td>19</td>\n",
" <td>5</td>\n",
" <td>18</td>\n",
" <td>7</td>\n",
" <td>18</td>\n",
" <td>home</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2220</th>\n",
" <td></td>\n",
" <td></td>\n",
" <td>2016-03-29</td>\n",
" <td>PHI</td>\n",
" <td>CHA</td>\n",
" <td>85</td>\n",
" <td>30</td>\n",
" <td>96</td>\n",
" <td>9</td>\n",
" <td>10</td>\n",
" <td>16</td>\n",
" <td>44</td>\n",
" <td>9</td>\n",
" <td>36</td>\n",
" <td>45</td>\n",
" <td>20</td>\n",
" <td>5</td>\n",
" <td>18</td>\n",
" <td>8</td>\n",
" <td>10</td>\n",
" <td>100</td>\n",
" <td>38</td>\n",
" <td>87</td>\n",
" <td>17</td>\n",
" <td>18</td>\n",
" <td>7</td>\n",
" <td>25</td>\n",
" <td>9</td>\n",
" <td>56</td>\n",
" <td>65</td>\n",
" <td>26</td>\n",
" <td>6</td>\n",
" <td>7</td>\n",
" <td>6</td>\n",
" <td>16</td>\n",
" <td>home</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2221</th>\n",
" <td></td>\n",
" <td></td>\n",
" <td>2016-03-29</td>\n",
" <td>WAS</td>\n",
" <td>GS</td>\n",
" <td>94</td>\n",
" <td>36</td>\n",
" <td>86</td>\n",
" <td>17</td>\n",
" <td>27</td>\n",
" <td>5</td>\n",
" <td>23</td>\n",
" <td>7</td>\n",
" <td>41</td>\n",
" <td>48</td>\n",
" <td>26</td>\n",
" <td>7</td>\n",
" <td>19</td>\n",
" <td>6</td>\n",
" <td>17</td>\n",
" <td>102</td>\n",
" <td>38</td>\n",
" <td>87</td>\n",
" <td>15</td>\n",
" <td>23</td>\n",
" <td>11</td>\n",
" <td>25</td>\n",
" <td>7</td>\n",
" <td>48</td>\n",
" <td>55</td>\n",
" <td>27</td>\n",
" <td>6</td>\n",
" <td>23</td>\n",
" <td>11</td>\n",
" <td>16</td>\n",
" <td>away</td>\n",
" </tr>\n",
" </tbody>\n",
"</table>\n",
"<p>2222 rows × 36 columns</p>\n",
"</div>"
],
"text/plain": [
" blank blank1 dateof team opp points fg fgatt ft ftatt fg3 \\\n",
"0 2015-10-27 ATL DET 94 37 82 12 15 8 \n",
"1 2015-10-27 CHI CLE 97 37 87 16 23 7 \n",
"2 2015-10-27 CLE CHI 95 38 94 10 17 9 \n",
"3 2015-10-27 DET ATL 106 37 96 20 26 12 \n",
"4 2015-10-27 GS NO 111 41 96 20 22 9 \n",
"5 2015-10-27 NO GS 95 35 83 19 27 6 \n",
"6 2015-10-28 BKN CHI 100 39 93 22 28 0 \n",
"7 2015-10-28 BOS PHI 112 39 85 26 27 8 \n",
"8 2015-10-28 CHA MIA 94 33 84 22 29 6 \n",
"9 2015-10-28 CHI BKN 115 42 78 17 20 14 \n",
"10 2015-10-28 CLE MEM 106 41 84 11 17 13 \n",
"11 2015-10-28 DAL PHO 111 40 85 21 31 10 \n",
"12 2015-10-28 DEN HOU 105 40 79 12 18 13 \n",
"13 2015-10-28 DET UTA 92 30 74 25 34 7 \n",
"14 2015-10-28 HOU DEN 85 30 87 17 26 8 \n",
"15 2015-10-28 IND TOR 99 32 86 26 31 9 \n",
"16 2015-10-28 LAC SAC 111 42 80 21 31 6 \n",
"17 2015-10-28 LAL MIN 111 35 93 32 35 9 \n",
"18 2015-10-28 MEM CLE 76 29 82 16 22 2 \n",
"19 2015-10-28 MIA CHA 104 36 73 20 21 12 \n",
"20 2015-10-28 MIL NY 97 30 86 28 31 9 \n",
"21 2015-10-28 MIN LAL 112 38 83 31 37 5 \n",
"22 2015-10-28 NO POR 94 36 91 11 18 11 \n",
"23 2015-10-28 NY MIL 122 42 93 29 35 9 \n",
"24 2015-10-28 OKC SA 112 42 86 21 22 7 \n",
"25 2015-10-28 ORL WAS 87 37 100 8 12 5 \n",
"26 2015-10-28 PHI BOS 95 34 84 20 23 7 \n",
"27 2015-10-28 PHO DAL 95 34 87 21 33 6 \n",
"28 2015-10-28 POR NO 112 44 88 12 14 12 \n",
"29 2015-10-28 SA OKC 106 45 93 11 13 5 \n",
"... ... ... ... ... ... ... .. ... .. ... ... \n",
"2192 2016-03-28 BOS LAC 90 31 89 21 27 7 \n",
"2193 2016-03-28 CHI ATL 100 40 105 11 15 9 \n",
"2194 2016-03-28 DAL DEN 97 36 88 14 15 11 \n",
"2195 2016-03-28 DEN DAL 88 31 70 17 19 9 \n",
"2196 2016-03-28 LAC BOS 114 44 84 15 18 11 \n",
"2197 2016-03-28 LAL UTA 75 26 85 16 22 7 \n",
"2198 2016-03-28 MEM SA 87 33 83 15 24 6 \n",
"2199 2016-03-28 MIA BKN 110 48 84 9 12 5 \n",
"2200 2016-03-28 MIN PHO 121 41 81 32 40 7 \n",
"2201 2016-03-28 NO NY 99 32 75 27 37 8 \n",
"2202 2016-03-28 NY NO 91 36 89 9 13 10 \n",
"2203 2016-03-28 OKC TOR 119 41 86 26 32 11 \n",
"2204 2016-03-28 PHO MIN 116 41 84 19 23 15 \n",
"2205 2016-03-28 POR SAC 105 38 80 15 18 14 \n",
"2206 2016-03-28 SA MEM 101 37 72 22 30 5 \n",
"2207 2016-03-28 SAC POR 93 37 89 12 19 7 \n",
"2208 2016-03-28 TOR OKC 100 38 93 16 23 8 \n",
"2209 2016-03-28 UTA LAL 123 46 89 14 19 17 \n",
"2210 2016-03-29 BKN ORL 105 37 79 26 39 5 \n",
"2211 2016-03-29 CHA PHI 100 38 87 17 18 7 \n",
"2212 2016-03-29 CHI IND 98 37 87 14 16 10 \n",
"2213 2016-03-29 CLE HOU 100 31 86 24 28 14 \n",
"2214 2016-03-29 DET OKC 88 33 87 18 20 4 \n",
"2215 2016-03-29 GS WAS 102 38 87 15 23 11 \n",
"2216 2016-03-29 HOU CLE 106 38 79 21 42 9 \n",
"2217 2016-03-29 IND CHI 96 39 90 15 17 3 \n",
"2218 2016-03-29 OKC DET 82 31 82 14 22 6 \n",
"2219 2016-03-29 ORL BKN 139 56 91 13 19 14 \n",
"2220 2016-03-29 PHI CHA 85 30 96 9 10 16 \n",
"2221 2016-03-29 WAS GS 94 36 86 17 27 5 \n",
"\n",
" fg3att offrebounds defrebounds totalrebounds assists blocks fouls \\\n",
"0 27 7 33 40 22 4 25 \n",
"1 19 7 40 47 13 10 22 \n",
"2 29 11 39 50 26 7 21 \n",
"3 29 23 36 59 23 3 15 \n",
"4 30 21 35 56 29 7 29 \n",
"5 18 8 25 33 21 3 26 \n",
"6 9 16 29 45 19 5 18 \n",
"7 24 10 31 41 31 7 23 \n",
"8 24 11 32 43 16 1 16 \n",
"9 28 5 34 39 20 3 24 \n",
"10 29 12 42 54 29 2 25 \n",
"11 21 6 42 48 24 3 25 \n",
"12 27 9 40 49 26 10 26 \n",
"13 19 8 35 43 16 4 20 \n",
"14 35 15 29 44 17 8 19 \n",
"15 23 8 32 40 23 3 30 \n",
"16 19 6 36 42 20 9 19 \n",
"17 35 15 36 51 18 4 29 \n",
"18 16 11 29 40 15 3 18 \n",
"19 20 2 39 41 23 7 25 \n",
"20 18 18 29 47 17 4 27 \n",
"21 20 6 33 39 24 4 26 \n",
"22 33 5 34 39 19 2 17 \n",
"23 23 19 30 49 24 7 28 \n",
"24 19 11 34 45 21 4 19 \n",
"25 26 17 39 56 20 6 22 \n",
"26 22 15 32 47 12 6 22 \n",
"27 24 13 40 53 15 3 30 \n",
"28 32 6 45 51 22 4 21 \n",
"29 15 7 29 36 22 9 18 \n",
"... ... ... ... ... ... ... ... \n",
"2192 19 18 31 49 14 4 17 \n",
"2193 22 18 40 58 22 5 17 \n",
"2194 32 9 25 34 23 6 20 \n",
"2195 24 6 38 44 20 4 20 \n",
"2196 25 9 36 45 29 5 23 \n",
"2197 20 7 30 37 11 6 19 \n",
"2198 19 13 26 39 19 4 22 \n",
"2199 16 7 25 32 25 4 14 \n",
"2200 26 11 30 41 22 3 18 \n",
"2201 19 6 41 47 18 3 16 \n",
"2202 31 6 36 42 26 6 26 \n",
"2203 26 12 41 53 29 5 22 \n",
"2204 33 7 29 36 22 2 34 \n",
"2205 29 5 37 42 25 10 23 \n",
"2206 15 10 33 43 23 7 21 \n",
"2207 15 11 32 43 20 2 20 \n",
"2208 24 12 28 40 19 7 21 \n",
"2209 32 13 44 57 26 7 18 \n",
"2210 14 14 25 39 19 5 18 \n",
"2211 25 9 56 65 26 6 7 \n",
"2212 26 12 29 41 22 6 19 \n",
"2213 40 10 28 38 21 5 31 \n",
"2214 19 16 37 53 20 4 18 \n",
"2215 25 7 48 55 27 6 23 \n",
"2216 25 14 41 55 23 5 24 \n",
"2217 19 13 31 44 20 6 16 \n",
"2218 21 14 31 45 16 7 21 \n",
"2219 27 5 30 35 40 5 29 \n",
"2220 44 9 36 45 20 5 18 \n",
"2221 23 7 41 48 26 7 19 \n",
"\n",
" steals turnovers opoints ofg ofgatt oft oftatt ofg3 ofg3att \\\n",
"0 9 15 106 37 96 20 26 12 29 \n",
"1 6 13 95 38 94 10 17 9 29 \n",
"2 5 11 97 37 87 16 23 7 19 \n",
"3 5 15 94 37 82 12 15 8 27 \n",
"4 8 20 95 35 83 19 27 6 18 \n",
"5 9 19 111 41 96 20 22 9 30 \n",
"6 11 13 115 42 78 17 20 14 28 \n",
"7 10 17 95 34 84 20 23 7 22 \n",
"8 4 9 104 36 73 20 21 12 20 \n",
"9 9 20 100 39 93 22 28 0 9 \n",
"10 7 19 76 29 82 16 22 2 16 \n",
"11 7 8 95 34 87 21 33 6 24 \n",
"12 9 21 85 30 87 17 26 8 35 \n",
"13 2 12 87 35 75 15 21 2 12 \n",
"14 13 17 105 40 79 12 18 13 27 \n",
"15 14 13 106 36 80 27 39 7 18 \n",
"16 8 15 104 41 94 11 18 11 24 \n",
"17 2 14 112 38 83 31 37 5 20 \n",
"18 8 16 106 41 84 11 17 13 29 \n",
"19 5 13 94 33 84 22 29 6 24 \n",
"20 7 18 122 42 93 29 35 9 23 \n",
"21 3 8 111 35 93 32 35 9 35 \n",
"22 7 11 112 44 88 12 14 12 32 \n",
"23 11 11 97 30 86 28 31 9 18 \n",
"24 7 19 106 45 93 11 13 5 15 \n",
"25 9 16 88 33 84 15 25 7 28 \n",
"26 11 24 112 39 85 26 27 8 24 \n",
"27 3 18 111 40 85 21 31 10 21 \n",
"28 7 12 94 36 91 11 18 11 33 \n",
"29 11 13 112 42 86 21 22 7 19 \n",
"... ... ... ... ... ... ... ... ... ... \n",
"2192 7 16 114 44 84 15 18 11 25 \n",
"2193 4 9 102 36 85 25 28 5 22 \n",
"2194 14 4 88 31 70 17 19 9 24 \n",
"2195 3 21 97 36 88 14 15 11 32 \n",
"2196 13 15 90 31 89 21 27 7 19 \n",
"2197 5 9 123 46 89 14 19 17 32 \n",
"2198 8 14 101 37 72 22 30 5 15 \n",
"2199 11 13 99 41 77 14 18 3 11 \n",
"2200 10 18 116 41 84 19 23 15 33 \n",
"2201 11 13 91 36 89 9 13 10 31 \n",
"2202 9 14 99 32 75 27 37 8 19 \n",
"2203 7 10 100 38 93 16 23 8 24 \n",
"2204 9 21 121 41 81 32 40 7 26 \n",
"2205 6 19 93 37 89 12 19 7 15 \n",
"2206 9 15 87 33 83 15 24 6 19 \n",
"2207 11 15 105 38 80 15 18 14 29 \n",
"2208 4 11 119 41 86 26 32 11 26 \n",
"2209 4 7 75 26 85 16 22 7 20 \n",
"2210 7 18 139 56 91 13 19 14 27 \n",
"2211 6 16 85 30 96 9 10 16 44 \n",
"2212 5 17 96 39 90 15 17 3 19 \n",
"2213 5 13 106 38 79 21 42 9 25 \n",
"2214 6 16 82 31 82 14 22 6 21 \n",
"2215 11 16 94 36 86 17 27 5 23 \n",
"2216 7 15 100 31 86 24 28 14 40 \n",
"2217 9 12 98 37 87 14 16 10 26 \n",
"2218 10 19 88 33 87 18 20 4 19 \n",
"2219 11 10 105 37 79 26 39 5 14 \n",
"2220 8 10 100 38 87 17 18 7 25 \n",
"2221 6 17 102 38 87 15 23 11 25 \n",
"\n",
" ooffrebounds odefrebounds ototalrebounds oassists oblocks ofouls \\\n",
"0 23 36 59 23 3 15 \n",
"1 11 39 50 26 7 21 \n",
"2 7 40 47 13 10 22 \n",
"3 7 33 40 22 4 25 \n",
"4 8 25 33 21 3 26 \n",
"5 21 35 56 29 7 29 \n",
"6 5 34 39 20 3 24 \n",
"7 15 32 47 12 6 22 \n",
"8 2 39 41 23 7 25 \n",
"9 16 29 45 19 5 18 \n",
"10 11 29 40 15 3 18 \n",
"11 13 40 53 15 3 30 \n",
"12 15 29 44 17 8 19 \n",
"13 4 34 38 15 5 25 \n",
"14 9 40 49 26 10 26 \n",
"15 9 41 50 19 2 24 \n",
"16 12 37 49 24 3 27 \n",
"17 6 33 39 24 4 26 \n",
"18 12 42 54 29 2 25 \n",
"19 11 32 43 16 1 16 \n",
"20 19 30 49 24 7 28 \n",
"21 15 36 51 18 4 29 \n",
"22 6 45 51 22 4 21 \n",
"23 18 29 47 17 4 27 \n",
"24 7 29 36 22 9 18 \n",
"25 15 34 49 17 9 14 \n",
"26 10 31 41 31 7 23 \n",
"27 6 42 48 24 3 25 \n",
"28 5 34 39 19 2 17 \n",
"29 11 34 45 21 4 19 \n",
"... ... ... ... ... ... ... \n",
"2192 9 36 45 29 5 23 \n",
"2193 7 40 47 22 12 13 \n",
"2194 6 38 44 20 4 20 \n",
"2195 9 25 34 23 6 20 \n",
"2196 18 31 49 14 4 17 \n",
"2197 13 44 57 26 7 18 \n",
"2198 10 33 43 23 7 21 \n",
"2199 10 26 36 20 2 10 \n",
"2200 7 29 36 22 2 34 \n",
"2201 6 36 42 26 6 26 \n",
"2202 6 41 47 18 3 16 \n",
"2203 12 28 40 19 7 21 \n",
"2204 11 30 41 22 3 18 \n",
"2205 11 32 43 20 2 20 \n",
"2206 13 26 39 19 4 22 \n",
"2207 5 37 42 25 10 23 \n",
"2208 12 41 53 29 5 22 \n",
"2209 7 30 37 11 6 19 \n",
"2210 5 30 35 40 5 29 \n",
"2211 9 36 45 20 5 18 \n",
"2212 13 31 44 20 6 16 \n",
"2213 14 41 55 23 5 24 \n",
"2214 14 31 45 16 7 21 \n",
"2215 7 41 48 26 7 19 \n",
"2216 10 28 38 21 5 31 \n",
"2217 12 29 41 22 6 19 \n",
"2218 16 37 53 20 4 18 \n",
"2219 14 25 39 19 5 18 \n",
"2220 9 56 65 26 6 7 \n",
"2221 7 48 55 27 6 23 \n",
"\n",
" osteals oturnovers side \n",
"0 5 15 home \n",
"1 5 11 home \n",
"2 6 13 away \n",
"3 9 15 away \n",
"4 9 19 home \n",
"5 8 20 away \n",
"6 9 20 home \n",
"7 11 24 home \n",
"8 5 13 away \n",
"9 11 13 away \n",
"10 8 16 away \n",
"11 3 18 away \n",
"12 13 17 away \n",
"13 4 12 home \n",
"14 9 21 home \n",
"15 8 21 away \n",
"16 8 18 away \n",
"17 3 8 home \n",
"18 7 19 home \n",
"19 4 9 home \n",
"20 11 11 home \n",
"21 2 14 away \n",
"22 7 12 away \n",
"23 7 18 away \n",
"24 11 13 home \n",
"25 8 18 home \n",
"26 10 17 away \n",
"27 7 8 home \n",
"28 7 11 home \n",
"29 7 19 away \n",
"... ... ... ... \n",
"2192 13 15 away \n",
"2193 5 8 home \n",
"2194 3 21 away \n",
"2195 14 4 home \n",
"2196 7 16 home \n",
"2197 4 7 away \n",
"2198 9 15 home \n",
"2199 8 20 home \n",
"2200 9 21 home \n",
"2201 9 14 home \n",
"2202 11 13 away \n",
"2203 4 11 away \n",
"2204 10 18 away \n",
"2205 11 15 home \n",
"2206 8 14 away \n",
"2207 6 19 away \n",
"2208 7 10 home \n",
"2209 5 9 home \n",
"2210 11 10 away \n",
"2211 8 10 away \n",
"2212 9 12 away \n",
"2213 7 15 home \n",
"2214 10 19 home \n",
"2215 6 17 home \n",
"2216 5 13 away \n",
"2217 5 17 home \n",
"2218 6 16 away \n",
"2219 7 18 home \n",
"2220 6 16 home \n",
"2221 11 16 away \n",
"\n",
"[2222 rows x 36 columns]"
]
},
"execution_count": 23,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"df"
]
},
{
"cell_type": "code",
"execution_count": 3,
"metadata": {
"collapsed": false
},
"outputs": [],
"source": [
"df['poss_calc'] = df['fgatt'] + df['turnovers'] + (0.475*df['ftatt']) - df['offrebounds']\n",
"df['oposs_calc'] = df['ofgatt'] + df['oturnovers'] + (0.475*df['oftatt']) - df['ooffrebounds']\n",
"df['possessions'] = (df['poss_calc'] + df['oposs_calc'])/2\n",
"df['efgp'] = (df['fg'] + (0.5 * df['fg3'])) / df['fgatt']\n",
"df['oefgp'] = (df['ofg'] + (0.5 * df['ofg3'])) / df['ofgatt']\n",
"df['ftrate'] = df['ft'] / df['fgatt']\n",
"df['oftrate'] = df['oft'] / df['ofgatt']\n",
"df['torate'] = df['turnovers'] / (df['fgatt'] + (0.44 * df['ftatt']) + df['turnovers'])\n",
"df['otorate'] = df['oturnovers'] / (df['ofgatt'] + (0.44 * df['oftatt']) + df['oturnovers'])\n",
"df['offrebound_p'] = df['offrebounds'] / (df['offrebounds'] + df['odefrebounds'])\n",
"df['ooffrebound_p'] = df['ooffrebounds'] / (df['ooffrebounds'] + df['defrebounds'])\n",
"\n",
"\n",
"# df['possessions'] = df[['poss_calc', 'oposs_calc']].mean(axis=1)\n",
"df['avg_possessions'] = df.groupby(df['team'])['possessions'].apply(lambda x: pd.expanding_mean(x))\n",
"df['oavg_possessions'] = df.groupby(df['opp'])['possessions'].apply(lambda x: pd.expanding_mean(x))\n",
"df['avg_poss_comp'] = a\n",
"(df['avg_possessions'] + df['oavg_possessions'])/2\n",
"df['poss_dev'] = df['possessions'] - df['avg_poss_comp']\n",
"\n",
"df['avg_to'] = df['turnovers'].groupby(df['team']).apply(lambda x: pd.expanding_mean(x))\n",
"df['oavg_to'] = df['turnovers'].groupby(df['opp']).apply(lambda x: pd.expanding_mean(x))\n",
"df['avg_forced_to'] = df['oturnovers'].groupby(df['team']).apply(lambda x: pd.expanding_mean(x))\n",
"df['oavg_forced_to'] = df['oturnovers'].groupby(df['opp']).apply(lambda x: pd.expanding_mean(x))\n",
"df['comp_to'] = (df['avg_to']+df['oavg_forced_to'])/2\n",
"df['comp_forced_to'] = (df['oavg_to']+df['avg_forced_to'])/2\n",
"df['off_dev_to'] = df['turnovers'] - df['comp_to']\n",
"df['def_dev_to'] = df['oturnovers'] - df['comp_forced_to']\n",
"df['avg_off_dev_to'] = df['off_dev_to'].groupby(df['team']).apply(lambda x: pd.expanding_mean(x))\n",
"df['avg_def_dev_to'] = df['def_dev_to'].groupby(df['team']).apply(lambda x: pd.expanding_mean(x))\n",
"df['avg_opp_off_to_dev'] = df['off_dev_to'].groupby(df['opp']).apply(lambda x: pd.expanding_mean(x))\n",
"df['avg_opp_def_to_dev'] = df['def_dev_to'].groupby(df['opp']).apply(lambda x: pd.expanding_mean(x))\n",
"\n",
"df['ftatt_per_game'] = df['ftatt'].groupby(df['team']).apply(lambda x: pd.expanding_mean(x))\n",
"df['opp_def_ftatt_per_game'] = df['oftatt'].groupby(df['opp']).apply(lambda x: pd.expanding_mean(x))\n",
"df['opp_off_ftatt_per_game'] = df['ftatt'].groupby(df['opp']).apply(lambda x: pd.expanding_mean(x))\n",
"df['def_ftatt_per_game'] = df['oftatt'].groupby(df['team']).apply(lambda x: pd.expanding_mean(x))\n",
"df['avg_ft_comp'] = df[['ftatt_per_game', 'opp_def_ftatt_per_game']].mean(axis=1)\n",
"df['avg_def_ft_comp'] = df[['opp_off_ftatt_per_game','def_ftatt_per_game']].mean(axis=1)\n",
"df['off_dev_ft'] = df['ftatt'] - df['avg_ft_comp']\n",
"df['def_dev_ft'] = df['oftatt'] - df['avg_def_ft_comp']\n",
"df['avg_off_ft_dev'] = df['off_dev_ft'].groupby(df['team']).apply(lambda x: pd.expanding_mean(x))\n",
"df['avg_def_ft_dev'] = df['def_dev_ft'].groupby(df['team']).apply(lambda x: pd.expanding_mean(x))\n",
"df['oavg_off_ft_dev'] = df['off_dev_ft'].groupby(df['opp']).apply(lambda x: pd.expanding_mean(x))\n",
"df['oavg_def_ft_dev'] = df['def_dev_ft'].groupby(df['opp']).apply(lambda x: pd.expanding_mean(x))\n",
"df['ftpercentage'] = df['ft'] / df['ftatt']\n",
"df['avgftpercentage'] = df['ftpercentage'].groupby(df['team']).apply(lambda x: pd.expanding_mean(x))\n",
"\n",
"df['2sMade'] = df['fg'] - df['fg3']\n",
"df['2sAtt'] = df['fgatt'] - df['fg3att']\n",
"df['o2sMade'] = df['ofg'] - df['ofg3']\n",
"df['o2sAtt'] = df['ofgatt'] - df['ofg3att']\n",
"df['percent3s'] = df['fg3att'] / df['fgatt']\n",
"# df['fgp'] = df['2sMade'] / df['2sAtt']\n",
"df['avg_2s_game'] = df['2sMade'].groupby(df['team']).apply(lambda x: pd.expanding_mean(x))/df['2sAtt'].groupby(df['team']).apply(lambda x: pd.expanding_mean(x))\n",
"df['odef_avg_2s_game'] = df['o2sMade'].groupby(df['opp']).apply(lambda x: pd.expanding_mean(x))/df['o2sAtt'].groupby(df['opp']).apply(lambda x: pd.expanding_mean(x))\n",
"df['oavg_2s_game'] = df['2sMade'].groupby(df['opp']).apply(lambda x: pd.expanding_mean(x))/df['2sAtt'].groupby(df['opp']).apply(lambda x: pd.expanding_mean(x))\n",
"df['def_2s_game'] = df['o2sMade'].groupby(df['team']).apply(lambda x: pd.expanding_mean(x))/df['o2sAtt'].groupby(df['team']).apply(lambda x: pd.expanding_mean(x))\n",
"df['avg_fg_comp'] = (df['avg_2s_game'] + df['odef_avg_2s_game'])/2\n",
"df['avg_def_fg_comp'] = (df['oavg_2s_game'] + df['def_2s_game'])/2\n",
"df['off_dev_fg'] = (df['2sMade'] / df['2sAtt']) - df['avg_fg_comp']\n",
"df['def_dev_fg'] = (df['o2sMade'] / df['o2sAtt']) - df['avg_def_fg_comp']\n",
"\n",
"df['fg3_game'] = df['fg3']/df['fg3att']\n",
"df['ofg3_game'] = df['ofg3']/df['ofg3att']\n",
"df['avg_3_game'] = df['fg3'].groupby(df['team']).apply(lambda x: pd.expanding_mean(x))/df['fg3att'].groupby(df['team']).apply(lambda x: pd.expanding_mean(x))\n",
"df['odef_avg_3_game'] = df['ofg3'].groupby(df['opp']).apply(lambda x: pd.expanding_mean(x))/df['ofg3att'].groupby(df['opp']).apply(lambda x: pd.expanding_mean(x))\n",
"df['o_avg_3_game'] = df['fg3'].groupby(df['opp']).apply(lambda x: pd.expanding_mean(x))/df['fg3att'].groupby(df['opp']).apply(lambda x: pd.expanding_mean(x))\n",
"df['def_avg_3_game'] = df['ofg3'].groupby(df['team']).apply(lambda x: pd.expanding_mean(x))/df['ofg3att'].groupby(df['team']).apply(lambda x: pd.expanding_mean(x))\n",
"df['avg_3_comp'] = (df['avg_3_game'] + df['odef_avg_3_game'])/2\n",
"df['avg_def_3_comp'] = (df['o_avg_3_game'] + df['def_avg_3_game'])/2\n",
"df['off_dev_fg3'] = (df['fg3']/df['fg3att'])-df['avg_3_comp']\n",
"df['def_dev_fg3'] = (df['ofg3']/df['ofg3att'])-df['avg_def_3_comp']\n",
"\n",
"df['missedshots'] = df['fgatt'] - df['fg']\n",
"df['omissedshots'] = df['ofgatt'] - df['ofg']\n",
"df['offrebound_percent'] = df['offrebounds']/df['missedshots']\n",
"df['ooffrebound_percent'] = df['ooffrebounds']/df['omissedshots']\n",
"df['offrebound_percent'] = df['offrebounds'].groupby(df['team']).apply(lambda x: pd.expanding_mean(x))/df['missedshots'].groupby(df['team']).apply(lambda x: pd.expanding_mean(x))\n",
"df['opp_def_offrebound_percent'] = df['ooffrebounds'].groupby(df['opp']).apply(lambda x: pd.expanding_mean(x))/df['omissedshots'].groupby(df['opp']).apply(lambda x: pd.expanding_mean(x))\n",
"df['def_offrebound_percent'] = df['ooffrebounds'].groupby(df['team']).apply(lambda x: pd.expanding_mean(x))/df['omissedshots'].groupby(df['team']).apply(lambda x: pd.expanding_mean(x))\n",
"df['ooffrebound_percent'] = df['offrebounds'].groupby(df['opp']).apply(lambda x: pd.expanding_mean(x))/df['missedshots'].groupby(df['opp']).apply(lambda x: pd.expanding_mean(x))\n",
"df['avg_off_opp_def'] = (df['offrebound_percent'] + df['opp_def_offrebound_percent'])/2\n",
"df['avg_def_opp_off'] = (df['def_offrebound_percent'] + df['ooffrebound_percent'])/2\n",
"df['off_rebound_dev'] = (df['offrebounds']/df['missedshots']) - df['avg_off_opp_def']\n",
"df['opp_def_off_rebound_dev'] = (df['ooffrebounds']/df['omissedshots']) - df['avg_def_opp_off']"
]
},
{
"cell_type": "code",
"execution_count": 4,
"metadata": {
"collapsed": false
},
"outputs": [],
"source": [
"class NBA(object):\n",
"\n",
" def __init__(self, team, opp, totalshots_before_offreb=None, proj_fg_percentage=None, \n",
" proj_fg3_percentage=None, proj_fg3=None, proj_fg=None, proj_ftatt=None,\n",
" ft_percentage=None, proj_poss=None, proj_to=None, proj_fg3att=None,\n",
" proj_fgatt=None, proj_offreb=None, fg_from_offreb=None, proj_ft=None,\n",
" rolling=False, side=False, method='mean'):\n",
" self.team = team\n",
" self.opp = opp\n",
" self.rolling = rolling\n",
" self.side = side\n",
" self.method = method\n",
" self.proj_ftatt = NBA.get_proj_ftatt(self, rolling=rolling, side=side, method=method)\n",
" self.ft_percentage = NBA.get_ft_percentage(self, rolling=rolling, side=side, method=method)\n",
" self.proj_poss = NBA.get_proj_poss(self, rolling=rolling, side=side, method=method)\n",
" self.proj_to = NBA.get_proj_to(self, rolling=rolling, side=side, method=method)\n",
" self.totalshots_before_offreb = NBA.total_shots_before_offrebounds(self, rolling=rolling, side=side, method=method)\n",
" self.proj_fg_percentage = NBA.get_proj_fg_percentage(self, rolling=rolling, side=side, method=method)\n",
" self.proj_fgatt = NBA.get_proj_fgatt(self, rolling=rolling, side=side, method=method)\n",
" self.proj_fg3att = NBA.get_proj_fg3att(self, rolling=rolling, side=side, method=method)\n",
" self.proj_fg3_percentage = NBA.get_proj_fg3_percentage(self, rolling=rolling, side=side, method=method)\n",
" self.proj_fg3 = NBA.get_proj_fg3(self, rolling=rolling, side=side, method=method)\n",
" self.proj_fg = NBA.get_proj_fg(self, rolling=rolling, side=side, method=method)\n",
" self.proj_offreb = NBA.get_proj_offrebound(self, rolling=rolling, side=side, method=method)\n",
" self.fg_from_offreb = NBA.get_proj_fg_from_offrebounds(self, rolling=rolling, side=side, method=method)\n",
" self.proj_ft = NBA.get_proj_ft(self, rolling=rolling, method=method)\n",
"\n",
" # projected possessions\n",
" def get_proj_poss(self, rolling=False, side=False, method='mean'):\n",
" avg_poss = get_mean(self.team, 'possessions', rolling=rolling, side=side, method=method, location=\"home\")\n",
" oavg_poss = get_mean(self.opp, 'possessions', rolling=rolling, side=side, method=method, location=\"away\")\n",
" comp_poss = (avg_poss + oavg_poss)/2\n",
" avg_poss_dev = get_mean(self.team, 'poss_dev', rolling=rolling, side=side, method=method, location=\"home\")\n",
" oavg_poss_dev = get_mean(self.opp, 'poss_dev', rolling=rolling, side=side, method=method, location=\"away\")\n",
" poss_impact = avg_poss_dev + oavg_poss_dev\n",
" proj_poss = poss_impact + comp_poss\n",
" return proj_poss\n",
"\n",
" # projected turnovers\n",
" def get_proj_to(self, rolling=False, side=False, method='mean'):\n",
" comp_to = get_mean(self.team, 'comp_to', rolling=rolling, side=side, method=method, location=\"home\")\n",
" avg_off_to_dev = get_mean(self.team, 'avg_off_dev_to', rolling=rolling, side=side, method=method, location=\"home\")\n",
" avg_def_to_dev = get_mean(self.team, 'avg_def_dev_to', rolling=rolling, side=side, method=method, location=\"home\")\n",
" avg_opp_off_dev_to = get_mean(self.opp, 'avg_off_dev_to', rolling=rolling, side=side, method=method, location=\"away\")\n",
" avg_opp_def_dev_to = get_mean(self.opp, 'avg_def_dev_to', rolling=rolling, side=side, method=method, location=\"away\")\n",
" to_impact = avg_off_to_dev + avg_opp_def_dev_to\n",
" proj_to = comp_to + to_impact\n",
" return proj_to\n",
"\n",
" def get_proj_ftatt(self, rolling=False, side=False, method='mean'):\n",
" avg_off_ftatt_dev = get_mean(self.team, 'off_dev_ft', rolling=rolling, side=side, method=method, location=\"home\")\n",
" avg_def_ftatt_dev = get_mean(self.team, 'def_dev_ft', rolling=rolling, side=side, method=method, location=\"home\")\n",
" oavg_off_ftatt_dev = get_mean(self.opp, 'off_dev_ft', rolling=rolling, side=side, method=method, location=\"away\")\n",
" oavg_def_ftatt_dev = get_mean(self.opp, 'def_dev_ft', rolling=rolling, side=side, method=method, location=\"away\")\n",
" \n",
" avg_ft_pergame = get_mean(self.team, 'ftatt', rolling=rolling, side=side, method=method, location=\"home\")\n",
" oavg_def_ft_pergame = get_mean(self.opp, 'ftatt', rolling=rolling, side=side, method=method, location=\"away\")\n",
" \n",
" comp_ftatt = (avg_ft_pergame + oavg_def_ft_pergame)/2\n",
" ft_impact = (avg_off_ftatt_dev + oavg_def_ftatt_dev)\n",
" proj_ftatt = comp_ftatt + ft_impact\n",
" return proj_ftatt\n",
" \n",
" def get_ft_percentage(self, rolling=False, side=False, method='mean'):\n",
" ftp = df[df.team==self.team]['ftpercentage'].mean()\n",
" return ftp\n",
" \n",
" def get_proj_ft(self, rolling=False, side=False, method='mean'):\n",
" ft_made = self.proj_ftatt * self.ft_percentage\n",
" return ft_made\n",
"\n",
"\n",
" def total_shots_before_offrebounds(self, rolling=False, side=False, method='mean'):\n",
" tsbor = self.proj_poss - self.proj_to - (0.475*self.proj_ftatt)\n",
" return tsbor\n",
" \n",
" def get_proj_fg_percentage(self, rolling=False, side=False, method='mean'):\n",
" avg_off_dev_fg = get_mean(self.team, 'off_dev_fg', rolling=rolling, side=side, method=method, location=\"home\")\n",
" avg_def_dev_fg = get_mean(self.opp, 'def_dev_fg', rolling=rolling, side=side, method=method, location=\"away\")\n",
" fg_impact = avg_off_dev_fg + avg_def_dev_fg\n",
" proj_fg_percentage = df[df.team==self.team]['avg_fg_comp'].mean() + fg_impact\n",
" return proj_fg_percentage\n",
" \n",
" def get_proj_fg3_percentage(self, rolling=False, side=False, method='mean'):\n",
" fg3_game = get_mean(self.team, 'avg_3_game', rolling=rolling, side=side, method=method, location=\"home\")\n",
" odef_fg3_game = get_mean(self.opp, 'odef_avg_3_game', rolling=rolling, side=side, method=method, location=\"away\")\n",
" opp_off_fg3_game = get_mean(self.opp, 'avg_3_game', rolling=rolling, side=side, method=method, location=\"away\")\n",
" opp_fg3_game = get_mean(self.team, 'odef_avg_3_game', rolling=rolling, side=side, method=method, location=\"home\")\n",
" fg3_comp = (fg3_game + odef_fg3_game)/2\n",
" def_fg3_comp = (opp_off_fg3_game + opp_fg3_game)/2\n",
" avg_off_fg3_dev = get_mean(self.team, 'off_dev_fg3', rolling=rolling, side=side, method=method, location=\"home\")\n",
" avg_def_fg3_dev = get_mean(self.team, 'def_dev_fg3', rolling=rolling, side=side, method=method, location=\"home\")\n",
" oavg_off_fg3_dev = get_mean(self.opp, 'off_dev_fg3', rolling=rolling, side=side, method=method, location=\"away\")\n",
" oavg_def_fg3_dev = get_mean(self.opp, 'def_dev_fg3', rolling=rolling, side=side, method=method, location=\"away\")\n",
" fg3_impact = (avg_off_fg3_dev + oavg_def_fg3_dev)\n",
" proj_fg3_percentage = fg3_comp + fg3_impact\n",
" return proj_fg3_percentage\n",
" \n",
" def get_proj_fg3att(self, rolling=False, side=False, method='mean'):\n",
" percent3s = get_mean(self.team, 'percent3s', rolling=rolling, side=side, method=method, location=\"home\")\n",
" fg3att = self.totalshots_before_offreb * percent3s\n",
" return fg3att\n",
" \n",
" def get_proj_fgatt(self, rolling=False, side=False, method='mean'):\n",
" percent3s = get_mean(self.team, 'percent3s', rolling=rolling, side=side, method=method, location=\"home\")\n",
" fgatt = (1 - percent3s) * self.totalshots_before_offreb\n",
" return fgatt\n",
" \n",
" def get_proj_fg3(self, rolling=False, side=False, method='mean'):\n",
" proj_fg3 = self.proj_fg3_percentage * self.proj_fg3att\n",
" return proj_fg3\n",
" \n",
" def get_proj_fg(self, rolling=False, side=False, method='mean'):\n",
" proj_fg = self.proj_fg_percentage * self.proj_fgatt\n",
" return proj_fg\n",
"\n",
" def get_proj_offrebound(self, rolling=False, side=False, method='mean'):\n",
" offreb_percent = get_mean(self.team, 'offrebound_percent', rolling=rolling, side=side, method=method, location=\"home\")\n",
" opp_def_offrebound_percent = get_mean(self.opp, 'ooffrebound_percent', rolling=rolling, side=side, method=method, location=\"away\")\n",
" def_offreb_percent = get_mean(self.team, 'def_offrebound_percent', rolling=rolling, side=side, method=method, location=\"home\")\n",
" ooffreb_percent = get_mean(self.opp, 'ooffrebound_percent', rolling=rolling, side=side, method=method, location=\"away\")\n",
" \n",
" avg_offreb_dev = get_mean(self.team, 'off_rebound_dev', rolling=rolling, side=side, method=method, location=\"home\")\n",
" avg_def_offreb_dev = get_mean(self.team, 'opp_def_off_rebound_dev', rolling=rolling, side=side, method=method, location=\"home\")\n",
" opp_avg_offreb_def = get_mean(self.opp, 'off_rebound_dev', rolling=rolling, side=side, method=method, location=\"away\")\n",
" opp_avg_def_offreb_dev = get_mean(self.opp, 'opp_def_off_rebound_dev', rolling=rolling, side=side, method=method, location=\"away\")\n",
" \n",
" offreb_impact = avg_offreb_dev + opp_avg_def_offreb_dev\n",
" proj_offreb_percent = get_mean(self.team, 'avg_off_opp_def', rolling=rolling, side=side, method=method, location=\"home\") + offreb_impact\n",
" \n",
" proj_missed_shots = self.totalshots_before_offreb - (self.proj_fg3 + self.proj_fg)\n",
" proj_offreb = proj_offreb_percent * proj_missed_shots\n",
" return proj_offreb\n",
" \n",
" def get_proj_fg_from_offrebounds(self, rolling=False, side=False, method='mean'):\n",
" fg_from_offreb = self.proj_fg_percentage * self.proj_offreb\n",
" return fg_from_offreb\n",
" \n",
"\n",
" def get_proj_score(self, rolling=False, side=False, method='mean'):\n",
" proj_score = (self.fg_from_offreb*2) + (self.proj_fg*2) + (self.proj_fg3*3) + self.proj_ft\n",
" return proj_score\n",
" \n",
"def get_mean(team, stat, rolling=False, side=False, location=None, method='mean'):\n",
" \n",
" def montecarlo(floor, ceiling, bias):\n",
" mc = random.uniform(floor, ceiling) + bias\n",
" return mc\n",
" \n",
" def middle(method='mean'):\n",
" if rolling:\n",
" mean = pd.rolling_mean(df[df.team==team][stat], 15).tail(1) if method == 'mean' else pd.rolling_median(df[df.team==team][stat], 15).tail(1)\n",
" elif side:\n",
" mean = df[(df['team']==team)&(df['side']==location)][stat].mean() if method == 'mean' else df[(df['team']==team)&(df['side']==location)][stat].median()\n",
" else:\n",
" mean = df[df['team']==team][stat].mean() if method == 'mean' else df[df['team']==team][stat].median()\n",
" return mean\n",
" \n",
" mean = middle(method=method)\n",
" floor = df[df.team==team][stat].min()\n",
" ceiling = df[df.team==team][stat].max()\n",
" std = df[df.team==team][stat].std()\n",
" bias = (mean - (floor + ceiling)/2)\n",
" \n",
" results = []\n",
" x = 0\n",
" while x < 100:\n",
" result = montecarlo(floor, ceiling, bias)\n",
" results.append(result)\n",
" x += 1\n",
" mean = sum(results)/len(results)\n",
" \n",
" return float(mean)\n",
"\n",
"\n",
"def get_spread(team, opp, rolling=False, side=False, method='mean'):\n",
" denom = len(filter(None, [1, rolling, side]))\n",
" team_master = NBA(team, opp).get_proj_score(method=method, rolling=False, side=False)\n",
" team_last15 = NBA(team, opp).get_proj_score(rolling=True, side=False, method=method) if rolling else 0\n",
" team_location = NBA(team, opp).get_proj_score(side=True, rolling=False, method=method) if side else 0\n",
" team_score = round( 2 * ((team_master + team_last15 + team_location)/denom) ) / 2\n",
" opp_master = NBA(opp, team).get_proj_score(method=method, rolling=False, side=False)\n",
" opp_last15 = NBA(opp, team).get_proj_score(rolling=True, side=False, method=method) if rolling else 0\n",
" opp_location = NBA(opp, team).get_proj_score(side=True, rolling=False, method=method) if side else 0\n",
" opp_score = round( 2 * ((opp_master + opp_last15 + opp_location)/denom) ) / 2\n",
" winner = team if team_score > opp_score else opp\n",
" spread = -abs(team_score - opp_score)\n",
" return [round(team_score), round(opp_score), opp, team, winner, spread]\n",
"\n",
"def convert_nbacode_to_cbscode(nbacode):\n",
" cbscodes = ['ATL', 'BOS', 'CHA', 'CHI', 'CLE', 'DAL', 'DEN', 'DET', 'GS', 'HOU', 'IND', 'LAC', 'LAL', 'MEM', 'MIA', 'MIL', 'MIN', 'NY', 'OKC', 'ORL', 'PHI', 'PHO', 'POR', 'SA', 'SAC', 'TOR', 'UTA', 'WAS', 'BKN', 'NO']\n",
" nbacodes = ['ATL', 'BOS', 'CHA', 'CHI', 'CLE', 'DAL', 'DEN', 'DET', 'GSW','HOU', 'IND', 'LAC', 'LAL', 'MEM', 'MIA', 'MIL', 'MIN', 'NYK','OKC', 'ORL', 'PHI', 'PHX', 'POR', 'SAS','SAC', 'TOR', 'UTA', 'WAS', 'BKN', 'NOP']\n",
" for n,code in enumerate(nbacodes):\n",
" if code == nbacode:\n",
" nbacode = cbscodes[n]\n",
" return nbacode\n",
"\n",
"def get_todays_games():\n",
" today = datetime.now()\n",
" today = today.strftime('%Y-%m-%d')\n",
" print today\n",
" date = today#datetime.now()\n",
" date = datetime.strptime(today, \"%Y-%m-%d\")\n",
" datestr = date.strftime('%Y%m%d')\n",
" datecsv = date.strftime('%d/%m/%Y')\n",
" url = \"http://data.nba.com/data/1h/json/cms/noseason/scoreboard/\"+datestr+\"/games.json#TZHBTsMwDIbP5SlMhdRWjIQhDmjLKiHgwoFOggvHLEnXVG1aEldQTXt3mnQTnGI7v7/Yf9jlc/H08bl9gQrbJr9g8xGxSnE5nRFrFXIQFbdO4SYesLx5iMOFw7FRPop2nRzh4KOo5XavzQpu1z49eh09Cxk9QZlvmBnC6h7BWbGJK8TerSgV0tSOiKYbZNlwq4joWspr/kMbvXO0/hqUHekdWZLlKSGtNqR2cT69FYD/2Dn4QSiFRyGUc4CVgtf34g26Xa0EwrfGCmJfKUIh9vKrVHZiaJXBjNhp5jEtByNQdybN4BCIkybxayQZ8ZalCeutyhO4DnTi0Gqz1+WY/qEXMBipSm2UXMB9NkkTRkNXtg7MY7aeDTsvwejs1OSc/5Zf\"\n",
" print url\n",
" r = requests.get(url)\n",
" response = json.loads(r.content)\n",
" games = response['sports_content']['games']['game']\n",
"\n",
" gamespread = []\n",
" for game in games:\n",
" date = today\n",
" home = game['home']['city'] + \" \" + game['home']['nickname']\n",
" away = game['visitor']['city'] + \" \" + game['visitor']['nickname']\n",
" homecode = game['home']['abbreviation']\n",
" awaycode = game['visitor']['abbreviation']\n",
" homecode = convert_nbacode_to_cbscode(homecode)\n",
" awaycode = convert_nbacode_to_cbscode(awaycode)\n",
" gamespread.append([homecode, awaycode, date])\n",
" return gamespread\n",
"\n",
"def run_simulation(method='mean'):\n",
" spreads = []\n",
" x = 0\n",
" while x < 100:\n",
" projectedspreads = []\n",
" for team, opp, date in games:\n",
" s = get_spread(team, opp)\n",
" projectedspreads.append(s + [date])\n",
" spreads.append(projectedspreads)\n",
" x+=1\n",
" \n",
" sdf = pd.DataFrame()\n",
" sdf = sdf.append([item for sublist in spreads for item in sublist])\n",
" sdf.columns = ['homescore', 'awayscore', 'away','home','projectedwinner','spread', 'dateof']\n",
" sdf['ou'] = sdf['homescore'] + sdf['awayscore']\n",
" matchups = sdf[['home', 'away', 'projectedwinner']].drop_duplicates().values.tolist()\n",
"\n",
" results = []\n",
" for home, away, projwinner in matchups:\n",
" homescore = float(sdf[sdf.home==home]['homescore'].head(1))\n",
" awayscore = float(sdf[sdf.home==home]['awayscore'].head(1))\n",
" ou = float(sdf[(sdf.home==home)&(sdf.away==away)]['ou'].head(1))\n",
" home_pwin = len(sdf[sdf.projectedwinner==home])\n",
" away_pwin = len(sdf[sdf.projectedwinner==away])\n",
" proj_winner = away if away_pwin > home_pwin else home\n",
" pwinning = away_pwin if away_pwin > home_pwin else home_pwin\n",
" spread = sdf[sdf.projectedwinner==away].spread.median() if away_pwin > home_pwin else sdf[sdf.projectedwinner==home].spread.median()\n",
" spread = round( 2 * spread ) / 2\n",
" cover = len(sdf[ (sdf.spread<=spread) & (sdf.projectedwinner==proj_winner)])\n",
" ncover = len(sdf[ (sdf.spread>spread) & (sdf.projectedwinner==proj_winner)])\n",
" pcover = round(float(cover)/(cover+ncover)*100, 2)\n",
"\n",
" results.append([home, away, homescore, awayscore, proj_winner, spread, pcover, pwinning, ou, method, date])\n",
"\n",
" spreads = pd.DataFrame(results)\n",
" spreads.columns = ['home', 'away', 'homescore', 'awayscore', 'projectedwinner', 'spread', 'pcover', 'pwin', 'overunder', 'method', 'dateof']\n",
" spreads = spreads.drop_duplicates(subset=['home', 'away', 'projectedwinner', 'spread', 'pcover', 'pwin'])\n",
" # spreads.to_sql('nbaspreads', con=engine, if_exists='append', index=True)\n",
" return spreads"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## cluster teams for last15. some teams play better teams during that time and vice versa"
]
},
{
"cell_type": "code",
"execution_count": 5,
"metadata": {
"collapsed": false
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"2016-03-05\n",
"http://data.nba.com/data/1h/json/cms/noseason/scoreboard/20160305/games.json#TZHBTsMwDIbP5SlMhdRWjIQhDmjLKiHgwoFOggvHLEnXVG1aEldQTXt3mnQTnGI7v7/Yf9jlc/H08bl9gQrbJr9g8xGxSnE5nRFrFXIQFbdO4SYesLx5iMOFw7FRPop2nRzh4KOo5XavzQpu1z49eh09Cxk9QZlvmBnC6h7BWbGJK8TerSgV0tSOiKYbZNlwq4joWspr/kMbvXO0/hqUHekdWZLlKSGtNqR2cT69FYD/2Dn4QSiFRyGUc4CVgtf34g26Xa0EwrfGCmJfKUIh9vKrVHZiaJXBjNhp5jEtByNQdybN4BCIkybxayQZ8ZalCeutyhO4DnTi0Gqz1+WY/qEXMBipSm2UXMB9NkkTRkNXtg7MY7aeDTsvwejs1OSc/5Zf\n"
]
}
],
"source": [
"games = get_todays_games()"
]
},
{
"cell_type": "code",
"execution_count": 506,
"metadata": {
"collapsed": false
},
"outputs": [],
"source": [
"# spreadsmedian = run_simulation(method='median')\n",
"spreadsmean = run_simulation(method='mean')"
]
},
{
"cell_type": "code",
"execution_count": 508,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/html": [
"<div>\n",
"<table border=\"1\" class=\"dataframe\">\n",
" <thead>\n",
" <tr style=\"text-align: right;\">\n",
" <th></th>\n",
" <th>home</th>\n",
" <th>away</th>\n",
" <th>projectedwinner</th>\n",
" <th>vegas spread</th>\n",
" <th>pcover</th>\n",
" <th>pwin</th>\n",
" <th>overunder</th>\n",
" <th>method</th>\n",
" </tr>\n",
" </thead>\n",
" <tbody>\n",
" <tr>\n",
" <th>0</th>\n",
" <td>ORL</td>\n",
" <td>CHI</td>\n",
" <td>ORL</td>\n",
" <td>-4.5</td>\n",
" <td>67.19</td>\n",
" <td>64</td>\n",
" <td>u215.5-110</td>\n",
" <td>mean</td>\n",
" </tr>\n",
" <tr>\n",
" <th>1</th>\n",
" <td>PHI</td>\n",
" <td>CHA</td>\n",
" <td>CHA</td>\n",
" <td>-10.0</td>\n",
" <td>36.00</td>\n",
" <td>100</td>\n",
" <td>u208.5-110</td>\n",
" <td>mean</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2</th>\n",
" <td>BOS</td>\n",
" <td>POR</td>\n",
" <td>BOS</td>\n",
" <td>-6.0</td>\n",
" <td>84.75</td>\n",
" <td>59</td>\n",
" <td>u217.5-110</td>\n",
" <td>mean</td>\n",
" </tr>\n",
" <tr>\n",
" <th>3</th>\n",
" <td>TOR</td>\n",
" <td>UTA</td>\n",
" <td>TOR</td>\n",
" <td>-5.0</td>\n",
" <td>97.67</td>\n",
" <td>43</td>\n",
" <td>u193.5-110</td>\n",
" <td>mean</td>\n",
" </tr>\n",
" <tr>\n",
" <th>4</th>\n",
" <td>HOU</td>\n",
" <td>NO</td>\n",
" <td>HOU</td>\n",
" <td>-6.0</td>\n",
" <td>100.00</td>\n",
" <td>42</td>\n",
" <td>u222.5-110</td>\n",
" <td>mean</td>\n",
" </tr>\n",
" <tr>\n",
" <th>5</th>\n",
" <td>MEM</td>\n",
" <td>SAC</td>\n",
" <td>MEM</td>\n",
" <td>-3.5</td>\n",
" <td>52.50</td>\n",
" <td>80</td>\n",
" <td>u215-110</td>\n",
" <td>mean</td>\n",
" </tr>\n",
" <tr>\n",
" <th>6</th>\n",
" <td>MIL</td>\n",
" <td>IND</td>\n",
" <td>IND</td>\n",
" <td>-3.0</td>\n",
" <td>68.33</td>\n",
" <td>60</td>\n",
" <td>u206-110</td>\n",
" <td>mean</td>\n",
" </tr>\n",
" <tr>\n",
" <th>7</th>\n",
" <td>MIN</td>\n",
" <td>WAS</td>\n",
" <td>WAS</td>\n",
" <td>-3.5</td>\n",
" <td>56.79</td>\n",
" <td>81</td>\n",
" <td>u219.5-110</td>\n",
" <td>mean</td>\n",
" </tr>\n",
" <tr>\n",
" <th>8</th>\n",
" <td>SA</td>\n",
" <td>DET</td>\n",
" <td>SA</td>\n",
" <td>-11.0</td>\n",
" <td>51.00</td>\n",
" <td>100</td>\n",
" <td>u201-110</td>\n",
" <td>mean</td>\n",
" </tr>\n",
" <tr>\n",
" <th>9</th>\n",
" <td>DEN</td>\n",
" <td>LAL</td>\n",
" <td>DEN</td>\n",
" <td>-8.5</td>\n",
" <td>89.01</td>\n",
" <td>91</td>\n",
" <td>u212.5-110</td>\n",
" <td>mean</td>\n",
" </tr>\n",
" <tr>\n",
" <th>10</th>\n",
" <td>LAC</td>\n",
" <td>OKC</td>\n",
" <td>LAC</td>\n",
" <td>-1.0</td>\n",
" <td>16.67</td>\n",
" <td>24</td>\n",
" <td>u218-110</td>\n",
" <td>mean</td>\n",
" </tr>\n",
" </tbody>\n",
"</table>\n",
"</div>"
],
"text/plain": [
" home away projectedwinner vegas spread pcover pwin overunder method\n",
"0 ORL CHI ORL -4.5 67.19 64 u215.5-110 mean\n",
"1 PHI CHA CHA -10.0 36.00 100 u208.5-110 mean\n",
"2 BOS POR BOS -6.0 84.75 59 u217.5-110 mean\n",
"3 TOR UTA TOR -5.0 97.67 43 u193.5-110 mean\n",
"4 HOU NO HOU -6.0 100.00 42 u222.5-110 mean\n",
"5 MEM SAC MEM -3.5 52.50 80 u215-110 mean\n",
"6 MIL IND IND -3.0 68.33 60 u206-110 mean\n",
"7 MIN WAS WAS -3.5 56.79 81 u219.5-110 mean\n",
"8 SA DET SA -11.0 51.00 100 u201-110 mean\n",
"9 DEN LAL DEN -8.5 89.01 91 u212.5-110 mean\n",
"10 LAC OKC LAC -1.0 16.67 24 u218-110 mean"
]
},
"execution_count": 508,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"vspreads"
]
},
{
"cell_type": "code",
"execution_count": 6,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/html": [
"<div>\n",
"<table border=\"1\" class=\"dataframe\">\n",
" <thead>\n",
" <tr style=\"text-align: right;\">\n",
" <th></th>\n",
" <th>home</th>\n",
" <th>away</th>\n",
" <th>projwinner</th>\n",
" <th>spread</th>\n",
" <th>homeou</th>\n",
" <th>dateof</th>\n",
" </tr>\n",
" </thead>\n",
" <tbody>\n",
" <tr>\n",
" <th>0</th>\n",
" <td>CHI</td>\n",
" <td>HOU</td>\n",
" <td>HOU</td>\n",
" <td>-1.5</td>\n",
" <td>u215.5-110</td>\n",
" <td>2016-03-05</td>\n",
" </tr>\n",
" <tr>\n",
" <th>1</th>\n",
" <td>CLE</td>\n",
" <td>BOS</td>\n",
" <td>CLE</td>\n",
" <td>-7</td>\n",
" <td>u210.5-110</td>\n",
" <td>2016-03-05</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2</th>\n",
" <td>LAC</td>\n",
" <td>ATL</td>\n",
" <td>LAC</td>\n",
" <td>-5</td>\n",
" <td>u201-110</td>\n",
" <td>2016-03-05</td>\n",
" </tr>\n",
" <tr>\n",
" <th>3</th>\n",
" <td>MIN</td>\n",
" <td>BKN</td>\n",
" <td>MIN</td>\n",
" <td>-5</td>\n",
" <td>u213.5-110</td>\n",
" <td>2016-03-05</td>\n",
" </tr>\n",
" <tr>\n",
" <th>4</th>\n",
" <td>NO</td>\n",
" <td>UTA</td>\n",
" <td>NO</td>\n",
" <td>-1</td>\n",
" <td>u198-110</td>\n",
" <td>2016-03-05</td>\n",
" </tr>\n",
" <tr>\n",
" <th>5</th>\n",
" <td>NY</td>\n",
" <td>DET</td>\n",
" <td>DET</td>\n",
" <td>-5.5</td>\n",
" <td>u199.5-110</td>\n",
" <td>2016-03-05</td>\n",
" </tr>\n",
" <tr>\n",
" <th>6</th>\n",
" <td>SA</td>\n",
" <td>SAC</td>\n",
" <td>SA</td>\n",
" <td>-12.5</td>\n",
" <td>u208.5-110</td>\n",
" <td>2016-03-05</td>\n",
" </tr>\n",
" <tr>\n",
" <th>7</th>\n",
" <td>WAS</td>\n",
" <td>IND</td>\n",
" <td>WAS</td>\n",
" <td>-2.5</td>\n",
" <td>u208-110</td>\n",
" <td>2016-03-05</td>\n",
" </tr>\n",
" </tbody>\n",
"</table>\n",
"</div>"
],
"text/plain": [
" home away projwinner spread homeou dateof\n",
"0 CHI HOU HOU -1.5 u215.5-110 2016-03-05\n",
"1 CLE BOS CLE -7 u210.5-110 2016-03-05\n",
"2 LAC ATL LAC -5 u201-110 2016-03-05\n",
"3 MIN BKN MIN -5 u213.5-110 2016-03-05\n",
"4 NO UTA NO -1 u198-110 2016-03-05\n",
"5 NY DET DET -5.5 u199.5-110 2016-03-05\n",
"6 SA SAC SA -12.5 u208.5-110 2016-03-05\n",
"7 WAS IND WAS -2.5 u208-110 2016-03-05"
]
},
"execution_count": 6,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"today = datetime.now()\n",
"date = today.strftime('%Y-%m-%d')\n",
"sql1 = \"\"\"select distinct on (home, away) home, away, projwinner, spread, homeou, dateof::date \n",
" from nbaodds1516 \n",
" where dateof >= '{date}'\n",
" order by home, away, dateof::timestamp desc;\"\"\".format(date=date)\n",
"\n",
"oddsdf = pd.read_sql_query(sql1, engine)\n",
"oddsdf"
]
},
{
"cell_type": "code",
"execution_count": 7,
"metadata": {
"collapsed": true
},
"outputs": [],
"source": [
"sql2 = \"\"\"select *\n",
" from nbaspreads1516\n",
" where dateof = '{date}'\n",
" and method = 'median';\"\"\".format(date=date)\n",
"medianspreadsdf = pd.read_sql_query(sql2, engine)"
]
},
{
"cell_type": "code",
"execution_count": 11,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/html": [
"<div>\n",
"<table border=\"1\" class=\"dataframe\">\n",
" <thead>\n",
" <tr style=\"text-align: right;\">\n",
" <th></th>\n",
" <th>away</th>\n",
" <th>awayscore</th>\n",
" <th>dateof</th>\n",
" <th>home</th>\n",
" <th>homeou</th>\n",
" <th>homescore</th>\n",
" <th>index</th>\n",
" <th>method</th>\n",
" <th>notes</th>\n",
" <th>overunder</th>\n",
" <th>pcover</th>\n",
" <th>projectedwinner</th>\n",
" <th>projwinner</th>\n",
" <th>pwin</th>\n",
" <th>spread</th>\n",
" </tr>\n",
" </thead>\n",
" <tbody>\n",
" <tr>\n",
" <th>0</th>\n",
" <td>BOS</td>\n",
" <td>104</td>\n",
" <td>2016-03-05</td>\n",
" <td>CLE</td>\n",
" <td>NaN</td>\n",
" <td>107</td>\n",
" <td>0</td>\n",
" <td>median</td>\n",
" <td>None</td>\n",
" <td>211</td>\n",
" <td>51.67</td>\n",
" <td>CLE</td>\n",
" <td>NaN</td>\n",
" <td>60</td>\n",
" <td>-4</td>\n",
" </tr>\n",
" <tr>\n",
" <th>1</th>\n",
" <td>DET</td>\n",
" <td>95</td>\n",
" <td>2016-03-05</td>\n",
" <td>NY</td>\n",
" <td>NaN</td>\n",
" <td>98</td>\n",
" <td>1</td>\n",
" <td>median</td>\n",
" <td>None</td>\n",
" <td>193</td>\n",
" <td>56.45</td>\n",
" <td>DET</td>\n",
" <td>NaN</td>\n",
" <td>62</td>\n",
" <td>-2.5</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2</th>\n",
" <td>IND</td>\n",
" <td>101</td>\n",
" <td>2016-03-05</td>\n",
" <td>WAS</td>\n",
" <td>NaN</td>\n",
" <td>98</td>\n",
" <td>2</td>\n",
" <td>median</td>\n",
" <td>None</td>\n",
" <td>199</td>\n",
" <td>54.17</td>\n",
" <td>IND</td>\n",
" <td>NaN</td>\n",
" <td>72</td>\n",
" <td>-3</td>\n",
" </tr>\n",
" <tr>\n",
" <th>3</th>\n",
" <td>UTA</td>\n",
" <td>99</td>\n",
" <td>2016-03-05</td>\n",
" <td>NO</td>\n",
" <td>NaN</td>\n",
" <td>98</td>\n",
" <td>3</td>\n",
" <td>median</td>\n",
" <td>None</td>\n",
" <td>197</td>\n",
" <td>62.50</td>\n",
" <td>UTA</td>\n",
" <td>NaN</td>\n",
" <td>80</td>\n",
" <td>-2</td>\n",
" </tr>\n",
" <tr>\n",
" <th>4</th>\n",
" <td>BKN</td>\n",
" <td>102</td>\n",
" <td>2016-03-05</td>\n",
" <td>MIN</td>\n",
" <td>NaN</td>\n",
" <td>102</td>\n",
" <td>4</td>\n",
" <td>median</td>\n",
" <td>None</td>\n",
" <td>204</td>\n",
" <td>54.10</td>\n",
" <td>MIN</td>\n",
" <td>NaN</td>\n",
" <td>61</td>\n",
" <td>-2.5</td>\n",
" </tr>\n",
" <tr>\n",
" <th>5</th>\n",
" <td>HOU</td>\n",
" <td>104</td>\n",
" <td>2016-03-05</td>\n",
" <td>CHI</td>\n",
" <td>NaN</td>\n",
" <td>105</td>\n",
" <td>5</td>\n",
" <td>median</td>\n",
" <td>None</td>\n",
" <td>209</td>\n",
" <td>52.00</td>\n",
" <td>HOU</td>\n",
" <td>NaN</td>\n",
" <td>75</td>\n",
" <td>-3.5</td>\n",
" </tr>\n",
" <tr>\n",
" <th>6</th>\n",
" <td>SAC</td>\n",
" <td>98</td>\n",
" <td>2016-03-05</td>\n",
" <td>SA</td>\n",
" <td>NaN</td>\n",
" <td>105</td>\n",
" <td>6</td>\n",
" <td>median</td>\n",
" <td>None</td>\n",
" <td>203</td>\n",
" <td>56.00</td>\n",
" <td>SA</td>\n",
" <td>NaN</td>\n",
" <td>100</td>\n",
" <td>-11</td>\n",
" </tr>\n",
" <tr>\n",
" <th>7</th>\n",
" <td>ATL</td>\n",
" <td>102</td>\n",
" <td>2016-03-05</td>\n",
" <td>LAC</td>\n",
" <td>NaN</td>\n",
" <td>100</td>\n",
" <td>7</td>\n",
" <td>median</td>\n",
" <td>None</td>\n",
" <td>202</td>\n",
" <td>50.98</td>\n",
" <td>ATL</td>\n",
" <td>NaN</td>\n",
" <td>51</td>\n",
" <td>-3</td>\n",
" </tr>\n",
" <tr>\n",
" <th>0</th>\n",
" <td>HOU</td>\n",
" <td>NaN</td>\n",
" <td>2016-03-05</td>\n",
" <td>CHI</td>\n",
" <td>u215.5-110</td>\n",
" <td>NaN</td>\n",
" <td>NaN</td>\n",
" <td>NaN</td>\n",
" <td>NaN</td>\n",
" <td>NaN</td>\n",
" <td>NaN</td>\n",
" <td>NaN</td>\n",
" <td>HOU</td>\n",
" <td>NaN</td>\n",
" <td>-1.5</td>\n",
" </tr>\n",
" <tr>\n",
" <th>1</th>\n",
" <td>BOS</td>\n",
" <td>NaN</td>\n",
" <td>2016-03-05</td>\n",
" <td>CLE</td>\n",
" <td>u210.5-110</td>\n",
" <td>NaN</td>\n",
" <td>NaN</td>\n",
" <td>NaN</td>\n",
" <td>NaN</td>\n",
" <td>NaN</td>\n",
" <td>NaN</td>\n",
" <td>NaN</td>\n",
" <td>CLE</td>\n",
" <td>NaN</td>\n",
" <td>-7</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2</th>\n",
" <td>ATL</td>\n",
" <td>NaN</td>\n",
" <td>2016-03-05</td>\n",
" <td>LAC</td>\n",
" <td>u201-110</td>\n",
" <td>NaN</td>\n",
" <td>NaN</td>\n",
" <td>NaN</td>\n",
" <td>NaN</td>\n",
" <td>NaN</td>\n",
" <td>NaN</td>\n",
" <td>NaN</td>\n",
" <td>LAC</td>\n",
" <td>NaN</td>\n",
" <td>-5</td>\n",
" </tr>\n",
" <tr>\n",
" <th>3</th>\n",
" <td>BKN</td>\n",
" <td>NaN</td>\n",
" <td>2016-03-05</td>\n",
" <td>MIN</td>\n",
" <td>u213.5-110</td>\n",
" <td>NaN</td>\n",
" <td>NaN</td>\n",
" <td>NaN</td>\n",
" <td>NaN</td>\n",
" <td>NaN</td>\n",
" <td>NaN</td>\n",
" <td>NaN</td>\n",
" <td>MIN</td>\n",
" <td>NaN</td>\n",
" <td>-5</td>\n",
" </tr>\n",
" <tr>\n",
" <th>4</th>\n",
" <td>UTA</td>\n",
" <td>NaN</td>\n",
" <td>2016-03-05</td>\n",
" <td>NO</td>\n",
" <td>u198-110</td>\n",
" <td>NaN</td>\n",
" <td>NaN</td>\n",
" <td>NaN</td>\n",
" <td>NaN</td>\n",
" <td>NaN</td>\n",
" <td>NaN</td>\n",
" <td>NaN</td>\n",
" <td>NO</td>\n",
" <td>NaN</td>\n",
" <td>-1</td>\n",
" </tr>\n",
" <tr>\n",
" <th>5</th>\n",
" <td>DET</td>\n",
" <td>NaN</td>\n",
" <td>2016-03-05</td>\n",
" <td>NY</td>\n",
" <td>u199.5-110</td>\n",
" <td>NaN</td>\n",
" <td>NaN</td>\n",
" <td>NaN</td>\n",
" <td>NaN</td>\n",
" <td>NaN</td>\n",
" <td>NaN</td>\n",
" <td>NaN</td>\n",
" <td>DET</td>\n",
" <td>NaN</td>\n",
" <td>-5.5</td>\n",
" </tr>\n",
" <tr>\n",
" <th>6</th>\n",
" <td>SAC</td>\n",
" <td>NaN</td>\n",
" <td>2016-03-05</td>\n",
" <td>SA</td>\n",
" <td>u208.5-110</td>\n",
" <td>NaN</td>\n",
" <td>NaN</td>\n",
" <td>NaN</td>\n",
" <td>NaN</td>\n",
" <td>NaN</td>\n",
" <td>NaN</td>\n",
" <td>NaN</td>\n",
" <td>SA</td>\n",
" <td>NaN</td>\n",
" <td>-12.5</td>\n",
" </tr>\n",
" <tr>\n",
" <th>7</th>\n",
" <td>IND</td>\n",
" <td>NaN</td>\n",
" <td>2016-03-05</td>\n",
" <td>WAS</td>\n",
" <td>u208-110</td>\n",
" <td>NaN</td>\n",
" <td>NaN</td>\n",
" <td>NaN</td>\n",
" <td>NaN</td>\n",
" <td>NaN</td>\n",
" <td>NaN</td>\n",
" <td>NaN</td>\n",
" <td>WAS</td>\n",
" <td>NaN</td>\n",
" <td>-2.5</td>\n",
" </tr>\n",
" </tbody>\n",
"</table>\n",
"</div>"
],
"text/plain": [
" away awayscore dateof home homeou homescore index method \\\n",
"0 BOS 104 2016-03-05 CLE NaN 107 0 median \n",
"1 DET 95 2016-03-05 NY NaN 98 1 median \n",
"2 IND 101 2016-03-05 WAS NaN 98 2 median \n",
"3 UTA 99 2016-03-05 NO NaN 98 3 median \n",
"4 BKN 102 2016-03-05 MIN NaN 102 4 median \n",
"5 HOU 104 2016-03-05 CHI NaN 105 5 median \n",
"6 SAC 98 2016-03-05 SA NaN 105 6 median \n",
"7 ATL 102 2016-03-05 LAC NaN 100 7 median \n",
"0 HOU NaN 2016-03-05 CHI u215.5-110 NaN NaN NaN \n",
"1 BOS NaN 2016-03-05 CLE u210.5-110 NaN NaN NaN \n",
"2 ATL NaN 2016-03-05 LAC u201-110 NaN NaN NaN \n",
"3 BKN NaN 2016-03-05 MIN u213.5-110 NaN NaN NaN \n",
"4 UTA NaN 2016-03-05 NO u198-110 NaN NaN NaN \n",
"5 DET NaN 2016-03-05 NY u199.5-110 NaN NaN NaN \n",
"6 SAC NaN 2016-03-05 SA u208.5-110 NaN NaN NaN \n",
"7 IND NaN 2016-03-05 WAS u208-110 NaN NaN NaN \n",
"\n",
" notes overunder pcover projectedwinner projwinner pwin spread \n",
"0 None 211 51.67 CLE NaN 60 -4 \n",
"1 None 193 56.45 DET NaN 62 -2.5 \n",
"2 None 199 54.17 IND NaN 72 -3 \n",
"3 None 197 62.50 UTA NaN 80 -2 \n",
"4 None 204 54.10 MIN NaN 61 -2.5 \n",
"5 None 209 52.00 HOU NaN 75 -3.5 \n",
"6 None 203 56.00 SA NaN 100 -11 \n",
"7 None 202 50.98 ATL NaN 51 -3 \n",
"0 NaN NaN NaN NaN HOU NaN -1.5 \n",
"1 NaN NaN NaN NaN CLE NaN -7 \n",
"2 NaN NaN NaN NaN LAC NaN -5 \n",
"3 NaN NaN NaN NaN MIN NaN -5 \n",
"4 NaN NaN NaN NaN NO NaN -1 \n",
"5 NaN NaN NaN NaN DET NaN -5.5 \n",
"6 NaN NaN NaN NaN SA NaN -12.5 \n",
"7 NaN NaN NaN NaN WAS NaN -2.5 "
]
},
"execution_count": 11,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"medianspreadsdf.append(oddsdf)"
]
},
{
"cell_type": "code",
"execution_count": 493,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/html": [
"<div>\n",
"<table border=\"1\" class=\"dataframe\">\n",
" <thead>\n",
" <tr style=\"text-align: right;\">\n",
" <th></th>\n",
" <th>index</th>\n",
" <th>home</th>\n",
" <th>away</th>\n",
" <th>homescore</th>\n",
" <th>awayscore</th>\n",
" <th>projectedwinner</th>\n",
" <th>spread</th>\n",
" <th>pcover</th>\n",
" <th>pwin</th>\n",
" <th>overunder</th>\n",
" <th>method</th>\n",
" <th>dateof</th>\n",
" <th>notes</th>\n",
" </tr>\n",
" </thead>\n",
" <tbody>\n",
" <tr>\n",
" <th>0</th>\n",
" <td>0</td>\n",
" <td>ORL</td>\n",
" <td>CHI</td>\n",
" <td>97</td>\n",
" <td>105</td>\n",
" <td>ORL</td>\n",
" <td>-3.5</td>\n",
" <td>55.74</td>\n",
" <td>61</td>\n",
" <td>202</td>\n",
" <td>mean</td>\n",
" <td>2016-03-02</td>\n",
" <td>None</td>\n",
" </tr>\n",
" <tr>\n",
" <th>1</th>\n",
" <td>1</td>\n",
" <td>PHI</td>\n",
" <td>CHA</td>\n",
" <td>93</td>\n",
" <td>110</td>\n",
" <td>CHA</td>\n",
" <td>-11.5</td>\n",
" <td>50.00</td>\n",
" <td>100</td>\n",
" <td>203</td>\n",
" <td>mean</td>\n",
" <td>2016-03-02</td>\n",
" <td>None</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2</th>\n",
" <td>2</td>\n",
" <td>BOS</td>\n",
" <td>POR</td>\n",
" <td>100</td>\n",
" <td>107</td>\n",
" <td>BOS</td>\n",
" <td>-3.0</td>\n",
" <td>50.00</td>\n",
" <td>62</td>\n",
" <td>207</td>\n",
" <td>mean</td>\n",
" <td>2016-03-02</td>\n",
" <td>None</td>\n",
" </tr>\n",
" <tr>\n",
" <th>3</th>\n",
" <td>3</td>\n",
" <td>TOR</td>\n",
" <td>UTA</td>\n",
" <td>91</td>\n",
" <td>94</td>\n",
" <td>TOR</td>\n",
" <td>-2.0</td>\n",
" <td>50.98</td>\n",
" <td>51</td>\n",
" <td>185</td>\n",
" <td>mean</td>\n",
" <td>2016-03-02</td>\n",
" <td>None</td>\n",
" </tr>\n",
" <tr>\n",
" <th>4</th>\n",
" <td>4</td>\n",
" <td>HOU</td>\n",
" <td>NO</td>\n",
" <td>109</td>\n",
" <td>106</td>\n",
" <td>NO</td>\n",
" <td>-2.0</td>\n",
" <td>61.67</td>\n",
" <td>60</td>\n",
" <td>215</td>\n",
" <td>mean</td>\n",
" <td>2016-03-02</td>\n",
" <td>None</td>\n",
" </tr>\n",
" <tr>\n",
" <th>5</th>\n",
" <td>5</td>\n",
" <td>MEM</td>\n",
" <td>SAC</td>\n",
" <td>102</td>\n",
" <td>101</td>\n",
" <td>MEM</td>\n",
" <td>-3.5</td>\n",
" <td>53.66</td>\n",
" <td>82</td>\n",
" <td>203</td>\n",
" <td>mean</td>\n",
" <td>2016-03-02</td>\n",
" <td>None</td>\n",
" </tr>\n",
" <tr>\n",
" <th>6</th>\n",
" <td>6</td>\n",
" <td>MIL</td>\n",
" <td>IND</td>\n",
" <td>98</td>\n",
" <td>100</td>\n",
" <td>IND</td>\n",
" <td>-2.0</td>\n",
" <td>55.74</td>\n",
" <td>61</td>\n",
" <td>198</td>\n",
" <td>mean</td>\n",
" <td>2016-03-02</td>\n",
" <td>None</td>\n",
" </tr>\n",
" <tr>\n",
" <th>7</th>\n",
" <td>7</td>\n",
" <td>MIN</td>\n",
" <td>WAS</td>\n",
" <td>100</td>\n",
" <td>102</td>\n",
" <td>WAS</td>\n",
" <td>-3.5</td>\n",
" <td>64.79</td>\n",
" <td>71</td>\n",
" <td>202</td>\n",
" <td>mean</td>\n",
" <td>2016-03-02</td>\n",
" <td>None</td>\n",
" </tr>\n",
" <tr>\n",
" <th>8</th>\n",
" <td>8</td>\n",
" <td>SA</td>\n",
" <td>DET</td>\n",
" <td>99</td>\n",
" <td>95</td>\n",
" <td>SA</td>\n",
" <td>-10.5</td>\n",
" <td>54.00</td>\n",
" <td>100</td>\n",
" <td>194</td>\n",
" <td>mean</td>\n",
" <td>2016-03-02</td>\n",
" <td>None</td>\n",
" </tr>\n",
" <tr>\n",
" <th>9</th>\n",
" <td>9</td>\n",
" <td>DEN</td>\n",
" <td>LAL</td>\n",
" <td>107</td>\n",
" <td>102</td>\n",
" <td>DEN</td>\n",
" <td>-5.5</td>\n",
" <td>50.00</td>\n",
" <td>92</td>\n",
" <td>209</td>\n",
" <td>mean</td>\n",
" <td>2016-03-02</td>\n",
" <td>None</td>\n",
" </tr>\n",
" <tr>\n",
" <th>10</th>\n",
" <td>10</td>\n",
" <td>LAC</td>\n",
" <td>OKC</td>\n",
" <td>105</td>\n",
" <td>107</td>\n",
" <td>OKC</td>\n",
" <td>-3.0</td>\n",
" <td>52.56</td>\n",
" <td>78</td>\n",
" <td>212</td>\n",
" <td>mean</td>\n",
" <td>2016-03-02</td>\n",
" <td>None</td>\n",
" </tr>\n",
" </tbody>\n",
"</table>\n",
"</div>"
],
"text/plain": [
" index home away homescore awayscore projectedwinner spread pcover \\\n",
"0 0 ORL CHI 97 105 ORL -3.5 55.74 \n",
"1 1 PHI CHA 93 110 CHA -11.5 50.00 \n",
"2 2 BOS POR 100 107 BOS -3.0 50.00 \n",
"3 3 TOR UTA 91 94 TOR -2.0 50.98 \n",
"4 4 HOU NO 109 106 NO -2.0 61.67 \n",
"5 5 MEM SAC 102 101 MEM -3.5 53.66 \n",
"6 6 MIL IND 98 100 IND -2.0 55.74 \n",
"7 7 MIN WAS 100 102 WAS -3.5 64.79 \n",
"8 8 SA DET 99 95 SA -10.5 54.00 \n",
"9 9 DEN LAL 107 102 DEN -5.5 50.00 \n",
"10 10 LAC OKC 105 107 OKC -3.0 52.56 \n",
"\n",
" pwin overunder method dateof notes \n",
"0 61 202 mean 2016-03-02 None \n",
"1 100 203 mean 2016-03-02 None \n",
"2 62 207 mean 2016-03-02 None \n",
"3 51 185 mean 2016-03-02 None \n",
"4 60 215 mean 2016-03-02 None \n",
"5 82 203 mean 2016-03-02 None \n",
"6 61 198 mean 2016-03-02 None \n",
"7 71 202 mean 2016-03-02 None \n",
"8 100 194 mean 2016-03-02 None \n",
"9 92 209 mean 2016-03-02 None \n",
"10 78 212 mean 2016-03-02 None "
]
},
"execution_count": 493,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"meanspreadsdf"
]
},
{
"cell_type": "code",
"execution_count": 485,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/html": [
"<div>\n",
"<table border=\"1\" class=\"dataframe\">\n",
" <thead>\n",
" <tr style=\"text-align: right;\">\n",
" <th></th>\n",
" <th>home</th>\n",
" <th>away</th>\n",
" <th>projectedwinner</th>\n",
" <th>vegas spread</th>\n",
" <th>pcover</th>\n",
" <th>pwin</th>\n",
" <th>overunder</th>\n",
" <th>method</th>\n",
" </tr>\n",
" </thead>\n",
" <tbody>\n",
" <tr>\n",
" <th>0</th>\n",
" <td>ORL</td>\n",
" <td>CHI</td>\n",
" <td>ORL</td>\n",
" <td>-4.5</td>\n",
" <td>39.06</td>\n",
" <td>64</td>\n",
" <td>u215.5-110</td>\n",
" <td>mean</td>\n",
" </tr>\n",
" <tr>\n",
" <th>1</th>\n",
" <td>PHI</td>\n",
" <td>CHA</td>\n",
" <td>CHA</td>\n",
" <td>-10.0</td>\n",
" <td>71.00</td>\n",
" <td>100</td>\n",
" <td>u208.5-110</td>\n",
" <td>mean</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2</th>\n",
" <td>BOS</td>\n",
" <td>POR</td>\n",
" <td>BOS</td>\n",
" <td>-6.0</td>\n",
" <td>20.34</td>\n",
" <td>59</td>\n",
" <td>u217.5-110</td>\n",
" <td>mean</td>\n",
" </tr>\n",
" <tr>\n",
" <th>3</th>\n",
" <td>TOR</td>\n",
" <td>UTA</td>\n",
" <td>TOR</td>\n",
" <td>-5.0</td>\n",
" <td>6.98</td>\n",
" <td>43</td>\n",
" <td>u193.5-110</td>\n",
" <td>mean</td>\n",
" </tr>\n",
" <tr>\n",
" <th>4</th>\n",
" <td>HOU</td>\n",
" <td>NO</td>\n",
" <td>HOU</td>\n",
" <td>-6.0</td>\n",
" <td>4.76</td>\n",
" <td>42</td>\n",
" <td>u222.5-110</td>\n",
" <td>mean</td>\n",
" </tr>\n",
" <tr>\n",
" <th>5</th>\n",
" <td>MEM</td>\n",
" <td>SAC</td>\n",
" <td>MEM</td>\n",
" <td>-3.5</td>\n",
" <td>57.50</td>\n",
" <td>80</td>\n",
" <td>u215-110</td>\n",
" <td>mean</td>\n",
" </tr>\n",
" <tr>\n",
" <th>6</th>\n",
" <td>MIL</td>\n",
" <td>IND</td>\n",
" <td>IND</td>\n",
" <td>-3.0</td>\n",
" <td>40.00</td>\n",
" <td>60</td>\n",
" <td>u206-110</td>\n",
" <td>mean</td>\n",
" </tr>\n",
" <tr>\n",
" <th>7</th>\n",
" <td>MIN</td>\n",
" <td>WAS</td>\n",
" <td>WAS</td>\n",
" <td>-3.5</td>\n",
" <td>49.38</td>\n",
" <td>81</td>\n",
" <td>u219.5-110</td>\n",
" <td>mean</td>\n",
" </tr>\n",
" <tr>\n",
" <th>8</th>\n",
" <td>SA</td>\n",
" <td>DET</td>\n",
" <td>SA</td>\n",
" <td>-11.0</td>\n",
" <td>55.00</td>\n",
" <td>100</td>\n",
" <td>u201-110</td>\n",
" <td>mean</td>\n",
" </tr>\n",
" <tr>\n",
" <th>9</th>\n",
" <td>DEN</td>\n",
" <td>LAL</td>\n",
" <td>DEN</td>\n",
" <td>-8.5</td>\n",
" <td>16.48</td>\n",
" <td>91</td>\n",
" <td>u212.5-110</td>\n",
" <td>mean</td>\n",
" </tr>\n",
" <tr>\n",
" <th>10</th>\n",
" <td>LAC</td>\n",
" <td>OKC</td>\n",
" <td>LAC</td>\n",
" <td>-1.0</td>\n",
" <td>87.50</td>\n",
" <td>24</td>\n",
" <td>u218-110</td>\n",
" <td>mean</td>\n",
" </tr>\n",
" </tbody>\n",
"</table>\n",
"</div>"
],
"text/plain": [
" home away projectedwinner vegas spread pcover pwin overunder method\n",
"0 ORL CHI ORL -4.5 39.06 64 u215.5-110 mean\n",
"1 PHI CHA CHA -10.0 71.00 100 u208.5-110 mean\n",
"2 BOS POR BOS -6.0 20.34 59 u217.5-110 mean\n",
"3 TOR UTA TOR -5.0 6.98 43 u193.5-110 mean\n",
"4 HOU NO HOU -6.0 4.76 42 u222.5-110 mean\n",
"5 MEM SAC MEM -3.5 57.50 80 u215-110 mean\n",
"6 MIL IND IND -3.0 40.00 60 u206-110 mean\n",
"7 MIN WAS WAS -3.5 49.38 81 u219.5-110 mean\n",
"8 SA DET SA -11.0 55.00 100 u201-110 mean\n",
"9 DEN LAL DEN -8.5 16.48 91 u212.5-110 mean\n",
"10 LAC OKC LAC -1.0 87.50 24 u218-110 mean"
]
},
"execution_count": 485,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"vspreads"
]
},
{
"cell_type": "code",
"execution_count": 457,
"metadata": {
"collapsed": false,
"scrolled": true
},
"outputs": [
{
"data": {
"text/plain": [
"{u'away': u'CHI',\n",
" u'awayou': u'o214.5-110 ',\n",
" u'dateof': 1456934466962,\n",
" u'home': u'ORL',\n",
" u'homeou': u'u214.5-110 ',\n",
" u'index': 0,\n",
" u'projwinner': u'ORL',\n",
" u'spread': u'-4.5 '}"
]
},
"execution_count": 457,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"json.loads(oddsdf.to_json(orient='index'))['0']"
]
},
{
"cell_type": "code",
"execution_count": 466,
"metadata": {
"collapsed": false,
"scrolled": true
},
"outputs": [
{
"data": {
"text/html": [
"<div>\n",
"<table border=\"1\" class=\"dataframe\">\n",
" <thead>\n",
" <tr style=\"text-align: right;\">\n",
" <th></th>\n",
" <th>homescore</th>\n",
" <th>awayscore</th>\n",
" <th>away</th>\n",
" <th>home</th>\n",
" <th>projectedwinner</th>\n",
" <th>spread</th>\n",
" <th>dateof</th>\n",
" <th>ou</th>\n",
" </tr>\n",
" </thead>\n",
" <tbody>\n",
" <tr>\n",
" <th>21</th>\n",
" <td>101</td>\n",
" <td>104</td>\n",
" <td>OKC</td>\n",
" <td>LAC</td>\n",
" <td>OKC</td>\n",
" <td>-3.0</td>\n",
" <td>2016-03-02</td>\n",
" <td>205</td>\n",
" </tr>\n",
" <tr>\n",
" <th>32</th>\n",
" <td>105</td>\n",
" <td>105</td>\n",
" <td>OKC</td>\n",
" <td>LAC</td>\n",
" <td>OKC</td>\n",
" <td>-0.0</td>\n",
" <td>2016-03-02</td>\n",
" <td>210</td>\n",
" </tr>\n",
" <tr>\n",
" <th>54</th>\n",
" <td>104</td>\n",
" <td>110</td>\n",
" <td>OKC</td>\n",
" <td>LAC</td>\n",
" <td>OKC</td>\n",
" <td>-6.0</td>\n",
" <td>2016-03-02</td>\n",
" <td>214</td>\n",
" </tr>\n",
" <tr>\n",
" <th>76</th>\n",
" <td>104</td>\n",
" <td>106</td>\n",
" <td>OKC</td>\n",
" <td>LAC</td>\n",
" <td>OKC</td>\n",
" <td>-2.0</td>\n",
" <td>2016-03-02</td>\n",
" <td>210</td>\n",
" </tr>\n",
" <tr>\n",
" <th>87</th>\n",
" <td>105</td>\n",
" <td>106</td>\n",
" <td>OKC</td>\n",
" <td>LAC</td>\n",
" <td>OKC</td>\n",
" <td>-1.0</td>\n",
" <td>2016-03-02</td>\n",
" <td>211</td>\n",
" </tr>\n",
" <tr>\n",
" <th>98</th>\n",
" <td>103</td>\n",
" <td>108</td>\n",
" <td>OKC</td>\n",
" <td>LAC</td>\n",
" <td>OKC</td>\n",
" <td>-5.5</td>\n",
" <td>2016-03-02</td>\n",
" <td>211</td>\n",
" </tr>\n",
" <tr>\n",
" <th>109</th>\n",
" <td>103</td>\n",
" <td>106</td>\n",
" <td>OKC</td>\n",
" <td>LAC</td>\n",
" <td>OKC</td>\n",
" <td>-3.0</td>\n",
" <td>2016-03-02</td>\n",
" <td>209</td>\n",
" </tr>\n",
" <tr>\n",
" <th>120</th>\n",
" <td>102</td>\n",
" <td>105</td>\n",
" <td>OKC</td>\n",
" <td>LAC</td>\n",
" <td>OKC</td>\n",
" <td>-2.5</td>\n",
" <td>2016-03-02</td>\n",
" <td>207</td>\n",
" </tr>\n",
" <tr>\n",
" <th>131</th>\n",
" <td>104</td>\n",
" <td>107</td>\n",
" <td>OKC</td>\n",
" <td>LAC</td>\n",
" <td>OKC</td>\n",
" <td>-3.0</td>\n",
" <td>2016-03-02</td>\n",
" <td>211</td>\n",
" </tr>\n",
" <tr>\n",
" <th>142</th>\n",
" <td>103</td>\n",
" <td>104</td>\n",
" <td>OKC</td>\n",
" <td>LAC</td>\n",
" <td>OKC</td>\n",
" <td>-1.0</td>\n",
" <td>2016-03-02</td>\n",
" <td>207</td>\n",
" </tr>\n",
" <tr>\n",
" <th>153</th>\n",
" <td>103</td>\n",
" <td>106</td>\n",
" <td>OKC</td>\n",
" <td>LAC</td>\n",
" <td>OKC</td>\n",
" <td>-3.0</td>\n",
" <td>2016-03-02</td>\n",
" <td>209</td>\n",
" </tr>\n",
" <tr>\n",
" <th>164</th>\n",
" <td>104</td>\n",
" <td>108</td>\n",
" <td>OKC</td>\n",
" <td>LAC</td>\n",
" <td>OKC</td>\n",
" <td>-4.0</td>\n",
" <td>2016-03-02</td>\n",
" <td>212</td>\n",
" </tr>\n",
" <tr>\n",
" <th>175</th>\n",
" <td>100</td>\n",
" <td>107</td>\n",
" <td>OKC</td>\n",
" <td>LAC</td>\n",
" <td>OKC</td>\n",
" <td>-6.5</td>\n",
" <td>2016-03-02</td>\n",
" <td>207</td>\n",
" </tr>\n",
" <tr>\n",
" <th>186</th>\n",
" <td>108</td>\n",
" <td>109</td>\n",
" <td>OKC</td>\n",
" <td>LAC</td>\n",
" <td>OKC</td>\n",
" <td>-1.0</td>\n",
" <td>2016-03-02</td>\n",
" <td>217</td>\n",
" </tr>\n",
" <tr>\n",
" <th>197</th>\n",
" <td>106</td>\n",
" <td>109</td>\n",
" <td>OKC</td>\n",
" <td>LAC</td>\n",
" <td>OKC</td>\n",
" <td>-2.5</td>\n",
" <td>2016-03-02</td>\n",
" <td>215</td>\n",
" </tr>\n",
" <tr>\n",
" <th>219</th>\n",
" <td>106</td>\n",
" <td>108</td>\n",
" <td>OKC</td>\n",
" <td>LAC</td>\n",
" <td>OKC</td>\n",
" <td>-1.5</td>\n",
" <td>2016-03-02</td>\n",
" <td>214</td>\n",
" </tr>\n",
" <tr>\n",
" <th>230</th>\n",
" <td>103</td>\n",
" <td>107</td>\n",
" <td>OKC</td>\n",
" <td>LAC</td>\n",
" <td>OKC</td>\n",
" <td>-4.0</td>\n",
" <td>2016-03-02</td>\n",
" <td>210</td>\n",
" </tr>\n",
" <tr>\n",
" <th>241</th>\n",
" <td>105</td>\n",
" <td>109</td>\n",
" <td>OKC</td>\n",
" <td>LAC</td>\n",
" <td>OKC</td>\n",
" <td>-4.5</td>\n",
" <td>2016-03-02</td>\n",
" <td>214</td>\n",
" </tr>\n",
" <tr>\n",
" <th>252</th>\n",
" <td>105</td>\n",
" <td>110</td>\n",
" <td>OKC</td>\n",
" <td>LAC</td>\n",
" <td>OKC</td>\n",
" <td>-4.5</td>\n",
" <td>2016-03-02</td>\n",
" <td>215</td>\n",
" </tr>\n",
" <tr>\n",
" <th>263</th>\n",
" <td>107</td>\n",
" <td>107</td>\n",
" <td>OKC</td>\n",
" <td>LAC</td>\n",
" <td>OKC</td>\n",
" <td>-0.5</td>\n",
" <td>2016-03-02</td>\n",
" <td>214</td>\n",
" </tr>\n",
" <tr>\n",
" <th>274</th>\n",
" <td>100</td>\n",
" <td>107</td>\n",
" <td>OKC</td>\n",
" <td>LAC</td>\n",
" <td>OKC</td>\n",
" <td>-7.0</td>\n",
" <td>2016-03-02</td>\n",
" <td>207</td>\n",
" </tr>\n",
" <tr>\n",
" <th>285</th>\n",
" <td>106</td>\n",
" <td>109</td>\n",
" <td>OKC</td>\n",
" <td>LAC</td>\n",
" <td>OKC</td>\n",
" <td>-2.5</td>\n",
" <td>2016-03-02</td>\n",
" <td>215</td>\n",
" </tr>\n",
" <tr>\n",
" <th>296</th>\n",
" <td>103</td>\n",
" <td>105</td>\n",
" <td>OKC</td>\n",
" <td>LAC</td>\n",
" <td>OKC</td>\n",
" <td>-2.0</td>\n",
" <td>2016-03-02</td>\n",
" <td>208</td>\n",
" </tr>\n",
" <tr>\n",
" <th>307</th>\n",
" <td>105</td>\n",
" <td>110</td>\n",
" <td>OKC</td>\n",
" <td>LAC</td>\n",
" <td>OKC</td>\n",
" <td>-5.0</td>\n",
" <td>2016-03-02</td>\n",
" <td>215</td>\n",
" </tr>\n",
" <tr>\n",
" <th>318</th>\n",
" <td>102</td>\n",
" <td>107</td>\n",
" <td>OKC</td>\n",
" <td>LAC</td>\n",
" <td>OKC</td>\n",
" <td>-5.0</td>\n",
" <td>2016-03-02</td>\n",
" <td>209</td>\n",
" </tr>\n",
" <tr>\n",
" <th>329</th>\n",
" <td>103</td>\n",
" <td>107</td>\n",
" <td>OKC</td>\n",
" <td>LAC</td>\n",
" <td>OKC</td>\n",
" <td>-3.5</td>\n",
" <td>2016-03-02</td>\n",
" <td>210</td>\n",
" </tr>\n",
" <tr>\n",
" <th>340</th>\n",
" <td>106</td>\n",
" <td>109</td>\n",
" <td>OKC</td>\n",
" <td>LAC</td>\n",
" <td>OKC</td>\n",
" <td>-3.0</td>\n",
" <td>2016-03-02</td>\n",
" <td>215</td>\n",
" </tr>\n",
" <tr>\n",
" <th>351</th>\n",
" <td>100</td>\n",
" <td>108</td>\n",
" <td>OKC</td>\n",
" <td>LAC</td>\n",
" <td>OKC</td>\n",
" <td>-7.5</td>\n",
" <td>2016-03-02</td>\n",
" <td>208</td>\n",
" </tr>\n",
" <tr>\n",
" <th>362</th>\n",
" <td>106</td>\n",
" <td>107</td>\n",
" <td>OKC</td>\n",
" <td>LAC</td>\n",
" <td>OKC</td>\n",
" <td>-0.5</td>\n",
" <td>2016-03-02</td>\n",
" <td>213</td>\n",
" </tr>\n",
" <tr>\n",
" <th>373</th>\n",
" <td>103</td>\n",
" <td>111</td>\n",
" <td>OKC</td>\n",
" <td>LAC</td>\n",
" <td>OKC</td>\n",
" <td>-8.0</td>\n",
" <td>2016-03-02</td>\n",
" <td>214</td>\n",
" </tr>\n",
" <tr>\n",
" <th>...</th>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" </tr>\n",
" <tr>\n",
" <th>670</th>\n",
" <td>106</td>\n",
" <td>108</td>\n",
" <td>OKC</td>\n",
" <td>LAC</td>\n",
" <td>OKC</td>\n",
" <td>-1.5</td>\n",
" <td>2016-03-02</td>\n",
" <td>214</td>\n",
" </tr>\n",
" <tr>\n",
" <th>681</th>\n",
" <td>105</td>\n",
" <td>112</td>\n",
" <td>OKC</td>\n",
" <td>LAC</td>\n",
" <td>OKC</td>\n",
" <td>-7.5</td>\n",
" <td>2016-03-02</td>\n",
" <td>217</td>\n",
" </tr>\n",
" <tr>\n",
" <th>703</th>\n",
" <td>108</td>\n",
" <td>113</td>\n",
" <td>OKC</td>\n",
" <td>LAC</td>\n",
" <td>OKC</td>\n",
" <td>-5.5</td>\n",
" <td>2016-03-02</td>\n",
" <td>221</td>\n",
" </tr>\n",
" <tr>\n",
" <th>714</th>\n",
" <td>97</td>\n",
" <td>109</td>\n",
" <td>OKC</td>\n",
" <td>LAC</td>\n",
" <td>OKC</td>\n",
" <td>-11.5</td>\n",
" <td>2016-03-02</td>\n",
" <td>206</td>\n",
" </tr>\n",
" <tr>\n",
" <th>725</th>\n",
" <td>103</td>\n",
" <td>109</td>\n",
" <td>OKC</td>\n",
" <td>LAC</td>\n",
" <td>OKC</td>\n",
" <td>-6.0</td>\n",
" <td>2016-03-02</td>\n",
" <td>212</td>\n",
" </tr>\n",
" <tr>\n",
" <th>736</th>\n",
" <td>103</td>\n",
" <td>108</td>\n",
" <td>OKC</td>\n",
" <td>LAC</td>\n",
" <td>OKC</td>\n",
" <td>-5.5</td>\n",
" <td>2016-03-02</td>\n",
" <td>211</td>\n",
" </tr>\n",
" <tr>\n",
" <th>758</th>\n",
" <td>105</td>\n",
" <td>108</td>\n",
" <td>OKC</td>\n",
" <td>LAC</td>\n",
" <td>OKC</td>\n",
" <td>-3.0</td>\n",
" <td>2016-03-02</td>\n",
" <td>213</td>\n",
" </tr>\n",
" <tr>\n",
" <th>769</th>\n",
" <td>104</td>\n",
" <td>106</td>\n",
" <td>OKC</td>\n",
" <td>LAC</td>\n",
" <td>OKC</td>\n",
" <td>-2.5</td>\n",
" <td>2016-03-02</td>\n",
" <td>210</td>\n",
" </tr>\n",
" <tr>\n",
" <th>780</th>\n",
" <td>102</td>\n",
" <td>108</td>\n",
" <td>OKC</td>\n",
" <td>LAC</td>\n",
" <td>OKC</td>\n",
" <td>-6.0</td>\n",
" <td>2016-03-02</td>\n",
" <td>210</td>\n",
" </tr>\n",
" <tr>\n",
" <th>802</th>\n",
" <td>106</td>\n",
" <td>107</td>\n",
" <td>OKC</td>\n",
" <td>LAC</td>\n",
" <td>OKC</td>\n",
" <td>-1.5</td>\n",
" <td>2016-03-02</td>\n",
" <td>213</td>\n",
" </tr>\n",
" <tr>\n",
" <th>824</th>\n",
" <td>102</td>\n",
" <td>108</td>\n",
" <td>OKC</td>\n",
" <td>LAC</td>\n",
" <td>OKC</td>\n",
" <td>-6.0</td>\n",
" <td>2016-03-02</td>\n",
" <td>210</td>\n",
" </tr>\n",
" <tr>\n",
" <th>835</th>\n",
" <td>101</td>\n",
" <td>107</td>\n",
" <td>OKC</td>\n",
" <td>LAC</td>\n",
" <td>OKC</td>\n",
" <td>-6.0</td>\n",
" <td>2016-03-02</td>\n",
" <td>208</td>\n",
" </tr>\n",
" <tr>\n",
" <th>846</th>\n",
" <td>103</td>\n",
" <td>109</td>\n",
" <td>OKC</td>\n",
" <td>LAC</td>\n",
" <td>OKC</td>\n",
" <td>-6.5</td>\n",
" <td>2016-03-02</td>\n",
" <td>212</td>\n",
" </tr>\n",
" <tr>\n",
" <th>868</th>\n",
" <td>107</td>\n",
" <td>112</td>\n",
" <td>OKC</td>\n",
" <td>LAC</td>\n",
" <td>OKC</td>\n",
" <td>-4.5</td>\n",
" <td>2016-03-02</td>\n",
" <td>219</td>\n",
" </tr>\n",
" <tr>\n",
" <th>879</th>\n",
" <td>105</td>\n",
" <td>113</td>\n",
" <td>OKC</td>\n",
" <td>LAC</td>\n",
" <td>OKC</td>\n",
" <td>-8.0</td>\n",
" <td>2016-03-02</td>\n",
" <td>218</td>\n",
" </tr>\n",
" <tr>\n",
" <th>912</th>\n",
" <td>105</td>\n",
" <td>108</td>\n",
" <td>OKC</td>\n",
" <td>LAC</td>\n",
" <td>OKC</td>\n",
" <td>-3.0</td>\n",
" <td>2016-03-02</td>\n",
" <td>213</td>\n",
" </tr>\n",
" <tr>\n",
" <th>923</th>\n",
" <td>104</td>\n",
" <td>105</td>\n",
" <td>OKC</td>\n",
" <td>LAC</td>\n",
" <td>OKC</td>\n",
" <td>-1.0</td>\n",
" <td>2016-03-02</td>\n",
" <td>209</td>\n",
" </tr>\n",
" <tr>\n",
" <th>945</th>\n",
" <td>104</td>\n",
" <td>106</td>\n",
" <td>OKC</td>\n",
" <td>LAC</td>\n",
" <td>OKC</td>\n",
" <td>-2.0</td>\n",
" <td>2016-03-02</td>\n",
" <td>210</td>\n",
" </tr>\n",
" <tr>\n",
" <th>956</th>\n",
" <td>105</td>\n",
" <td>105</td>\n",
" <td>OKC</td>\n",
" <td>LAC</td>\n",
" <td>OKC</td>\n",
" <td>-0.5</td>\n",
" <td>2016-03-02</td>\n",
" <td>210</td>\n",
" </tr>\n",
" <tr>\n",
" <th>967</th>\n",
" <td>104</td>\n",
" <td>105</td>\n",
" <td>OKC</td>\n",
" <td>LAC</td>\n",
" <td>OKC</td>\n",
" <td>-1.0</td>\n",
" <td>2016-03-02</td>\n",
" <td>209</td>\n",
" </tr>\n",
" <tr>\n",
" <th>978</th>\n",
" <td>110</td>\n",
" <td>112</td>\n",
" <td>OKC</td>\n",
" <td>LAC</td>\n",
" <td>OKC</td>\n",
" <td>-2.0</td>\n",
" <td>2016-03-02</td>\n",
" <td>222</td>\n",
" </tr>\n",
" <tr>\n",
" <th>989</th>\n",
" <td>107</td>\n",
" <td>109</td>\n",
" <td>OKC</td>\n",
" <td>LAC</td>\n",
" <td>OKC</td>\n",
" <td>-1.5</td>\n",
" <td>2016-03-02</td>\n",
" <td>216</td>\n",
" </tr>\n",
" <tr>\n",
" <th>1000</th>\n",
" <td>105</td>\n",
" <td>109</td>\n",
" <td>OKC</td>\n",
" <td>LAC</td>\n",
" <td>OKC</td>\n",
" <td>-4.0</td>\n",
" <td>2016-03-02</td>\n",
" <td>214</td>\n",
" </tr>\n",
" <tr>\n",
" <th>1022</th>\n",
" <td>102</td>\n",
" <td>105</td>\n",
" <td>OKC</td>\n",
" <td>LAC</td>\n",
" <td>OKC</td>\n",
" <td>-3.5</td>\n",
" <td>2016-03-02</td>\n",
" <td>207</td>\n",
" </tr>\n",
" <tr>\n",
" <th>1033</th>\n",
" <td>107</td>\n",
" <td>107</td>\n",
" <td>OKC</td>\n",
" <td>LAC</td>\n",
" <td>OKC</td>\n",
" <td>-0.0</td>\n",
" <td>2016-03-02</td>\n",
" <td>214</td>\n",
" </tr>\n",
" <tr>\n",
" <th>1044</th>\n",
" <td>104</td>\n",
" <td>106</td>\n",
" <td>OKC</td>\n",
" <td>LAC</td>\n",
" <td>OKC</td>\n",
" <td>-1.5</td>\n",
" <td>2016-03-02</td>\n",
" <td>210</td>\n",
" </tr>\n",
" <tr>\n",
" <th>1055</th>\n",
" <td>108</td>\n",
" <td>108</td>\n",
" <td>OKC</td>\n",
" <td>LAC</td>\n",
" <td>OKC</td>\n",
" <td>-0.0</td>\n",
" <td>2016-03-02</td>\n",
" <td>216</td>\n",
" </tr>\n",
" <tr>\n",
" <th>1077</th>\n",
" <td>104</td>\n",
" <td>108</td>\n",
" <td>OKC</td>\n",
" <td>LAC</td>\n",
" <td>OKC</td>\n",
" <td>-4.5</td>\n",
" <td>2016-03-02</td>\n",
" <td>212</td>\n",
" </tr>\n",
" <tr>\n",
" <th>1088</th>\n",
" <td>100</td>\n",
" <td>106</td>\n",
" <td>OKC</td>\n",
" <td>LAC</td>\n",
" <td>OKC</td>\n",
" <td>-5.5</td>\n",
" <td>2016-03-02</td>\n",
" <td>206</td>\n",
" </tr>\n",
" <tr>\n",
" <th>1099</th>\n",
" <td>103</td>\n",
" <td>107</td>\n",
" <td>OKC</td>\n",
" <td>LAC</td>\n",
" <td>OKC</td>\n",
" <td>-4.0</td>\n",
" <td>2016-03-02</td>\n",
" <td>210</td>\n",
" </tr>\n",
" </tbody>\n",
"</table>\n",
"<p>76 rows × 8 columns</p>\n",
"</div>"
],
"text/plain": [
" homescore awayscore away home projectedwinner spread dateof ou\n",
"21 101 104 OKC LAC OKC -3.0 2016-03-02 205\n",
"32 105 105 OKC LAC OKC -0.0 2016-03-02 210\n",
"54 104 110 OKC LAC OKC -6.0 2016-03-02 214\n",
"76 104 106 OKC LAC OKC -2.0 2016-03-02 210\n",
"87 105 106 OKC LAC OKC -1.0 2016-03-02 211\n",
"98 103 108 OKC LAC OKC -5.5 2016-03-02 211\n",
"109 103 106 OKC LAC OKC -3.0 2016-03-02 209\n",
"120 102 105 OKC LAC OKC -2.5 2016-03-02 207\n",
"131 104 107 OKC LAC OKC -3.0 2016-03-02 211\n",
"142 103 104 OKC LAC OKC -1.0 2016-03-02 207\n",
"153 103 106 OKC LAC OKC -3.0 2016-03-02 209\n",
"164 104 108 OKC LAC OKC -4.0 2016-03-02 212\n",
"175 100 107 OKC LAC OKC -6.5 2016-03-02 207\n",
"186 108 109 OKC LAC OKC -1.0 2016-03-02 217\n",
"197 106 109 OKC LAC OKC -2.5 2016-03-02 215\n",
"219 106 108 OKC LAC OKC -1.5 2016-03-02 214\n",
"230 103 107 OKC LAC OKC -4.0 2016-03-02 210\n",
"241 105 109 OKC LAC OKC -4.5 2016-03-02 214\n",
"252 105 110 OKC LAC OKC -4.5 2016-03-02 215\n",
"263 107 107 OKC LAC OKC -0.5 2016-03-02 214\n",
"274 100 107 OKC LAC OKC -7.0 2016-03-02 207\n",
"285 106 109 OKC LAC OKC -2.5 2016-03-02 215\n",
"296 103 105 OKC LAC OKC -2.0 2016-03-02 208\n",
"307 105 110 OKC LAC OKC -5.0 2016-03-02 215\n",
"318 102 107 OKC LAC OKC -5.0 2016-03-02 209\n",
"329 103 107 OKC LAC OKC -3.5 2016-03-02 210\n",
"340 106 109 OKC LAC OKC -3.0 2016-03-02 215\n",
"351 100 108 OKC LAC OKC -7.5 2016-03-02 208\n",
"362 106 107 OKC LAC OKC -0.5 2016-03-02 213\n",
"373 103 111 OKC LAC OKC -8.0 2016-03-02 214\n",
"... ... ... ... ... ... ... ... ...\n",
"670 106 108 OKC LAC OKC -1.5 2016-03-02 214\n",
"681 105 112 OKC LAC OKC -7.5 2016-03-02 217\n",
"703 108 113 OKC LAC OKC -5.5 2016-03-02 221\n",
"714 97 109 OKC LAC OKC -11.5 2016-03-02 206\n",
"725 103 109 OKC LAC OKC -6.0 2016-03-02 212\n",
"736 103 108 OKC LAC OKC -5.5 2016-03-02 211\n",
"758 105 108 OKC LAC OKC -3.0 2016-03-02 213\n",
"769 104 106 OKC LAC OKC -2.5 2016-03-02 210\n",
"780 102 108 OKC LAC OKC -6.0 2016-03-02 210\n",
"802 106 107 OKC LAC OKC -1.5 2016-03-02 213\n",
"824 102 108 OKC LAC OKC -6.0 2016-03-02 210\n",
"835 101 107 OKC LAC OKC -6.0 2016-03-02 208\n",
"846 103 109 OKC LAC OKC -6.5 2016-03-02 212\n",
"868 107 112 OKC LAC OKC -4.5 2016-03-02 219\n",
"879 105 113 OKC LAC OKC -8.0 2016-03-02 218\n",
"912 105 108 OKC LAC OKC -3.0 2016-03-02 213\n",
"923 104 105 OKC LAC OKC -1.0 2016-03-02 209\n",
"945 104 106 OKC LAC OKC -2.0 2016-03-02 210\n",
"956 105 105 OKC LAC OKC -0.5 2016-03-02 210\n",
"967 104 105 OKC LAC OKC -1.0 2016-03-02 209\n",
"978 110 112 OKC LAC OKC -2.0 2016-03-02 222\n",
"989 107 109 OKC LAC OKC -1.5 2016-03-02 216\n",
"1000 105 109 OKC LAC OKC -4.0 2016-03-02 214\n",
"1022 102 105 OKC LAC OKC -3.5 2016-03-02 207\n",
"1033 107 107 OKC LAC OKC -0.0 2016-03-02 214\n",
"1044 104 106 OKC LAC OKC -1.5 2016-03-02 210\n",
"1055 108 108 OKC LAC OKC -0.0 2016-03-02 216\n",
"1077 104 108 OKC LAC OKC -4.5 2016-03-02 212\n",
"1088 100 106 OKC LAC OKC -5.5 2016-03-02 206\n",
"1099 103 107 OKC LAC OKC -4.0 2016-03-02 210\n",
"\n",
"[76 rows x 8 columns]"
]
},
"execution_count": 466,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"sdf[sdf.projectedwinner=='OKC']"
]
},
{
"cell_type": "code",
"execution_count": 516,
"metadata": {
"collapsed": false
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"25 39 ORL CHI ORL CHI\n",
"71 29 PHI CHA CHA CHA\n",
"12 47 BOS POR BOS POR\n",
"3 40 TOR UTA TOR TOR\n",
"2 40 HOU NO HOU NO\n",
"46 34 MEM SAC MEM MEM\n",
"24 36 MIL IND IND IND\n",
"40 41 MIN WAS WAS WAS\n",
"55 45 SA DET SA SA\n",
"15 76 DEN LAL DEN DEN\n",
"21 3 LAC OKC LAC LAC\n",
"25 39 ORL CHI ORL ORL\n",
"12 47 BOS POR BOS BOS\n",
"3 40 TOR UTA TOR UTA\n",
"2 40 HOU NO HOU HOU\n",
"46 34 MEM SAC MEM SAC\n",
"15 76 DEN LAL DEN LAL\n",
"21 3 LAC OKC LAC OKC\n",
"24 36 MIL IND IND MIL\n",
"40 41 MIN WAS WAS MIN\n"
]
}
],
"source": [
"sdf = pd.DataFrame()\n",
"sdf = sdf.append([item for sublist in totals for item in sublist])\n",
"sdf.columns = ['homescore', 'awayscore', 'away','home','projectedwinner','spread', 'dateof']\n",
"sdf['ou'] = sdf['homescore'] + sdf['awayscore']\n",
"matchups = sdf[['home', 'away', 'projectedwinner']].drop_duplicates().values.tolist()\n",
"\n",
"method = 'mean'\n",
"results = []\n",
"for home, away, projwinner in matchups:\n",
" homescore = float(sdf[sdf.home==home]['homescore'].tail(1))\n",
" awayscore = float(sdf[sdf.home==home]['awayscore'].tail(1))\n",
" ou = float(sdf[(sdf.home==home)&(sdf.away==away)]['ou'].tail(1))\n",
" home_pwin = len(sdf[sdf.projectedwinner==home])\n",
" away_pwin = len(sdf[sdf.projectedwinner==away])\n",
" proj_winner = away if away_pwin > home_pwin else home\n",
" pwinning = away_pwin if away_pwin > home_pwin else home_pwin\n",
" spread = sdf[sdf.projectedwinner==away].spread.median() if away_pwin > home_pwin else sdf[sdf.projectedwinner==home].spread.median()\n",
" spread = round( 2 * spread ) / 2\n",
" cover = len(sdf[ (sdf.spread<=spread) & (sdf.projectedwinner==proj_winner)])\n",
" ncover = len(sdf[ (sdf.spread>spread) & (sdf.projectedwinner==proj_winner)])\n",
" pcover = round(float(cover)/(cover+ncover)*100, 2)\n",
" \n",
" results.append([home, away, homescore, awayscore, proj_winner, spread, pcover, pwinning, ou, method])\n",
" \n",
"ourspreads = pd.DataFrame(results)\n",
"ourspreads.columns = ['home', 'away', 'homescore', 'awayscore', 'projectedwinner', 'spread', 'pcover', 'pwin', 'overunder', 'method']\n",
"ourspreads = ourspreads.drop_duplicates(subset=['home', 'away', 'projectedwinner', 'spread', 'pcover', 'pwin'])\n",
"# outspreads.to_sql('nbaspreads1516', con=engine, if_exists='append', index=True)\n",
"\n",
"# sdf = pd.DataFrame()\n",
"# sdf = sdf.append([item for sublist in totals for item in sublist])\n",
"# sdf.columns = ['homescore', 'awayscore', 'away','home','projectedwinner','spread', 'dateof']\n",
"# sdf['ou'] = sdf['homescore'] + sdf['awayscore']\n",
"# matchups = sdf[['home', 'away', 'projectedwinner']].drop_duplicates().values.tolist()\n",
"\n",
"method = 'mean'\n",
"results = []\n",
"for home, away, projwinner in matchups:\n",
" ou = oddsdf[(oddsdf.home==home)&(oddsdf.away==away)].homeou.values[0]\n",
" vegas_projwinner = oddsdf[(oddsdf.home==home)&(oddsdf.away==away)].projwinner.tail(1).values[0]\n",
" home_pwin = len(sdf[(sdf.projectedwinner==vegas_projwinner)&(vegas_projwinner==home)])\n",
" away_pwin = len(sdf[(sdf.projectedwinner==vegas_projwinner)&(vegas_projwinner==away)])\n",
" proj_winner = away if away_pwin > home_pwin else home\n",
" pwinning = away_pwin if away_pwin > home_pwin else home_pwin\n",
" vegas_spread = oddsdf[oddsdf.projwinner==home].spread.tail(1).values[0] if vegas_projwinner == home else oddsdf[oddsdf.projwinner==away].spread.tail(1).values[0]\n",
" vegas_spread = float(vegas_spread)\n",
" cover = len(sdf[ (sdf.spread<=vegas_spread) & (sdf.projectedwinner==vegas_projwinner)])\n",
" ncover = len(sdf[ (sdf.spread>vegas_spread) & (sdf.projectedwinner==vegas_projwinner)])\n",
" print cover, ncover, home, away, vegas_projwinner, projwinner\n",
" pcover = round(float(cover)/(cover+ncover)*100, 2)\n",
" \n",
" results.append([home, away, vegas_projwinner, vegas_spread, pcover, pwinning, ou, method])\n",
" \n",
"vspreads = pd.DataFrame(results)\n",
"vspreads.columns = ['home', 'away', 'projectedwinner', 'vegas spread', 'pcover', 'pwin', 'overunder', 'method']\n",
"vspreads = vspreads.drop_duplicates(subset=['home', 'away', 'projectedwinner', 'pcover', 'pwin'])\n",
"\n",
"# ourspreads['pcover'], ourspreads['pwin'] = vspreads['pcover'], vspreads['pwin']"
]
},
{
"cell_type": "code",
"execution_count": 517,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/html": [
"<div>\n",
"<table border=\"1\" class=\"dataframe\">\n",
" <thead>\n",
" <tr style=\"text-align: right;\">\n",
" <th></th>\n",
" <th>home</th>\n",
" <th>away</th>\n",
" <th>projectedwinner</th>\n",
" <th>vegas spread</th>\n",
" <th>pcover</th>\n",
" <th>pwin</th>\n",
" <th>overunder</th>\n",
" <th>method</th>\n",
" </tr>\n",
" </thead>\n",
" <tbody>\n",
" <tr>\n",
" <th>0</th>\n",
" <td>ORL</td>\n",
" <td>CHI</td>\n",
" <td>ORL</td>\n",
" <td>-4.5</td>\n",
" <td>39.06</td>\n",
" <td>64</td>\n",
" <td>u215.5-110</td>\n",
" <td>mean</td>\n",
" </tr>\n",
" <tr>\n",
" <th>1</th>\n",
" <td>PHI</td>\n",
" <td>CHA</td>\n",
" <td>CHA</td>\n",
" <td>-10.0</td>\n",
" <td>71.00</td>\n",
" <td>100</td>\n",
" <td>u208.5-110</td>\n",
" <td>mean</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2</th>\n",
" <td>BOS</td>\n",
" <td>POR</td>\n",
" <td>BOS</td>\n",
" <td>-6.0</td>\n",
" <td>20.34</td>\n",
" <td>59</td>\n",
" <td>u217.5-110</td>\n",
" <td>mean</td>\n",
" </tr>\n",
" <tr>\n",
" <th>3</th>\n",
" <td>TOR</td>\n",
" <td>UTA</td>\n",
" <td>TOR</td>\n",
" <td>-5.0</td>\n",
" <td>6.98</td>\n",
" <td>43</td>\n",
" <td>u193.5-110</td>\n",
" <td>mean</td>\n",
" </tr>\n",
" <tr>\n",
" <th>4</th>\n",
" <td>HOU</td>\n",
" <td>NO</td>\n",
" <td>HOU</td>\n",
" <td>-6.0</td>\n",
" <td>4.76</td>\n",
" <td>42</td>\n",
" <td>u222.5-110</td>\n",
" <td>mean</td>\n",
" </tr>\n",
" <tr>\n",
" <th>5</th>\n",
" <td>MEM</td>\n",
" <td>SAC</td>\n",
" <td>MEM</td>\n",
" <td>-3.5</td>\n",
" <td>57.50</td>\n",
" <td>80</td>\n",
" <td>u215-110</td>\n",
" <td>mean</td>\n",
" </tr>\n",
" <tr>\n",
" <th>6</th>\n",
" <td>MIL</td>\n",
" <td>IND</td>\n",
" <td>IND</td>\n",
" <td>-3.0</td>\n",
" <td>40.00</td>\n",
" <td>60</td>\n",
" <td>u206-110</td>\n",
" <td>mean</td>\n",
" </tr>\n",
" <tr>\n",
" <th>7</th>\n",
" <td>MIN</td>\n",
" <td>WAS</td>\n",
" <td>WAS</td>\n",
" <td>-3.5</td>\n",
" <td>49.38</td>\n",
" <td>81</td>\n",
" <td>u219.5-110</td>\n",
" <td>mean</td>\n",
" </tr>\n",
" <tr>\n",
" <th>8</th>\n",
" <td>SA</td>\n",
" <td>DET</td>\n",
" <td>SA</td>\n",
" <td>-11.0</td>\n",
" <td>55.00</td>\n",
" <td>100</td>\n",
" <td>u201-110</td>\n",
" <td>mean</td>\n",
" </tr>\n",
" <tr>\n",
" <th>9</th>\n",
" <td>DEN</td>\n",
" <td>LAL</td>\n",
" <td>DEN</td>\n",
" <td>-8.5</td>\n",
" <td>16.48</td>\n",
" <td>91</td>\n",
" <td>u212.5-110</td>\n",
" <td>mean</td>\n",
" </tr>\n",
" <tr>\n",
" <th>10</th>\n",
" <td>LAC</td>\n",
" <td>OKC</td>\n",
" <td>LAC</td>\n",
" <td>-1.0</td>\n",
" <td>87.50</td>\n",
" <td>24</td>\n",
" <td>u218-110</td>\n",
" <td>mean</td>\n",
" </tr>\n",
" </tbody>\n",
"</table>\n",
"</div>"
],
"text/plain": [
" home away projectedwinner vegas spread pcover pwin overunder method\n",
"0 ORL CHI ORL -4.5 39.06 64 u215.5-110 mean\n",
"1 PHI CHA CHA -10.0 71.00 100 u208.5-110 mean\n",
"2 BOS POR BOS -6.0 20.34 59 u217.5-110 mean\n",
"3 TOR UTA TOR -5.0 6.98 43 u193.5-110 mean\n",
"4 HOU NO HOU -6.0 4.76 42 u222.5-110 mean\n",
"5 MEM SAC MEM -3.5 57.50 80 u215-110 mean\n",
"6 MIL IND IND -3.0 40.00 60 u206-110 mean\n",
"7 MIN WAS WAS -3.5 49.38 81 u219.5-110 mean\n",
"8 SA DET SA -11.0 55.00 100 u201-110 mean\n",
"9 DEN LAL DEN -8.5 16.48 91 u212.5-110 mean\n",
"10 LAC OKC LAC -1.0 87.50 24 u218-110 mean"
]
},
"execution_count": 517,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"vspreads"
]
},
{
"cell_type": "code",
"execution_count": 503,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/html": [
"<div>\n",
"<table border=\"1\" class=\"dataframe\">\n",
" <thead>\n",
" <tr style=\"text-align: right;\">\n",
" <th></th>\n",
" <th>index</th>\n",
" <th>home</th>\n",
" <th>away</th>\n",
" <th>homescore</th>\n",
" <th>awayscore</th>\n",
" <th>projectedwinner</th>\n",
" <th>spread</th>\n",
" <th>pcover</th>\n",
" <th>pwin</th>\n",
" <th>overunder</th>\n",
" <th>method</th>\n",
" <th>dateof</th>\n",
" <th>notes</th>\n",
" </tr>\n",
" </thead>\n",
" <tbody>\n",
" <tr>\n",
" <th>0</th>\n",
" <td>0</td>\n",
" <td>ORL</td>\n",
" <td>CHI</td>\n",
" <td>97</td>\n",
" <td>105</td>\n",
" <td>ORL</td>\n",
" <td>-3.5</td>\n",
" <td>55.74</td>\n",
" <td>61</td>\n",
" <td>202</td>\n",
" <td>mean</td>\n",
" <td>2016-03-02</td>\n",
" <td>None</td>\n",
" </tr>\n",
" <tr>\n",
" <th>1</th>\n",
" <td>1</td>\n",
" <td>PHI</td>\n",
" <td>CHA</td>\n",
" <td>93</td>\n",
" <td>110</td>\n",
" <td>CHA</td>\n",
" <td>-11.5</td>\n",
" <td>50.00</td>\n",
" <td>100</td>\n",
" <td>203</td>\n",
" <td>mean</td>\n",
" <td>2016-03-02</td>\n",
" <td>None</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2</th>\n",
" <td>2</td>\n",
" <td>BOS</td>\n",
" <td>POR</td>\n",
" <td>100</td>\n",
" <td>107</td>\n",
" <td>BOS</td>\n",
" <td>-3.0</td>\n",
" <td>50.00</td>\n",
" <td>62</td>\n",
" <td>207</td>\n",
" <td>mean</td>\n",
" <td>2016-03-02</td>\n",
" <td>None</td>\n",
" </tr>\n",
" <tr>\n",
" <th>3</th>\n",
" <td>3</td>\n",
" <td>TOR</td>\n",
" <td>UTA</td>\n",
" <td>91</td>\n",
" <td>94</td>\n",
" <td>TOR</td>\n",
" <td>-2.0</td>\n",
" <td>50.98</td>\n",
" <td>51</td>\n",
" <td>185</td>\n",
" <td>mean</td>\n",
" <td>2016-03-02</td>\n",
" <td>None</td>\n",
" </tr>\n",
" <tr>\n",
" <th>4</th>\n",
" <td>4</td>\n",
" <td>HOU</td>\n",
" <td>NO</td>\n",
" <td>109</td>\n",
" <td>106</td>\n",
" <td>NO</td>\n",
" <td>-2.0</td>\n",
" <td>61.67</td>\n",
" <td>60</td>\n",
" <td>215</td>\n",
" <td>mean</td>\n",
" <td>2016-03-02</td>\n",
" <td>None</td>\n",
" </tr>\n",
" <tr>\n",
" <th>5</th>\n",
" <td>5</td>\n",
" <td>MEM</td>\n",
" <td>SAC</td>\n",
" <td>102</td>\n",
" <td>101</td>\n",
" <td>MEM</td>\n",
" <td>-3.5</td>\n",
" <td>53.66</td>\n",
" <td>82</td>\n",
" <td>203</td>\n",
" <td>mean</td>\n",
" <td>2016-03-02</td>\n",
" <td>None</td>\n",
" </tr>\n",
" <tr>\n",
" <th>6</th>\n",
" <td>6</td>\n",
" <td>MIL</td>\n",
" <td>IND</td>\n",
" <td>98</td>\n",
" <td>100</td>\n",
" <td>IND</td>\n",
" <td>-2.0</td>\n",
" <td>55.74</td>\n",
" <td>61</td>\n",
" <td>198</td>\n",
" <td>mean</td>\n",
" <td>2016-03-02</td>\n",
" <td>None</td>\n",
" </tr>\n",
" <tr>\n",
" <th>7</th>\n",
" <td>7</td>\n",
" <td>MIN</td>\n",
" <td>WAS</td>\n",
" <td>100</td>\n",
" <td>102</td>\n",
" <td>WAS</td>\n",
" <td>-3.5</td>\n",
" <td>64.79</td>\n",
" <td>71</td>\n",
" <td>202</td>\n",
" <td>mean</td>\n",
" <td>2016-03-02</td>\n",
" <td>None</td>\n",
" </tr>\n",
" <tr>\n",
" <th>8</th>\n",
" <td>8</td>\n",
" <td>SA</td>\n",
" <td>DET</td>\n",
" <td>99</td>\n",
" <td>95</td>\n",
" <td>SA</td>\n",
" <td>-10.5</td>\n",
" <td>54.00</td>\n",
" <td>100</td>\n",
" <td>194</td>\n",
" <td>mean</td>\n",
" <td>2016-03-02</td>\n",
" <td>None</td>\n",
" </tr>\n",
" <tr>\n",
" <th>9</th>\n",
" <td>9</td>\n",
" <td>DEN</td>\n",
" <td>LAL</td>\n",
" <td>107</td>\n",
" <td>102</td>\n",
" <td>DEN</td>\n",
" <td>-5.5</td>\n",
" <td>50.00</td>\n",
" <td>92</td>\n",
" <td>209</td>\n",
" <td>mean</td>\n",
" <td>2016-03-02</td>\n",
" <td>None</td>\n",
" </tr>\n",
" <tr>\n",
" <th>10</th>\n",
" <td>10</td>\n",
" <td>LAC</td>\n",
" <td>OKC</td>\n",
" <td>105</td>\n",
" <td>107</td>\n",
" <td>OKC</td>\n",
" <td>-3.0</td>\n",
" <td>52.56</td>\n",
" <td>78</td>\n",
" <td>212</td>\n",
" <td>mean</td>\n",
" <td>2016-03-02</td>\n",
" <td>None</td>\n",
" </tr>\n",
" </tbody>\n",
"</table>\n",
"</div>"
],
"text/plain": [
" index home away homescore awayscore projectedwinner spread pcover \\\n",
"0 0 ORL CHI 97 105 ORL -3.5 55.74 \n",
"1 1 PHI CHA 93 110 CHA -11.5 50.00 \n",
"2 2 BOS POR 100 107 BOS -3.0 50.00 \n",
"3 3 TOR UTA 91 94 TOR -2.0 50.98 \n",
"4 4 HOU NO 109 106 NO -2.0 61.67 \n",
"5 5 MEM SAC 102 101 MEM -3.5 53.66 \n",
"6 6 MIL IND 98 100 IND -2.0 55.74 \n",
"7 7 MIN WAS 100 102 WAS -3.5 64.79 \n",
"8 8 SA DET 99 95 SA -10.5 54.00 \n",
"9 9 DEN LAL 107 102 DEN -5.5 50.00 \n",
"10 10 LAC OKC 105 107 OKC -3.0 52.56 \n",
"\n",
" pwin overunder method dateof notes \n",
"0 61 202 mean 2016-03-02 None \n",
"1 100 203 mean 2016-03-02 None \n",
"2 62 207 mean 2016-03-02 None \n",
"3 51 185 mean 2016-03-02 None \n",
"4 60 215 mean 2016-03-02 None \n",
"5 82 203 mean 2016-03-02 None \n",
"6 61 198 mean 2016-03-02 None \n",
"7 71 202 mean 2016-03-02 None \n",
"8 100 194 mean 2016-03-02 None \n",
"9 92 209 mean 2016-03-02 None \n",
"10 78 212 mean 2016-03-02 None "
]
},
"execution_count": 503,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"meanspreadsdf"
]
},
{
"cell_type": "code",
"execution_count": 300,
"metadata": {
"collapsed": true
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"-3.5\n",
"-8.5\n",
"-5.0\n",
"-6.0\n",
"-5.5\n",
"-5.5\n",
"-2.5\n",
"-3.5\n",
"-10.5\n",
"-6.5\n",
"-1.0\n",
"-3.5\n",
"-5.0\n",
"-6.0\n",
"-5.5\n",
"-5.5\n",
"-6.5\n",
"-1.0\n",
"-2.5\n",
"-3.5\n"
]
}
],
"source": [
"sdf = pd.DataFrame()\n",
"sdf = sdf.append([item for sublist in totals for item in sublist])\n",
"sdf.columns = ['homescore', 'awayscore', 'away','home','projectedwinner','spread', 'dateof']\n",
"sdf['ou'] = sdf['homescore'] + sdf['awayscore']\n",
"matchups = sdf[['home', 'away', 'projectedwinner']].drop_duplicates().values.tolist()\n",
"\n",
"method = 'mean'\n",
"results = []\n",
"for home, away, projwinner in matchups:\n",
" homescore = float(sdf[sdf.home==home]['homescore'].head(1))\n",
" awayscore = float(sdf[sdf.home==home]['awayscore'].head(1))\n",
" ou = float(sdf[(sdf.home==home)&(sdf.away==away)]['ou'].head(1))\n",
" home_pwin = len(sdf[sdf.projectedwinner==home])\n",
" away_pwin = len(sdf[sdf.projectedwinner==away])\n",
" proj_winner = away if away_pwin > home_pwin else home\n",
" pwinning = away_pwin if away_pwin > home_pwin else home_pwin\n",
" \n",
" vegas_projwinner = oddsdf[(oddsdf.home==home)&(oddsdf.away==away)].projwinner.tail(1).values[0]\n",
" vegas_spread = oddsdf[oddsdf.projwinner==home].spread.tail(1).values[0] if vegas_projwinner == home else oddsdf[oddsdf.projwinner==away].spread.tail(1).values[0]\n",
" vegas_spread = float(vegas_spread)\n",
" print vegas_spread\n",
" spread = sdf[sdf.projectedwinner==away].spread.median() if away_pwin > home_pwin else sdf[sdf.projectedwinner==home].spread.median()\n",
" spread = round( 2 * spread ) / 2\n",
" cover = len(sdf[ (sdf.spread<=vegas_spread) & (sdf.projectedwinner==proj_winner)])\n",
" ncover = len(sdf[ (sdf.spread>vegas_spread) & (sdf.projectedwinner==proj_winner)])\n",
" pcover = round(float(cover)/(cover+ncover)*100, 2)\n",
" \n",
" results.append([home, away, homescore, awayscore, proj_winner, spread, vegas_spread, pcover, pwinning, ou, method])\n",
" \n",
"spreads = pd.DataFrame(results)\n",
"spreads.columns = ['home', 'away', 'homescore', 'awayscore', 'projectedwinner', 'spread', 'vegas spread', 'pcover', 'pwin', 'overunder', 'method']\n",
"spreads = spreads.drop_duplicates(subset=['home', 'away', 'projectedwinner', 'spread', 'pcover', 'pwin'])"
]
},
{
"cell_type": "code",
"execution_count": 301,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/html": [
"<div>\n",
"<table border=\"1\" class=\"dataframe\">\n",
" <thead>\n",
" <tr style=\"text-align: right;\">\n",
" <th></th>\n",
" <th>home</th>\n",
" <th>away</th>\n",
" <th>homescore</th>\n",
" <th>awayscore</th>\n",
" <th>projectedwinner</th>\n",
" <th>spread</th>\n",
" <th>vegas spread</th>\n",
" <th>pcover</th>\n",
" <th>pwin</th>\n",
" <th>overunder</th>\n",
" <th>method</th>\n",
" </tr>\n",
" </thead>\n",
" <tbody>\n",
" <tr>\n",
" <th>0</th>\n",
" <td>ORL</td>\n",
" <td>CHI</td>\n",
" <td>99</td>\n",
" <td>103</td>\n",
" <td>ORL</td>\n",
" <td>-3.5</td>\n",
" <td>-3.5</td>\n",
" <td>51.56</td>\n",
" <td>64</td>\n",
" <td>202</td>\n",
" <td>mean</td>\n",
" </tr>\n",
" <tr>\n",
" <th>1</th>\n",
" <td>PHI</td>\n",
" <td>CHA</td>\n",
" <td>97</td>\n",
" <td>111</td>\n",
" <td>CHA</td>\n",
" <td>-11.5</td>\n",
" <td>-8.5</td>\n",
" <td>83.00</td>\n",
" <td>100</td>\n",
" <td>208</td>\n",
" <td>mean</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2</th>\n",
" <td>BOS</td>\n",
" <td>POR</td>\n",
" <td>102</td>\n",
" <td>105</td>\n",
" <td>BOS</td>\n",
" <td>-3.0</td>\n",
" <td>-5.0</td>\n",
" <td>30.51</td>\n",
" <td>59</td>\n",
" <td>207</td>\n",
" <td>mean</td>\n",
" </tr>\n",
" <tr>\n",
" <th>3</th>\n",
" <td>TOR</td>\n",
" <td>UTA</td>\n",
" <td>97</td>\n",
" <td>94</td>\n",
" <td>UTA</td>\n",
" <td>-2.0</td>\n",
" <td>-6.0</td>\n",
" <td>10.53</td>\n",
" <td>57</td>\n",
" <td>191</td>\n",
" <td>mean</td>\n",
" </tr>\n",
" <tr>\n",
" <th>4</th>\n",
" <td>HOU</td>\n",
" <td>NO</td>\n",
" <td>104</td>\n",
" <td>111</td>\n",
" <td>NO</td>\n",
" <td>-2.0</td>\n",
" <td>-5.5</td>\n",
" <td>12.07</td>\n",
" <td>58</td>\n",
" <td>215</td>\n",
" <td>mean</td>\n",
" </tr>\n",
" <tr>\n",
" <th>5</th>\n",
" <td>MEM</td>\n",
" <td>SAC</td>\n",
" <td>106</td>\n",
" <td>101</td>\n",
" <td>MEM</td>\n",
" <td>-3.5</td>\n",
" <td>-5.5</td>\n",
" <td>25.00</td>\n",
" <td>80</td>\n",
" <td>207</td>\n",
" <td>mean</td>\n",
" </tr>\n",
" <tr>\n",
" <th>6</th>\n",
" <td>MIL</td>\n",
" <td>IND</td>\n",
" <td>98</td>\n",
" <td>100</td>\n",
" <td>IND</td>\n",
" <td>-2.0</td>\n",
" <td>-2.5</td>\n",
" <td>48.33</td>\n",
" <td>60</td>\n",
" <td>198</td>\n",
" <td>mean</td>\n",
" </tr>\n",
" <tr>\n",
" <th>7</th>\n",
" <td>MIN</td>\n",
" <td>WAS</td>\n",
" <td>102</td>\n",
" <td>103</td>\n",
" <td>WAS</td>\n",
" <td>-3.0</td>\n",
" <td>-3.5</td>\n",
" <td>49.38</td>\n",
" <td>81</td>\n",
" <td>205</td>\n",
" <td>mean</td>\n",
" </tr>\n",
" <tr>\n",
" <th>8</th>\n",
" <td>SA</td>\n",
" <td>DET</td>\n",
" <td>105</td>\n",
" <td>98</td>\n",
" <td>SA</td>\n",
" <td>-11.0</td>\n",
" <td>-10.5</td>\n",
" <td>58.00</td>\n",
" <td>100</td>\n",
" <td>203</td>\n",
" <td>mean</td>\n",
" </tr>\n",
" <tr>\n",
" <th>9</th>\n",
" <td>DEN</td>\n",
" <td>LAL</td>\n",
" <td>104</td>\n",
" <td>97</td>\n",
" <td>DEN</td>\n",
" <td>-5.5</td>\n",
" <td>-6.5</td>\n",
" <td>38.46</td>\n",
" <td>91</td>\n",
" <td>201</td>\n",
" <td>mean</td>\n",
" </tr>\n",
" <tr>\n",
" <th>10</th>\n",
" <td>LAC</td>\n",
" <td>OKC</td>\n",
" <td>107</td>\n",
" <td>104</td>\n",
" <td>OKC</td>\n",
" <td>-3.0</td>\n",
" <td>-1.0</td>\n",
" <td>86.84</td>\n",
" <td>76</td>\n",
" <td>211</td>\n",
" <td>mean</td>\n",
" </tr>\n",
" </tbody>\n",
"</table>\n",
"</div>"
],
"text/plain": [
" home away homescore awayscore projectedwinner spread vegas spread \\\n",
"0 ORL CHI 99 103 ORL -3.5 -3.5 \n",
"1 PHI CHA 97 111 CHA -11.5 -8.5 \n",
"2 BOS POR 102 105 BOS -3.0 -5.0 \n",
"3 TOR UTA 97 94 UTA -2.0 -6.0 \n",
"4 HOU NO 104 111 NO -2.0 -5.5 \n",
"5 MEM SAC 106 101 MEM -3.5 -5.5 \n",
"6 MIL IND 98 100 IND -2.0 -2.5 \n",
"7 MIN WAS 102 103 WAS -3.0 -3.5 \n",
"8 SA DET 105 98 SA -11.0 -10.5 \n",
"9 DEN LAL 104 97 DEN -5.5 -6.5 \n",
"10 LAC OKC 107 104 OKC -3.0 -1.0 \n",
"\n",
" pcover pwin overunder method \n",
"0 51.56 64 202 mean \n",
"1 83.00 100 208 mean \n",
"2 30.51 59 207 mean \n",
"3 10.53 57 191 mean \n",
"4 12.07 58 215 mean \n",
"5 25.00 80 207 mean \n",
"6 48.33 60 198 mean \n",
"7 49.38 81 205 mean \n",
"8 58.00 100 203 mean \n",
"9 38.46 91 201 mean \n",
"10 86.84 76 211 mean "
]
},
"execution_count": 301,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"spreads"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {
"collapsed": true
},
"outputs": [],
"source": [
"today = datetime.now()\n",
"today = today.strftime('%Y-%m-%d')\n",
"\n",
"url = 'http://www.gamblerspalace.com/lines/basketball/nba'\n",
"r = requests.get(url)\n",
"soup = BeautifulSoup(r.content)"
]
},
{
"cell_type": "code",
"execution_count": 402,
"metadata": {
"collapsed": true
},
"outputs": [],
"source": [
"today = datetime.now()\n",
"# today = today.strftime('%Y-%m-%d')\n",
"\n",
"url = 'http://www.gamblerspalace.com/lines/basketball/nba'\n",
"r = requests.get(url)\n",
"soup = BeautifulSoup(r.content)"
]
},
{
"cell_type": "code",
"execution_count": 416,
"metadata": {
"collapsed": false
},
"outputs": [],
"source": [
"matchups = []\n",
"sameday = []\n",
"for i in soup.find_all(class_=\"linesTable\")[0].find_all('tr'):\n",
" if re.search(\"NBA -\", i.text):\n",
" sameday.append(i.text)\n",
" if len(sameday) == 1:\n",
" if i.find_all('tr'):\n",
" away = i.find_all('tr')[0].find(class_='team').text\n",
" home = i.find_all('tr')[1].find(class_='team').text\n",
" away = convertcode(gamblercode=away)\n",
" home = convertcode(gamblercode=home)\n",
" awayspread = re.sub(\"-[0-9]{3}\", \"\", i.find_all('tr')[0].find(class_='spread').text.encode('utf-8').replace(\"\\xc2\\xbd\", \".5\"))\n",
" homespread = re.sub(\"-[0-9]{3}\", \"\", i.find_all('tr')[1].find(class_='spread').text.encode('utf-8').replace(\"\\xc2\\xbd\", \".5\"))\n",
" projwinner = away if float(awayspread) < float(homespread) else home\n",
" spread = awayspread if projwinner == away else homespread\n",
" awayoverunder = i.find_all('tr')[0].find(class_='overunder').text.encode('utf-8').replace(\"\\xc2\\xbd\", \".5\")\n",
" homeoverunder = i.find_all('tr')[1].find(class_='overunder').text.encode('utf-8').replace(\"\\xc2\\xbd\", \".5\")\n",
" matchups.append([home, away, projwinner, spread, homeoverunder, awayoverunder, today])\n",
" \n",
"oddsdf = pd.DataFrame(matchups)\n",
"oddsdf.columns = ['home', 'away', 'projwinner', 'spread', 'homeou', 'awayou', 'dateof']\n",
"\n",
"# oddsdf.to_sql('nbaodds1516', con=engine, if_exists='replace', index=True)"
]
},
{
"cell_type": "code",
"execution_count": 417,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/html": [
"<div>\n",
"<table border=\"1\" class=\"dataframe\">\n",
" <thead>\n",
" <tr style=\"text-align: right;\">\n",
" <th></th>\n",
" <th>home</th>\n",
" <th>away</th>\n",
" <th>projwinner</th>\n",
" <th>spread</th>\n",
" <th>homeou</th>\n",
" <th>awayou</th>\n",
" <th>dateof</th>\n",
" </tr>\n",
" </thead>\n",
" <tbody>\n",
" <tr>\n",
" <th>0</th>\n",
" <td>ORL</td>\n",
" <td>CHI</td>\n",
" <td>ORL</td>\n",
" <td>-4.5</td>\n",
" <td>u214.5-110</td>\n",
" <td>o214.5-110</td>\n",
" <td>2016-03-02 14:52:26.784419</td>\n",
" </tr>\n",
" <tr>\n",
" <th>1</th>\n",
" <td>PHI</td>\n",
" <td>CHA</td>\n",
" <td>CHA</td>\n",
" <td>-9</td>\n",
" <td>u207.5-110</td>\n",
" <td>o207.5-110</td>\n",
" <td>2016-03-02 14:52:26.784419</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2</th>\n",
" <td>BOS</td>\n",
" <td>POR</td>\n",
" <td>BOS</td>\n",
" <td>-6</td>\n",
" <td>u218-110</td>\n",
" <td>o218-110</td>\n",
" <td>2016-03-02 14:52:26.784419</td>\n",
" </tr>\n",
" <tr>\n",
" <th>3</th>\n",
" <td>TOR</td>\n",
" <td>UTA</td>\n",
" <td>TOR</td>\n",
" <td>-5</td>\n",
" <td>u193.5-110</td>\n",
" <td>o193.5-110</td>\n",
" <td>2016-03-02 14:52:26.784419</td>\n",
" </tr>\n",
" <tr>\n",
" <th>4</th>\n",
" <td>MEM</td>\n",
" <td>SAC</td>\n",
" <td>MEM</td>\n",
" <td>-3</td>\n",
" <td>u214-110</td>\n",
" <td>o214-110</td>\n",
" <td>2016-03-02 14:52:26.784419</td>\n",
" </tr>\n",
" <tr>\n",
" <th>5</th>\n",
" <td>HOU</td>\n",
" <td>NO</td>\n",
" <td>HOU</td>\n",
" <td>-6</td>\n",
" <td>u220.5-110</td>\n",
" <td>o220.5-110</td>\n",
" <td>2016-03-02 14:52:26.784419</td>\n",
" </tr>\n",
" <tr>\n",
" <th>6</th>\n",
" <td>MIN</td>\n",
" <td>WAS</td>\n",
" <td>WAS</td>\n",
" <td>-2.5</td>\n",
" <td>u219.5-110</td>\n",
" <td>o219.5-110</td>\n",
" <td>2016-03-02 14:52:26.784419</td>\n",
" </tr>\n",
" <tr>\n",
" <th>7</th>\n",
" <td>MIL</td>\n",
" <td>IND</td>\n",
" <td>IND</td>\n",
" <td>-2</td>\n",
" <td>u205.5-110</td>\n",
" <td>o205.5-110</td>\n",
" <td>2016-03-02 14:52:26.784419</td>\n",
" </tr>\n",
" <tr>\n",
" <th>8</th>\n",
" <td>SA</td>\n",
" <td>DET</td>\n",
" <td>SA</td>\n",
" <td>-11</td>\n",
" <td>u201.5-110</td>\n",
" <td>o201.5-110</td>\n",
" <td>2016-03-02 14:52:26.784419</td>\n",
" </tr>\n",
" <tr>\n",
" <th>9</th>\n",
" <td>DEN</td>\n",
" <td>LAL</td>\n",
" <td>DEN</td>\n",
" <td>-8</td>\n",
" <td>u212-110</td>\n",
" <td>o212-110</td>\n",
" <td>2016-03-02 14:52:26.784419</td>\n",
" </tr>\n",
" <tr>\n",
" <th>10</th>\n",
" <td>LAC</td>\n",
" <td>OKC</td>\n",
" <td>LAC</td>\n",
" <td>-1.5</td>\n",
" <td>u217.5-110</td>\n",
" <td>o217.5-110</td>\n",
" <td>2016-03-02 14:52:26.784419</td>\n",
" </tr>\n",
" </tbody>\n",
"</table>\n",
"</div>"
],
"text/plain": [
" home away projwinner spread homeou awayou \\\n",
"0 ORL CHI ORL -4.5 u214.5-110 o214.5-110 \n",
"1 PHI CHA CHA -9 u207.5-110 o207.5-110 \n",
"2 BOS POR BOS -6 u218-110 o218-110 \n",
"3 TOR UTA TOR -5 u193.5-110 o193.5-110 \n",
"4 MEM SAC MEM -3 u214-110 o214-110 \n",
"5 HOU NO HOU -6 u220.5-110 o220.5-110 \n",
"6 MIN WAS WAS -2.5 u219.5-110 o219.5-110 \n",
"7 MIL IND IND -2 u205.5-110 o205.5-110 \n",
"8 SA DET SA -11 u201.5-110 o201.5-110 \n",
"9 DEN LAL DEN -8 u212-110 o212-110 \n",
"10 LAC OKC LAC -1.5 u217.5-110 o217.5-110 \n",
"\n",
" dateof \n",
"0 2016-03-02 14:52:26.784419 \n",
"1 2016-03-02 14:52:26.784419 \n",
"2 2016-03-02 14:52:26.784419 \n",
"3 2016-03-02 14:52:26.784419 \n",
"4 2016-03-02 14:52:26.784419 \n",
"5 2016-03-02 14:52:26.784419 \n",
"6 2016-03-02 14:52:26.784419 \n",
"7 2016-03-02 14:52:26.784419 \n",
"8 2016-03-02 14:52:26.784419 \n",
"9 2016-03-02 14:52:26.784419 \n",
"10 2016-03-02 14:52:26.784419 "
]
},
"execution_count": 417,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"oddsdf"
]
},
{
"cell_type": "code",
"execution_count": 167,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/plain": [
"'10:09AM'"
]
},
"execution_count": 167,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"today.strftime('%b %d %Y')\n",
"today.strftime('%I:%M%p')"
]
},
{
"cell_type": "code",
"execution_count": 104,
"metadata": {
"collapsed": true
},
"outputs": [],
"source": [
"def convertcode(nbacode=False, gamblercode=False):\n",
" cbscodes = ['ATL', 'BOS', 'CHA', 'CHI', 'CLE', 'DAL', 'DEN', 'DET', 'GS', 'HOU', 'IND', 'LAC', 'LAL', 'MEM', 'MIA', 'MIL', 'MIN', 'NY', 'OKC', 'ORL', 'PHI', 'PHO', 'POR', 'SA', 'SAC', 'TOR', 'UTA', 'WAS', 'BKN', 'NO']\n",
" nbacodes = ['ATL', 'BOS', 'CHA', 'CHI', 'CLE', 'DAL', 'DEN', 'DET', 'GSW','HOU', 'IND', 'LAC', 'LAL', 'MEM', 'MIA', 'MIL', 'MIN', 'NYK','OKC', 'ORL', 'PHI', 'PHX', 'POR', 'SAS','SAC', 'TOR', 'UTA', 'WAS', 'BKN', 'NOP']\n",
" gamblercodes = ['ATLANTA', 'BOSTON', 'CHARLOTTE', 'CHICAGO', 'CLEVELAND', 'DALLAS', 'DENVER', 'DETROIT', 'GOLDEN STATE', 'HOUSTON', 'INDIANA', 'LA CLIPPERS', 'LA LAKERS', 'MEMPHIS', 'MIAMI', 'MILWAUKEE',\n",
" 'MINNESOTA', 'NEW YORK', 'OKLAHOMA CITY', 'ORLANDO', 'PHILADELPHIA', 'PHOENIX', 'PORTLAND', 'SAN ANTONIO', 'SACRAMENTO', 'TORONTO', 'UTAH', 'WASHINGTON', 'BROOKLYN', 'NEW ORLEANS']\n",
" if nbacode:\n",
" for n,code in enumerate(nbacodes):\n",
" if code == nbacode:\n",
" ncode = cbscodes[n]\n",
" elif gamblercode:\n",
" for n, code in enumerate(gamblercodes):\n",
" if code == gamblercode:\n",
" ncode = cbscodes[n]\n",
" return ncode"
]
},
{
"cell_type": "code",
"execution_count": 101,
"metadata": {
"collapsed": false,
"scrolled": true
},
"outputs": [
{
"data": {
"text/plain": [
"'GS'"
]
},
"execution_count": 101,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"convertcode(gamblercode='GOLDEN STATE')"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {
"collapsed": true
},
"outputs": [],
"source": []
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {
"collapsed": true
},
"outputs": [],
"source": []
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {
"collapsed": true
},
"outputs": [],
"source": []
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {
"collapsed": true
},
"outputs": [],
"source": []
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {
"collapsed": true
},
"outputs": [],
"source": []
}
],
"metadata": {
"kernelspec": {
"display_name": "Python 2",
"language": "python",
"name": "python2"
},
"language_info": {
"codemirror_mode": {
"name": "ipython",
"version": 2
},
"file_extension": ".py",
"mimetype": "text/x-python",
"name": "python",
"nbconvert_exporter": "python",
"pygments_lexer": "ipython2",
"version": "2.7.10"
},
"widgets": {
"state": {},
"version": "1.1.2"
}
},
"nbformat": 4,
"nbformat_minor": 0
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment