Created
July 21, 2016 23:25
-
-
Save tmthyjames/8845394b920c58b0b0dbf18a992e5152 to your computer and use it in GitHub Desktop.
Point Spread Predictions for NBA/NCAA
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
{ | |
"cells": [ | |
{ | |
"cell_type": "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://[email protected]:5432/nba')\n", | |
"# engine = create_engine('postgres://[email protected]: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