{ "cells": [ { "cell_type": "markdown", "metadata": { "deletable": true, "editable": true }, "source": [ "I love college basketball. A lot. My beloved Marquette Golden Eagles Warriors are probably the only sports team that can really put me in agony.\n", "\n", "Last season, I was watching a [nail-biter against Notre Dame](http://scores.espn.go.com/ncb/recap?gameId=330730269). With 3:36 left, Notre Dame's Jack Cooley grabbed an offensive board and promptly passed out to Pat Connaughton for a successful three-pointer. It was a dagger.\n", "\n", "One thing stuck out to me though - after the shot, [Jay Bilas](http://en.wikipedia.org/wiki/Jay_Bilas), who was calling the game with [Bill Raftery](http://en.wikipedia.org/wiki/Bill_Raftery) and [Sean McDonough](http://en.wikipedia.org/wiki/Sean_McDonough), stated that the best time to attempt a 3-pointer is after an offensive rebound.\n", "\n", "Intuitively, this statement makes sense - the defensive front line is crashing the boards in hopes of getting a rebound to end the offensive possession, while the defensive backcourt is out on the wings looking for an outlet pass from their teammates, likely leaving their offensive counterparts unguarded.\n", "\n", "I've never seen any data that indicates whether three pointers are more successful after an offensive rebound though, much less whether it's the best time to shoot one. It seemed like something worth investigating.\n", "\n", "In the following analysis, we'll try to determine whether there is a material difference between \"normal\" 3P% (those not shot after an offensive rebound) and 3P% when the shot was preceded by an offensive rebound.\n", "\n", "I'll be going step by step through data collection, munging, and analysis. If you're just interested in the answer, skip to the last section." ] }, { "cell_type": "markdown", "metadata": { "deletable": true, "editable": true }, "source": [ "### Getting the data\n", "\n", "ESPN has [play-by-play data](http://scores.espn.go.com/ncb/playbyplay?gameId=330620221) for almost every NCAA Division I game. I've written a python script that will collect all of this data for a given date range. You can find the script [here](https://gist.github.com/gjreda/7175267). If you're unfamiliar with web scraping, [check out the tutorial](http://www.gregreda.com/2013/03/03/web-scraping-101-with-python/) I wrote previously." ] }, { "cell_type": "markdown", "metadata": { "deletable": true, "editable": true }, "source": [ "### Analysis\n", "\n", "Here's an example of what the game files look like:" ] }, { "cell_type": "code", "execution_count": 1, "metadata": { "collapsed": false, "deletable": true, "editable": true }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "/Users/greda/Dropbox/gregreda.com/_code/cbb-play-data\n" ] } ], "source": [ "%cd ../../_code/cbb-play-data/" ] }, { "cell_type": "code", "execution_count": 2, "metadata": { "collapsed": false, "deletable": true, "editable": true }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "time|away|score|home\r", "\r\n", "19:39|Brandon Taylor missed Jumper.|0-0|\r", "\r\n", "19:39||0-0|Josh Huestis Defensive Rebound.\r", "\r\n", "19:28||0-3|Aaron Bright made Three Point Jumper.\r", "\r\n", "19:08|Jordan Loveridge missed Layup.|0-3|\r", "\r\n" ] } ], "source": [ "!head -n 5 330620024.psv" ] }, { "cell_type": "markdown", "metadata": { "deletable": true, "editable": true }, "source": [ "In the output above, we see what a line referring to a three pointer looks like. Let's see what an offensive rebound line looks like:" ] }, { "cell_type": "code", "execution_count": 3, "metadata": { "collapsed": false, "deletable": true, "editable": true }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "12:50|Jason Washburn Offensive Rebound.|6-13|\r", "\r\n", "7:34||13-25|Dwight Powell Offensive Rebound.\r", "\r\n", "6:52||15-28|Gabriel Harris Offensive Rebound.\r", "\r\n", "5:56||17-30|Gabriel Harris Offensive Rebound.\r", "\r\n", "4:19|Utah Offensive Rebound.|19-33|\r", "\r\n" ] } ], "source": [ "!grep Offensive 330620024.psv | head -n 5" ] }, { "cell_type": "markdown", "metadata": { "deletable": true, "editable": true }, "source": [ "Now let's start our analysis using [pandas](http://pandas.pydata.org/)." ] }, { "cell_type": "code", "execution_count": 4, "metadata": { "collapsed": false, "deletable": true, "editable": true }, "outputs": [], "source": [ "import pandas as pd\n", "import numpy as np\n", "import matplotlib.pyplot as plt\n", "import glob\n", "import re" ] }, { "cell_type": "code", "execution_count": 5, "metadata": { "collapsed": false, "deletable": true, "editable": true }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Read 2931 games\n" ] } ], "source": [ "# read PSVs into DataFrame\n", "games = []\n", "files = glob.glob('*.psv')\n", "for f in files:\n", " df = pd.read_csv(f, sep='|')\n", " df['game_id'] = f.replace('.psv', '')\n", " games.append(df)\n", "\n", "print 'Read {0} games'.format(len(games))" ] }, { "cell_type": "markdown", "metadata": { "deletable": true, "editable": true }, "source": [ "To start, we need to find all incidents of a three pointer immediately after an offensive rebound.\n", "\n", "This format is kind of crappy though - since events are in separate columns for the home and away teams, we'd have to write logic to check against each column. Let's munge our data into a slightly different format - one column for `team`, which will indicate home/away, and another for `event`, which will store the description of what occurred." ] }, { "cell_type": "code", "execution_count": 6, "metadata": { "collapsed": false, "deletable": true, "editable": true }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ " event_id game_id time score team event\n", "917522 10 330010066 19:11 0-0 home Melvin Ejim missed Free Throw.\n", "11 11 330010066 19:11 0-0 away Jeremiah Kreisberg Defensive Rebound.\n", "12 12 330010066 18:37 0-0 away Justin Sears missed Jumper.\n", "917525 13 330010066 18:37 0-0 home Percy Gibson Defensive Rebound.\n", "917526 14 330010066 18:31 0-0 home Chris Babb missed Three Point Jumper.\n" ] } ], "source": [ "games_df = pd.concat(games)\n", "\n", "# add event_id to maintain event order\n", "# we can use the index since pandas defaults to the Nth row of the file\n", "games_df['event_id'] = games_df.index\n", "\n", "# melt data into one column for home/away and another for event\n", "# maintain play order by sorting on event_id\n", "melted = pd.melt(games_df, id_vars=['event_id', 'game_id', 'time', 'score'],\n", " var_name='team', value_name='event')\n", "melted.sort_index(by=['game_id', 'event_id'], inplace=True)\n", "\n", "# drop rows with NaN events - an event only belongs to one team\n", "melted = melted[melted.event.notnull()]\n", "print melted[10:15]" ] }, { "cell_type": "markdown", "metadata": { "deletable": true, "editable": true }, "source": [ "We need to know whether the three pointers were missed or made - let's write a function called `get_shot_result` to extract the shot result from the `event` column. We can apply it to every row that contains a three pointer, storing the results in a new column called `shot_result`." ] }, { "cell_type": "code", "execution_count": 7, "metadata": { "collapsed": false, "deletable": true, "editable": true }, "outputs": [], "source": [ "# label whether three pointers were made or missed\n", "get_shot_result = lambda x: re.findall('(made|missed)', x)[0]\n", "shot3 = melted.event.str.contains('Three Point')\n", "melted['shot_result'] = melted[shot3].event.apply(get_shot_result)" ] }, { "cell_type": "markdown", "metadata": { "deletable": true, "editable": true }, "source": [ "Now let's write a function to label the events that meet our criteria - a three point attempt that was preceded by an offensive rebound. We can use `shift(1)` to reference the event on the previous row." ] }, { "cell_type": "code", "execution_count": 8, "metadata": { "collapsed": false, "deletable": true, "editable": true }, "outputs": [ { "data": { "text/html": [ "
\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
event_idgame_idtimescoreteameventshot_resultafter_oreb
2 2 330010066 19:31 0-0 away Austin Morgan missed Three Point Jumper. missed False
917518 6 330010066 19:14 0-0 home Will Clyburn missed Three Point Jumper. missed True
917526 14 330010066 18:31 0-0 home Chris Babb missed Three Point Jumper. missed False
\n", "
" ], "text/plain": [ " event_id game_id time score team \\\n", "2 2 330010066 19:31 0-0 away \n", "917518 6 330010066 19:14 0-0 home \n", "917526 14 330010066 18:31 0-0 home \n", "\n", " event shot_result after_oreb \n", "2 Austin Morgan missed Three Point Jumper. missed False \n", "917518 Will Clyburn missed Three Point Jumper. missed True \n", "917526 Chris Babb missed Three Point Jumper. missed False " ] }, "execution_count": 8, "metadata": {}, "output_type": "execute_result" } ], "source": [ "def criteria(df):\n", " \"\"\"Labels if the three pointer was preceded by an offensive rebound.\"\"\"\n", " df['after_oreb'] = ((df.event.str.contains('Three Point')) & \\\n", " df.event.shift(1).str.contains('Offensive Rebound'))\n", " df.after_oreb.fillna(False, inplace=True)\n", " return df\n", "\n", "melted = melted.groupby('game_id').apply(criteria)\n", "melted[melted.shot_result.notnull()].head(3)" ] }, { "cell_type": "markdown", "metadata": { "deletable": true, "editable": true }, "source": [ "Finally, we can calculate the 3P% for our groups and plot the results." ] }, { "cell_type": "code", "execution_count": 9, "metadata": { "collapsed": false, "deletable": true, "editable": true }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "shot_result made missed perc\n", "after_oreb \n", "False 33244 63608 0.343245\n", "True 2861 5341 0.348817\n" ] } ], "source": [ "threes = melted[melted.shot_result.notnull()]\n", "attempts = threes.groupby(['shot_result', 'after_oreb']).size().unstack(0)\n", "attempts['perc'] = attempts.made.astype(float) / (attempts.made + attempts.missed)\n", "print attempts" ] }, { "cell_type": "code", "execution_count": 10, "metadata": { "collapsed": false, "deletable": true, "editable": true }, "outputs": [ { "data": { "image/png": "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\n505dc801kqRNmza1ekPj/v37L+mPJgJn4swdOMOqVasUGhqq7du3a8uWLdqyZYu2b9+utLS0s569\nDxo0qEU8cnJy9NJLL2nVqlU6duyYjh07pjVr1gTOis9l6NChmjVrlv7xH/9RGzZsUHNzs/7yl79o\n+vTpcrvdrd6pfzZ33nmnPvzwQxUXF+v//u//9NVXX2ndunUtzljPPMv8xrvvvquPPvpIzc3NCgkJ\nUUhIiD7//PM2933z1PzpT8lfjMdh/vz5Wr58uerr68/5tSzL0qpVq+T3+3Xo0CH9/ve/D/zs/x13\n3KH/+Z//0ZYtW3TixAm98MILSk1N1dVXX60BAwbI4XCooKBAhw4d0lNPPaUjR450aL4hQ4Zo9OjR\n+vWvf62TJ0+qsrIy8LLG6fbs2SOXy9WhrwlcDMQdOENxcbE8Ho+cTqcGDhyogQMHatCgQXrwwQe1\nYsUKNTc3t9rz+OOP61//9V8VGRmpl19+WTfccINWrFihJ598Ug6HQ9dee62Ki4vP6+ew8/LyNHv2\nbP3kJz9R//79lZ2dralTp2r58uWBNW39bPfpx06nU2+++aaKiop0zTXX6Oqrr9YzzzzTIsynrz/9\n6+3fv1+33nqrIiMjNXXqVM2YMaPFz7afvm/UqFEKDw/X3r17NWnSpMD1Z3sczubM7+UHP/iBxo8f\nr2efffacj6nNZtMDDzygadOm6dprr9Xw4cM1f/58SdKECRP01FNPafr06YqOjtbu3btbvE+gsLBQ\nxcXF+sEPfqBTp07pxhtv7PBjvGLFCm3atEmDBw/Ws88+q3/+539u9X3FxsZ2+PV94GLgV74CAGAY\nztwBADAMcQcAwDDEHQAAwxB3AAAMQ9wBADAMcQcAwDDEHQAAwxB3AAAM8/8BZpoGbGhBEoMAAAAA\nSUVORK5CYII=\n", "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "attempts.index = ['No', 'Yes']\n", "plt.figure(figsize=[8, 6])\n", "attempts.perc.plot(kind='bar')\n", "plt.ylabel('3P%')\n", "plt.xlabel('After Offensive Rebound?')\n", "plt.grid(False);" ] }, { "cell_type": "markdown", "metadata": { "deletable": true, "editable": true }, "source": [ "### Digging deeper\n", "\n", "At the most basic level, the difference is negligible. Not all post-offensive rebound three pointers are created equally though. Let's investigate further to see whether three pointers shot shortly after the rebound are more successful. Let's look at only three pointers that were shot within seven seconds of the offensive rebound.\n", "\n", "To do so, we'll need to munge our data a bit more in order to calculate the seconds elapsed between rebound and shot attempt." ] }, { "cell_type": "code", "execution_count": 11, "metadata": { "collapsed": false, "deletable": true, "editable": true }, "outputs": [], "source": [ "melted['minutes'] = melted.time.apply(lambda x: int(x.split(':')[0]))\n", "melted['seconds'] = melted.time.apply(lambda x: int(x.split(':')[1]))" ] }, { "cell_type": "markdown", "metadata": { "deletable": true, "editable": true }, "source": [ "Notice below that time-outs and end of periods are duplicated within the data (this is because they originally appeared as both a home and away event)." ] }, { "cell_type": "code", "execution_count": 12, "metadata": { "collapsed": false, "deletable": true, "editable": true }, "outputs": [ { "data": { "text/html": [ "
\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
event_idgame_idtimescoreteameventshot_resultafter_orebminutesseconds
917546 34 330010066 15:22 Official TV Timeout. home Official TV Timeout. NaN False 15 22
917559 47 330010066 13:40 Yale Full Timeout. home Yale Full Timeout. NaN False 13 40
917575 63 330010066 11:53 Official TV Timeout. home Official TV Timeout. NaN False 11 53
\n", "
" ], "text/plain": [ " event_id game_id time score team \\\n", "917546 34 330010066 15:22 Official TV Timeout. home \n", "917559 47 330010066 13:40 Yale Full Timeout. home \n", "917575 63 330010066 11:53 Official TV Timeout. home \n", "\n", " event shot_result after_oreb minutes seconds \n", "917546 Official TV Timeout. NaN False 15 22 \n", "917559 Yale Full Timeout. NaN False 13 40 \n", "917575 Official TV Timeout. NaN False 11 53 " ] }, "execution_count": 12, "metadata": {}, "output_type": "execute_result" } ], "source": [ "duped_cols = ['game_id', 'event_id', 'time', 'event']\n", "melted[melted.duplicated(cols=duped_cols)][:3]" ] }, { "cell_type": "markdown", "metadata": { "deletable": true, "editable": true }, "source": [ "Let's get rid of them so we can easily label events within each period (keeping them in will throw our function off a bit)." ] }, { "cell_type": "code", "execution_count": 13, "metadata": { "collapsed": false, "deletable": true, "editable": true }, "outputs": [], "source": [ "melted.drop_duplicates(cols=['game_id', 'event_id', 'event'], inplace=True)" ] }, { "cell_type": "markdown", "metadata": { "deletable": true, "editable": true }, "source": [ "Now we can label each period based on when the `End of ...` event appears - events before it are the first half; events after, the second half. To do so, we can use `cumsum`, which will treat `True` values as 1. This means we can just shift our results down a row and take the running total." ] }, { "cell_type": "code", "execution_count": 14, "metadata": { "collapsed": false, "deletable": true, "editable": true }, "outputs": [ { "data": { "text/html": [ "
\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
event_idgame_idtimescoreteameventshot_resultafter_orebminutessecondsperiod_end
171 171 330010066 0:00 End of the 1st Half. away End of the 1st Half. NaN False 0 0 True
480 123 330010120 0:00 End of the 1st Half. away End of the 1st Half. NaN False 0 0 True
770 142 330010228 0:00 End of the 1st Half. away End of the 1st Half. NaN False 0 0 True
\n", "
" ], "text/plain": [ " event_id game_id time score team \\\n", "171 171 330010066 0:00 End of the 1st Half. away \n", "480 123 330010120 0:00 End of the 1st Half. away \n", "770 142 330010228 0:00 End of the 1st Half. away \n", "\n", " event shot_result after_oreb minutes seconds period_end \n", "171 End of the 1st Half. NaN False 0 0 True \n", "480 End of the 1st Half. NaN False 0 0 True \n", "770 End of the 1st Half. NaN False 0 0 True " ] }, "execution_count": 14, "metadata": {}, "output_type": "execute_result" } ], "source": [ "melted['period_end'] = melted.event.apply(lambda x: x.startswith('End of'))\n", "melted[melted.period_end].head(3)" ] }, { "cell_type": "code", "execution_count": 15, "metadata": { "collapsed": false, "deletable": true, "editable": true }, "outputs": [], "source": [ "calculate_period = lambda x: x.shift(1).cumsum().fillna(0) + 1\n", "melted['period'] = melted.groupby('game_id').period_end.apply(calculate_period)" ] }, { "cell_type": "markdown", "metadata": { "deletable": true, "editable": true }, "source": [ "Now we can use the period to calculate the total time left in the game." ] }, { "cell_type": "code", "execution_count": 16, "metadata": { "collapsed": false, "deletable": true, "editable": true }, "outputs": [], "source": [ "melted.set_index('game_id', inplace=True)\n", "\n", "# 40min regulation game + (# periods - 2 halves) * 5min OTs\n", "gametime = lambda x: 40 + (x - 2) * 5\n", "melted['gametime'] = melted.groupby(level=0).period.max().apply(gametime)\n", "melted.reset_index('game_id', inplace=True)" ] }, { "cell_type": "markdown", "metadata": { "deletable": true, "editable": true }, "source": [ "Setting the `game_id` as the index was necessary for this function since pandas naturally tries to match on indexes. If we were to try ...\n", "```\n", " melted['gametime'] = melted.groupby('game_id').period.max().apply(gametime)\n", "```\n", "It would not have worked because the Series object returned by our `groupby` operation uses the `game_id` as its index, while our DataFrame did not. pandas would have been unable to match the two and create the new `gametime` column." ] }, { "cell_type": "code", "execution_count": 17, "metadata": { "collapsed": false, "deletable": true, "editable": true }, "outputs": [ { "data": { "text/plain": [ "gametime\n", "35 54\n", "40 2365\n", "45 442\n", "50 61\n", "55 7\n", "60 1\n", "65 1\n", "dtype: int64" ] }, "execution_count": 17, "metadata": {}, "output_type": "execute_result" } ], "source": [ "melted.groupby('gametime').game_id.nunique()" ] }, { "cell_type": "markdown", "metadata": { "deletable": true, "editable": true }, "source": [ "Notice above that some games have a total gametime of 35 minutes. All college basketball games are at least 40 minutes, so something is off.\n", "\n", "It turns out there are some inconsistencies in ESPN's play-by-play data - a couple games do not have the `End of the 1st Half.` event - [here's an example](http://scores.espn.go.com/ncb/playbyplay?gameId=330752617). This throws off our `period` and `gametime` calculations. Such is life when dealing with scraped data though.\n", "\n", "Let's keep things simple and just assume they were normal, non-OT games." ] }, { "cell_type": "code", "execution_count": 18, "metadata": { "collapsed": false, "deletable": true, "editable": true }, "outputs": [], "source": [ "melted.loc[melted.gametime == 35, 'gametime'] = 40" ] }, { "cell_type": "markdown", "metadata": { "deletable": true, "editable": true }, "source": [ "Now let's normalize the event times to seconds left in the game. This will allow us to see how much time elapsed between the offensive rebound and three point attempt." ] }, { "cell_type": "code", "execution_count": 19, "metadata": { "collapsed": false, "deletable": true, "editable": true }, "outputs": [], "source": [ "def clock_to_secs_left(df):\n", " \"\"\"Calculates the total seconds left in the game.\"\"\"\n", " df['secs_left'] = np.nan\n", " df.loc[df.period == 1, 'secs_left'] = (df.minutes * 60) + 1200 + df.seconds\n", " df.loc[df.period > 1, 'secs_left'] = (df.minutes * 60) + df.seconds\n", " return df" ] }, { "cell_type": "code", "execution_count": 20, "metadata": { "collapsed": false, "deletable": true, "editable": true }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ " game_id time event period secs_left\n", "0 330010066 19:47 Chris Babb Turnover. 1 2387\n", "1 330010066 19:45 Austin Morgan Steal. 1 2385\n", "2 330010066 19:31 Austin Morgan missed Three Point Jumper. 1 2371\n", "3 330010066 19:31 Korie Lucious Defensive Rebound. 1 2371\n", "4 330010066 19:21 Korie Lucious missed Jumper. 1 2361\n" ] } ], "source": [ "clock_to_secs_left(melted)\n", "print melted[['game_id', 'time', 'event', 'period', 'secs_left']][:5]" ] }, { "cell_type": "markdown", "metadata": { "deletable": true, "editable": true }, "source": [ "We can finally see how much time elapsed between offensive rebound and three point attempt.\n", "\n", "We'll create a new field which will store the seconds elapsed since the previous event. Then we'll create a new DataFrame called `threes_after_orebs` which will hold three point attempts that were shot within seven seconds of an offensive rebound." ] }, { "cell_type": "code", "execution_count": 21, "metadata": { "collapsed": false, "deletable": true, "editable": true }, "outputs": [], "source": [ "melted['secs_elapsed'] = melted.secs_left.shift(1) - melted.secs_left\n", "\n", "mask = (melted.secs_elapsed >= 0) & (melted.secs_elapsed <= 7)\n", "threes_after_orebs = melted[melted.after_oreb & mask]" ] }, { "cell_type": "markdown", "metadata": { "deletable": true, "editable": true }, "source": [ "Finally, let's group our data by the seconds elapsed and shot result to get the three point percentage for each bucket, which we can plot." ] }, { "cell_type": "code", "execution_count": 22, "metadata": { "collapsed": false, "deletable": true, "editable": true }, "outputs": [], "source": [ "grouped = threes_after_orebs.groupby(['shot_result', 'secs_elapsed']).size()\n", "grouped = grouped.unstack(0).fillna(0)" ] }, { "cell_type": "code", "execution_count": 23, "metadata": { "collapsed": false, "deletable": true, "editable": true }, "outputs": [], "source": [ "grouped['attempts'] = grouped.made + grouped.missed\n", "grouped['percentage'] = grouped.made / grouped.attempts.astype(float)" ] }, { "cell_type": "code", "execution_count": 24, "metadata": { "collapsed": false, "deletable": true, "editable": true }, "outputs": [], "source": [ "t = threes.shot_result.value_counts()\n", "t = float(t['made']) / (t['made'] + t['missed'])" ] }, { "cell_type": "code", "execution_count": 25, "metadata": { "collapsed": false, "deletable": true, "editable": true }, "outputs": [ { "data": { "image/png": "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\nQmCC\n", "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "figsize(12.5, 7)\n", "\n", "plt.plot(grouped.percentage, label='O-Reb 3P%', color='#377EB8')\n", "plt.hlines(t, 0, 7, label='\"Normal\" 3P%', linestyles='--')\n", "plt.xlabel('Seconds Since Offensive Rebound')\n", "plt.xticks(np.arange(8))\n", "plt.ylabel('3-Point Percentage', labelpad=15)\n", "plt.grid(False)\n", "plt.legend(loc='lower right');" ] }, { "cell_type": "markdown", "metadata": { "deletable": true, "editable": true }, "source": [ "It looks like there *might* be some truth to Jay Bilas' statement that the best time to shoot a three pointer is after an offensive rebound. However, we can go one step further and simulate our way to a numeric value of how \"correct\" he was." ] }, { "cell_type": "markdown", "metadata": { "deletable": true, "editable": true }, "source": [ "### Simulations\n", "\n", "To start, we'll create two Series based on the `melted` DataFrame that we have been using throughout the analysis. One Series, which we'll call `normal`, will hold the results of three pointers that were normally attempted - that is, they were not shot immediately after an offensive rebound. The other Series, `after`, will contain the results of those shot after an offensive rebound.\n", "\n", "`True` will be used to indicate a made basket." ] }, { "cell_type": "code", "execution_count": 26, "metadata": { "collapsed": false, "deletable": true, "editable": true }, "outputs": [], "source": [ "convert = lambda x: True if x == 'made' else False\n", "\n", "normal_criteria = (melted.after_oreb == False) & melted.shot_result.notnull()\n", "normal = melted[normal_criteria].shot_result.apply(convert)\n", "\n", "after_criteria = (melted.after_oreb) & melted.shot_result.notnull() & \\\n", " (melted.secs_elapsed <= 7)\n", "after = melted[after_criteria].shot_result.apply(convert)" ] }, { "cell_type": "code", "execution_count": 27, "metadata": { "collapsed": false, "deletable": true, "editable": true }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "After O-Reb 3P%: 0.350169109357\n", "Sample Size: 4435\n", "\n", "\n", "All other 3P%: 0.343264007931\n", "Sample Size: 96838\n", "\n", "\n", "Absolute difference: 0.0069\n" ] } ], "source": [ "print \"After O-Reb 3P%:\", after.mean()\n", "print \"Sample Size:\", len(after)\n", "print \"\\n\"\n", "print \"All other 3P%:\", normal.mean()\n", "print \"Sample Size:\", len(normal)\n", "print \"\\n\"\n", "print \"Absolute difference: %.4f\" % (after.mean() - normal.mean())" ] }, { "cell_type": "markdown", "metadata": { "deletable": true, "editable": true }, "source": [ "While we have data for 2,932 games, it turns out that three pointers shot within seven seconds of an offensive rebound aren't very common - it only occurred 4,435 times, while \"normal\" three pointers were shot 96,838 times.\n", "\n", "The much smaller population means that we're more uncertain about the \"true\" success rate of those after offensive rebounds.\n", "\n", "Using [pymc](http://pymc-devs.github.io/pymc/), we can run a simulations to determine how likely it is that three pointers after offensive rebounds really *are* easier, while taking into account this uncertainty.\n", "\n", "We'll first assume a uniform distribution between 30% and 40% for both \"normal\" three pointers and those after offensive rebounds. This means that we believe the \"true\" success rate of each to be somewhere between 30-40%. This seems reasonable given that the 3P% for all of NCAA Division I basketball during the 2012-2013 season was 33.89% \\[[source](http://statsheet.com/mcb/beyondthearc)].\n", "\n", "We then generate observations using our `normal` and `after` Series. Our observations are an example of a Bernoulli distribution, meaning that the outcome is binary - the three pointer was either made (True) or missed (False).\n", "\n", "We'll then run 20,000 simulations using our existing data and assumptions." ] }, { "cell_type": "code", "execution_count": 28, "metadata": { "collapsed": false, "deletable": true, "editable": true }, "outputs": [], "source": [ "import pymc as pm\n", "\n", "# no chance 3P% is out of this range\n", "p_normal = pm.Uniform(\"p_normal\", 0.3, 0.4)\n", "p_after = pm.Uniform(\"p_after\", 0.3, 0.4)\n", "\n", "@pm.deterministic\n", "def delta(p_normal=p_normal, p_after=p_after):\n", " return p_after - p_normal\n", "\n", "# scraped observations\n", "obs_normal = pm.Bernoulli(\"obs_normal\", p_normal, value=normal, observed=True)\n", "obs_after = pm.Bernoulli(\"obs_after\", p_after, value=after, observed=True)" ] }, { "cell_type": "code", "execution_count": 29, "metadata": { "collapsed": false, "deletable": true, "editable": true }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ " [-----------------100%-----------------] 20000 of 20000 complete in 35.4 sec" ] } ], "source": [ "m = pm.MCMC([p_normal, p_after, delta, obs_normal, obs_after])\n", "m.sample(20000)" ] }, { "cell_type": "code", "execution_count": 30, "metadata": { "collapsed": false, "deletable": true, "editable": true }, "outputs": [], "source": [ "p_normal_samples = m.trace(\"p_normal\")[:]\n", "p_after_samples = m.trace(\"p_after\")[:]\n", "delta_samples = m.trace(\"delta\")[:]" ] }, { "cell_type": "markdown", "metadata": { "deletable": true, "editable": true }, "source": [ "Finally, we can plot the results of our simulations." ] }, { "cell_type": "code", "execution_count": 31, "metadata": { "collapsed": false, "deletable": true, "editable": true }, "outputs": [ { "data": { "image/png": "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\niFqJegt0Q0NDxMXF4cKFC9i2bRtiYmJw6dIlLFmyBAMHDsS5c+fQv39/fPjhhwCAixcvYv369cjI\nyMCOHTsQFhYGBWediIiIiIgard4C3dLSEu7u7gCALl26wNvbG/n5+di9ezdCQ0MBAKGhodi1axcA\nICUlBcHBwTA0NIRMJoODgwPS0tI0fAlERERERC1Ho9egX7lyBRcuXED//v1RXFws3oghlUpRXFwM\nACgoKIC1tbXYx9raGvn5+WoOmYioGRkYajsCIiJqZRq1i0tZWRmCgoIQFxcHMzOzWu9JJBJI6nkE\ndn3vERHpEvmpU3iQkFirrebXX7UUDRERtVYNFugPHjxAYGAgpk+fjokTJwJ4OGteVFQES0tLFBYW\nintBWllZITc3V+ybl5cHKysrpePGxsaK3/v6+sLX11elCyEiUpVwqxSK1OO12tpUlKOznh5MOdlA\nRESPSU1NrbUpyqhRo9Qybr0FuiAImDlzJpydnTF37lyx3c/PD4mJiZg/fz4SExPh7+8vtk+bNg3R\n0dHIz89HdnY2+vXrp3TsmJgYtVwAEZEmTTYxxWQTU22HQUREOujxSebMzEy1jFtvgX78+HFs2rQJ\nrq6u8PDwAAAsW7YMCxcuREhICFxdXWFvb4+NGzcCAJycnBAeHg4vLy8YGBggISGBS1yIiIiIiJ5C\nvQW6r6/vE7dJfLRzy+OioqIQFRWlemRERERERK0QnyRKRERERKRDGrWLCxFRSyIoFBAuZwNyea12\nRX6eliIiIiL6HxboRNT6CALu/3spFFlZDR5aKQioUChgJJHATI9/dCQiIs3jTxsionrsqCiHW3Eh\nFt+9o+1QiIiolWCBTkRERESkQ1igExERERHpEBboREREREQ6hAU6EREREZEOYYFORFQPI4kEnfX0\nYMqnIhMRUTPhNotERPWYbGKKySam2g6DiIhaEc6gExERERHpEBboREREREQ6hAU6EREREZEOYYFO\nRERERKRDeJMoEVE9KgUBFQoFjCQSmOlxToOIiDSPP22IiOqxo6IcbsWFWHz3jrZDISKiVoIFOhER\nERGRDmGBTkRERESkQxos0CMiIiCVStGnTx+xbdGiRbC2toaHhwc8PDywf/9+8b34+Hi4urrC09MT\nqampmomaiIiIiKiFarBADw8Px4EDB2q1SSQSREdHIysrC1lZWRg7diwA4OLFi1i/fj0yMjKwY8cO\n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\nsEaPHq3KykrPhXcjZz8vffr0kfTjXeQtLS3q2bOnZ4K7kbNjUl5errfeeku33367DD9a0efsuEjy\nq/H4iTPjcuzYMb3//vuaM2eOpB/vqRo4cKDnwruRKz4vkrRlyxYNGzas3fNOzlXOjEnv3r1lGIaO\nHTumxsZGnThxwm9+VjszLh988IGSkpI0aNAg9evXTxMnTtSGDRs8mt9dHK1VV61apZtvvllDhgzp\n8rk/57ICvaMHFFVUVJzR7o033lB0dLTmzJmj5557rkvnnoucGRd/5qpxOXDggD777DONGTPGrXk9\nxdlxaWtrU3x8vMxms+69916/+CHq7JgsWLBATz75pAIC/OuZBN0Zl2effdZ23GQyadKkSUpMTPSr\n7znOfF5KS0s1ZMgQzZ49W5dffrnuuOMONTY2eiy7O7nqe+7LL7+s6dOnuzWrpzgzJr1799Zf//pX\nRUdHKzw8XFdddZXfLBVzZlzGjx+vwsJClZaWqqqqSm+99ZbKy8s9lt2dHBmXiooK5eXl6e6775b0\nf88G6k6d67KfWI4+oCgjI0OHDh3SX/7yF6Wnp7vq8j6LcemYK8aloaFB06ZN0/Lly9v9Nn8uc3Zc\nAgICVFJSogMHDujpp5/Wnj173BXVY5wZkzfffFNhYWFKTEz0u9ni7oxLRkaG7fiOHTtUUlKidevW\n6Y9//KPef/99d0X1KGc+Ly0tLdq1a5duuukm7dq1SydPntSrr77qzrge44rvuadOndL//M//6JZb\nbnFHRI9zZkyOHDmiu+++W/v27dOhQ4f04Ycf6p///Kc743qMM+PSt29frVixQnPnztXNN9+scePG\n+c3kiCPjMn/+fOXk5MhkMskwDNvPne48xNNloxYZGamysjLb67KyMlkslrO2v/XWW1VeXq5jx47J\nYrF06dxziTPj4s+cHZfm5mbddNNNmjFjhkseCOArXPV5iY6O1vXXX69t27a5LaundHdM6urq9MEH\nHyg/P18xMTHKzMzUO++8o9tuu80Tsd3O2c9KRESEJGn48OHKyMhQYWGhewN7iLM/i0JDQ3XDDTeo\nd+/eyszM1KZNmzwR2+1c8b1l06ZNSk5ObvdP9+cyZ8aksLBQY8aMUWxsrEJDQ3XLLbdo+/btnojt\nds5+Vm644Qa99dZb2rFjhy644AJdeumlbs/sCY6MS1FRkaZNm6aYmBi9/vrruueee5Sfn9/lMZXk\n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\nlKSLL75YX375pcP/L1yJNegAAOC8EhIS0uHxo0ePOtT+bO26oqSkRIMGDdKbb75pO7Z27VpNnDix\nS/1UVFQoPDz8jOMmk0kPPfSQrrvuOt11113t3tu9e7fKy8t11113KSgoSOPGjZPVatXrr79um2H+\nedsjR47o9ttvV2BgoDIyMvSHP/yh00ynL3/5+evi4mIdOnRIb731lnr37q2wsDBNmTJFGzZs0KRJ\nk2QymXTjjTfqyiuvtF3fXvtbb71VSUlJkqRJkybpk08+kSQVFRXpiy++UF5ennr37i1JuuKKK+z2\n+ZOhQ4e2ewCnJ1GgA4CfqqmpUXl5uUJDQxUVFeXtOAB+5v3331d6eroyMzNtx3JycjRu3Lgu9WOx\nWFRVVaXLLrvsjPeGDx+ua665RitWrNAll1xiO15VVaVhw4apb9++tmMJCQmqqqo6o4+qqipdfPHF\n6tWrl+1YfHz8WdegSzrjGTg/f11WVqbjx49rxIgRtmOtra0aO3as7XVycnKX2v/0wExJMpvNKi0t\nlfTjLy/Dhg074xcsR/r86fyft/EkCnQA8FP5+fl64IEHlJWV5bWdCABf1NUZcFfMmJ+uoKBAd999\nt+11RUWFamtrNWrUKNXX1+vvf/+7evfurfj4eCUkJJy1n0suuaTT7QAXL16sCRMmaO7cubZjERER\n+vrrr3X8+HFbkb5nz552s8c/CQ8P18GDB9XY2GibhS4pKel24RoZGal+/frpiy++OOtSnqCgoC61\n/7mf/+IQGRmpr7/+WkePHm1XpDvaZ2lpqdd2wmINOgAAgAc1NzersLCw3c2dO3fu1OjRoxUUFKRX\nXnlFo0eP1r//+7/r6aef7rSv8ePHd7rjS0xMjDIyMtrt6JKcnKzIyEg988wzam5uVkFBgT755BPd\neOONZ5yfkpKiIUOGaPXq1WpubtbGjRt15MiRTjN1tsRl1KhRuuiii7R06VJ9++23am1t1b59+7Rn\nz54O++pq+9PPHT58uH7/+9/r4MGDampq0kcffeRQnw0NDTp06JBSUlLsXscdKNABAAA8pKSkRH/4\nwx9kMplse5K/+uqreu6559Ta2qqdO3dq//79MpvNCgoK0vfff99pf//+7/+u999/v9N2Dz74oBob\nG21LTXr06KF169bp3Xff1S9+8Qv99re/1XPPPafY2Ngzzg0ODtaLL76oV199VXFxcXr33XeVkZHR\n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\nAElFTkSuQmCC\n", "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "figsize(12.5, 10)\n", "\n", "ax = plt.subplot(311)\n", "plt.xlim(0.3, 0.4)\n", "plt.xticks(np.arange(0.3, 0.401, 0.01))\n", "plt.ylim(0, 300)\n", "plt.hist(p_normal_samples, histtype='stepfilled', bins=50, normed=True, \n", " color='#E41A1C', label='3P% \"Normal\"')\n", "plt.vlines(normal.mean(), 0, 300, linestyles='--', label='True \"Normal\" 3P%')\n", "plt.legend()\n", "plt.grid(False)\n", "\n", "ax = plt.subplot(312)\n", "plt.xlim(0.3, 0.4)\n", "plt.xticks(np.arange(0.3, 0.401, 0.01))\n", "plt.ylim(0, 300)\n", "plt.hist(p_after_samples, histtype='stepfilled', bins=50, normed=True,\n", " color='#4DAF4A', label='3P% After Off. Reb.')\n", "plt.vlines(after.mean(), 0, 300, linestyles='--',\n", " label='True 3P% After Off. Reb.')\n", "plt.legend()\n", "plt.grid(False)\n", "\n", "ax = plt.subplot(313)\n", "plt.xlim(-0.05, 0.05)\n", "plt.xticks(np.arange(-0.05, 0.051, 0.01))\n", "plt.ylim(0, 300)\n", "plt.hist(delta_samples, histtype='stepfilled', bins=50, normed=True,\n", " color='#377EB8', label='Delta')\n", "plt.vlines(0, 0, 300, linestyles='--', label='$H_0$ (No difference)')\n", "plt.legend()\n", "plt.grid(False);" ] }, { "cell_type": "markdown", "metadata": { "deletable": true, "editable": true }, "source": [ "Notice the much narrower distribution at the top? This is because we had so many observations for \"normal\" three pointers. There wasn't much uncertainty! It's quite different than the second distribution, where the wider width of the distribution indicates are greater level of uncertainty on those attempted after offensive rebounds. This is due to the much smaller sample size.\n", "\n", "The final distribution shows the difference between \"normal\" and \"after\" three pointers in our simulations. Much more often than not, \"after\" three pointers had a higher 3P% in the simulations.\n", "\n", "In what percentage of simulations was \"after\" better than \"normal\" though?" ] }, { "cell_type": "code", "execution_count": 32, "metadata": { "collapsed": false, "deletable": true, "editable": true }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "3P% after offensive rebounds was more successful in 83.1% of simulations\n" ] } ], "source": [ "print (\"3P% after offensive rebounds was more successful \"\n", " \"in {0:.1f}% of simulations\").format((delta_samples > 0).mean() * 100)" ] }, { "cell_type": "markdown", "metadata": { "deletable": true, "editable": true }, "source": [ "Looks like Jay Bilas is pretty right about this one. While the absolute difference in 3P% is small, those after an offensive rebound were more successful in about 83% of our simulations." ] } ], "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.11" } }, "nbformat": 4, "nbformat_minor": 0 }