In [2]:
#Import Packages
import pandas as pd
import numpy as np
from scipy.stats import norm
from Schedule.Schedule import Schedule
from Schedule.Stats import Stats
from Regression.ELO import ELO
from Regression.Game_Scores_v2 import Game_Scores
%matplotlib inline
//anaconda/lib/python2.7/site-packages/pandas/computation/__init__.py:19: UserWarning: The installed version of numexpr 2.4.4 is not supported in pandas and will be not be used
UserWarning)
In [3]:
#Get schedule of games
sched_2014 = Schedule(b_dt = '10/1/2014')
sched_2015 = Schedule(b_dt = '10/1/2015')
In [4]:
#Add four factors
sched_2014.add_four_factors()
sched_2015.add_four_factors()
Out[4]:
GAME_DATE
Game_ID
H_WL
A_WL
Home Team
Away Team
H_PTS
A_PTS
Pts_diff
FGM_home
...
H_BLK
A_BLK
H_FF_EFG
H_FF_ORB
H_FF_FTFGA
H_FF_TOV
A_FF_EFG
A_FF_ORB
A_FF_FTFGA
A_FF_TOV
0
2016-04-09
21501188
1
0
ATL
BOS
118
107
11
46
...
10
6
0.619318
0.142857
0.102273
0.162152
0.505556
0.204082
0.177778
0.142099
1
2016-04-07
21501173
1
0
ATL
TOR
95
87
8
33
...
12
4
0.513158
0.116279
0.223684
0.139425
0.428571
0.181818
0.178571
0.114823
2
2016-04-05
21501157
1
0
ATL
PHX
103
90
13
39
...
3
4
0.468421
0.245283
0.147368
0.150432
0.444444
0.229167
0.222222
0.223881
3
2016-04-01
21501131
0
1
ATL
CLE
108
110
-2
38
...
8
6
0.447368
0.098039
0.242105
0.128822
0.459184
0.203704
0.204082
0.106534
4
2016-03-25
21501076
1
0
ATL
MIL
101
90
11
41
...
6
9
0.448454
0.340000
0.144330
0.111698
0.434524
0.363636
0.202381
0.158831
5
2016-03-21
21501048
0
1
ATL
WAS
102
117
-15
38
...
6
3
0.570513
0.054054
0.166667
0.143619
0.576923
0.225000
0.131868
0.090180
6
2016-03-19
21501029
1
0
ATL
HOU
109
97
12
44
...
6
3
0.579545
0.200000
0.079545
0.159553
0.422619
0.326087
0.309524
0.170614
7
2016-03-17
21501015
1
0
ATL
DEN
116
98
18
40
...
8
4
0.575000
0.189189
0.300000
0.123305
0.482759
0.214286
0.160920
0.140732
8
2016-03-13
21500984
1
0
ATL
IND
104
75
29
40
...
6
5
0.558824
0.225000
0.105882
0.157233
0.408046
0.145833
0.045977
0.161486
9
2016-03-12
21500974
1
0
ATL
MEM
95
83
12
36
...
12
5
0.494048
0.173913
0.142857
0.116427
0.378947
0.338983
0.115789
0.164677
10
2016-02-28
21500878
1
0
ATL
CHA
87
76
11
38
...
5
4
0.545455
0.162162
0.038961
0.170068
0.376543
0.192308
0.185185
0.068871
11
2016-02-26
21500865
1
0
ATL
CHI
103
88
15
37
...
11
2
0.455056
0.288889
0.247191
0.112751
0.392045
0.326923
0.215909
0.198649
12
2016-02-22
21500836
0
1
ATL
GSW
92
102
-10
36
...
7
8
0.476744
0.177778
0.116279
0.166601
0.516854
0.133333
0.112360
0.128357
13
2016-02-20
21500819
0
1
ATL
MIL
109
117
-8
44
...
8
10
0.457547
0.172414
0.113208
0.133422
0.456731
0.303571
0.211538
0.143970
14
2016-02-19
21500808
0
1
ATL
MIA
111
115
-4
41
...
4
1
0.563218
0.181818
0.149425
0.198638
0.545455
0.227273
0.215909
0.134202
15
2016-02-08
21500780
0
1
ATL
ORL
110
117
-7
43
...
4
8
0.532609
0.163265
0.130435
0.131086
0.543011
0.133333
0.172043
0.118527
16
2016-02-05
21500750
1
0
ATL
IND
102
96
6
39
...
5
4
0.578947
0.081081
0.184211
0.154959
0.489011
0.395833
0.076923
0.200084
17
2016-02-01
21500723
1
0
ATL
DAL
112
97
15
42
...
6
2
0.612500
0.156250
0.175000
0.152501
0.405882
0.181818
0.329412
0.061400
18
2016-01-27
21500687
0
1
ATL
LAC
83
85
-2
33
...
3
5
0.481013
0.177778
0.088608
0.221864
0.417647
0.180000
0.164706
0.114298
19
2016-01-18
21500620
1
0
ATL
ORL
98
81
17
41
...
6
5
0.568750
0.114286
0.087500
0.174538
0.379310
0.203704
0.172414
0.132924
20
2016-01-16
21500602
1
0
ATL
BKN
114
86
28
44
...
5
3
0.607595
0.147059
0.227848
0.105753
0.474359
0.166667
0.153846
0.176422
21
2016-01-09
21500551
1
0
ATL
CHI
120
105
15
49
...
13
6
0.574468
0.190476
0.127660
0.139405
0.475904
0.272727
0.313253
0.198788
22
2016-01-05
21500521
0
1
ATL
NYK
101
107
-6
37
...
4
6
0.511494
0.285714
0.137931
0.137770
0.505952
0.289474
0.261905
0.097234
23
2015-12-26
21500442
1
0
ATL
NYK
117
98
19
47
...
4
8
0.579545
0.250000
0.170455
0.094817
0.524691
0.307692
0.160494
0.223396
24
2015-12-23
21500429
1
0
ATL
DET
107
100
7
43
...
4
9
0.516854
0.232558
0.168539
0.128968
0.466292
0.288889
0.191011
0.133946
25
2015-12-21
21500413
1
0
ATL
POR
106
97
9
37
...
1
4
0.538961
0.052632
0.298701
0.102754
0.500000
0.325581
0.197531
0.190114
26
2015-12-16
21500376
1
0
ATL
PHI
127
106
21
48
...
7
2
0.679487
0.074074
0.269231
0.121753
0.600000
0.233333
0.213333
0.218775
27
2015-12-14
21500360
0
1
ATL
MIA
88
100
-12
33
...
4
5
0.440476
0.152174
0.166667
0.143443
0.488764
0.333333
0.146067
0.156904
28
2015-12-12
21500347
0
1
ATL
SAS
78
103
-25
30
...
3
2
0.406250
0.140000
0.162500
0.175185
0.554054
0.187500
0.283784
0.228447
29
2015-12-04
21500286
1
0
ATL
LAL
100
87
13
37
...
9
7
0.567568
0.250000
0.216216
0.187225
0.447674
0.306122
0.116279
0.172563
...
...
...
...
...
...
...
...
...
...
...
...
...
...
...
...
...
...
...
...
...
...
1200
2016-02-25
21500860
0
1
UTA
SAS
78
96
-18
33
...
2
5
0.448052
0.105263
0.116883
0.123208
0.537975
0.250000
0.139241
0.127492
1201
2016-02-23
21500843
1
0
UTA
HOU
117
114
3
38
...
4
4
0.581081
0.250000
0.418919
0.202468
0.477011
0.250000
0.356322
0.129582
1202
2016-02-19
21500817
1
0
UTA
BOS
111
93
18
37
...
8
3
0.617647
0.235294
0.397059
0.158966
0.413580
0.156863
0.320988
0.073038
1203
2016-02-05
21500758
1
0
UTA
MIL
84
81
3
30
...
8
7
0.441558
0.260870
0.207792
0.166445
0.471831
0.175000
0.197183
0.214500
1204
2016-02-03
21500743
1
0
UTA
DEN
85
81
4
33
...
10
2
0.479730
0.200000
0.189189
0.157658
0.400000
0.230769
0.357143
0.156390
1205
2016-02-01
21500728
1
0
UTA
CHI
105
96
9
38
...
4
7
0.488235
0.227273
0.258824
0.135240
0.461111
0.166667
0.144444
0.133588
1206
2016-01-29
21500704
1
0
UTA
MIN
103
90
13
40
...
5
2
0.592105
0.285714
0.171053
0.151093
0.480000
0.302326
0.240000
0.160110
1207
2016-01-27
21500690
1
0
UTA
CHA
102
73
29
40
...
6
0
0.567901
0.189189
0.123457
0.110375
0.411765
0.116279
0.250000
0.199468
1208
2016-01-25
21500673
0
1
UTA
DET
92
95
-3
34
...
4
1
0.452941
0.255319
0.176471
0.138416
0.526667
0.159091
0.213333
0.108085
1209
2016-01-16
21500608
1
0
UTA
LAL
109
82
27
41
...
8
4
0.566265
0.282051
0.180723
0.111210
0.394444
0.285714
0.122222
0.145955
1210
2016-01-14
21500591
0
1
UTA
SAC
101
103
-2
35
...
3
2
0.457831
0.200000
0.301205
0.128764
0.493243
0.333333
0.405405
0.160462
1211
2016-01-09
21500555
1
0
UTA
MIA
98
83
15
39
...
7
8
0.612676
0.172414
0.154930
0.177936
0.451220
0.319149
0.109756
0.185833
1212
2016-01-04
21500518
0
1
UTA
HOU
91
93
-2
30
...
4
2
0.480000
0.348837
0.253333
0.174419
0.566176
0.171429
0.235294
0.183402
1213
2016-01-02
21500503
1
0
UTA
MEM
92
87
5
31
...
7
4
0.473333
0.219512
0.280000
0.169635
0.450617
0.170213
0.172840
0.115256
1214
2015-12-31
21500489
1
0
UTA
POR
109
96
13
43
...
5
0
0.587209
0.279070
0.093023
0.059637
0.551282
0.210526
0.128205
0.116063
1215
2015-12-28
21500467
1
0
UTA
PHI
95
91
4
28
...
9
9
0.375000
0.340909
0.380952
0.150240
0.447674
0.173913
0.162791
0.172480
1216
2015-12-26
21500452
0
1
UTA
LAC
104
109
-5
36
...
4
6
0.554054
0.228571
0.297297
0.170430
0.563291
0.200000
0.253165
0.126904
1217
2015-12-21
21500417
1
0
UTA
PHX
110
89
21
36
...
6
0
0.512658
0.261905
0.367089
0.106067
0.436709
0.200000
0.253165
0.140268
1218
2015-12-18
21500395
1
0
UTA
DEN
97
88
9
34
...
1
4
0.534247
0.147059
0.260274
0.150538
0.430380
0.306122
0.253165
0.157303
1219
2015-12-16
21500380
0
1
UTA
NOP
94
104
-10
32
...
4
2
0.529851
0.151515
0.343284
0.138313
0.534247
0.216216
0.356164
0.114521
1220
2015-12-11
21500341
0
1
UTA
OKC
90
94
-4
33
...
4
2
0.474359
0.244444
0.205128
0.124210
0.506329
0.282051
0.177215
0.147660
1221
2015-12-09
21500327
1
0
UTA
NYK
106
85
21
39
...
2
3
0.543750
0.236842
0.237500
0.147183
0.448718
0.142857
0.192308
0.107666
1222
2015-12-05
21500297
1
0
UTA
IND
122
119
3
43
...
3
2
0.510870
0.372549
0.304348
0.143843
0.494624
0.255319
0.290323
0.135184
1223
2015-12-03
21500279
0
1
UTA
ORL
94
103
-9
31
...
8
4
0.527778
0.138889
0.250000
0.196769
0.494382
0.209302
0.168539
0.103520
1224
2015-11-30
21500259
0
1
UTA
GSW
103
106
-3
40
...
2
5
0.483146
0.243902
0.191011
0.082747
0.573171
0.358974
0.146341
0.167411
1225
2015-11-28
21500243
1
0
UTA
NOP
101
87
14
38
...
9
4
0.518293
0.279070
0.195122
0.159168
0.456522
0.097561
0.347826
0.169851
1226
2015-11-23
21500208
0
1
UTA
OKC
89
111
-22
28
...
3
10
0.417808
0.302326
0.383562
0.212982
0.616883
0.176471
0.207792
0.168563
1227
2015-11-18
21500173
1
0
UTA
TOR
93
89
4
35
...
5
4
0.534722
0.200000
0.222222
0.185428
0.456250
0.209302
0.200000
0.150667
1228
2015-11-07
21500091
1
0
UTA
MEM
89
79
10
31
...
10
1
0.500000
0.225000
0.202703
0.223595
0.362637
0.245283
0.142857
0.142624
1229
2015-11-04
21500068
0
1
UTA
POR
92
108
-16
33
...
8
7
0.403409
0.313725
0.238636
0.094221
0.603896
0.351351
0.194805
0.195715
1230 rows × 39 columns
In [5]:
# Create last n statistics
games = sched_2014.get_games().append(sched_2015.get_games()).reset_index(drop=True)
stats = Stats(games, 'avg', 'GAME_DATE', 'Home Team', 'Away Team', 'Pts_diff', ['Game_ID'])
In [6]:
# Creates stats for last 5 games
stats_5 = stats.get_lastn_stats(5)
stats_5.to_csv('stats_5.csv', index=False)
stats_5 = pd.read_csv('stats_5.csv')
In [7]:
#filters out games with insufficient data
print len(stats_5)
stats_5 = stats_5[stats_5['H_5_games']==5]
print len(stats_5)
stats_5 = stats_5[stats_5['A_5_games']==5]
print len(stats_5)
2460
2312
2303
In [8]:
# Creates elo scores
elo = ELO(games, 'GAME_DATE', 'Home Team', 'Away Team', 'H_PTS', 'A_PTS')
elo_data = elo.create_elo(1500, 20, 100, '538')
In [9]:
# Joins ELO data back to games
for index, game in games.iterrows():
game_dt = game['GAME_DATE']
poss_elo = elo_data[elo_data.index < game_dt]
h_team = game['Home Team']
if len(poss_elo) == 0:
h_elo_score = 1500
else:
h_elo_score = poss_elo.tail(1)[h_team][0]
games.set_value(index, 'H_ELO', h_elo_score)
a_team = game['Away Team']
if len(poss_elo) == 0:
a_elo_score = 1500
else:
a_elo_score = poss_elo.tail(1)[a_team][0]
games.set_value(index, 'A_ELO', a_elo_score)
In [10]:
#Filter out early games with little ELO info
print len(games)
games = games.sort_values(by='GAME_DATE').reset_index(drop=True).ix[100:, :]
print len(games)
2460
2360
In [19]:
#Merges Last 5 data and ELO data
data = pd.merge(games[['Game_ID', 'H_ELO', 'A_ELO']], stats_5, on='Game_ID')
In [21]:
# Creates model
x_5_elo = stats_5.drop(['Game_ID','Pts_diff'], axis=1)
gs_5_elo = Game_Scores(stats_5, x_5_elo, 'Pts_diff')
In [22]:
gs_5_elo.create_rank_order_graph()
//anaconda/lib/python2.7/site-packages/matplotlib/collections.py:590: FutureWarning: elementwise comparison failed; returning scalar instead, but in the future will perform elementwise comparison
if self._edgecolors == str('face'):
In [23]:
gs_5_elo.get_model().get_mse()
Out[23]:
144.95395727768323
Content source: mprego/NBA
Similar notebooks: