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
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 [ ]: