wsba-hockey 1.1.3__py3-none-any.whl → 1.1.5__py3-none-any.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
wsba_hockey/wsba_main.py CHANGED
@@ -4,10 +4,10 @@ import requests as rs
4
4
  import pandas as pd
5
5
  import time
6
6
  from datetime import datetime, timedelta, date
7
- from .tools.scraping import *
8
- from .tools.xg_model import *
9
- from .tools.agg import *
10
- from .tools.plotting import *
7
+ from wsba_hockey.tools.scraping import *
8
+ from wsba_hockey.tools.xg_model import *
9
+ from wsba_hockey.tools.agg import *
10
+ from wsba_hockey.tools.plotting import *
11
11
 
12
12
  ### WSBA HOCKEY ###
13
13
  ## Provided below are all integral functions in the WSBA Hockey Python package. ##
@@ -59,7 +59,7 @@ convert_team_abbr = {'L.A':'LAK',
59
59
  'T.B':'TBL',
60
60
  'PHX':'ARI'}
61
61
 
62
- per_sixty = ['Fi','xGi','Gi','A1','A2','P1','P','OZF','NZF','DZF','FF','FA','xGF','xGA','GF','GA','CF','CA','HF','HA','Give','Take','Penl','Penl2','Penl5','Draw','Block']
62
+ per_sixty = ['Fi','xGi','Gi','A1','A2','P1','P','Si','OZF','NZF','DZF','FF','FA','xGF','xGA','GF','GA','SF','SA','CF','CA','HF','HA','Give','Take','Penl','Penl2','Penl5','Draw','Block','GSAx']
63
63
 
64
64
  #Some games in the API are specifically known to cause errors in scraping.
65
65
  #This list is updated as frequently as necessary
@@ -687,7 +687,7 @@ def nhl_shooting_impacts(agg,type):
687
687
  pos[f'{group[0]}-FNI-T'] = (pos[f'{group[0]}-FNI']/60)*pos['TOI']
688
688
 
689
689
  #Rank per 60 stats
690
- for stat in per_sixty[10:len(per_sixty)]:
690
+ for stat in per_sixty[11:len(per_sixty)]:
691
691
  pos[f'{stat}/60-P'] = pos[f'{stat}/60'].rank(pct=True)
692
692
 
693
693
  #Flip percentiles for against stats
@@ -964,12 +964,12 @@ def nhl_calculate_stats(pbp,type,season_types,game_strength,split_game=False,ros
964
964
  'Height (in)','Weight (lbs)',
965
965
  'Birthday','Age','Nationality',
966
966
  'GP','TOI',
967
- "GF","FF","xGF","xGF/FF","GF/xGF","FshF%",
968
- "GA","FA","xGA","xGA/FA","GA/xGA","FshA%",
967
+ "GF","SF","FF","xGF","xGF/FF","GF/xGF","ShF%","FshF%",
968
+ "GA","SA","FA","xGA","xGA/FA","GA/xGA","ShA%","FshA%",
969
969
  'CF','CA',
970
970
  'GSAx',
971
971
  'RushF','RushA','RushFxG','RushAxG','RushFG','RushAG'
972
- ]+[f'{stat}/60' for stat in ['FF','FA','xGF','xGA','GF','GA','CF','CA','GSAx']]]
972
+ ]+[f'{stat}/60' for stat in ['FF','FA','xGF','xGA','GF','GA','SF','SA','CF','CA','GSAx']]]
973
973
 
974
974
  #Apply shot impacts if necessary
975
975
  if shot_impact:
@@ -991,10 +991,11 @@ def nhl_calculate_stats(pbp,type,season_types,game_strength,split_game=False,ros
991
991
  complete['TOI'] = complete['TOI']/60
992
992
 
993
993
  #Add per 60 stats
994
- for stat in per_sixty[10:len(per_sixty)]:
994
+ for stat in per_sixty[11:len(per_sixty)]:
995
995
  complete[f'{stat}/60'] = (complete[stat]/complete['TOI'])*60
996
996
 
997
997
  complete['GF%'] = complete['GF']/(complete['GF']+complete['GA'])
998
+ complete['SF%'] = complete['SF']/(complete['SF']+complete['SA'])
998
999
  complete['xGF%'] = complete['xGF']/(complete['xGF']+complete['xGA'])
999
1000
  complete['FF%'] = complete['FF']/(complete['FF']+complete['FA'])
1000
1001
  complete['CF%'] = complete['CF']/(complete['CF']+complete['CA'])
@@ -1003,16 +1004,17 @@ def nhl_calculate_stats(pbp,type,season_types,game_strength,split_game=False,ros
1003
1004
  complete = complete[head+[
1004
1005
  'Season','WSBA',
1005
1006
  'GP','TOI',
1006
- "GF","FF","xGF","xGF/FF","GF/xGF","FshF%",
1007
- "GA","FA","xGA","xGA/FA","GA/xGA","FshA%",
1007
+ "GF","SF","FF","xGF","xGF/FF","GF/xGF","ShF%","FshF%",
1008
+ "GA","SA","FA","xGA","xGA/FA","GA/xGA","ShA%","FshA%",
1008
1009
  'CF','CA',
1009
- 'GF%','FF%','xGF%','CF%',
1010
+ 'GF%','SF%','FF%','xGF%','CF%',
1010
1011
  'HF','HA','HF%',
1011
1012
  'Penl','Penl2','Penl5','PIM','Draw','PENL%',
1012
1013
  'Give','Take','PM%',
1013
1014
  'Block',
1014
- 'RushF','RushA','RushFxG','RushAxG','RushFG','RushAG'
1015
- ]+[f'{stat}/60' for stat in per_sixty[10:len(per_sixty)]]]
1015
+ 'RushF','RushA','RushFxG','RushAxG','RushFG','RushAG',
1016
+ 'GSAx'
1017
+ ]+[f'{stat}/60' for stat in per_sixty[11:len(per_sixty)]]]
1016
1018
  #Apply shot impacts if necessary
1017
1019
  if shot_impact:
1018
1020
  complete = nhl_shooting_impacts(complete,'team')
@@ -1038,6 +1040,7 @@ def nhl_calculate_stats(pbp,type,season_types,game_strength,split_game=False,ros
1038
1040
  complete['FC%'] = complete['Fi']/complete['FF']
1039
1041
  complete['xGC%'] = complete['xGi']/complete['xGF']
1040
1042
  complete['GF%'] = complete['GF']/(complete['GF']+complete['GA'])
1043
+ complete['SF%'] = complete['SF']/(complete['SF']+complete['SA'])
1041
1044
  complete['xGF%'] = complete['xGF']/(complete['xGF']+complete['xGA'])
1042
1045
  complete['FF%'] = complete['FF']/(complete['FF']+complete['FA'])
1043
1046
  complete['CF%'] = complete['CF']/(complete['CF']+complete['CA'])
@@ -1098,11 +1101,11 @@ def nhl_calculate_stats(pbp,type,season_types,game_strength,split_game=False,ros
1098
1101
  'Height (in)','Weight (lbs)',
1099
1102
  'Birthday','Age','Nationality',
1100
1103
  'GP','TOI',
1101
- "Gi","A1","A2",'P1','P',
1104
+ "Gi","A1","A2",'P1','P','Si','Sh%',
1102
1105
  'Give','Take','PM%','HF','HA','HF%',
1103
1106
  "Fi","xGi",'xGi/Fi',"Gi/xGi","Fshi%",
1104
- "GF","FF","xGF","xGF/FF","GF/xGF","FshF%",
1105
- "GA","FA","xGA","xGA/FA","GA/xGA","FshA%",
1107
+ "GF","SF","FF","xGF","xGF/FF","GF/xGF","ShF%","FshF%",
1108
+ "GA","SA","FA","xGA","xGA/FA","GA/xGA","ShA%","FshA%",
1106
1109
  'Ci','CF','CA','CF%',
1107
1110
  'FF%','xGF%','GF%',
1108
1111
  'Rush',"Rush xG",'Rush G',"GC%","AC%","GI%","FC%","xGC%",
@@ -1112,6 +1115,7 @@ def nhl_calculate_stats(pbp,type,season_types,game_strength,split_game=False,ros
1112
1115
  'Block',
1113
1116
  'OZF','NZF','DZF',
1114
1117
  'OZF%','NZF%','DZF%',
1118
+ 'GSAx'
1115
1119
  ]+[f'{stat}/60' for stat in per_sixty]+type_metrics].fillna(0).sort_values(['Player','Season','Team','ID'])
1116
1120
 
1117
1121
  #Apply shot impacts if necessary (Note: this will remove skaters with fewer than 150 minutes of TOI due to the shot impact TOI rule)
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: wsba_hockey
3
- Version: 1.1.3
3
+ Version: 1.1.5
4
4
  Summary: WeakSide Breakout's complete Python package of access to hockey data, primairly including the scraping of National Hockey League schedule, play-by-play, and shifts information.
5
5
  Author-email: Owen Singh <owenbksingh@gmail.com>
6
6
  Project-URL: Homepage, https://github.com/owensingh38/wsba_hockey/
@@ -64,12 +64,18 @@ wsba.nhl_scrape_prospects('BOS')
64
64
 
65
65
 
66
66
  ## DATA ANALYTICS
67
- ### Expected Goals (WeakSide Breakout and MoneyPuck models)
67
+ ### Expected Goals
68
+ ```python
69
+ pbp = wsba.nhl_scrape_game(['2024020918'],split_shifts=False,remove=['game-end'])
70
+ pbp = wsba.nhl_apply_xG(pbp)
71
+ ```
72
+
68
73
  ### Goal Impacts and Shot Analysis
74
+
69
75
  ### Stat Aggregation
70
76
  ```python
71
77
  pbp = wsba.nhl_scrape_season('20232024',remove=[], local = True)
72
- wsba.nhl_calculate_stats(pbp,'skater',[2],['5v5','4v4','3v3'],xg='wsba',shot_impact = True)
78
+ wsba.nhl_calculate_stats(pbp,'skater',[2],['5v5','4v4','3v3'],shot_impact = True)
73
79
  ```
74
80
  ### Shot Plotting (Plots, Heatmaps, etc.)
75
81
  ```python
@@ -105,6 +111,4 @@ Dan Morse - Creator of the hockeyR package; another important inspiration and mo
105
111
 
106
112
  Patrick Bacon - Creator of TopDownHockey package
107
113
 
108
- MoneyPuck - Source of available xG data in the package
109
-
110
114
  Anyone in the NHL Public Analytics community who has stuck around and supported WeakSide Breakout Analysis hockey.
@@ -1,8 +1,8 @@
1
1
  wsba_hockey/__init__.py,sha256=yfr8z5PA503iaIQv30ngancwT_WnsuK-tZETKlHcI0M,377
2
- wsba_hockey/data_pipelines.py,sha256=wjyxw1ikv4N3kmfTuHxdHj7_W5bz0wAM-DIgxvJVg2s,10852
3
- wsba_hockey/workspace.py,sha256=ECScWNqkmx8SDoxTtZYZtM1K1_oX-wQSXXsb_1Bjca4,2014
4
- wsba_hockey/wsba_main.py,sha256=c8KEXBpjHHEadMMStMRXsNYqbvtoYdZbmOl8_FBmHQg,53761
5
- wsba_hockey/api/api/index.py,sha256=b2QEOJ72TxOCZT9KsHvIPPow0RwLRCOUyeyrIrSqb6o,5926
2
+ wsba_hockey/data_pipelines.py,sha256=SITapG3nbea6-_EsXujMW2JBQxtRaQ33XMcE6ohn2Ko,10853
3
+ wsba_hockey/workspace.py,sha256=MwuyqyLW0dHNa06WEm60RkvbFoCn8LBXhnki66V-ttY,954
4
+ wsba_hockey/wsba_main.py,sha256=RCjq0NwB82P1fXoghFp2HtDyYX5nWZQHFMQvM67Fnuk,54115
5
+ wsba_hockey/api/api/index.py,sha256=tABWg5cYCY-fPaNJ6W_bMJKEYrjn93YGy84VlkHzIXA,6853
6
6
  wsba_hockey/evidence/weakside-breakout/node_modules/duckdb/vendor.py,sha256=lmu0TB0rIYkAuV9-csFJgW-1hJojso_-EZpEoorUUKM,4949
7
7
  wsba_hockey/evidence/weakside-breakout/node_modules/flatted/python/flatted.py,sha256=ke8FuEflns-WlphCcQ9CC0qJqWqX3zEEuak74o6rgE8,3879
8
8
  wsba_hockey/evidence/weakside-breakout/node_modules/flatted/python/test.py,sha256=uTOn6HJd7KeY_PTRvvufv60dmvON3KWp3nnqACj8IlA,2129
@@ -105,6 +105,8 @@ wsba_hockey/evidence/weakside-breakout/node_modules/sqlite3/node_modules/node-gy
105
105
  wsba_hockey/evidence/weakside-breakout/node_modules/sqlite3/node_modules/node-gyp/gyp/tools/pretty_sln.py,sha256=b_Fxm-SXUCPL3Tix4EyNwZNmQ-zkeRIFFmuL0R5wFhw,5482
106
106
  wsba_hockey/evidence/weakside-breakout/node_modules/sqlite3/node_modules/node-gyp/gyp/tools/pretty_vcproj.py,sha256=AwQrxK1F-jhjsbbT35XQjrvWNbc3IBFaKXoJogqMh_o,10633
107
107
  wsba_hockey/evidence/weakside-breakout/node_modules/sqlite3/node_modules/node-gyp/test/fixtures/test-charmap.py,sha256=5raXzaQnO2eJnrlFtlDtWftryhZX7Fj0amFW3hdSnhE,547
108
+ wsba_hockey/evidence/weakside-breakout/wsba_nhl_apps/wsba_nhl_apps/duos/app.py,sha256=PBdVi5qnR3Ye_dNjgqxmh5LIe6Tu_yu9-gebaaQnTfA,7947
109
+ wsba_hockey/evidence/weakside-breakout/wsba_nhl_apps/wsba_nhl_apps/duos/calc.py,sha256=5T_TselP85ofTwf0inl3P7dtyRcosWg5ngUUL95jzLw,8789
108
110
  wsba_hockey/evidence/weakside-breakout/wsba_nhl_apps/wsba_nhl_apps/game_stats/app.py,sha256=P3vDaWyuij-DXlwk6XJ0aiAjrfs-NHi5hmngk-c9r8U,12704
109
111
  wsba_hockey/evidence/weakside-breakout/wsba_nhl_apps/wsba_nhl_apps/game_stats/name_fix.py,sha256=v7IN4JWrudeFuIsBdjLLlHsr9wU65jYi9-34pI_ZpoM,1488
110
112
  wsba_hockey/evidence/weakside-breakout/wsba_nhl_apps/wsba_nhl_apps/goalie/app.py,sha256=f5uwSvNKbtud91e7B17zC0HbPnYIvUgnShhdJZCOtkE,3820
@@ -113,10 +115,13 @@ wsba_hockey/evidence/weakside-breakout/wsba_nhl_apps/wsba_nhl_apps/goalie/rink_p
113
115
  wsba_hockey/evidence/weakside-breakout/wsba_nhl_apps/wsba_nhl_apps/heatmaps/app.py,sha256=XDoZ6-uTgT1vCAOjJ8KjW3r7T0eNDfShGScDxY95HyU,4255
114
116
  wsba_hockey/evidence/weakside-breakout/wsba_nhl_apps/wsba_nhl_apps/heatmaps/plot.py,sha256=QERvb9I_OJPhrz84Omsf9Mq6JjaECark_ql1KfWha-I,4648
115
117
  wsba_hockey/evidence/weakside-breakout/wsba_nhl_apps/wsba_nhl_apps/heatmaps/rink_plot.py,sha256=RB_csrnTxlFR4OyFEhZXbHDSR3dP-KgME0xGBR2JE-4,11994
116
- wsba_hockey/evidence/weakside-breakout/wsba_nhl_apps/wsba_nhl_apps/matchups/app.py,sha256=JFWhfsyMhCnvLVyIfYzgZE2xT8_mnsOVWVXNi2EF9rM,6136
118
+ wsba_hockey/evidence/weakside-breakout/wsba_nhl_apps/wsba_nhl_apps/line-combos/app.py,sha256=V9tcLkASOpvlnYNYwjYhxi5CgL1S8NUBmbnYcWjBSQ0,9457
119
+ wsba_hockey/evidence/weakside-breakout/wsba_nhl_apps/wsba_nhl_apps/line-combos/plot.py,sha256=r-kPrlup8WrfKs5-Q0RGnLmF0hCOy7zWA_uKDvGy18o,14552
120
+ wsba_hockey/evidence/weakside-breakout/wsba_nhl_apps/wsba_nhl_apps/line-combos/rink_plot.py,sha256=RB_csrnTxlFR4OyFEhZXbHDSR3dP-KgME0xGBR2JE-4,11994
121
+ wsba_hockey/evidence/weakside-breakout/wsba_nhl_apps/wsba_nhl_apps/matchups/app.py,sha256=dRpnCLE9G2H7VOCBgHUOfEmoruEkUcnS2qhyiV54dQ8,6136
117
122
  wsba_hockey/evidence/weakside-breakout/wsba_nhl_apps/wsba_nhl_apps/matchups/plot.py,sha256=t3XRT88L0lh5jE-PSSboLZZ-Yg_u8L4gzJh-egWiRcY,3935
118
123
  wsba_hockey/evidence/weakside-breakout/wsba_nhl_apps/wsba_nhl_apps/matchups/rink_plot.py,sha256=RB_csrnTxlFR4OyFEhZXbHDSR3dP-KgME0xGBR2JE-4,11994
119
- wsba_hockey/evidence/weakside-breakout/wsba_nhl_apps/wsba_nhl_apps/pbp/app.py,sha256=oH_Su2Z9iCfwsgW2aINzzxlo1fCq6dnEkTMbngjw9vg,13811
124
+ wsba_hockey/evidence/weakside-breakout/wsba_nhl_apps/wsba_nhl_apps/pbp/app.py,sha256=hbMBjctovACO6KXswvb6gsN8AwQCOtT0BHHKR_EGBQM,13841
120
125
  wsba_hockey/evidence/weakside-breakout/wsba_nhl_apps/wsba_nhl_apps/pbp/plot.py,sha256=zfUTSic2M1AfXufvLFDTxxvpqQXw0RzwwQTGxALjjSw,2779
121
126
  wsba_hockey/evidence/weakside-breakout/wsba_nhl_apps/wsba_nhl_apps/pbp/rink_plot.py,sha256=RB_csrnTxlFR4OyFEhZXbHDSR3dP-KgME0xGBR2JE-4,11994
122
127
  wsba_hockey/evidence/weakside-breakout/wsba_nhl_apps/wsba_nhl_apps/skater/app.py,sha256=fNGWRHgqZr2G_QgACzh1l93ob-ugik1F9Wnq-sowWKU,4308
@@ -127,17 +132,17 @@ wsba_hockey/evidence/weakside-breakout/wsba_nhl_apps/wsba_nhl_apps/team_heatmaps
127
132
  wsba_hockey/evidence/weakside-breakout/wsba_nhl_apps/wsba_nhl_apps/team_heatmaps/rink_plot.py,sha256=RB_csrnTxlFR4OyFEhZXbHDSR3dP-KgME0xGBR2JE-4,11994
128
133
  wsba_hockey/flask/app.py,sha256=J51iA65h9xyJfLgdH0h2sVSbfIR7xgGd2Oy8bJsmpAk,1873
129
134
  wsba_hockey/tools/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
130
- wsba_hockey/tools/agg.py,sha256=SYZDykUQFygDfRaazlBMKcfs_1eYP7GTJNpUnNKHH-8,21409
135
+ wsba_hockey/tools/agg.py,sha256=0tO-clSQBloG4YHXuaqFqllew3mU95YU6torJAIOZmM,23320
131
136
  wsba_hockey/tools/plotting.py,sha256=81hBaM7tcwUNB4-tovPn7QreOUz6B2NuI_SR4-djVSk,6029
132
- wsba_hockey/tools/scraping.py,sha256=y6vvotniMaGS6-bNg0Vct1gUN3gAsKEy5FLXGkgi1w0,45657
137
+ wsba_hockey/tools/scraping.py,sha256=h6C016U0qmNQpHWMh7Xvn3ud57zKzRbRQ06Odl-rC_I,52573
133
138
  wsba_hockey/tools/xg_model.py,sha256=nOr_2RBijLgPmJ0TTs4wbSsORYmRqWCKRjLKDm7sAhI,18342
134
139
  wsba_hockey/tools/archive/old_scraping.py,sha256=hEjMI1RtfeZnf0RBiJFI38oXkLZ3WofeH5xqcF4pzgM,49585
135
140
  wsba_hockey/tools/utils/__init__.py,sha256=vccXhOtzARoR99fmEWU1OEI3qCIdQ9Z42AlRA_BUhrs,114
136
141
  wsba_hockey/tools/utils/config.py,sha256=D3Uk05-YTyrhfReMTTLfNI3HN_rON2uo_CDE9oER3Lg,351
137
142
  wsba_hockey/tools/utils/save_pages.py,sha256=CsyL_0n-b-4pJoUauwU3HpnCO6n69-RlBMJQBd_qGDc,4979
138
143
  wsba_hockey/tools/utils/shared.py,sha256=dH_JwZfia5fib8rksy5sW-mBp0pluBPvw37Vdr8Kap0,14211
139
- wsba_hockey-1.1.3.dist-info/licenses/LICENSE,sha256=Nr_Um1Pd5FQJTWWgm7maZArdtYMbDhzXYSwyJIZDGik,1114
140
- wsba_hockey-1.1.3.dist-info/METADATA,sha256=pGBQxsZfILi46XgUEfLDk3Q5TEadxe3pJNxCDGFZVpk,3542
141
- wsba_hockey-1.1.3.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
142
- wsba_hockey-1.1.3.dist-info/top_level.txt,sha256=acU7s3x-RZC1zGiqCOmO0g267iqCg34lzIfdmYxxGmQ,12
143
- wsba_hockey-1.1.3.dist-info/RECORD,,
144
+ wsba_hockey-1.1.5.dist-info/licenses/LICENSE,sha256=Nr_Um1Pd5FQJTWWgm7maZArdtYMbDhzXYSwyJIZDGik,1114
145
+ wsba_hockey-1.1.5.dist-info/METADATA,sha256=nvE9FZLlmofZ-X6LG2RM4dYGbZWDbIsbafZbaDrZ6qk,3566
146
+ wsba_hockey-1.1.5.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
147
+ wsba_hockey-1.1.5.dist-info/top_level.txt,sha256=acU7s3x-RZC1zGiqCOmO0g267iqCg34lzIfdmYxxGmQ,12
148
+ wsba_hockey-1.1.5.dist-info/RECORD,,