In [1]:
# import modules ----------------------

import nba_py
import nba_py.game
import nba_py.player
import nba_py.team

import pandas as pd
import numpy as np

import datetime
# import time
# import functools

# import pymysql
from sqlalchemy import create_engine

import sys
sys.path.append('/Users/wonderui/OneDrive/6_Module_Package')
sys.path.append('/Users/WangRui/OneDrive/6_Module_Package')
import hoop_pwd
pwd = hoop_pwd.password

old_settings = np.seterr(all='print')
np.geterr()

from nba_seer import *


modules imported
functions defined

In [2]:
# create sql conn and load game stats logs ----------------------

conn = create_engine('mysql+pymysql://root:%s@118.190.202.87:3306/nba_stats' % pwd)
game_stats_logs = pd.read_sql_table('game_stats_logs', conn)
game_stats_logs = game_stats_logs[game_stats_logs['GAME_TYPE'] != 'all_star']

print(str(len(game_stats_logs)) + ' player stats loaded.')


182297 player stats loaded.

In [3]:
# set date ----------------------

today = datetime.date.today()
tomorrow = today + datetime.timedelta(days=1)
someday = datetime.date(2017, 1, 1)

print('date set')


date set

In [4]:
# load player list ----------------------

all_players = nba_py.player.PlayerList(season='2017-18').info()

print('players list loaded')


players list loaded

execute


In [5]:
games = get_games(someday)
games


Out[5]:
GAME_ID HOME_TEAM_ID VISITOR_TEAM_ID
0 0021600508 1610612737 1610612759
1 0021600509 1610612748 1610612765
2 0021600510 1610612754 1610612753
3 0021600511 1610612750 1610612757
4 0021600512 1610612747 1610612761

In [6]:
players = get_players_p(games, game_stats_logs)
players


Out[6]:
PERSON_ID TEAM_ID Location GAME_ID Against_Team_ID
0 200757 1610612737 HOME 0021600508 1610612759
1 200794 1610612737 HOME 0021600508 1610612759
2 2730 1610612737 HOME 0021600508 1610612759
3 203145 1610612737 HOME 0021600508 1610612759
4 203471 1610612737 HOME 0021600508 1610612759
5 2594 1610612737 HOME 0021600508 1610612759
6 1627098 1610612737 HOME 0021600508 1610612759
7 203488 1610612737 HOME 0021600508 1610612759
8 203501 1610612737 HOME 0021600508 1610612759
9 2743 1610612737 HOME 0021600508 1610612759
10 1627761 1610612737 HOME 0021600508 1610612759
11 203527 1610612737 HOME 0021600508 1610612759
12 202695 1610612759 AWAY 0021600508 1610612737
13 200746 1610612759 AWAY 0021600508 1610612737
14 2200 1610612759 AWAY 0021600508 1610612737
15 201980 1610612759 AWAY 0021600508 1610612737
16 2225 1610612759 AWAY 0021600508 1610612737
17 203937 1610612759 AWAY 0021600508 1610612737
18 201988 1610612759 AWAY 0021600508 1610612737
19 101135 1610612759 AWAY 0021600508 1610612737
20 1938 1610612759 AWAY 0021600508 1610612737
21 203473 1610612759 AWAY 0021600508 1610612737
22 203613 1610612759 AWAY 0021600508 1610612737
23 202722 1610612759 AWAY 0021600508 1610612737
24 1627749 1610612759 AWAY 0021600508 1610612737
25 203585 1610612748 HOME 0021600509 1610612765
26 202337 1610612748 HOME 0021600509 1610612765
27 203186 1610612748 HOME 0021600509 1610612765
28 201961 1610612748 HOME 0021600509 1610612765
29 1626196 1610612748 HOME 0021600509 1610612765
... ... ... ... ... ...
99 202334 1610612757 AWAY 0021600511 1610612750
100 1626192 1610612757 AWAY 0021600511 1610612750
101 1627774 1610612757 AWAY 0021600511 1610612750
102 1627817 1610612757 AWAY 0021600511 1610612750
103 2736 1610612747 HOME 0021600512 1610612761
104 203944 1610612747 HOME 0021600512 1610612761
105 202389 1610612747 HOME 0021600512 1610612761
106 201156 1610612747 HOME 0021600512 1610612761
107 1626156 1610612747 HOME 0021600512 1610612761
108 204028 1610612747 HOME 0021600512 1610612761
109 101150 1610612747 HOME 0021600512 1610612761
110 1627742 1610612747 HOME 0021600512 1610612761
111 203080 1610612747 HOME 0021600512 1610612761
112 203903 1610612747 HOME 0021600512 1610612761
113 101181 1610612747 HOME 0021600512 1610612761
114 1626273 1610612747 HOME 0021600512 1610612761
115 1627826 1610612747 HOME 0021600512 1610612761
116 201960 1610612761 AWAY 0021600512 1610612747
117 1627783 1610612761 AWAY 0021600512 1610612747
118 202685 1610612761 AWAY 0021600512 1610612747
119 201942 1610612761 AWAY 0021600512 1610612747
120 200768 1610612761 AWAY 0021600512 1610612747
121 203082 1610612761 AWAY 0021600512 1610612747
122 203512 1610612761 AWAY 0021600512 1610612747
123 202709 1610612761 AWAY 0021600512 1610612747
124 1626181 1610612761 AWAY 0021600512 1610612747
125 1627751 1610612761 AWAY 0021600512 1610612747
126 203998 1610612761 AWAY 0021600512 1610612747
127 202335 1610612761 AWAY 0021600512 1610612747
128 1627832 1610612761 AWAY 0021600512 1610612747

129 rows × 5 columns


In [7]:
players['MA_20'] = players.apply(lambda x: get_ma(game_stats_logs, x, 20), axis = 1)
players['MA_10'] = players.apply(lambda x: get_ma(game_stats_logs, x, 10), axis = 1)
players['MA_5'] = players.apply(lambda x: get_ma(game_stats_logs, x, 5), axis = 1)
players['MIN_20'] = players.apply(lambda x: get_min(game_stats_logs, x, 20), axis = 1)
players['MIN_10'] = players.apply(lambda x: get_min(game_stats_logs, x, 10), axis = 1)
players['MIN_5'] = players.apply(lambda x: get_min(game_stats_logs, x, 5), axis = 1)
players['MIN_COV_20'] = players.apply(lambda x: get_min_cov(game_stats_logs, x, 20), axis = 1)
players['SCO_COV_20'] = players.apply(lambda x: get_sco_cov(game_stats_logs, x, 20), axis = 1)

players['EXP_SCO'] = round(players[['MA_20', 'MA_10', 'MA_5']].mean(axis = 1) * 
                           players[['MIN_20', 'MIN_10', 'MIN_5']].mean(axis = 1) / 36, 2)
players


Out[7]:
PERSON_ID TEAM_ID Location GAME_ID Against_Team_ID MA_20 MA_10 MA_5 MIN_20 MIN_10 MIN_5 MIN_COV_20 SCO_COV_20 EXP_SCO
0 200757 1610612737 HOME 0021600508 1610612759 19.66 20.88 21.07 27.23 28.73 27.36 0.180 0.447 15.84
1 200794 1610612737 HOME 0021600508 1610612759 28.27 27.60 20.79 34.16 35.38 35.94 0.157 0.387 24.96
2 2730 1610612737 HOME 0021600508 1610612759 33.48 37.92 41.48 29.78 29.85 31.85 0.193 0.436 31.87
3 203145 1610612737 HOME 0021600508 1610612759 14.78 14.24 13.41 27.29 28.12 31.27 0.276 0.786 11.35
4 203471 1610612737 HOME 0021600508 1610612759 29.33 29.79 25.91 31.90 34.25 33.41 0.170 0.329 26.13
5 2594 1610612737 HOME 0021600508 1610612759 17.28 20.95 19.99 28.09 27.52 27.58 0.188 0.495 14.95
6 1627098 1610612737 HOME 0021600508 1610612759 13.06 11.39 7.44 15.93 16.08 16.55 0.341 0.973 4.78
7 203488 1610612737 HOME 0021600508 1610612759 19.68 20.69 22.90 20.75 18.85 20.47 0.250 0.586 11.73
8 203501 1610612737 HOME 0021600508 1610612759 18.24 18.59 21.21 21.89 23.13 17.31 0.369 1.058 11.17
9 2743 1610612737 HOME 0021600508 1610612759 18.45 29.07 36.33 11.28 11.20 13.82 0.584 0.981 9.39
10 1627761 1610612737 HOME 0021600508 1610612759 6.02 5.85 22.24 8.72 11.14 18.11 0.765 2.838 4.00
11 203527 1610612737 HOME 0021600508 1610612759 23.87 23.39 23.39 5.71 7.85 7.85 0.324 0.570 4.67
12 202695 1610612759 AWAY 0021600508 1610612737 34.17 37.90 41.20 33.23 31.91 34.47 0.116 0.274 34.82
13 200746 1610612759 AWAY 0021600508 1610612737 26.61 29.21 30.52 31.93 30.16 31.92 0.149 0.407 25.05
14 2200 1610612759 AWAY 0021600508 1610612737 28.73 32.28 29.82 27.20 27.18 26.84 0.159 0.294 22.77
15 201980 1610612759 AWAY 0021600508 1610612737 17.64 19.48 18.74 26.28 26.62 29.16 0.180 0.453 14.15
16 2225 1610612759 AWAY 0021600508 1610612737 22.80 24.98 21.54 25.40 25.25 26.83 0.124 0.541 16.58
17 203937 1610612759 AWAY 0021600508 1610612737 25.23 19.45 22.25 11.22 13.87 16.21 0.715 1.374 8.53
18 201988 1610612759 AWAY 0021600508 1610612737 26.75 25.91 21.60 22.14 20.23 20.11 0.202 0.530 14.32
19 101135 1610612759 AWAY 0021600508 1610612737 25.61 26.46 30.05 18.25 18.83 16.97 0.266 0.420 13.70
20 1938 1610612759 AWAY 0021600508 1610612737 26.27 27.87 37.98 19.25 18.49 18.70 0.151 0.606 16.05
21 203473 1610612759 AWAY 0021600508 1610612737 25.59 27.73 26.12 14.52 16.05 17.04 0.454 0.540 11.67
22 203613 1610612759 AWAY 0021600508 1610612737 17.96 16.34 15.92 17.57 18.13 21.37 0.346 0.684 8.85
23 202722 1610612759 AWAY 0021600508 1610612737 12.23 7.68 4.07 9.69 7.59 3.84 0.732 1.194 1.56
24 1627749 1610612759 AWAY 0021600508 1610612737 19.35 35.13 45.03 5.13 6.38 7.94 1.115 1.446 5.97
25 203585 1610612748 HOME 0021600509 1610612765 13.28 12.08 13.67 30.68 27.21 26.18 0.228 0.460 10.13
26 202337 1610612748 HOME 0021600509 1610612765 11.10 11.80 14.79 14.44 11.83 13.87 0.464 0.980 4.67
27 203186 1610612748 HOME 0021600509 1610612765 25.50 24.03 33.95 11.22 9.69 11.68 0.366 0.526 8.40
28 201961 1610612748 HOME 0021600509 1610612765 17.84 16.47 14.10 27.38 22.96 20.37 0.317 0.526 10.57
29 1626196 1610612748 HOME 0021600509 1610612765 19.10 17.68 23.48 32.37 34.21 34.92 0.148 0.561 18.88
... ... ... ... ... ... ... ... ... ... ... ... ... ... ...
99 202334 1610612757 AWAY 0021600511 1610612750 20.38 21.49 20.71 19.59 12.55 12.00 0.456 0.566 8.53
100 1626192 1610612757 AWAY 0021600511 1610612750 19.95 12.60 13.15 5.60 7.55 7.03 0.985 1.375 2.85
101 1627774 1610612757 AWAY 0021600511 1610612750 -0.56 -6.68 -7.83 5.01 4.46 2.61 0.757 -27.233 -0.56
102 1627817 1610612757 AWAY 0021600511 1610612750 38.36 13.56 36.21 3.04 3.62 2.61 0.625 0.944 2.52
103 2736 1610612747 HOME 0021600512 1610612761 19.21 22.64 20.28 29.48 32.40 33.19 0.189 0.488 18.23
104 203944 1610612747 HOME 0021600512 1610612761 25.12 26.85 32.02 29.95 30.71 30.37 0.131 0.457 23.60
105 202389 1610612747 HOME 0021600512 1610612761 15.52 14.41 14.82 21.14 22.35 24.52 0.255 0.658 9.39
106 201156 1610612747 HOME 0021600512 1610612761 22.33 23.30 21.36 25.76 28.94 29.42 0.344 0.528 17.39
107 1626156 1610612747 HOME 0021600512 1610612761 25.61 21.05 17.82 25.85 26.13 29.88 0.178 0.482 16.29
108 204028 1610612747 HOME 0021600512 1610612761 25.63 17.77 NaN 15.59 10.02 NaN 0.386 0.550 7.72
109 101150 1610612747 HOME 0021600512 1610612761 29.66 25.86 23.92 26.53 24.91 24.30 0.141 0.372 18.57
110 1627742 1610612747 HOME 0021600512 1610612761 10.86 9.64 9.43 30.84 28.97 29.61 0.192 0.621 8.26
111 203080 1610612747 HOME 0021600512 1610612761 26.61 32.09 32.51 14.63 18.13 17.92 0.248 0.362 14.27
112 203903 1610612747 HOME 0021600512 1610612761 18.53 22.72 16.75 29.41 25.64 25.62 0.185 0.626 14.44
113 101181 1610612747 HOME 0021600512 1610612761 22.97 20.12 8.92 14.46 16.54 8.07 0.501 0.919 6.27
114 1626273 1610612747 HOME 0021600512 1610612761 16.63 9.70 19.41 13.30 9.61 16.88 0.654 0.772 5.62
115 1627826 1610612747 HOME 0021600512 1610612761 3.26 -8.93 2.06 8.13 7.33 9.82 0.784 5.010 -0.28
116 201960 1610612761 AWAY 0021600512 1610612747 21.40 17.22 17.38 25.89 23.53 23.82 0.181 0.613 12.66
117 1627783 1610612761 AWAY 0021600512 1610612747 16.10 12.64 6.89 17.44 14.75 13.03 0.428 0.664 4.97
118 202685 1610612761 AWAY 0021600512 1610612747 26.10 29.05 31.44 25.60 23.94 21.18 0.202 0.420 18.90
119 201942 1610612761 AWAY 0021600512 1610612747 29.61 30.32 24.82 34.51 34.32 35.41 0.099 0.344 27.27
120 200768 1610612761 AWAY 0021600512 1610612747 36.55 36.47 39.93 36.19 36.44 37.12 0.087 0.218 38.26
121 203082 1610612761 AWAY 0021600512 1610612747 22.36 22.25 19.97 21.06 22.29 24.37 0.227 0.608 13.50
122 203512 1610612761 AWAY 0021600512 1610612747 24.51 22.34 23.14 18.78 20.50 22.50 0.247 0.524 13.35
123 202709 1610612761 AWAY 0021600512 1610612747 23.19 19.43 16.84 23.13 24.08 22.07 0.184 0.500 12.71
124 1626181 1610612761 AWAY 0021600512 1610612747 22.30 20.23 14.31 15.44 17.10 17.24 0.655 0.780 8.73
125 1627751 1610612761 AWAY 0021600512 1610612747 22.90 16.22 4.99 4.75 4.97 5.05 0.299 0.921 2.01
126 203998 1610612761 AWAY 0021600512 1610612747 23.15 3.66 3.66 3.60 3.26 3.26 0.220 0.949 0.95
127 202335 1610612761 AWAY 0021600512 1610612747 18.08 12.33 5.11 27.08 27.28 26.67 0.244 0.640 8.88
128 1627832 1610612761 AWAY 0021600512 1610612747 23.01 1.31 -31.58 5.60 8.87 2.28 1.366 1.723 -0.38

129 rows × 14 columns


In [ ]:


In [ ]:


In [ ]:


In [ ]:


In [ ]:


In [ ]:


In [ ]:


In [ ]:


In [ ]:


In [ ]:


In [ ]:


In [ ]:


In [ ]:


In [ ]:


In [ ]: