In [1]:
import nba_py
import datetime
import time
import nba_py.game
import nba_py.player
import nba_py.team
import pandas as pd
import numpy as np
import functools
import pymysql
from sqlalchemy import create_engine
%matplotlib inline

In [2]:
conn = create_engine('mysql+pymysql://root:@localhost:3306/nba_stats')
game_logs = pd.read_sql_table('game_logs', conn)

In [7]:
game_logs.columns


Out[7]:
Index(['SEASON_ID', 'Player_ID', 'Game_ID', 'GAME_DATE', 'MATCHUP', 'WL',
       'MIN', 'FGM', 'FGA', 'FG_PCT', 'FG3M', 'FG3A', 'FG3_PCT', 'FTM', 'FTA',
       'FT_PCT', 'OREB', 'DREB', 'REB', 'AST', 'STL', 'BLK', 'TOV', 'PF',
       'PTS', 'PLUS_MINUS', 'VIDEO_AVAILABLE', 'LOCATION', 'Oppo', 'Oppo_ID'],
      dtype='object')

In [10]:
game_log_col = ['SEASON_ID', 'Player_ID','LOCATION', 'Oppo_ID', 
                'MIN', 'PTS', 'AST', 'OREB', 'DREB', 'STL', 'BLK', 'TOV', 
                'FGM', 'FGA', 'FG3M', 'FG3A']

In [20]:
game_logs = game_logs[game_log_col]
game_logs = game_logs[game_logs['MIN'] != 0]

In [21]:
convert_to_36 = lambda x: x[['PTS', 'AST', 'OREB', 'DREB', 'STL', 'BLK', 
                             'TOV', 'FGM', 'FGA', 'FG3M']] * 36 / x['MIN']
game_logs_36 = game_logs.apply(convert_to_36, axis = 1)

In [29]:
game_logs_36 = pd.concat([game_logs[['Player_ID','LOCATION', 'Oppo_ID']], game_logs_36], axis = 1)

In [32]:
game_logs_36['SCORE'] = game_logs_36['PTS'] * 1 + game_logs_36['AST'] * 1.5 + \
                        game_logs_36['OREB'] * 1 + game_logs_36['DREB'] * 0.7 + \
                        game_logs_36['STL'] * 2 + game_logs_36['BLK'] * 1.8 + game_logs_36['TOV'] * -1 + \
                        game_logs_36['FGM'] * 0.4 + \
                        (game_logs_36['FGA'] - game_logs_36['FGM']) * -1 + game_logs_36['FG3M'] * 0.5
game_logs_36


Out[32]:
Player_ID LOCATION Oppo_ID PTS AST OREB DREB STL BLK TOV FGM FGA FG3M SCORE
0 203518 HOME 1610612743 22.000000 2.000000 6.000000 6.000000 0.000000 0.000000 2.000000 8.000000 22.000000 6.000000 25.400000
1 203518 AWAY 1610612750 14.400000 0.000000 0.000000 0.000000 2.400000 2.400000 2.400000 4.800000 7.200000 4.800000 23.040000
2 203518 HOME 1610612749 36.000000 0.000000 0.000000 3.000000 0.000000 0.000000 3.000000 12.000000 18.000000 12.000000 39.900000
3 203518 HOME 1610612766 0.000000 0.000000 0.000000 5.538462 0.000000 0.000000 2.769231 0.000000 11.076923 0.000000 -9.969231
4 203518 HOME 1610612759 12.857143 2.571429 0.000000 0.000000 0.000000 0.000000 2.571429 5.142857 12.857143 2.571429 9.771429
5 203518 AWAY 1610612753 9.818182 1.636364 1.636364 0.000000 3.272727 0.000000 0.000000 3.272727 13.090909 3.272727 13.581818
6 203518 AWAY 1610612742 0.000000 0.000000 0.000000 10.285714 0.000000 0.000000 5.142857 0.000000 10.285714 0.000000 -8.228571
7 203518 AWAY 1610612745 14.666667 2.666667 0.000000 0.000000 4.000000 0.000000 1.333333 5.333333 13.333333 4.000000 21.466667
8 203518 HOME 1610612755 7.500000 0.000000 0.000000 4.500000 1.500000 1.500000 1.500000 1.500000 9.000000 1.500000 8.700000
9 203518 HOME 1610612744 3.600000 3.600000 0.000000 5.400000 3.600000 0.000000 0.000000 0.000000 14.400000 0.000000 5.580000
10 203518 HOME 1610612758 6.000000 0.000000 0.000000 3.000000 0.000000 0.000000 0.000000 3.000000 9.000000 0.000000 3.300000
11 203518 AWAY 1610612761 18.000000 3.600000 0.000000 3.600000 3.600000 0.000000 1.800000 5.400000 12.600000 3.600000 28.080000
12 203518 AWAY 1610612751 18.000000 4.153846 0.000000 4.153846 2.769231 1.384615 0.000000 6.923077 9.692308 4.153846 37.246154
13 203518 HOME 1610612762 12.000000 2.400000 0.000000 0.000000 0.000000 0.000000 0.000000 4.800000 7.200000 2.400000 16.320000
14 203518 HOME 1610612759 9.000000 0.000000 3.000000 6.000000 6.000000 0.000000 0.000000 3.000000 18.000000 3.000000 15.900000
15 203518 HOME 1610612757 13.846154 2.769231 0.000000 2.769231 0.000000 0.000000 0.000000 5.538462 13.846154 2.769231 15.230769
16 203518 AWAY 1610612742 0.000000 7.200000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 10.800000 0.000000 0.000000
17 203518 AWAY 1610612756 14.181818 0.000000 0.000000 1.090909 1.090909 0.000000 1.090909 5.454545 12.000000 3.272727 13.309091
18 203518 AWAY 1610612757 21.600000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 7.200000 10.800000 7.200000 24.480000
19 203518 HOME 1610612762 15.230769 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 5.538462 5.538462 4.153846 19.523077
20 203518 HOME 1610612740 13.371429 1.028571 1.028571 2.057143 0.000000 0.000000 0.000000 4.114286 12.342857 3.085714 12.342857
21 203518 HOME 1610612747 23.586207 0.000000 0.000000 3.724138 0.000000 0.000000 0.000000 8.689655 16.137931 6.206897 25.324138
22 203518 HOME 1610612752 11.250000 0.000000 0.000000 2.250000 0.000000 0.000000 0.000000 4.500000 11.250000 2.250000 9.000000
23 203518 AWAY 1610612764 14.400000 0.000000 0.000000 3.600000 1.800000 0.000000 0.000000 3.600000 12.600000 3.600000 14.760000
24 203518 HOME 1610612744 8.000000 0.000000 0.000000 0.000000 4.000000 0.000000 0.000000 0.000000 0.000000 0.000000 16.000000
25 203518 HOME 1610612739 8.000000 12.000000 0.000000 4.000000 4.000000 0.000000 0.000000 4.000000 8.000000 0.000000 34.400000
26 203518 AWAY 1610612754 27.000000 0.000000 4.500000 0.000000 0.000000 0.000000 4.500000 9.000000 18.000000 9.000000 26.100000
27 203518 AWAY 1610612739 0.000000 4.500000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 4.500000 0.000000 2.250000
28 203518 HOME 1610612742 11.250000 2.250000 0.000000 0.000000 0.000000 0.000000 0.000000 2.250000 6.750000 2.250000 12.150000
29 203518 AWAY 1610612740 22.000000 0.000000 0.000000 0.000000 2.000000 2.000000 0.000000 8.000000 10.000000 4.000000 32.800000
... ... ... ... ... ... ... ... ... ... ... ... ... ... ...
64634 1627826 AWAY 1610612743 30.000000 1.200000 4.800000 8.400000 0.000000 1.200000 1.200000 14.400000 18.000000 0.000000 45.600000
64635 1627826 HOME 1610612755 18.947368 0.000000 0.000000 11.368421 0.000000 7.578947 3.789474 7.578947 9.473684 0.000000 37.894737
64636 1627826 AWAY 1610612756 29.647059 0.000000 4.235294 2.117647 2.117647 4.235294 0.000000 14.823529 27.529412 0.000000 40.447059
64637 1627826 HOME 1610612738 12.521739 4.695652 0.000000 1.565217 3.130435 3.130435 0.000000 6.260870 12.521739 0.000000 28.800000
64638 1627826 HOME 1610612766 18.000000 0.000000 0.000000 9.000000 0.000000 0.000000 0.000000 9.000000 27.000000 0.000000 9.900000
64639 1627826 HOME 1610612759 4.000000 0.000000 0.000000 4.000000 2.000000 2.000000 4.000000 2.000000 6.000000 0.000000 7.200000
64640 1627826 AWAY 1610612760 14.666667 1.333333 1.333333 6.666667 1.333333 4.000000 1.333333 6.666667 12.000000 0.000000 28.533333
64641 1627826 AWAY 1610612756 20.571429 0.000000 5.142857 5.142857 0.000000 0.000000 2.571429 7.714286 15.428571 0.000000 22.114286
64642 1627826 HOME 1610612758 0.000000 0.000000 0.000000 18.000000 0.000000 0.000000 3.600000 0.000000 3.600000 0.000000 5.400000
64643 1627826 AWAY 1610612749 25.714286 3.428571 1.714286 8.571429 0.000000 1.714286 3.428571 12.000000 18.857143 0.000000 36.171429
64644 1627826 AWAY 1610612765 8.181818 1.636364 1.636364 1.636364 0.000000 3.272727 0.000000 3.272727 8.181818 0.000000 15.709091
64645 1627826 AWAY 1610612752 21.176471 0.000000 4.235294 10.588235 2.117647 6.352941 0.000000 10.588235 19.058824 0.000000 44.258824
64646 1627826 AWAY 1610612738 9.000000 0.000000 0.000000 18.000000 0.000000 0.000000 9.000000 0.000000 0.000000 0.000000 12.600000
64647 1627826 AWAY 1610612764 13.090909 0.000000 3.272727 6.545455 0.000000 3.272727 3.272727 6.545455 13.090909 0.000000 19.636364
64648 1627826 HOME 1610612743 29.142857 1.714286 5.142857 5.142857 0.000000 0.000000 1.714286 13.714286 15.428571 0.000000 42.514286
64649 1627826 AWAY 1610612762 22.153846 1.384615 2.769231 11.076923 0.000000 0.000000 0.000000 8.307692 15.230769 0.000000 31.153846
64650 1627826 AWAY 1610612757 15.428571 2.571429 5.142857 7.714286 0.000000 3.857143 5.142857 6.428571 19.285714 0.000000 21.342857
64651 1627826 AWAY 1610612742 3.789474 1.894737 1.894737 5.684211 0.000000 1.894737 1.894737 1.894737 3.789474 0.000000 12.884211
64652 1627826 HOME 1610612754 24.000000 0.000000 0.000000 6.000000 0.000000 0.000000 0.000000 12.000000 12.000000 0.000000 33.000000
64653 1627826 HOME 1610612743 15.230769 1.384615 6.923077 11.076923 1.384615 4.153846 1.384615 6.923077 15.230769 0.000000 35.307692
64654 1627826 HOME 1610612765 16.000000 4.000000 4.000000 16.000000 0.000000 8.000000 4.000000 8.000000 16.000000 0.000000 42.800000
64655 1627826 AWAY 1610612746 24.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 12.000000 12.000000 0.000000 28.800000
64656 1627826 AWAY 1610612759 19.200000 2.400000 4.800000 4.800000 4.800000 2.400000 2.400000 9.600000 16.800000 0.000000 39.120000
64657 1627826 AWAY 1610612753 12.705882 2.117647 2.117647 2.117647 0.000000 0.000000 2.117647 4.235294 14.823529 0.000000 8.470588
64658 1627826 AWAY 1610612766 0.000000 0.000000 0.000000 12.000000 0.000000 0.000000 0.000000 0.000000 12.000000 0.000000 -3.600000
64659 1627826 AWAY 1610612758 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 18.000000 0.000000 18.000000 0.000000 -36.000000
64660 1627826 AWAY 1610612745 14.400000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 14.400000 0.000000 0.000000
64661 1627826 AWAY 1610612750 4.500000 0.000000 0.000000 9.000000 0.000000 0.000000 4.500000 0.000000 9.000000 0.000000 -2.700000
64662 1627826 HOME 1610612744 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000
64663 1627826 AWAY 1610612737 11.368421 0.000000 3.789474 3.789474 1.894737 0.000000 0.000000 5.684211 7.578947 0.000000 21.978947

64461 rows × 14 columns


In [64]:
game_logs_36[(game_logs_36['Player_ID'] == 1626164) & (game_logs_36['LOCATION'] == 'HOME')]['SCORE'].describe()


Out[64]:
count    79.000000
mean     21.739667
std      13.799493
min     -36.000000
25%      13.971619
50%      21.600000
75%      27.690000
max      70.200000
Name: SCORE, dtype: float64

In [65]:
game_logs_36[(game_logs_36['Player_ID'] == 1626164) & (game_logs_36['LOCATION'] == 'AWAY')]['SCORE'].describe()


Out[65]:
count    75.000000
mean     19.863884
std      12.321743
min     -13.500000
25%      11.072727
50%      22.220690
75%      26.855212
max      63.520000
Name: SCORE, dtype: float64

In [66]:
game_logs_36[game_logs_36['Player_ID'] == 1626164]['SCORE'].describe()


Out[66]:
count    154.000000
mean      20.826137
std       13.091852
min      -36.000000
25%       12.490435
50%       21.910345
75%       27.531000
max       70.200000
Name: SCORE, dtype: float64

In [ ]: