{ "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "Let's find the top individual series by shot attempts." ] }, { "cell_type": "code", "execution_count": 1, "metadata": { "collapsed": true }, "outputs": [], "source": [ "import PbPMethods2 as pm2\n", "import pandas as pd" ] }, { "cell_type": "code", "execution_count": 2, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/html": [ "
\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
PlayerTeamPosGameSeasonDateTOION(60s)CFONCAONTOIOFF(60s)...NZSOZSiGiCFiA1iA2SACFONSACAONSACFOFFSACAOFF
0Patrick O'SullivanL.AF20001200729-Sep-070.110556340.457500...2201003.3243.5548.56022.067
1Tom PreissingL.AD20001200729-Sep-070.154444570.413611...4201005.4306.5096.45419.112
2Lubomir VisnovskyL.AD20001200729-Sep-070.185833290.382222...5300002.0778.3549.80717.267
3Raitis IvanansL.AF20001200729-Sep-070.059722120.508333...2000001.1201.82610.76423.795
4Dustin BrownL.AF20001200729-Sep-070.163889490.404167...3201004.2288.0407.65617.581
\n", "

5 rows × 35 columns

\n", "
" ], "text/plain": [ " Player Team Pos Game Season Date TOION(60s) CFON \\\n", "0 Patrick O'Sullivan L.A F 20001 2007 29-Sep-07 0.110556 3 \n", "1 Tom Preissing L.A D 20001 2007 29-Sep-07 0.154444 5 \n", "2 Lubomir Visnovsky L.A D 20001 2007 29-Sep-07 0.185833 2 \n", "3 Raitis Ivanans L.A F 20001 2007 29-Sep-07 0.059722 1 \n", "4 Dustin Brown L.A F 20001 2007 29-Sep-07 0.163889 4 \n", "\n", " CAON TOIOFF(60s) ... NZS OZS iG iCF iA1 iA2 SACFON SACAON \\\n", "0 4 0.457500 ... 2 2 0 1 0 0 3.324 3.554 \n", "1 7 0.413611 ... 4 2 0 1 0 0 5.430 6.509 \n", "2 9 0.382222 ... 5 3 0 0 0 0 2.077 8.354 \n", "3 2 0.508333 ... 2 0 0 0 0 0 1.120 1.826 \n", "4 9 0.404167 ... 3 2 0 1 0 0 4.228 8.040 \n", "\n", " SACFOFF SACAOFF \n", "0 8.560 22.067 \n", "1 6.454 19.112 \n", "2 9.807 17.267 \n", "3 10.764 23.795 \n", "4 7.656 17.581 \n", "\n", "[5 rows x 35 columns]" ] }, "execution_count": 2, "metadata": {}, "output_type": "execute_result" } ], "source": [ "dfs = []\n", "for season in range(2007, 2017):\n", " dfs.append(pd.read_csv(pm2.get_gamebygame_data_filename(season)))\n", "dfs = pd.concat(dfs)\n", "dfs.head()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Filter for the playoffs and add a variable with the round number" ] }, { "cell_type": "code", "execution_count": 3, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/html": [ "
\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
PlayerTeamGameSeasonTOION(60s)CFONCAONRound
44227Alex KovalevMTL3011120070.20527815121
44228Steve BeginMTL3011120070.134444581
44229Maxim LapierreMTL3011120070.18361112151
44230Mike KomisarekMTL3011120070.21472219131
44231Mark StreitMTL3011120070.20111114151
\n", "
" ], "text/plain": [ " Player Team Game Season TOION(60s) CFON CAON Round\n", "44227 Alex Kovalev MTL 30111 2007 0.205278 15 12 1\n", "44228 Steve Begin MTL 30111 2007 0.134444 5 8 1\n", "44229 Maxim Lapierre MTL 30111 2007 0.183611 12 15 1\n", "44230 Mike Komisarek MTL 30111 2007 0.214722 19 13 1\n", "44231 Mark Streit MTL 30111 2007 0.201111 14 15 1" ] }, "execution_count": 3, "metadata": {}, "output_type": "execute_result" } ], "source": [ "playoffs = dfs.query('Game > 30000')\n", "playoffs = playoffs[['Player', 'Team', 'Game', 'Season', 'TOION(60s)', 'CFON', 'CAON']]\n", "playoffs['Round'] = (playoffs['Game'] - 30000) // 100\n", "playoffs.head()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Group by round to get gp and counts" ] }, { "cell_type": "code", "execution_count": 4, "metadata": { "collapsed": false }, "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", "
PlayerTeamSeasonRoundGP
0Aaron EkbladFLA201516
1Aaron RomeCBJ200811
2Aaron RomeDAL201311
3Aaron RomeVAN200911
4Aaron RomeVAN201012
\n", "
" ], "text/plain": [ " Player Team Season Round GP\n", "0 Aaron Ekblad FLA 2015 1 6\n", "1 Aaron Rome CBJ 2008 1 1\n", "2 Aaron Rome DAL 2013 1 1\n", "3 Aaron Rome VAN 2009 1 1\n", "4 Aaron Rome VAN 2010 1 2" ] }, "execution_count": 4, "metadata": {}, "output_type": "execute_result" } ], "source": [ "player_gp = playoffs.groupby(['Player', 'Team', 'Season', 'Round']).count()\n", "player_gp.reset_index(inplace = True)\n", "player_gp.rename(columns = {'Game': 'GP'}, inplace = True)\n", "player_gp = player_gp[['Player', 'Team', 'Season', 'Round', 'GP']]\n", "player_gp.head()" ] }, { "cell_type": "code", "execution_count": 5, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/html": [ "
\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
PlayerTeamSeasonRoundTOION(60s)CFONCAONGPCF60CA60CD60
3253Lars EllerMTL201210.1005561521149.17127119.889503129.281768
4533Patrick WierciochOTT201210.019167311156.52173952.173913104.347826
337Andrew ShawCHI201320.050278611119.33701719.88950399.447514
4815Robert BortuzzoSTL201520.1958332031102.12766015.31914986.808511
2569Jimmy HayesCHI201110.3347223792110.53941926.88796783.651452
\n", "
" ], "text/plain": [ " Player Team Season Round TOION(60s) CFON CAON GP \\\n", "3253 Lars Eller MTL 2012 1 0.100556 15 2 1 \n", "4533 Patrick Wiercioch OTT 2012 1 0.019167 3 1 1 \n", "337 Andrew Shaw CHI 2013 2 0.050278 6 1 1 \n", "4815 Robert Bortuzzo STL 2015 2 0.195833 20 3 1 \n", "2569 Jimmy Hayes CHI 2011 1 0.334722 37 9 2 \n", "\n", " CF60 CA60 CD60 \n", "3253 149.171271 19.889503 129.281768 \n", "4533 156.521739 52.173913 104.347826 \n", "337 119.337017 19.889503 99.447514 \n", "4815 102.127660 15.319149 86.808511 \n", "2569 110.539419 26.887967 83.651452 " ] }, "execution_count": 5, "metadata": {}, "output_type": "execute_result" } ], "source": [ "player_rounds = playoffs.groupby(['Player', 'Team', 'Season', 'Round']).sum()\n", "player_rounds.drop(['Game'], axis = 1, inplace = True)\n", "player_rounds.reset_index(inplace = True)\n", "\n", "#Join to get the gp column\n", "player_rounds = player_rounds.merge(player_gp, on = ['Player', 'Team', 'Season', 'Round'], how = 'inner')\n", "\n", "player_rounds['CF60'] = player_rounds['CFON'] / player_rounds['TOION(60s)']\n", "player_rounds['CA60'] = player_rounds['CAON'] / player_rounds['TOION(60s)']\n", "player_rounds['CD60'] = player_rounds['CF60'] - player_rounds['CA60']\n", "player_rounds.sort_values(by = 'CD60', ascending = False, inplace = True)\n", "player_rounds.head()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Filter for at least six games (optional)" ] }, { "cell_type": "code", "execution_count": 6, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/html": [ "
\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
PlayerTeamSeasonRoundTOION(60s)CFONCAONGPCF60CA60CD60
0Andre BurakovskyWSH201621.19888911143692.58572835.86654356.719184
1Jiri HudlerDET200710.8955567732685.98014935.73201050.248139
2Henrik SedinVAN201411.40722211243679.58942030.55665249.032767
3Henrik ZetterbergDET200741.70555615471690.29316041.62866448.664495
4Marc-Andre BergeronT.B201031.52555612756783.24836136.70793946.540422
5Chris CheliosDET200710.9402787330677.63663231.90546545.731167
6Chris KunitzPIT201011.1652789745683.24195538.61740244.624553
7Mikael SamuelssonDET200711.24250010146681.28772637.02213344.265594
8Daniel SedinVAN201411.38361110746677.33386933.24633644.087533
9Darren HelmDET200740.6397224012662.52713918.75814243.768997
10Sidney CrosbyPIT200911.56805613567686.09388842.72807843.365810
11Lars EllerWSH201621.13166710354691.01620047.71723143.298969
12Mike GreenWSH200911.993056192108796.33449554.18815342.146341
13Pavel DatsyukDET200821.85305613355771.77334729.68070842.092640
14Brian RafalskiDET200741.95805616179682.22442940.34614841.878281
15Joe PavelskiS.J200911.51611112663683.10736541.55368341.553683
16Brett LebdaDET200741.3050009541672.79693531.41762541.379310
17Jiri HudlerDET200740.9455566425667.68507626.43948341.245593
18Tomas HolmstromDET200821.3700009742770.80292030.65693440.145985
19Ryane CloweS.J200911.58861113168682.46196942.80468639.657283
\n", "
" ], "text/plain": [ " Player Team Season Round TOION(60s) CFON CAON GP \\\n", "0 Andre Burakovsky WSH 2016 2 1.198889 111 43 6 \n", "1 Jiri Hudler DET 2007 1 0.895556 77 32 6 \n", "2 Henrik Sedin VAN 2014 1 1.407222 112 43 6 \n", "3 Henrik Zetterberg DET 2007 4 1.705556 154 71 6 \n", "4 Marc-Andre Bergeron T.B 2010 3 1.525556 127 56 7 \n", "5 Chris Chelios DET 2007 1 0.940278 73 30 6 \n", "6 Chris Kunitz PIT 2010 1 1.165278 97 45 6 \n", "7 Mikael Samuelsson DET 2007 1 1.242500 101 46 6 \n", "8 Daniel Sedin VAN 2014 1 1.383611 107 46 6 \n", "9 Darren Helm DET 2007 4 0.639722 40 12 6 \n", "10 Sidney Crosby PIT 2009 1 1.568056 135 67 6 \n", "11 Lars Eller WSH 2016 2 1.131667 103 54 6 \n", "12 Mike Green WSH 2009 1 1.993056 192 108 7 \n", "13 Pavel Datsyuk DET 2008 2 1.853056 133 55 7 \n", "14 Brian Rafalski DET 2007 4 1.958056 161 79 6 \n", "15 Joe Pavelski S.J 2009 1 1.516111 126 63 6 \n", "16 Brett Lebda DET 2007 4 1.305000 95 41 6 \n", "17 Jiri Hudler DET 2007 4 0.945556 64 25 6 \n", "18 Tomas Holmstrom DET 2008 2 1.370000 97 42 7 \n", "19 Ryane Clowe S.J 2009 1 1.588611 131 68 6 \n", "\n", " CF60 CA60 CD60 \n", "0 92.585728 35.866543 56.719184 \n", "1 85.980149 35.732010 50.248139 \n", "2 79.589420 30.556652 49.032767 \n", "3 90.293160 41.628664 48.664495 \n", "4 83.248361 36.707939 46.540422 \n", "5 77.636632 31.905465 45.731167 \n", "6 83.241955 38.617402 44.624553 \n", "7 81.287726 37.022133 44.265594 \n", "8 77.333869 33.246336 44.087533 \n", "9 62.527139 18.758142 43.768997 \n", "10 86.093888 42.728078 43.365810 \n", "11 91.016200 47.717231 43.298969 \n", "12 96.334495 54.188153 42.146341 \n", "13 71.773347 29.680708 42.092640 \n", "14 82.224429 40.346148 41.878281 \n", "15 83.107365 41.553683 41.553683 \n", "16 72.796935 31.417625 41.379310 \n", "17 67.685076 26.439483 41.245593 \n", "18 70.802920 30.656934 40.145985 \n", "19 82.461969 42.804686 39.657283 " ] }, "execution_count": 6, "metadata": {}, "output_type": "execute_result" } ], "source": [ "temp = player_rounds.query('GP >= 6')\n", "temp.reset_index(inplace = True, drop = True) #so index = ranks\n", "temp.head(20)" ] } ], "metadata": { "kernelspec": { "display_name": "Python 3", "language": "python", "name": "python3" }, "language_info": { "codemirror_mode": { "name": "ipython", "version": 3 }, "file_extension": ".py", "mimetype": "text/x-python", "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", "version": "3.4.3" } }, "nbformat": 4, "nbformat_minor": 0 }