nesticot commited on
Commit
3f2f598
1 Parent(s): 8830a95

Upload 3 files

Browse files
Files changed (3) hide show
  1. app.py +249 -354
  2. team_abv.csv +1 -1
  3. yahoo_to_nhl.csv +805 -0
app.py CHANGED
@@ -1,48 +1,29 @@
 
 
1
  import requests
2
  import pandas as pd
3
  import seaborn as sns
4
  import matplotlib.pyplot as plt
5
  from matplotlib.pyplot import figure
6
  from matplotlib.offsetbox import OffsetImage, AnnotationBbox
7
- #from scipy import stats
8
  import matplotlib.lines as mlines
9
  import matplotlib.transforms as mtransforms
10
  import numpy as np
 
11
  #import plotly.express as px
12
  #!pip install chart_studio
13
- # import chart_studio.tools as tls
14
- #from bs4 import BeautifulSoup
15
  import matplotlib.pyplot as plt
16
  import numpy as np
17
  import matplotlib.font_manager as font_manager
18
  from datetime import datetime
19
  import pytz
20
- from datetime import date
21
- datetime.now(pytz.timezone('US/Pacific')).strftime('%B %d, %Y')
22
- # Configure Notebook
23
- #%matplotlib inline
24
- plt.style.use('fivethirtyeight')
25
- sns.set_context("notebook")
26
- import warnings
27
- warnings.filterwarnings('ignore')
28
- #from urllib.request import urlopen
29
- import json
30
- from datetime import date, timedelta
31
- #import dataframe_image as dfi
32
- #from os import listdir
33
- #from os.path import isfile, join
34
- import datetime
35
- import seaborn as sns
36
- import os
37
- import calendar
38
- #from IPython.display import display, HTML
39
- import matplotlib.image as mpimg
40
- #from skimage import io
41
- #import difflib
42
-
43
-
44
- from datetime import datetime
45
- import pytz
46
  datetime.now(pytz.timezone('US/Pacific')).strftime('%B %d, %Y')
47
  # Configure Notebook
48
  #%matplotlib inline
@@ -55,117 +36,43 @@ warnings.filterwarnings('ignore')
55
  # import yahoo_oauth
56
  import json
57
  #import openpyxl
58
- #from sklearn import preprocessing
59
- from PIL import Image
60
- import logging
61
- import matplotlib.patches as patches
62
- from matplotlib.patches import Rectangle
63
- from matplotlib.font_manager import FontProperties
64
- from matplotlib.offsetbox import OffsetImage, AnnotationBbox
 
 
65
 
66
- import requests
67
- #import pickle
68
- import pandas as pd
69
-
70
- # # Loop over the counter and format the API call
71
- r = requests.get('https://statsapi.web.nhl.com/api/v1/schedule?startDate=2023-10-01&endDate=2024-06-01')
72
- schedule = r.json()
 
 
 
 
 
 
 
 
 
73
 
74
- def flatten(t):
75
- return [item for sublist in t for item in sublist]
 
76
 
77
- game_id = flatten([[x['gamePk'] for x in schedule['dates'][y]['games']] for y in range(0,len(schedule['dates']))])
78
- game_date = flatten([[x['gameDate'] for x in schedule['dates'][y]['games']] for y in range(0,len(schedule['dates']))])
79
- game_home = flatten([[x['teams']['home']['team']['name'] for x in schedule['dates'][y]['games']] for y in range(0,len(schedule['dates']))])
80
- game_away = flatten([[x['teams']['away']['team']['name'] for x in schedule['dates'][y]['games']] for y in range(0,len(schedule['dates']))])
81
 
82
- schedule_df = pd.DataFrame(data={'game_id': game_id, 'game_date' : game_date, 'game_home' : game_home, 'game_away' : game_away})
83
- schedule_df.game_date = pd.to_datetime(schedule_df['game_date']).dt.tz_convert(tz='US/Eastern').dt.date
84
- schedule_df = schedule_df.replace('Montréal Canadiens','Montreal Canadiens')
85
- schedule_df.head()
86
 
87
- team_abv = pd.read_csv('team_abv.csv')
88
- yahoo_weeks = pd.read_csv('yahoo_weeks.csv')
89
- #yahoo_weeks['Number'] = yahoo_weeks['Number'].astype(int)
90
- yahoo_weeks['Start'] = pd.to_datetime(yahoo_weeks['Start'])
91
- yahoo_weeks['End'] = pd.to_datetime(yahoo_weeks['End'])
92
- yahoo_weeks.head(5)
93
-
94
- def highlight_cols(s):
95
- color = '#C2FEE9'
96
- return 'background-color: %s' % color
97
- def highlight_cells(val):
98
- color = 'white' if val == ' ' else ''
99
- return 'background-color: {}'.format(color)
100
 
101
- import matplotlib.pyplot as plt
102
- import matplotlib.colors
103
- cmap_total = matplotlib.colors.LinearSegmentedColormap.from_list("", ["#56B4E9","#FFFFFF","#F0E442"])
104
- cmap_off = matplotlib.colors.LinearSegmentedColormap.from_list("", ["#FFFFFF","#F0E442"])
105
- cmap_back = matplotlib.colors.LinearSegmentedColormap.from_list("", ["#FFFFFF","#56B4E9"])
106
- cmap_sum = matplotlib.colors.LinearSegmentedColormap.from_list("", ["#FFFFFF","#F0E442"])
107
-
108
- schedule_df = schedule_df.merge(right=team_abv,left_on='game_away',right_on='team_name',how='inner',suffixes=['','_away'])
109
- schedule_df = schedule_df.merge(right=team_abv,left_on='game_home',right_on='team_name',how='inner',suffixes=['','_home'])
110
- schedule_df['away_sym'] = '@'
111
- schedule_df['home_sym'] = 'vs'
112
-
113
-
114
- #if not os.path.isfile('standings/standings_'+str(date.today())+'.csv'):
115
- standings_df_old = pd.read_html('https://www.hockey-reference.com/leagues/NHL_2023_standings.html')[0].append(pd.read_html('https://www.hockey-reference.com/leagues/NHL_2023_standings.html')[1])
116
- # standings_df_old.to_csv('standings/standings_'+str(date.today())+'.csv')
117
- #standings_df_old = pd.read_csv('standings/standings_'+str(date.today())+'.csv',index_col=[0])
118
-
119
- standings_df = standings_df_old[standings_df_old['Unnamed: 0'].str[-8:] != 'Division'].sort_values('Unnamed: 0').reset_index(drop=True).rename(columns={'Unnamed: 0':'Team'})#.drop(columns='Unnamed: 0')
120
- #standings_df = standings_df.replace('St. Louis Blues','St Louis Blues')
121
- standings_df['GF/GP'] = standings_df['GF'].astype(int)/standings_df['GP'].astype(int)
122
- standings_df['GA/GP'] = standings_df['GA'].astype(int)/standings_df['GP'].astype(int)
123
- standings_df['GF_Rank'] = standings_df['GF/GP'].rank(ascending=True,method='first')/10-1.65
124
- standings_df['GA_Rank'] = standings_df['GA/GP'].rank(ascending=False,method='first')/10-1.65
125
- standings_df.Team = standings_df.Team.str.strip('*')
126
- standings_df = standings_df.merge(right=team_abv,left_on='Team',right_on='team_name')
127
-
128
- schedule_stack = pd.DataFrame()
129
- schedule_stack['date'] = pd.to_datetime(list(schedule_df['game_date'])+list(schedule_df['game_date']))
130
- schedule_stack['team'] = list(schedule_df['team_name'])+list(schedule_df['team_name_home'])
131
- schedule_stack['team_abv'] = list(schedule_df['team_abv'])+list(schedule_df['team_abv_home'])
132
- schedule_stack['symbol'] = list(schedule_df['away_sym'])+list(schedule_df['home_sym'])
133
- schedule_stack['team_opponent'] = list(schedule_df['team_name_home'])+list(schedule_df['team_name'])
134
- schedule_stack['team_abv_home'] = list(schedule_df['team_abv_home'])+list(schedule_df['team_abv'])
135
- schedule_stack = schedule_stack.merge(right=standings_df[['team_abv','GF_Rank']],left_on='team_abv',right_on='team_abv',how='inner',suffixes=("",'_y'))
136
- schedule_stack = schedule_stack.merge(right=standings_df[['team_abv','GA_Rank']],left_on='team_abv_home',right_on='team_abv',how='inner',suffixes=("",'_y'))
137
-
138
- schedule_stack = schedule_stack.merge(right=standings_df[['team_abv','GF_Rank']],left_on='team_abv',right_on='team_abv',how='inner',suffixes=("",'_y'))
139
- schedule_stack = schedule_stack.merge(right=standings_df[['team_abv','GA_Rank']],left_on='team_abv_home',right_on='team_abv',how='inner',suffixes=("",'_y'))
140
-
141
-
142
- list_o = schedule_stack.sort_values(['team','date'],ascending=[True,True]).reset_index(drop=True)
143
- new_list = [x - y for x, y in zip(list_o['date'][1:], list_o['date'])]
144
- b2b_list = [0] + [x.days for x in new_list]
145
- b2b_list = [1 if x==1 else 0 for x in b2b_list]
146
- test = list(schedule_stack.groupby(by='date').count()['team'])
147
- offnight = [1 if x<15 else 0 for x in test]
148
- offnight_df = pd.DataFrame({'date':schedule_stack.sort_values('date').date.unique(),'offnight':offnight}).sort_values('date').reset_index(drop=True)
149
- schedule_stack = schedule_stack.merge(right=offnight_df,left_on='date',right_on='date',how='right')
150
- schedule_stack = schedule_stack.sort_values(['team','date'],ascending=[True,True]).reset_index(drop=True)
151
- schedule_stack['b2b'] = b2b_list
152
-
153
- schedule_stack.date = pd.to_datetime(schedule_stack.date)
154
-
155
- away_b2b = []
156
- home_b2b = []
157
- for i in range(0,len(schedule_stack)):
158
- away_b2b.append(schedule_stack[(schedule_stack.date[i]==schedule_stack.date)&(schedule_stack.team_opponent[i]==schedule_stack.team)].reset_index(drop=True)['b2b'][0])
159
- home_b2b.append(schedule_stack[(schedule_stack.date[i]==schedule_stack.date)&(schedule_stack.team[i]==schedule_stack.team)].reset_index(drop=True)['b2b'][0])
160
-
161
- schedule_stack['away_b2b'] = away_b2b
162
- schedule_stack['home_b2b'] = home_b2b
163
-
164
- schedule_stack['away_b2b'] = schedule_stack['away_b2b'].replace(1,' &#128564;')
165
- schedule_stack['away_b2b'] = schedule_stack['away_b2b'].replace(0,'')
166
- schedule_stack.head()
167
-
168
- FontProperties(fname='/System/Library/Fonts/Apple Color Emoji.ttc')
169
  try:
170
  data_r = requests.get("https://pub-api-ro.fantasysports.yahoo.com/fantasy/v2/league/427.l.public;out=settings/players;position=ALL;start=0;count=3000;sort=rank_season;search=;out=percent_owned;out=auction_values,ranks;ranks=season;ranks_by_position=season;out=expert_ranks;expert_ranks.rank_type=projected_season_remaining/draft_analysis;cut_types=diamond;slices=last7days?format=json_f").json()
171
  key_check = data_r['fantasy_content']['league']['players']
@@ -186,7 +93,6 @@ for x in data_r['fantasy_content']['league']['players']:
186
  single_list.append(x['player']['name']['last'])
187
  single_list.append(x['player']['draft_analysis']['average_pick'])
188
  single_list.append(x['player']['average_auction_cost'])
189
- single_list.append(x['player']['projected_auction_value'])
190
  single_list.append(x['player']['display_position'])
191
  single_list.append(x['player']['editorial_team_abbr'])
192
  if 'value' in x['player']['percent_owned']:
@@ -196,274 +102,265 @@ for x in data_r['fantasy_content']['league']['players']:
196
  total_list.append(single_list)
197
 
198
 
199
- df_2023 = pd.DataFrame(data=total_list,columns=['player_id','rank_value','full','first','last','average_pick', 'average_cost','display_position','editorial_team_abbr','percent_owned'])
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
200
 
201
- week_dict = yahoo_weeks.set_index('Number')['Week'].sort_index().to_dict()
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
202
 
203
  from shiny import ui, render, App
204
  import matplotlib.image as mpimg
205
- # app_ui = ui.page_fluid(
206
-
207
- # # ui.output_plot("plot"),
208
- # #ui.h2('MLB Batter Launch Angle vs Exit Velocity'),
209
- # ui.layout_sidebar(
210
- # ui.panel_sidebar(
211
- # ui.input_select("id", "Select Batter",batter_dict),
212
-
213
- # ui.input_select("plot_id", "Select Plot",{'scatter':'Scatter Plot','dist':'Distribution Plot'})))
214
- # ,
215
-
216
- # ui.panel_main(ui.output_plot("plot",height = "750px",width="1250px")),
217
- # #ui.download_button('test','Download'),
218
- # )
219
- app_ui = ui.page_fluid(ui.layout_sidebar(
220
- # Available themes:
221
- # cerulean, cosmo, cyborg, darkly, flatly, journal, litera, lumen, lux,
222
- # materia, minty, morph, pulse, quartz, sandstone, simplex, sketchy, slate,
223
- # solar, spacelab, superhero, united, vapor, yeti, zephyr
224
-
225
  ui.panel_sidebar(
226
- ui.input_select("week_id", "Select Week (Set as Season for Custom Date Range)",week_dict,width=1),
227
- ui.input_select("sort_id", "Sort Column",['Score','Team','Total','Off-Night','B2B'],width=1),
228
- ui.input_switch("a_d_id", "Ascending?"),
229
- #ui.input_select("date_id", "Select Date",yahoo_weeks['Week'],width=1),
230
- ui.input_date_range("date_range_id", "Date range input",start = datetime.today().date(), end = datetime.today().date() + timedelta(days=6)),
231
- ui.output_table("result"),width=3),
232
-
233
-
234
  ui.panel_main(ui.tags.h3(""),
235
  ui.div({"style": "font-size:2em;"},ui.output_text("txt_title")),
236
  #ui.tags.h2("Fantasy Hockey Schedule Summary"),
237
- ui.tags.h5("Created By: @TJStats, Data: NHL"),
238
  ui.div({"style": "font-size:1.2em;"},ui.output_text("txt")),
239
- ui.output_table("schedule_result"),
240
- ui.tags.h5('Legend'),
241
- ui.output_table("schedule_result_legend"),
242
- ui.tags.h6('An Off Night is defined as a day in which less than half the teams in the NHL are playing'),
243
- ui.tags.h6('The scores are determined by using games played, off-nights, B2B, and strength of opponents') )
244
-
245
- ))
246
- # ui.row(
247
- # ui.column(
248
- # 3,
249
- # ui.input_date("x", "Date input"),),
250
- # ui.column(
251
- # 1,
252
- # ui.input_select("level_id", "Select Level",level_dict,width=1)),
253
- # ui.column(
254
- # 3,
255
- # ui.input_select("stat_id", "Select Stat",plot_dict_small,width=1)),
256
- # ui.column(
257
- # 2,
258
- # ui.input_numeric("n", "Rolling Window Size", value=50)),
259
- # ),
260
- # ui.output_table("result_batters")),
261
-
262
- # ui.nav(
263
- # "Pitchers",
264
-
265
- # ui.row(
266
- # ui.column(
267
- # 3,
268
- # ui.input_select("id_pitch", "Select Pitcher",pitcher_dict,width=1,selected=675911),
269
- # ),
270
- # ui.column(
271
- # 1,
272
- # ui.input_select("level_id_pitch", "Select Level",level_dict,width=1)),
273
- # ui.column(
274
- # 3,
275
- # ui.input_select("stat_id_pitch", "Select Stat",plot_dict_small_pitch,width=1)),
276
- # ui.column(
277
- # 2,
278
- # ui.input_numeric("n_pitch", "Rolling Window Size", value=50)),
279
- # ),
280
- # ui.output_table("result_pitchers")),
281
- # )
282
- # )
283
- # )
284
 
285
 
286
 
287
 
288
  from urllib.request import Request, urlopen
 
 
289
  # importing OpenCV(cv2) module
290
 
291
 
292
 
293
 
 
294
  def server(input, output, session):
295
 
 
296
  @output
297
  @render.text
298
  def txt():
299
-
300
- week_set = int(input.week_id())
301
- if week_set != 0:
302
- if pd.to_datetime(yahoo_weeks[yahoo_weeks.Number == week_set]['Start'].values[0]).year != pd.to_datetime(yahoo_weeks[yahoo_weeks.Number == week_set]['End'].values[0]).year:
303
-
304
- return f'{pd.to_datetime(yahoo_weeks[yahoo_weeks.Number == week_set]["Start"].values[0]).strftime("%B %d, %Y")} to {pd.to_datetime(yahoo_weeks[yahoo_weeks.Number == week_set]["End"].values[0]).strftime("%B %d, %Y")}'
305
- else:
306
- if pd.to_datetime(yahoo_weeks[yahoo_weeks.Number == week_set]["Start"].values[0]).month != pd.to_datetime(yahoo_weeks[yahoo_weeks.Number == week_set]["End"].values[0]).month:
307
- return f'{pd.to_datetime(yahoo_weeks[yahoo_weeks.Number == week_set]["Start"].values[0]).strftime("%B %d")} to {pd.to_datetime(yahoo_weeks[yahoo_weeks.Number == week_set]["End"].values[0]).strftime("%B %d, %Y")}'
308
- else:
309
- return f'{pd.to_datetime(yahoo_weeks[yahoo_weeks.Number == week_set]["Start"].values[0]).strftime("%B %d")} to {pd.to_datetime(yahoo_weeks[yahoo_weeks.Number == week_set]["End"].values[0]).strftime("%d, %Y")}'
310
- else:
311
- if input.date_range_id()[0].year != input.date_range_id()[1].year:
312
-
313
- return f'{input.date_range_id()[0].strftime("%B %d, %Y")} to {input.date_range_id()[1].strftime("%B %d, %Y")}'
314
- else:
315
- if input.date_range_id()[0].month != input.date_range_id()[1].month:
316
- return f'{input.date_range_id()[0].strftime("%B %d")} to {input.date_range_id()[1].strftime("%B %d, %Y")}'
317
- else:
318
- return f'{input.date_range_id()[0].strftime("%B %d")} to {input.date_range_id()[1].strftime("%d, %Y")}'
319
-
320
-
321
  @output
322
  @render.text
323
  def txt_title():
324
- week_set = int(input.week_id())
325
- if week_set != 0:
326
- return f'Fantasy Hockey Schedule Summary - Yahoo - Week {input.week_id()}'
327
- else:
328
- return f'Fantasy Hockey Schedule Summary'
329
-
330
- @output
331
- @render.table
332
- def result():
333
- #print(yahoo_weeks)
334
- return yahoo_weeks[['Week','Start','End']]
335
-
336
- @output
337
- @render.table
338
- def schedule_result():
339
-
340
-
341
- week_set = int(input.week_id())
342
- print(week_set)
343
 
344
- if week_set == 0:
345
- start_point = input.date_range_id()[0]
346
- end_point = input.date_range_id()[1]
347
- else:
348
- start_point = yahoo_weeks[yahoo_weeks.Number==week_set].reset_index(drop=True)['Start'][0]
349
- end_point = yahoo_weeks[yahoo_weeks.Number==week_set].reset_index(drop=True)['End'][0]
350
 
351
 
352
- sort_value='Score'
353
- ascend=False
354
-
355
- weekly_stack = schedule_stack[(schedule_stack['date'].dt.date>=start_point)&(schedule_stack['date'].dt.date<=end_point)]
356
- date_list = pd.date_range(start_point,end_point,freq='d')
357
- test_list = [[]] * len(date_list)
358
 
359
 
 
 
 
360
 
361
- for i in range(0,len(date_list)):
362
- test_list[i] = team_abv.merge(right=weekly_stack[weekly_stack['date']==date_list[i]],left_on='team_abv',right_on='team_abv',how='left')
363
- test_list[i] = test_list[i].fillna("")
364
- test_list[i]['new_text'] = test_list[i]['symbol'] + ' '+ test_list[i]['team_abv_home'] + test_list[i]['away_b2b']
365
 
 
 
366
 
367
- test_df = pd.DataFrame()
368
- test_df['Team'] = list(team_abv['team_abv'])
369
- test_df['Total'] = test_df.merge(right=weekly_stack.groupby('team_abv')['team_abv'].apply(lambda x: x[x != ''].count()),left_on=['Team'],right_index=True,how='left').fillna(0)['team_abv']
370
- test_df['Off-Night'] = test_df.merge(right=weekly_stack.groupby('team_abv').sum()['offnight'],left_on=['Team'],right_index=True,how='left').fillna(0)['offnight']
371
- test_df['B2B']= test_df.merge(right=weekly_stack.groupby('team_abv').sum()['b2b'],left_on=['Team'],right_index=True,how='left').fillna(0)['b2b']
372
 
 
 
 
 
 
 
 
 
373
 
 
 
 
 
 
374
 
375
- gf_rank = np.array(test_df.merge(right=weekly_stack.groupby('team_abv').mean()['GF_Rank'],left_on=['Team'],right_index=True,how='left').fillna(0)['GF_Rank'])
376
- ga_rank = np.array(test_df.merge(right=weekly_stack.groupby('team_abv').mean()['GA_Rank'],left_on=['Team'],right_index=True,how='left').fillna(0)['GA_Rank'])
377
 
 
 
 
378
 
379
- #games_vs_tired = np.array([float(i)*0.4 for i in list(weekly_stack.groupby('team_abv')['away_b2b'].apply(lambda x: x[x != ''].count()))])
380
 
381
- games_vs_tired = 0.4*np.array(test_df.merge(right=weekly_stack.groupby('team_abv')['away_b2b'].apply(lambda x: x[x != ''].count()),left_on=['Team'],right_index=True,how='left').fillna(0)['away_b2b'])
 
 
382
 
 
 
383
 
384
- team_score = test_df['Total']+test_df['Off-Night']*0.5+test_df['B2B']*-0.2+games_vs_tired*0.3+gf_rank*0.1+ga_rank*0.1
385
 
386
- test_df['Score'] = team_score
 
 
 
 
 
387
 
 
 
 
 
 
 
388
 
389
- cols = test_df.columns.tolist();
390
- L = len(cols)
391
- test_df = test_df[cols[4:]+cols[0:4]]
392
- #return test_df#[cols[4:]+cols[0:4]]
393
 
394
- test_df = test_df.sort_values(by=[sort_value,'Score'],ascending = ascend)
 
395
 
396
- for i in range(0,len(date_list)):
397
- test_df[calendar.day_name[date_list[i].weekday()]+'<br>'+str(date_list[i].month)+'-'+'{:02d}'.format(date_list[i].day)] = test_list[i]['new_text']
398
 
399
- row = ['']*L
400
- for x in test_df[test_df.columns[L:]]:
401
- row.append(int(sum(test_df[x]!=" ")/2))
 
 
 
 
 
 
402
 
403
- test_df = test_df.sort_values(by=input.sort_id(),ascending=input.a_d_id())
 
 
404
 
405
- test_df.loc[32] = row
406
- #test_df_html = HTML( test_df.to_html().replace("\\n","<br>") )
407
- offnight_list = [True if x <8 else False for x in test_df.iloc[-1][L:]]
408
 
409
- test_df.style.applymap(highlight_cols,subset = ((list(test_df.index[:-1]),test_df.columns[L:][offnight_list])))
410
- test_df_style = test_df.style.set_properties(**{'border': '3 px'},overwrite=False).set_table_styles([{
411
- 'selector': 'caption',
412
- 'props': [
413
- ('color', ''),
414
- ('fontname', 'Century Gothic'),
415
- ('font-size', '20px'),
416
- ('font-style', 'italic'),
417
- ('font-weight', ''),
418
- ('text-align', 'centre'),
419
- ]
420
 
421
- },{'selector' :'th', 'props':[('text-align', 'center'),('Height','px'),('color','black'),('border', '1px black solid !important')]},{'selector' :'td', 'props':[('text-align', 'center'),('font-size', '18px'),('color','black')]}],overwrite=False).set_properties(
422
- **{'background-color':'White','index':'White','min-width':'75px'},overwrite=False).set_properties(
423
- **{'background-color':'White','index':'White','min-width':'100px'},overwrite=False,subset = ((list(test_df.index[:]),test_df.columns[5:]))).set_table_styles(
424
- [{'selector': 'th:first-child', 'props': [('background-color', 'white')]}],overwrite=False).set_table_styles(
425
- [{'selector': 'tr:first-child', 'props': [('background-color', 'white')]}],overwrite=False).set_table_styles(
426
- [{'selector': 'tr', 'props': [('line-height', '20px')]}],overwrite=False).set_properties(
427
- **{'Height': '8px'},**{'text-align': 'center'},overwrite=False).hide_index()
428
 
429
- test_df_style = test_df_style.applymap(highlight_cols,subset = ((list(test_df.index[:-1]),test_df.columns[L:][offnight_list])))
430
 
431
- test_df_style = test_df_style.applymap(highlight_cells)
432
- test_df_style = test_df_style.background_gradient(cmap=cmap_total,subset = ((list(test_df.index[:-1]),test_df.columns[0])))
433
- test_df_style = test_df_style.background_gradient(cmap=cmap_total,vmin=0,vmax=np.max(test_df.Total[:len(test_df)-1]),subset = ((list(test_df.index[:-1]),test_df.columns[2])))
434
- test_df_style = test_df_style.background_gradient(cmap=cmap_off,subset = ((list(test_df.index[:-1]),test_df.columns[3])))
435
- test_df_style = test_df_style.background_gradient(cmap=cmap_back,subset = ((list(test_df.index[:-1]),test_df.columns[4])))
436
- test_df_style = test_df_style.background_gradient(cmap=cmap_sum,subset = ((list(test_df.index[-1:]),test_df.columns[L:])),axis=1)
437
- test_df_style = test_df_style.set_properties(
438
- **{'border': '1px black solid !important'},subset = ((list(test_df.index[:-1]),test_df.columns[:]))).set_properties(
439
- **{'min-width':'85px'},subset = ((list(test_df.index[:-1]),test_df.columns[L:])),overwrite=False).set_properties(**{
440
- 'color': 'black'},overwrite=False).set_properties(
441
- **{'border': '1px black solid !important'},subset = ((list(test_df.index[:]),test_df.columns[L:])))
442
 
443
- test_df_style = test_df_style.format(
444
- '{:.0f}',subset=(test_df.index[:-1],test_df.columns[2:L]))
445
 
446
- test_df_style = test_df_style.format(
447
- '{:.1f}',subset=(test_df.index[:-1],test_df.columns[0]))
448
 
 
449
 
450
- print('made it to teh end')
451
- return test_df_style
452
 
 
 
453
 
454
- #return exit_velo_df_codes_summ_time_style_set
 
 
 
 
 
 
 
 
 
455
 
456
- # @output
457
- # @render.plot(alt="A histogram")
458
- # def plot_pitch():
459
- # p
460
- @output
461
- @render.table
462
- def schedule_result_legend():
463
 
464
- off_b2b_df = pd.DataFrame(data={'off':'Off-Night','b2b':'Tired Opp. &#128564;'},index=[0])
465
- #off_b2b_df.style.applymap(highlight_cols,subset = ((list(off_b2b_df.index[:-1]),off_b2b_df.columns[0])))
466
- off_b2b_df_style = off_b2b_df.style.set_properties(**{'border': '3 px'},overwrite=False).set_table_styles([{
467
  'selector': 'caption',
468
  'props': [
469
  ('color', ''),
@@ -474,26 +371,24 @@ def server(input, output, session):
474
  ('text-align', 'centre'),
475
  ]
476
 
477
- },{'selector' :'th', 'props':[('text-align', 'center'),('Height','px'),('color','black'),(
478
- 'border', '1px black solid !important')]},{'selector' :'td', 'props':[('text-align', 'center'),('font-size', '18px'),('color','black')]}],overwrite=False).set_properties(
479
- **{'background-color':'White','index':'White','min-width':'150px'},overwrite=False).set_table_styles(
480
  [{'selector': 'th:first-child', 'props': [('background-color', 'white')]}],overwrite=False).set_table_styles(
481
  [{'selector': 'tr:first-child', 'props': [('background-color', 'white')]}],overwrite=False).set_table_styles(
482
  [{'selector': 'tr', 'props': [('line-height', '20px')]}],overwrite=False).set_properties(
483
- **{'Height': '8px'},**{'text-align': 'center'},overwrite=False).set_properties(
484
- **{'background-color':'#C2FEE9'},subset=off_b2b_df.columns[0]).set_properties(
485
- **{'color':'black'},subset=off_b2b_df.columns[:]).hide_index().set_table_styles([
486
- {'selector': 'thead', 'props': [('display', 'none')]}
487
- ]).set_properties(**{'border': '3 px','color':'black'},overwrite=False).set_properties(
488
- **{'border': '1px black solid !important'},subset = ((list(off_b2b_df.index[:]),off_b2b_df.columns[:]))).set_properties(
489
- **{'min-width':'130'},subset = ((list(off_b2b_df.index[:]),off_b2b_df.columns[:])),overwrite=False).set_properties(**{
490
- 'color': 'black'},overwrite=False).set_properties(
491
- **{'border': '1px black solid !important'},subset = ((list(off_b2b_df.index[:]),off_b2b_df.columns[:])))
492
-
493
- return off_b2b_df_style
494
 
495
 
496
 
 
 
497
 
498
 
499
 
 
1
+ print('Running')
2
+ import time
3
  import requests
4
  import pandas as pd
5
  import seaborn as sns
6
  import matplotlib.pyplot as plt
7
  from matplotlib.pyplot import figure
8
  from matplotlib.offsetbox import OffsetImage, AnnotationBbox
9
+ from scipy import stats
10
  import matplotlib.lines as mlines
11
  import matplotlib.transforms as mtransforms
12
  import numpy as np
13
+ import time
14
  #import plotly.express as px
15
  #!pip install chart_studio
16
+ #import chart_studio.tools as tls
17
+ from bs4 import BeautifulSoup
18
  import matplotlib.pyplot as plt
19
  import numpy as np
20
  import matplotlib.font_manager as font_manager
21
  from datetime import datetime
22
  import pytz
23
+ from matplotlib.ticker import MaxNLocator
24
+ from matplotlib.patches import Ellipse
25
+ import matplotlib.transforms as transforms
26
+ from matplotlib.gridspec import GridSpec
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
27
  datetime.now(pytz.timezone('US/Pacific')).strftime('%B %d, %Y')
28
  # Configure Notebook
29
  #%matplotlib inline
 
36
  # import yahoo_oauth
37
  import json
38
  #import openpyxl
39
+ from sklearn import preprocessing
40
+ from datetime import timedelta
41
+ import dataframe_image as dfi
42
+ # from google.colab import drive
43
+ def percentile(n):
44
+ def percentile_(x):
45
+ return np.percentile(x, n)
46
+ percentile_.__name__ = 'percentile_%s' % n
47
+ return percentile_
48
 
49
+ import os
50
+ import praw
51
+ import matplotlib.pyplot as plt
52
+ import matplotlib.colors
53
+ import matplotlib.colors as mcolors
54
+ cmap_sum = matplotlib.colors.LinearSegmentedColormap.from_list("", ["#4285f4","#FFFFFF","#F0E442"])
55
+ #import pybaseball
56
+ import math
57
+ import matplotlib.ticker as mtick
58
+ import matplotlib.ticker as ticker
59
+
60
+ colour_palette = ['#FFB000','#648FFF','#785EF0',
61
+ '#DC267F','#FE6100','#3D1EB2','#894D80','#16AA02','#B5592B','#A3C1ED']
62
+ import matplotlib.colors as mcolors
63
+ from matplotlib.ticker import FuncFormatter
64
+ from matplotlib.font_manager import FontProperties
65
 
66
+ import numpy as np
67
+ import matplotlib.pyplot as plt
68
+ import matplotlib.colors
69
 
70
+ #x,y,c = zip(*np.random.rand(30,3)*4-2)
 
 
 
71
 
72
+ #norm=plt.Normalize(-2,2)
73
+ co = matplotlib.colors.LinearSegmentedColormap.from_list("", ["#ffffff","#F0E442"])
 
 
74
 
 
 
 
 
 
 
 
 
 
 
 
 
 
75
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
76
  try:
77
  data_r = requests.get("https://pub-api-ro.fantasysports.yahoo.com/fantasy/v2/league/427.l.public;out=settings/players;position=ALL;start=0;count=3000;sort=rank_season;search=;out=percent_owned;out=auction_values,ranks;ranks=season;ranks_by_position=season;out=expert_ranks;expert_ranks.rank_type=projected_season_remaining/draft_analysis;cut_types=diamond;slices=last7days?format=json_f").json()
78
  key_check = data_r['fantasy_content']['league']['players']
 
93
  single_list.append(x['player']['name']['last'])
94
  single_list.append(x['player']['draft_analysis']['average_pick'])
95
  single_list.append(x['player']['average_auction_cost'])
 
96
  single_list.append(x['player']['display_position'])
97
  single_list.append(x['player']['editorial_team_abbr'])
98
  if 'value' in x['player']['percent_owned']:
 
102
  total_list.append(single_list)
103
 
104
 
105
+ yahoo_df = pd.DataFrame(total_list,columns = ['player_id','rank_value','full','first','last','average_pick','average_auction_cost','display_position','editorial_team_abbr','percent_owned'])
106
+ yahoo_df_2 = yahoo_df.copy()
107
+
108
+ # Write your code here.
109
+ response = requests.get("https://www.naturalstattrick.com/playerlist.php?fromseason=20232024&thruseason=20232024&stype=2&sit=all&stdoi=oi&rate=n")
110
+ soup = BeautifulSoup(response.text, 'html.parser')
111
+ table_rows = soup.findAll('tr')
112
+ table_rows = table_rows[1:-1]
113
+ table_rows[0].findAll('td')
114
+
115
+ player_name = []
116
+ player_position = []
117
+ player_team = []
118
+ player_id = []
119
+
120
+ for i in range(0,len(table_rows)-1):
121
+ player_name.append(str(table_rows[i].findAll('td')[0].contents[0]))
122
+ player_position.append(table_rows[i].findAll('td')[1].contents[0])
123
+ player_team.append(table_rows[i].findAll('td')[2].contents[0])
124
+ player_id.append(str(table_rows[i].findAll('td')[3].contents[0])[-76:][:7])
125
+
126
+ player_id_df = pd.DataFrame({'Player':player_name,'Player ID':player_id,'Position':player_position,'Team':player_team})
127
+ #player_id_df.index.name = 'Player Name'
128
+ player_id_df.head()
129
 
130
+ skater_df = player_id_df[player_id_df['Position'] != 'G']
131
+ goalie_df = player_id_df[player_id_df['Position'] == 'G']
132
+
133
+ season = 20232024
134
+ seasontype = 2
135
+
136
+ def nat_stat_trick_range_pp_gp(rookie='n',start_date='2022-10-01',end_date=str(pd.to_datetime(datetime.now(pytz.timezone('US/Pacific')).strftime('%Y-%m-%d')).date()),sit='all',gp=1):
137
+ url = f'https://www.naturalstattrick.com/playerteams.php?fromseason={season}&thruseason={season}&stype={seasontype}&sit=pp&score=all&stdoi=std&rate=y&team=ALL&pos=S&loc=B&toi=0&gpfilt=gpteam&fd=&td=&tgp='+str(gp)+'&lines=single&draftteam=ALL'
138
+
139
+ player_list_all = []
140
+ response = requests.get(url)
141
+ soup = BeautifulSoup(response.text, 'html.parser')
142
+ table_rows = soup.findAll('tr')
143
+ table_rows = table_rows[1:]
144
+
145
+ for j in range(0,len(table_rows)):
146
+ p_string = [str(x).strip('<td>').strip('</') for x in list(table_rows[j].findAll('td')) if "<td>" in str(x)]
147
+ player_list_all.append([p_string[0]]+[str(table_rows[j].findAll('td')[1]).split('>')[2].split('<')[0]]+p_string[1:]+[str(table_rows[j].findAll('td')[1])[98:105].strip('</a></td>')])
148
+ #table_rows[0].findAll('td')
149
+
150
+ if soup != "":
151
+ columns_list = [str(x).split('>')[1].split('<')[0] for x in soup.findAll('th')]+['player_id']
152
+ df_url = pd.DataFrame(data=player_list_all,columns=columns_list)
153
+
154
+ df_url = df_url.fillna(0)
155
+ df_url['Shots+Hits+Blocks/60'] = df_url['Shots/60'].astype(float)+df_url['Hits/60'].astype(float)+df_url['Shots Blocked/60'].astype(float)
156
+ df_url['Shots+Hits/60'] = df_url['Shots/60'].astype(float)+df_url['Hits/60'].astype(float)
157
+ #print(url)
158
+ return df_url
159
+
160
+ team_abv = pd.read_csv('team_abv.csv')
161
+ team_dict = team_abv.set_index('team_abv').to_dict()
162
+
163
+ yahoo_nhl_df = pd.read_csv('yahoo_to_nhl.csv', encoding='unicode_escape')
164
+
165
+ def nat_stat_convert(df):
166
+ for i in range(0,len(df.columns)):
167
+ if df.columns[i][-3:]=='/60':
168
+ if 'ix' not in df.columns[i]:
169
+ df[df.columns[i]] = np.round(df[df.columns[i]].astype(float)*df['TOI'].astype(float)/60,0)
170
+ df = df.rename(columns={df.columns[i]: df.columns[i].replace('/60','')})
171
+ else:
172
+ df[df.columns[i]] = df[df.columns[i]].astype(float)*df['TOI'].astype(float)/60
173
+ df = df.rename(columns={df.columns[i]: df.columns[i].replace('/60','')})
174
+
175
+ df['Faceoffs %'] = df['Faceoffs Won']/(df['Faceoffs Won']+df['Faceoffs Lost'])
176
+
177
+ return df
178
 
179
  from shiny import ui, render, App
180
  import matplotlib.image as mpimg
181
+ app_ui = ui.page_fluid(
182
+ #ui.panel_title("Simulate a normal distribution"),
183
+
184
+ ui.layout_sidebar(
185
+
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
186
  ui.panel_sidebar(
187
+ #ui.input_date_range("date_range_id", "Date range input",start = statcast_df.game_date.min(), end = statcast_df.game_date.max()),
188
+ ui.input_select("team_id", "Select Team",team_dict,width=1,size=1,selected='ANA'),
189
+ ui.input_numeric("n_1", "Last Games x", value=1),
190
+ ui.input_numeric("n_2", "Last Games y", value=0),
191
+ ui.input_numeric("n_3", "Last Games z", value=0),
192
+ ui.input_numeric("top_n", "Show top 'n'", value=10),
193
+ ),
194
+
195
  ui.panel_main(ui.tags.h3(""),
196
  ui.div({"style": "font-size:2em;"},ui.output_text("txt_title")),
197
  #ui.tags.h2("Fantasy Hockey Schedule Summary"),
198
+ ui.tags.h5("Created By: @TJStats, Data: Natural Stat Trick, Yahoo Fantasy"),
199
  ui.div({"style": "font-size:1.2em;"},ui.output_text("txt")),
200
+ ui.output_table("pp_roundup"),
201
+ #ui.tags.h5('Legend'),
202
+ #ui.tags.h6('An Off Night is defined as a day in which less than half the teams in the NHL are playing'),
203
+ #ui.tags.h6('The scores are determined by using games played, off-nights, B2B, and strength of opponents') )
204
+ )
205
+ ),
206
+ )
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
207
 
208
 
209
 
210
 
211
  from urllib.request import Request, urlopen
212
+ from shiny import App, reactive, ui
213
+ from shiny.ui import h2, tags
214
  # importing OpenCV(cv2) module
215
 
216
 
217
 
218
 
219
+ #print(app_ui)
220
  def server(input, output, session):
221
 
222
+
223
  @output
224
  @render.text
225
  def txt():
226
+ return f'{input.team_id()} Last Games PP Summary'
227
+
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
228
  @output
229
  @render.text
230
  def txt_title():
231
+
232
+ return f'Team Last Games PP% Leaders'
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
233
 
 
 
 
 
 
 
234
 
235
 
 
 
 
 
 
 
236
 
237
 
238
+ @output
239
+ @render.table
240
+ def pp_roundup():
241
 
242
+ top_n = input.top_n()
243
+ n_1 = input.n_1()
244
+ n_2 = input.n_2()
245
+ n_3 = input.n_3()
246
 
247
+ list_of_columns = ['Player', 'Team', 'display_position','percent_owned','L'+str(n_1)+' PP TOI','L'+str(n_2)+' PP TOI','L'+str(n_3)+' PP TOI',
248
+ 'L'+str(n_1)+' PP%','L'+str(n_2)+' PP%','L'+str(n_3)+' PP%']
249
 
250
+ list_of_columns_name = ['Player', 'Team', 'Position','Roster%','L'+str(n_1)+' PP TOI','L'+str(n_2)+' PP TOI','L'+str(n_3)+' PP TOI',
251
+ 'L'+str(n_1)+' PP%','L'+str(n_2)+' PP%','L'+str(n_3)+' PP%']
 
 
 
252
 
253
+ if type(n_1) is not int:
254
+ n_1 = 1
255
+
256
+ if n_2 == 0:
257
+ list_of_columns.remove(f'L{str(n_2)} PP TOI')
258
+ list_of_columns.remove(f'L{str(n_2)} PP%')
259
+ list_of_columns_name.remove(f'L{str(n_2)} PP TOI')
260
+ list_of_columns_name.remove(f'L{str(n_2)} PP%')
261
 
262
+ if n_3 == 0:
263
+ list_of_columns.remove(f'L{str(n_3)} PP TOI')
264
+ list_of_columns.remove(f'L{str(n_3)} PP%')
265
+ list_of_columns_name.remove(f'L{str(n_3)} PP TOI')
266
+ list_of_columns_name.remove(f'L{str(n_3)} PP%')
267
 
268
+ start_date ='2023-09-01'
269
+ end_date = '2024-05-01'
270
 
271
+ df_pp_1 = nat_stat_trick_range_pp_gp(rookie='n',start_date = start_date,end_date = end_date, sit='pp',gp=n_1)
272
+ df_pp_2 = nat_stat_trick_range_pp_gp(rookie='n',start_date = start_date,end_date = end_date, sit='pp',gp=n_2)
273
+ df_pp_3 = nat_stat_trick_range_pp_gp(rookie='n',start_date = start_date,end_date = end_date, sit='pp',gp=n_3)
274
 
 
275
 
276
+ df_all_pp_1 = nat_stat_convert(df_pp_1)
277
+ df_all_pp_2 = nat_stat_convert(df_pp_2)
278
+ df_all_pp_3 = nat_stat_convert(df_pp_3)
279
 
280
+ df_final = df_all_pp_1.merge( df_all_pp_2,how='outer',left_on=['player_id'],right_on=['player_id'],suffixes=("","_2"))
281
+ df_final = df_final.merge( df_all_pp_3,how='outer',left_on=['player_id'],right_on=['player_id'],suffixes=("_1","_3"))
282
 
 
283
 
284
+ team_report_1 = pd.read_html(f'https://www.naturalstattrick.com/teamtable.php?fromseason={season}&thruseason={season}&stype={seasontype}&sit=pp&score=all&rate=n&team=all&loc=B&gpf=c&gp='+str(n_1)+'&fd=&td=')[0]
285
+ team_report_2 = pd.read_html(f'https://www.naturalstattrick.com/teamtable.php?fromseason={season}&thruseason={season}&stype={seasontype}&sit=pp&score=all&rate=n&team=all&loc=B&gpf=c&gp='+str(n_2)+'&fd=&td=')[0]
286
+ team_report_3 = pd.read_html(f'https://www.naturalstattrick.com/teamtable.php?fromseason=fromseason={season}&thruseason={season}&stype={seasontype}&sit=pp&score=all&rate=n&team=all&loc=B&gpf=c&gp='+str(n_3)+'&fd=&td=')[0]
287
+ team_report_1 = team_report_1.merge(team_abv,left_on=['Team'],right_on=['team_name'],how='left')
288
+ team_report_2 = team_report_2.merge(team_abv,left_on=['Team'],right_on=['team_name'],how='left')
289
+ team_report_3 = team_report_3.merge(team_abv,left_on=['Team'],right_on=['team_name'],how='left')
290
 
291
+ test = df_final[['player_id','Player_1','Team_1','Position_1','TOI_1','TOI_2','TOI_3',]]
292
+ test.columns = ['player_id','Player','Team','Position','TOI_1','TOI_2','TOI_3',]
293
+ test = test.merge(team_report_1[['TOI','team_abv']],how='left',left_on=['Team'],right_on=['team_abv'], suffixes=('','_1_team'))
294
+ test = test.merge(team_report_2[['TOI','team_abv']],how='left',left_on=['Team'],right_on=['team_abv'], suffixes=('','_2_team'))
295
+ test = test.merge(team_report_3[['TOI','team_abv']],how='left',left_on=['Team'],right_on=['team_abv'], suffixes=('','_3_team'))
296
+ test = test.fillna('0:00')
297
 
298
+ test['TOI'] = [int(x[:-3])+int(x[-2:])*100/60/100 for x in test['TOI'] ]
299
+ test['TOI_1'] = [x if x!='0:00' else 0 for x in test['TOI_1']]
300
+ test['TOI_2'] = [x if x!='0:00' else 0 for x in test['TOI_2']]
301
+ test['TOI_3'] = [x if x!='0:00' else 0 for x in test['TOI_3']]
302
 
303
+ test['TOI_2_team'] = [int(x[:-3])+int(x[-2:])*100/60/100 for x in test['TOI_2_team'] ]
304
+ test['TOI_3_team'] = [int(x[:-3])+int(x[-2:])*100/60/100 for x in test['TOI_3_team']]
305
 
306
+ test['TOI'] = test['TOI'].astype(float)
 
307
 
308
+ test['PP%_1'] = test['TOI_1'].astype(float)/ test['TOI'].astype(float)
309
+ test['PP%_2'] = test['TOI_2'].astype(float)/ test['TOI_2_team'].astype(float)
310
+ test['PP%_3'] = test['TOI_3'].astype(float)/ test['TOI_3_team'].astype(float)
311
+ test = test.fillna(0)
312
+ test['TOI_1'] = ["%d:%02d" % (int(x),(x*60)%60) for x in test['TOI_1'].astype(float)]
313
+ test['TOI_2'] = ["%d:%02d" % (int(x),(x*60)%60) for x in test['TOI_2'].astype(float)]
314
+ test['TOI_3'] = ["%d:%02d" % (int(x),(x*60)%60) for x in test['TOI_3'].astype(float)]
315
+ test = test.drop(['team_abv','team_abv_2_team','team_abv_3_team','TOI','TOI_2_team','TOI_3_team'],axis=1)
316
+ test.columns = ['player_id','Player','Team','Position','L'+str(n_1)+' PP TOI','L'+str(n_2)+' PP TOI','L'+str(n_3)+' PP TOI','L'+str(n_1)+' PP%','L'+str(n_2)+' PP%','L'+str(n_3)+' PP%']
317
 
318
+ yahoo_df = yahoo_df_2.merge(yahoo_nhl_df,left_on = 'player_id',right_on='player_id_yahoo',suffixes=['','_y'])
319
+ yahoo_df.nhl_id = yahoo_df.nhl_id.astype(float)
320
+ test.player_id = test.player_id.astype(float)
321
 
322
+ test = test.merge(right=yahoo_df,left_on='player_id',right_on='nhl_id',suffixes=['','_y'],how='left')
 
 
323
 
 
 
 
 
 
 
 
 
 
 
 
324
 
325
+ print('Column List')
326
+ print(test.columns)
 
 
 
 
 
327
 
 
328
 
329
+ print(list_of_columns)
330
+ test = test[list_of_columns]
331
+ test = test.rename(columns={'percent_owned':'Roster%'})
332
+
 
 
 
 
 
 
 
333
 
334
+ top_d_score = test[(test.Team==input.team_id())].sort_values(by=['L'+str(n_1)+' PP%'],ascending=False).reset_index(drop=True)
335
+ top_d_score = top_d_score.head(min(len(top_d_score),top_n))
336
 
 
 
337
 
338
+ #top_d_score.columns = list_of_columns_name
339
 
340
+ cols = top_d_score.columns.tolist();
 
341
 
342
+ top_d_score['Deployment'] = "PP2"
343
+ top_d_score['Deployment'][0:5] = "PP1"
344
 
345
+ # df_style_bang = top_d_score.head(10).style.background_gradient(cmap=co, subset=['L'+str(n_1)+' PP%','L'+str(n_2)+' PP%','L'+str(n_3)+' PP%','Roster%']).hide_index().set_properties(**{'Height': '12px'},**{'text-align': 'center'}).set_table_styles([{
346
+ # 'selector': 'caption',
347
+ # 'props': [
348
+ # ('color', ''),
349
+ # ('fontname', 'Century Gothic'),
350
+ # ('font-size', '20px'),
351
+ # ('font-style', 'italic'),
352
+ # ('font-weight', ''),
353
+ # ('text-align', 'centre'),
354
+ # ]
355
 
356
+ # },{'selector' :'th', 'props':[('text-align', 'center'),('Height','5px')]},{'selector' :'td', 'props':[('text-align', 'center'),('font-size', '13px'),('fontname', 'Century Gothic')]}]).format(
357
+ # {'L'+str(n_1)+' PP%': '{:.0%}',
358
+ # 'L'+str(n_2)+' PP%': '{:.0%}',
359
+ # 'L'+str(n_3)+' PP%': '{:.0%}',
360
+ # 'Roster%': '{:.0%}',
361
+ # },)
 
362
 
363
+ df_style_bang = top_d_score.head(input.top_n()).style.background_gradient(cmap=co,vmin=0,vmax=1, subset=[x for x in cols if x.endswith('PP%')]).set_properties(**{'border': '3 px'},overwrite=False).set_table_styles([{
 
 
364
  'selector': 'caption',
365
  'props': [
366
  ('color', ''),
 
371
  ('text-align', 'centre'),
372
  ]
373
 
374
+ },{'selector' :'th', 'props':[('text-align', 'center'),('Height','px'),('color','black'),('border', '1px black solid !important')]},{'selector' :'td', 'props':[('text-align', 'center'),('font-size', '18px'),('color','black')]}],overwrite=False).set_properties(
375
+ **{'background-color':'White','index':'White','min-width':'75px'},overwrite=False).set_table_styles(
 
376
  [{'selector': 'th:first-child', 'props': [('background-color', 'white')]}],overwrite=False).set_table_styles(
377
  [{'selector': 'tr:first-child', 'props': [('background-color', 'white')]}],overwrite=False).set_table_styles(
378
  [{'selector': 'tr', 'props': [('line-height', '20px')]}],overwrite=False).set_properties(
379
+ **{'Height': '8px'},**{'text-align': 'center'},overwrite=False).hide_index().format(
380
+ {'L'+str(n_1)+' PP%': '{:.0%}',
381
+ 'L'+str(n_2)+' PP%': '{:.0%}',
382
+ 'L'+str(n_3)+' PP%': '{:.0%}',
383
+ 'Roster%': '{:.0%}',
384
+ },)
385
+
386
+ return df_style_bang
 
 
 
387
 
388
 
389
 
390
+ # test = test.fillna(0)
391
+ #test['PP TOI'] = ["%d:%02d" % (int(x),(x*60)%60) if x>0 else '0:00' for x in test['PP TOI']]
392
 
393
 
394
 
team_abv.csv CHANGED
@@ -24,7 +24,7 @@ PHI,Philadelphia Flyers
24
  PIT,Pittsburgh Penguins
25
  S.J,San Jose Sharks
26
  SEA,Seattle Kraken
27
- STL,St. Louis Blues
28
  T.B,Tampa Bay Lightning
29
  TOR,Toronto Maple Leafs
30
  VAN,Vancouver Canucks
 
24
  PIT,Pittsburgh Penguins
25
  S.J,San Jose Sharks
26
  SEA,Seattle Kraken
27
+ STL,St Louis Blues
28
  T.B,Tampa Bay Lightning
29
  TOR,Toronto Maple Leafs
30
  VAN,Vancouver Canucks
yahoo_to_nhl.csv ADDED
@@ -0,0 +1,805 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ player_id_yahoo,full,first,last,nhl_id
2
+ 6743,Connor McDavid,Connor,McDavid,8478402
3
+ 6369,Leon Draisaitl,Leon,Draisaitl,8477934
4
+ 6391,David Pastrnak,David,Pastrnak,8477956
5
+ 5980,Nathan MacKinnon,Nathan,MacKinnon,8477492
6
+ 7114,Matthew Tkachuk,Matthew,Tkachuk,8479314
7
+ 7554,Jason Robertson,Jason,Robertson,8480027
8
+ 5425,Nikita Kucherov,Nikita,Kucherov,8476453
9
+ 6752,Mikko Rantanen,Mikko,Rantanen,8478420
10
+ 7134,Tage Thompson,Tage,Thompson,8479420
11
+ 7902,Brady Tkachuk,Brady,Tkachuk,8480801
12
+ 7109,Auston Matthews,Auston,Matthews,8479318
13
+ 8279,Jack Hughes,Jack,Hughes,8481559
14
+ 7519,Cale Makar,Cale,Makar,8480069
15
+ 6877,Kirill Kaprizov,Kirill,Kaprizov,8478864
16
+ 3637,Alex Ovechkin,Alex,Ovechkin,8471214
17
+ 3737,Sidney Crosby,Sidney,Crosby,8471675
18
+ 6746,Mitch Marner,Mitch,Marner,8478483
19
+ 6486,Igor Shesterkin,Igor,Shesterkin,8478048
20
+ 6447,Ilya Sorokin,Ilya,Sorokin,8478009
21
+ 5699,Andrei Vasilevskiy,Andrei,Vasilevskiy,8476883
22
+ 6791,Roope Hintz,Roope,Hintz,8478449
23
+ 7541,Jake Oettinger,Jake,Oettinger,8479979
24
+ 7736,Alexandar Georgiev,Alexandar,Georgiev,8480382
25
+ 6374,William Nylander,William,Nylander,8477939
26
+ 5367,Mika Zibanejad,Mika,Zibanejad,8476459
27
+ 6448,Brayden Point,Brayden,Point,8478010
28
+ 5853,Linus Ullmark,Linus,Ullmark,8476999
29
+ 5362,Ryan Nugent-Hopkins,Ryan,Nugent-Hopkins,8476454
30
+ 4681,John Tavares,John,Tavares,8475166
31
+ 7520,Elias Pettersson,Elias,Pettersson,8480012
32
+ 5820,Connor Hellebuyck,Connor,Hellebuyck,8476945
33
+ 5096,Zach Hyman,Zach,Hyman,8475786
34
+ 4471,Steven Stamkos,Steven,Stamkos,8474564
35
+ 8643,Tim Stutzle,Tim,Stutzle,8482116
36
+ 6728,Artemi Panarin,Artemi,Panarin,8478550
37
+ 4351,Brad Marchand,Brad,Marchand,8473419
38
+ 6777,Sebastian Aho,Sebastian,Aho,8478427
39
+ 7174,Adam Fox,Adam,Fox,8479323
40
+ 7626,Jeremy Swayman,Jeremy,Swayman,8480280
41
+ 6759,Kyle Connor,Kyle,Connor,8478398
42
+ 30544,Connor Bedard,Connor,Bedard,8484144
43
+ 6057,Jake Guentzel,Jake,Guentzel,8477404
44
+ 4491,Erik Karlsson,Erik,Karlsson,8474578
45
+ 6062,Carter Verhaeghe,Carter,Verhaeghe,8477409
46
+ 6381,Dylan Larkin,Dylan,Larkin,8477946
47
+ 6751,Timo Meier,Timo,Meier,8478414
48
+ 6384,Alex Tuch,Alex,Tuch,8477949
49
+ 4967,Jeff Skinner,Jeff,Skinner,8475784
50
+ 7516,Nico Hischier,Nico,Hischier,8480002
51
+ 8290,Matt Boldy,Matt,Boldy,8481557
52
+ 7899,Rasmus Dahlin,Rasmus,Dahlin,8480839
53
+ 6395,Adrian Kempe,Adrian,Kempe,8477960
54
+ 5981,Aleksander Barkov,Aleksander,Barkov,8477493
55
+ 7143,Jordan Kyrou,Jordan,Kyrou,8479385
56
+ 3638,Evgeni Malkin,Evgeni,Malkin,8471215
57
+ 7147,Alex DeBrincat,Alex,DeBrincat,8479337
58
+ 4002,Claude Giroux,Claude,Giroux,8473512
59
+ 4519,Jamie Benn,Jamie,Benn,8473994
60
+ 5370,Dougie Hamilton,Dougie,Hamilton,8476462
61
+ 5152,Mark Stone,Mark,Stone,8475913
62
+ 5470,Johnny Gaudreau,Johnny,Gaudreau,8476346
63
+ 4990,Brock Nelson,Brock,Nelson,8475754
64
+ 6377,Kevin Fiala,Kevin,Fiala,8477942
65
+ 6390,Jared McCann,Jared,McCann,8477955
66
+ 7115,Clayton Keller,Clayton,Keller,8479343
67
+ 5368,Mark Scheifele,Mark,Scheifele,8476460
68
+ 5376,J.T. Miller,J.T.,Miller,8476468
69
+ 8285,Dylan Cozens,Dylan,Cozens,8481528
70
+ 5988,Bo Horvat,Bo,Horvat,8477500
71
+ 7527,Martin Necas,Martin,Necas,8480039
72
+ 4930,Roman Josi,Roman,Josi,8474600
73
+ 7267,Jesper Bratt,Jesper,Bratt,8479407
74
+ 5020,Tyler Toffoli,Tyler,Toffoli,8475726
75
+ 3985,Joe Pavelski,Joe,Pavelski,8470794
76
+ 7111,Pierre-Luc Dubois,Pierre-Luc,Dubois,8479400
77
+ 7122,Charlie McAvoy,Charlie,McAvoy,8479325
78
+ 6762,Joel Eriksson Ek,Joel,Eriksson Ek,8478493
79
+ 6368,Sam Reinhart,Sam,Reinhart,8477933
80
+ 7636,Drake Batherson,Drake,Batherson,8480208
81
+ 7163,Filip Gustavsson,Filip,Gustavsson,8479406
82
+ 6078,Juuse Saros,Juuse,Saros,8477424
83
+ 8878,Matty Beniers,Matty,Beniers,8482665
84
+ 5992,Josh Morrissey,Josh,Morrissey,8477504
85
+ 7905,Quinn Hughes,Quinn,Hughes,8480800
86
+ 9268,Andrei Kuzmenko,Andrei,Kuzmenko,8483808
87
+ 4687,Nazem Kadri,Nazem,Kadri,8475172
88
+ 6766,Travis Konecny,Travis,Konecny,8478439
89
+ 4921,Mats Zuccarello,Mats,Zuccarello,8475692
90
+ 4901,Sergei Bobrovsky,Sergei,Bobrovsky,8475683
91
+ 5431,Vincent Trocheck,Vincent,Trocheck,8476389
92
+ 8287,Trevor Zegras,Trevor,Zegras,8481533
93
+ 6480,Viktor Arvidsson,Viktor,Arvidsson,8478042
94
+ 4248,Logan Couture,Logan,Couture,8474053
95
+ 7518,Miro Heiskanen,Miro,Heiskanen,8480036
96
+ 7264,Brandon Hagel,Brandon,Hagel,8479542
97
+ 5391,Rickard Rakell,Rickard,Rakell,8476483
98
+ 4699,Chris Kreider,Chris,Kreider,8475184
99
+ 3788,Anze Kopitar,Anze,Kopitar,8471685
100
+ 6424,Brandon Montour,Brandon,Montour,8477986
101
+ 6744,Jack Eichel,Jack,Eichel,8478403
102
+ 5712,Jonathan Marchessault,Jonathan,Marchessault,8476539
103
+ 5161,Frederik Andersen,Frederik,Andersen,8475883
104
+ 4263,Mikael Backlund,Mikael,Backlund,8474150
105
+ 30111,Devon Levi,Devon,Levi,8482221
106
+ 4682,Victor Hedman,Victor,Hedman,8475167
107
+ 7900,Andrei Svechnikov,Andrei,Svechnikov,8480830
108
+ 5697,Tomas Hertl,Tomas,Hertl,8476881
109
+ 4265,David Perron,David,Perron,8474102
110
+ 7528,Nick Suzuki,Nick,Suzuki,8480018
111
+ 5753,Joonas Korpisalo,Joonas,Korpisalo,8476914
112
+ 6764,Ilya Samsonov,Ilya,Samsonov,8478492
113
+ 3341,Marc-Andre Fleury,Marc-Andre,Fleury,8470594
114
+ 6405,Thatcher Demko,Thatcher,Demko,8477967
115
+ 6745,Dylan Strome,Dylan,Strome,8478440
116
+ 5991,Max Domi,Max,Domi,8477503
117
+ 4498,Jordan Eberle,Jordan,Eberle,8474586
118
+ 6055,Pavel Buchnevich,Pavel,Buchnevich,8477402
119
+ 5928,Anders Lee,Anders,Lee,8475314
120
+ 5984,Elias Lindholm,Elias,Lindholm,8477496
121
+ 6756,Jake DeBrusk,Jake,DeBrusk,8478498
122
+ 3358,Brent Burns,Brent,Burns,8470613
123
+ 6890,Troy Terry,Troy,Terry,8478873
124
+ 8314,Pyotr Kochetkov,Pyotr,Kochetkov,8481611
125
+ 6485,Michael Bunting,Michael,Bunting,8478047
126
+ 5336,Darcy Kuemper,Darcy,Kuemper,8475311
127
+ 7593,Stuart Skinner,Stuart,Skinner,8479973
128
+ 7908,Evan Bouchard,Evan,Bouchard,8480803
129
+ 8658,Dawson Mercer,Dawson,Mercer,8482110
130
+ 6024,Tristan Jarry,Tristan,Jarry,8477465
131
+ 7156,Carter Hart,Carter,Hart,8479394
132
+ 5639,Reilly Smith,Reilly,Smith,8475191
133
+ 6408,Vitek Vanecek,Vitek,Vanecek,8477970
134
+ 7525,Owen Tippett,Owen,Tippett,8480015
135
+ 4685,Brayden Schenn,Brayden,Schenn,8475170
136
+ 4984,Kevin Hayes,Kevin,Hayes,8475763
137
+ 4986,Evgeny Kuznetsov,Evgeny,Kuznetsov,8475744
138
+ 5387,Phillip Danault,Phillip,Danault,8476479
139
+ 5626,Alex Killorn,Alex,Killorn,8473986
140
+ 4503,John Carlson,John,Carlson,8474590
141
+ 6707,Frank Vatrano,Frank,Vatrano,8478366
142
+ 5405,Boone Jenner,Boone,Jenner,8476432
143
+ 4683,Matt Duchene,Matt,Duchene,8475168
144
+ 5032,Jason Zucker,Jason,Zucker,8475722
145
+ 7110,Patrik Laine,Patrik,Laine,8479339
146
+ 8284,Moritz Seider,Moritz,Seider,8481542
147
+ 6765,Brock Boeser,Brock,Boeser,8478444
148
+ 6798,Vince Dunn,Vince,Dunn,8478407
149
+ 5768,Chandler Stephenson,Chandler,Stephenson,8476905
150
+ 5053,Bryan Rust,Bryan,Rust,8475810
151
+ 7535,Robert Thomas,Robert,Thomas,8480023
152
+ 7117,Mikhail Sergachev,Mikhail,Sergachev,8479410
153
+ 5281,Tyson Barrie,Tyson,Barrie,8475197
154
+ 6035,Artturi Lehkonen,Artturi,Lehkonen,8477476
155
+ 5983,Seth Jones,Seth,Jones,8477495
156
+ 4962,Tyler Seguin,Tyler,Seguin,8475794
157
+ 3641,Blake Wheeler,Blake,Wheeler,8471218
158
+ 7523,Casey Mittelstadt,Casey,Mittelstadt,8479999
159
+ 5364,Jonathan Huberdeau,Jonathan,Huberdeau,8476456
160
+ 7910,Noah Dobson,Noah,Dobson,8480865
161
+ 6367,Aaron Ekblad,Aaron,Ekblad,8477932
162
+ 4976,Vladimir Tarasenko,Vladimir,Tarasenko,8475765
163
+ 6015,J.T. Compher,J.T.,Compher,8477456
164
+ 6462,Ville Husso,Ville,Husso,8478024
165
+ 5010,Justin Faulk,Justin,Faulk,8475753
166
+ 5686,Hampus Lindholm,Hampus,Lindholm,8476854
167
+ 6386,Nick Schmaltz,Nick,Schmaltz,8477951
168
+ 6748,Pavel Zacha,Pavel,Zacha,8478401
169
+ 6330,Yanni Gourde,Yanni,Gourde,8476826
170
+ 5454,Jordan Binnington,Jordan,Binnington,8476412
171
+ 6068,Oliver Bjorkstrand,Oliver,Bjorkstrand,8477416
172
+ 4240,Patrick Kane,Patrick,Kane,8474141
173
+ 6758,Mathew Barzal,Mathew,Barzal,8478445
174
+ 5700,Scott Laughton,Scott,Laughton,8476872
175
+ 4961,Taylor Hall,Taylor,Hall,8475791
176
+ 6169,Dominik Kubalik,Dominik,Kubalik,8477330
177
+ 5421,William Karlsson,William,Karlsson,8476448
178
+ 6370,Sam Bennett,Sam,Bennett,8477935
179
+ 8033,Akira Schmid,Akira,Schmid,8481033
180
+ 6865,Conor Garland,Conor,Garland,8478856
181
+ 30221,Luke Hughes,Luke,Hughes,8482684
182
+ 7536,Filip Chytil,Filip,Chytil,8480078
183
+ 4472,Drew Doughty,Drew,Doughty,8474563
184
+ 7903,Barrett Hayton,Barrett,Hayton,8480849
185
+ 4474,Alex Pietrangelo,Alex,Pietrangelo,8474565
186
+ 6908,Andrew Mangiapane,Andrew,Mangiapane,8478233
187
+ 6753,Lawson Crouse,Lawson,Crouse,8478474
188
+ 7164,Dillon Dube,Dillon,Dube,8479346
189
+ 6385,Tony DeAngelo,Tony,DeAngelo,8477950
190
+ 4854,Cam Talbot,Cam,Talbot,8475660
191
+ 5441,Blake Coleman,Blake,Coleman,8476399
192
+ 5989,Valeri Nichushkin,Valeri,Nichushkin,8477501
193
+ 4965,Nino Niederreiter,Nino,Niederreiter,8475799
194
+ 5986,Darnell Nurse,Darnell,Nurse,8477498
195
+ 6009,Ryan Hartman,Ryan,Hartman,8477451
196
+ 8879,Mason McTavish,Mason,McTavish,8482745
197
+ 6795,Rasmus Andersson,Rasmus,Andersson,8478397
198
+ 6788,Daniel Sprong,Daniel,Sprong,8478466
199
+ 5946,Erik Haula,Erik,Haula,8475287
200
+ 4792,Tomas Tatar,Tomas,Tatar,8475193
201
+ 5800,Andreas Athanasiou,Andreas,Athanasiou,8476960
202
+ 8644,Lucas Raymond,Lucas,Raymond,8482078
203
+ 4704,Marcus Johansson,Marcus,Johansson,8475149
204
+ 6726,Evan Rodrigues,Evan,Rodrigues,8478542
205
+ 8155,Logan Thompson,Logan,Thompson,8480313
206
+ 30546,Adam Fantilli,Adam,Fantilli,8484166
207
+ 6494,Gustav Forsling,Gustav,Forsling,8478055
208
+ 5691,Filip Forsberg,Filip,Forsberg,8476887
209
+ 4988,Charlie Coyle,Charlie,Coyle,8475745
210
+ 5366,Ryan Strome,Ryan,Strome,8476458
211
+ 7542,Morgan Frost,Morgan,Frost,8480028
212
+ 4974,Jaden Schwartz,Jaden,Schwartz,8475768
213
+ 6549,Victor Olofsson,Victor,Olofsson,8478109
214
+ 6770,Anthony Beauvillier,Anthony,Beauvillier,8478463
215
+ 5785,Josh Anderson,Josh,Anderson,8476981
216
+ 7901,Jesperi Kotkaniemi,Jesperi,Kotkaniemi,8480829
217
+ 6760,Thomas Chabot,Thomas,Chabot,8478469
218
+ 8607,Alexander Barabanov,Alexander,Barabanov,8482222
219
+ 6476,Devon Toews,Devon,Toews,8478038
220
+ 5708,Brady Skjei,Brady,Skjei,8476869
221
+ 8898,Wyatt Johnston,Wyatt,Johnston,8482740
222
+ 6402,Ivan Barbashev,Ivan,Barbashev,8477964
223
+ 5407,John Gibson,John,Gibson,8476434
224
+ 4064,Kris Letang,Kris,Letang,8471724
225
+ 3355,Zach Parise,Zach,Parise,8470610
226
+ 5769,Shayne Gostisbehere,Shayne,Gostisbehere,8476906
227
+ 4972,Cam Fowler,Cam,Fowler,8475764
228
+ 8293,Cole Caufield,Cole,Caufield,8481540
229
+ 5747,Jordan Martinook,Jordan,Martinook,8476921
230
+ 3801,T.J. Oshie,T.J.,Oshie,8471698
231
+ 6887,Karel Vejmelka,Karel,Vejmelka,8478872
232
+ 7912,Joel Farabee,Joel,Farabee,8480797
233
+ 4947,Jacob Markstrom,Jacob,Markstrom,8474593
234
+ 4581,Martin Jones,Martin,Jones,8474889
235
+ 6585,Conor Sheary,Conor,Sheary,8477839
236
+ 8653,Seth Jarvis,Seth,Jarvis,8482093
237
+ 7066,Mason Marchment,Mason,Marchment,8478975
238
+ 7557,Eetu Luostarinen,Eetu,Luostarinen,8480185
239
+ 6337,Pheonix Copley,Pheonix,Copley,8477831
240
+ 7224,Ross Colton,Ross,Colton,8479525
241
+ 7526,Gabriel Vilardi,Gabriel,Vilardi,8480014
242
+ 8310,Shane Pinto,Shane,Pinto,8481596
243
+ 5689,Jacob Trouba,Jacob,Trouba,8476885
244
+ 8641,Alexis Lafreniere,Alexis,Lafreniere,8482109
245
+ 6747,Noah Hanifin,Noah,Hanifin,8478396
246
+ 7920,K'Andre Miller,K'Andre,Miller,8480817
247
+ 3983,Phil Kessel,Phil,Kessel,8473548
248
+ 7161,Filip Hronek,Filip,Hronek,8479425
249
+ 5238,Adam Henrique,Adam,Henrique,8474641
250
+ 8281,Kirby Dach,Kirby,Dach,8481523
251
+ 6767,Jack Roslovic,Jack,Roslovic,8478458
252
+ 5382,Stefan Noesen,Stefan,Noesen,8476474
253
+ 7166,Taylor Raddysh,Taylor,Raddysh,8479390
254
+ 6079,Miles Wood,Miles,Wood,8477425
255
+ 5698,Teuvo Teravainen,Teuvo,Teravainen,8476882
256
+ 6655,Frederick Gaudreau,Frederick,Gaudreau,8477919
257
+ 5967,Antti Raanta,Antti,Raanta,8477293
258
+ 6184,MacKenzie Weegar,MacKenzie,Weegar,8477346
259
+ 6818,Adin Hill,Adin,Hill,8478499
260
+ 7874,Pavel Francouz,Pavel,Francouz,8480925
261
+ 4003,Semyon Varlamov,Semyon,Varlamov,8473575
262
+ 5039,Radko Gudas,Radko,Gudas,8475462
263
+ 5365,Adam Larsson,Adam,Larsson,8476457
264
+ 7170,Joseph Woll,Joseph,Woll,8479361
265
+ 5529,Laurent Brossoit,Laurent,Brossoit,8476316
266
+ 4475,Luke Schenn,Luke,Schenn,8474568
267
+ 5057,Scott Wedgewood,Scott,Wedgewood,8475809
268
+ 7089,Alex Lyon,Alex,Lyon,8479312
269
+ 5462,Jean-Gabriel Pageau,Jean-Gabriel,Pageau,8476419
270
+ 5254,Dmitry Orlov,Dmitry,Orlov,8475200
271
+ 5232,Jared Spurgeon,Jared,Spurgeon,8474716
272
+ 7365,Tanner Jeannot,Tanner,Jeannot,8479661
273
+ 6636,Garnet Hathaway,Garnet,Hathaway,8477903
274
+ 8489,Dustin Wolf,Dustin,Wolf,8481692
275
+ 5685,Morgan Rielly,Morgan,Rielly,8476853
276
+ 4642,Alex Stalock,Alex,Stalock,8471774
277
+ 8040,Samuel Ersson,Samuel,Ersson,8481035
278
+ 3980,Jordan Staal,Jordan,Staal,8473533
279
+ 7083,Brandon Tanev,Brandon,Tanev,8479293
280
+ 8433,Arturs Silovs,Arturs,Silovs,8481668
281
+ 5553,Anton Forsberg,Anton,Forsberg,8476341
282
+ 8895,Jesper Wallstedt,Jesper,Wallstedt,8482661
283
+ 8337,Hunter Jones,Hunter,Jones,8481545
284
+ 30487,Erik Portillo,Erik,Portillo,8481707
285
+ 5329,Mattias Ekholm,Mattias,Ekholm,8475218
286
+ 7338,Zach Sawchenko,Zach,Sawchenko,8479313
287
+ 5022,Calvin Pickard,Calvin,Pickard,8475717
288
+ 5434,Adam Lowry,Adam,Lowry,8476392
289
+ 8291,Spencer Knight,Spencer,Knight,8481519
290
+ 8651,Yaroslav Askarov,Yaroslav,Askarov,8482137
291
+ 4849,Jeff Petry,Jeff,Petry,8473507
292
+ 5767,Chris Driedger,Chris,Driedger,8476904
293
+ 8004,Joel Hofer,Joel,Hofer,8480981
294
+ 4779,Marcus Foligno,Marcus,Foligno,8475220
295
+ 8722,Nico Daws,Nico,Daws,8482076
296
+ 6430,Jonas Johansson,Jonas,Johansson,8477992
297
+ 4754,Matt Martin,Matt,Martin,8474709
298
+ 7498,Neal Pionk,Neal,Pionk,8480145
299
+ 6005,Shea Theodore,Shea,Theodore,8477447
300
+ 6811,Keegan Kolesar,Keegan,Kolesar,8478434
301
+ 7108,David Rittich,David,Rittich,8479496
302
+ 4979,Nick Bjugstad,Nick,Bjugstad,8475760
303
+ 7886,Kevin Lankinen,Kevin,Lankinen,8480947
304
+ 5995,Nikita Zadorov,Nikita,Zadorov,8477507
305
+ 6113,Connor Clifton,Connor,Clifton,8477365
306
+ 6375,Nikolaj Ehlers,Nikolaj,Ehlers,8477940
307
+ 5077,Jani Hakanpaa,Jani,Hakanpaa,8475825
308
+ 6779,Brandon Carlo,Brandon,Carlo,8478443
309
+ 7084,Charlie Lindgren,Charlie,Lindgren,8479292
310
+ 4684,Evander Kane,Evander,Kane,8475169
311
+ 6080,Nicholas Paul,Nicholas,Paul,8477426
312
+ 7936,Alexander Romanov,Alexander,Romanov,8481014
313
+ 6089,Ryan Graves,Ryan,Graves,8477435
314
+ 4969,Mikael Granlund,Mikael,Granlund,8475798
315
+ 7429,Casey DeSmith,Casey,DeSmith,8479193
316
+ 7493,Alex Iafallo,Alex,Iafallo,8480113
317
+ 5734,Anthony Stolarz,Anthony,Stolarz,8476932
318
+ 5994,Ryan Pulock,Ryan,Pulock,8477506
319
+ 7545,Eeli Tolvanen,Eeli,Tolvanen,8480009
320
+ 4706,Kyle Palmieri,Kyle,Palmieri,8475151
321
+ 6037,William Carrier,William,Carrier,8477478
322
+ 6797,Yakov Trenin,Yakov,Trenin,8478508
323
+ 5776,Matt Grzelcyk,Matt,Grzelcyk,8476891
324
+ 7321,Trevor Moore,Trevor,Moore,8479675
325
+ 5227,Brayden McNabb,Brayden,McNabb,8475188
326
+ 6936,Matt Roy,Matt,Roy,8478911
327
+ 5765,Esa Lindell,Esa,Lindell,8476902
328
+ 6083,Andrew Copp,Andrew,Copp,8477429
329
+ 6838,Nicolas Roy,Nicolas,Roy,8478462
330
+ 4971,Jack Campbell,Jack,Campbell,8475789
331
+ 5783,Erik Gustafsson,Erik,Gustafsson,8476979
332
+ 5251,Brenden Dillon,Brenden,Dillon,8475455
333
+ 5703,Michael Matheson,Michael,Matheson,8476875
334
+ 5733,Jake McCabe,Jake,McCabe,8476931
335
+ 5406,Magnus Hellberg,Magnus,Hellberg,8476433
336
+ 7961,Jack McBain,Jack,McBain,8480855
337
+ 5345,Nicolas Deslauriers,Nicolas,Deslauriers,8475235
338
+ 4008,Nick Foligno,Nick,Foligno,8473422
339
+ 7927,Rasmus Sandin,Rasmus,Sandin,8480873
340
+ 6985,Connor Ingram,Connor,Ingram,8478971
341
+ 6039,Eric Comrie,Eric,Comrie,8477480
342
+ 6109,Cal Petersen,Cal,Petersen,8477361
343
+ 5739,Colton Sissons,Colton,Sissons,8476925
344
+ 5840,Alexander Kerfoot,Alexander,Kerfoot,8477021
345
+ 5810,Jaccob Slavin,Jaccob,Slavin,8476958
346
+ 6784,Mackenzie Blackwood,Mackenzie,Blackwood,8478406
347
+ 6785,Erik Cernak,Erik,Cernak,8478416
348
+ 7618,Mikey Anderson,Mikey,Anderson,8479998
349
+ 6290,Barclay Goodrow,Barclay,Goodrow,8476624
350
+ 6739,Noel Acciari,Noel,Acciari,8478569
351
+ 8249,Blake Lizotte,Blake,Lizotte,8481481
352
+ 6388,Kasperi Kapanen,Kasperi,Kapanen,8477953
353
+ 8652,Anton Lundell,Anton,Lundell,8482113
354
+ 3614,Mark Giordano,Mark,Giordano,8470966
355
+ 4773,Casey Cizikas,Casey,Cizikas,8475231
356
+ 6002,Andre Burakovsky,Andre,Burakovsky,8477444
357
+ 8119,Logan O'Connor,Logan,O'Connor,8481186
358
+ 6436,Warren Foegele,Warren,Foegele,8477998
359
+ 8871,Arvid Soderblom,Arvid,Soderblom,8482821
360
+ 6555,Pierre Engvall,Pierre,Engvall,8478115
361
+ 6544,Sammy Blais,Sammy,Blais,8478104
362
+ 7950,Sean Durzi,Sean,Durzi,8480434
363
+ 7944,Martin Fehervary,Martin,Fehervary,8480796
364
+ 6425,Ryan Donato,Ryan,Donato,8477987
365
+ 3988,Kyle Okposo,Kyle,Okposo,8473449
366
+ 3990,Trevor Lewis,Trevor,Lewis,8473453
367
+ 3349,Jeff Carter,Jeff,Carter,8470604
368
+ 5749,Damon Severson,Damon,Severson,8476923
369
+ 7737,Collin Delia,Collin,Delia,8480420
370
+ 7124,Jakob Chychrun,Jakob,Chychrun,8479345
371
+ 6814,Anthony Cirelli,Anthony,Cirelli,8478519
372
+ 5130,Jesper Fast,Jesper,Fast,8475855
373
+ 6834,Will Borgen,Will,Borgen,8478840
374
+ 6117,Carson Soucy,Carson,Soucy,8477369
375
+ 6038,Tyler Bertuzzi,Tyler,Bertuzzi,8477479
376
+ 5085,Philipp Grubauer,Philipp,Grubauer,8475831
377
+ 5024,Calle Jarnkrok,Calle,Jarnkrok,8475714
378
+ 6046,Brett Pesce,Brett,Pesce,8477488
379
+ 7044,Ryan Lomberg,Ryan,Lomberg,8479066
380
+ 6406,Alex Nedeljkovic,Alex,Nedeljkovic,8477968
381
+ 5375,Jamie Oleksiak,Jamie,Oleksiak,8476467
382
+ 7601,Daniil Tarasov,Daniil,Tarasov,8480193
383
+ 7532,Timothy Liljegren,Timothy,Liljegren,8480043
384
+ 7983,Lukas Dostal,Lukas,Dostal,8480843
385
+ 5958,Nick Jensen,Nick,Jensen,8475324
386
+ 5696,Tom Wilson,Tom,Wilson,8476880
387
+ 7537,Kailer Yamamoto,Kailer,Yamamoto,8479977
388
+ 5987,Rasmus Ristolainen,Rasmus,Ristolainen,8477499
389
+ 5544,Dylan DeMelo,Dylan,DeMelo,8476331
390
+ 6799,Jonas Siegenthaler,Jonas,Siegenthaler,8478399
391
+ 5841,Colin Miller,Colin,Miller,8476525
392
+ 5388,Vladislav Namestnikov,Vladislav,Namestnikov,8476480
393
+ 5411,Brandon Saad,Brandon,Saad,8476438
394
+ 7652,Noah Cates,Noah,Cates,8480220
395
+ 4252,Lars Eller,Lars,Eller,8474189
396
+ 7265,Michael Pezzetta,Michael,Pezzetta,8479543
397
+ 8280,Kaapo Kakko,Kaapo,Kakko,8481554
398
+ 6350,Nic Dowd,Nic,Dowd,8475343
399
+ 7524,Michael Rasmussen,Michael,Rasmussen,8479992
400
+ 5027,Justin Holl,Justin,Holl,8475718
401
+ 5573,Ondrej Palat,Ondrej,Palat,8476292
402
+ 4257,Ian Cole,Ian,Cole,8474013
403
+ 7521,Cody Glass,Cody,Glass,8479996
404
+ 5757,Jimmy Vesey,Jimmy,Vesey,8476918
405
+ 6794,Jeremy Lauzon,Jeremy,Lauzon,8478468
406
+ 8311,Arthur Kaliyev,Arthur,Kaliyev,8481560
407
+ 5695,Cody Ceci,Cody,Ceci,8476879
408
+ 6407,Marcus Pettersson,Marcus,Pettersson,8477969
409
+ 7112,Jesse Puljujarvi,Jesse,Puljujarvi,8479344
410
+ 4194,Cal Clutterbuck,Cal,Clutterbuck,8473504
411
+ 4753,Evgenii Dadonov,Evgenii,Dadonov,8474149
412
+ 7120,Michael McLeod,Michael,McLeod,8479415
413
+ 5756,Adam Pelech,Adam,Pelech,8476917
414
+ 5795,Brett Kulak,Brett,Kulak,8476967
415
+ 7155,Samuel Girard,Samuel,Girard,8479398
416
+ 4805,Mike Hoffman,Mike,Hoffman,8474884
417
+ 5498,Sean Kuraly,Sean,Kuraly,8476374
418
+ 4253,Kevin Shattenkirk,Kevin,Shattenkirk,8474031
419
+ 5402,Scott Mayfield,Scott,Mayfield,8476429
420
+ 8294,Alex Newhook,Alex,Newhook,8481618
421
+ 4964,Ryan Johansen,Ryan,Johansen,8475793
422
+ 4352,Pat Maroon,Pat,Maroon,8474034
423
+ 5632,Torey Krug,Torey,Krug,8476792
424
+ 5777,Colton Parayko,Colton,Parayko,8476892
425
+ 3987,Derick Brassard,Derick,Brassard,8473544
426
+ 4147,Jonathan Quick,Jonathan,Quick,8471734
427
+ 3979,Erik Johnson,Erik,Johnson,8473446
428
+ 7157,Ryan Lindgren,Ryan,Lindgren,8479324
429
+ 7499,David Kampf,David,Kampf,8480144
430
+ 5714,Justin Schultz,Justin,Schultz,8474602
431
+ 3345,Ryan Suter,Ryan,Suter,8470600
432
+ 7546,Klim Kostin,Klim,Kostin,8480011
433
+ 6774,Christian Fischer,Christian,Fischer,8478432
434
+ 6496,Dakota Joshua,Dakota,Joshua,8478057
435
+ 5932,Nate Schmidt,Nate,Schmidt,8477220
436
+ 7165,Carl Grundstrom,Carl,Grundstrom,8479336
437
+ 7213,Brandon Duhaime,Brandon,Duhaime,8479520
438
+ 6576,Jake Middleton,Jake,Middleton,8478136
439
+ 7549,Nicolas Hague,Nicolas,Hague,8479980
440
+ 8877,Owen Power,Owen,Power,8482671
441
+ 5659,Brian Dumoulin,Brian,Dumoulin,8475208
442
+ 4306,Milan Lucic,Milan,Lucic,8473473
443
+ 6827,Thomas Novak,Thomas,Novak,8478438
444
+ 4771,Travis Hamonic,Travis,Hamonic,8474612
445
+ 8659,Braden Schneider,Braden,Schneider,8482073
446
+ 4186,Ryan Reaves,Ryan,Reaves,8471817
447
+ 7911,Ty Dellandrea,Ty,Dellandrea,8480848
448
+ 6812,Felix Sandstrom,Felix,Sandstrom,8478433
449
+ 3789,Marc Staal,Marc,Staal,8471686
450
+ 5104,John Klingberg,John,Klingberg,8475906
451
+ 5435,Nick Cousins,Nick,Cousins,8476393
452
+ 8069,Yegor Sharangovich,Yegor,Sharangovich,8481068
453
+ 5396,Craig Smith,Craig,Smith,8475225
454
+ 4978,Austin Watson,Austin,Watson,8475766
455
+ 6749,Ivan Provorov,Ivan,Provorov,8478500
456
+ 7582,Morgan Geekie,Morgan,Geekie,8479987
457
+ 7689,Morgan Barron,Morgan,Barron,8480289
458
+ 8645,Jake Sanderson,Jake,Sanderson,8482105
459
+ 6481,Sam Lafferty,Sam,Lafferty,8478043
460
+ 4369,James Reimer,James,Reimer,8473503
461
+ 7569,Ukko-Pekka Luukkonen,Ukko-Pekka,Luukkonen,8480045
462
+ 8376,Matias Maccelli,Matias,Maccelli,8481711
463
+ 8262,Ilya Mikheyev,Ilya,Mikheyev,8481624
464
+ 7928,Joe Veleno,Joe,Veleno,8480813
465
+ 5693,Radek Faksa,Radek,Faksa,8476889
466
+ 8282,Bowen Byram,Bowen,Byram,8481524
467
+ 8245,Nico Sturm,Nico,Sturm,8481477
468
+ 4241,James van Riemsdyk,James,van Riemsdyk,8474037
469
+ 6792,Jordan Greenway,Jordan,Greenway,8478413
470
+ 4251,Ryan McDonagh,Ryan,McDonagh,8474151
471
+ 5539,Josh Archibald,Josh,Archibald,8476326
472
+ 6451,Jake Walman,Jake,Walman,8478013
473
+ 3365,Corey Perry,Corey,Perry,8470621
474
+ 6901,Vladislav Gavrikov,Vladislav,Gavrikov,8478882
475
+ 5999,Anthony Mantha,Anthony,Mantha,8477511
476
+ 7149,Nathan Bastian,Nathan,Bastian,8479414
477
+ 6862,Mathieu Joseph,Mathieu,Joseph,8478472
478
+ 4786,Ryan O'Reilly,Ryan,O'Reilly,8475158
479
+ 6383,Travis Sanheim,Travis,Sanheim,8477948
480
+ 7138,Sam Steel,Sam,Steel,8479351
481
+ 8935,J.J. Moser,J.J.,Moser,8482655
482
+ 5772,Oskar Sundqvist,Oskar,Sundqvist,8476897
483
+ 6382,Sonny Milano,Sonny,Milano,8477947
484
+ 5694,Zemgus Girgensons,Zemgus,Girgensons,8476878
485
+ 6458,Michael Amadio,Michael,Amadio,8478020
486
+ 7160,Wade Allison,Wade,Allison,8479322
487
+ 7628,Alexey Toropchenko,Alexey,Toropchenko,8480281
488
+ 5371,Jonas Brodin,Jonas,Brodin,8476463
489
+ 5687,Matt Dumba,Matt,Dumba,8476856
490
+ 5279,Gustav Nyquist,Gustav,Nyquist,8474679
491
+ 7859,Eric Robinson,Eric,Robinson,8480762
492
+ 8648,Jack Quinn,Jack,Quinn,8482097
493
+ 6417,Nicolas Aube-Kubel,Nicolas,Aube-Kubel,8477979
494
+ 8595,Cole Smith,Cole,Smith,8482062
495
+ 6896,John Marino,John,Marino,8478507
496
+ 6984,Jalen Chatfield,Jalen,Chatfield,8478970
497
+ 7851,Zach Whitecloud,Zach,Whitecloud,8480727
498
+ 7193,Josh Mahura,Josh,Mahura,8479372
499
+ 8650,Cole Perfetti,Cole,Perfetti,8482149
500
+ 7538,Pierre-Olivier Joseph,Pierre-Olivier,Joseph,8480058
501
+ 7125,Dante Fabbro,Dante,Fabbro,8479371
502
+ 5263,Ben Chiarot,Ben,Chiarot,8475279
503
+ 6616,Liam O'Brien,Liam,O'Brien,8477070
504
+ 5381,Connor Murphy,Connor,Murphy,8476473
505
+ 7829,Pius Suter,Pius,Suter,8480459
506
+ 6741,Derek Ryan,Derek,Ryan,8478585
507
+ 8012,Paul Cotter,Paul,Cotter,8481032
508
+ 6928,Steven Lorentz,Steven,Lorentz,8478904
509
+ 6539,Kevin Labanc,Kevin,Labanc,8478099
510
+ 4424,Alec Martinez,Alec,Martinez,8474166
511
+ 6869,Niko Mikkola,Niko,Mikkola,8478859
512
+ 5736,Brock McGinn,Brock,McGinn,8476934
513
+ 7930,Mattias Samuelsson,Mattias,Samuelsson,8480807
514
+ 7531,Juuso Valimaki,Juuso,Valimaki,8479976
515
+ 6754,Denis Gurianov,Denis,Gurianov,8478495
516
+ 7909,Oliver Wahlstrom,Oliver,Wahlstrom,8480789
517
+ 8614,Artem Zub,Artem,Zub,8482245
518
+ 6353,Patrick Brown,Patrick,Brown,8477887
519
+ 6008,Jason Dickinson,Jason,Dickinson,8477450
520
+ 8881,Kent Johnson,Kent,Johnson,8482660
521
+ 4975,Derek Forbort,Derek,Forbort,8475762
522
+ 4485,Tyler Myers,Tyler,Myers,8474574
523
+ 8295,Peyton Krebs,Peyton,Krebs,8481522
524
+ 7684,Nick Perbix,Nick,Perbix,8480246
525
+ 6819,Sam Montembeault,Sam,Montembeault,8478470
526
+ 4935,Chris Tanev,Chris,Tanev,8475690
527
+ 5496,Nick Seeler,Nick,Seeler,8476372
528
+ 6366,Tomas Nosek,Tomas,Nosek,8477931
529
+ 7990,Connor Dewar,Connor,Dewar,8480980
530
+ 5256,Tyler Johnson,Tyler,Johnson,8474870
531
+ 6059,Mattias Janmark,Mattias,Janmark,8477406
532
+ 6340,Trevor van Riemsdyk,Trevor,van Riemsdyk,8477845
533
+ 7135,Brett Howden,Brett,Howden,8479353
534
+ 3802,Andrew Cogliano,Andrew,Cogliano,8471699
535
+ 8642,Quinton Byfield,Quinton,Byfield,8482124
536
+ 4963,Erik Gudbranson,Erik,Gudbranson,8475790
537
+ 5542,Travis Boyd,Travis,Boyd,8476329
538
+ 4694,Dmitry Kulikov,Dmitry,Kulikov,8475179
539
+ 4686,Oliver Ekman-Larsson,Oliver,Ekman-Larsson,8475171
540
+ 7654,Sebastian Aho,Sebastian,Aho,8480222
541
+ 7938,Ryan McLeod,Ryan,McLeod,8480802
542
+ 7384,Zack MacEwen,Zack,MacEwen,8479772
543
+ 7578,Fabian Zetterlund,Fabian,Zetterlund,8480188
544
+ 5996,Curtis Lazar,Curtis,Lazar,8477508
545
+ 7551,Jesper Boqvist,Jesper,Boqvist,8480003
546
+ 5343,Jakob Silfverberg,Jakob,Silfverberg,8475164
547
+ 6060,Anthony Duclair,Anthony,Duclair,8477407
548
+ 7118,Tyson Jost,Tyson,Jost,8479370
549
+ 5741,Teddy Blueger,Teddy,Blueger,8476927
550
+ 7832,Mark Kastelic,Mark,Kastelic,8480355
551
+ 4589,Jake Allen,Jake,Allen,8474596
552
+ 9154,Arber Xhekaj,Arber,Xhekaj,8482964
553
+ 7828,Parker Kelly,Parker,Kelly,8480448
554
+ 6859,Caleb Jones,Caleb,Jones,8478452
555
+ 7123,Luke Kunin,Luke,Kunin,8479316
556
+ 5525,Josh Manson,Josh,Manson,8476312
557
+ 7514,Jan Rutta,Jan,Rutta,8480172
558
+ 6387,Robby Fabbri,Robby,Fabbri,8477952
559
+ 6400,Brendan Lemieux,Brendan,Lemieux,8477962
560
+ 4692,Calvin de Haan,Calvin,de Haan,8475177
561
+ 6174,Kyle Burroughs,Kyle,Burroughs,8477335
562
+ 7889,Ilya Lyubushkin,Ilya,Lyubushkin,8480950
563
+ 8485,Juuso Parssinen,Juuso,Parssinen,8481704
564
+ 4696,Nick Leddy,Nick,Leddy,8475181
565
+ 6781,A.J. Greer,A.J.,Greer,8478421
566
+ 6910,Mason Appleton,Mason,Appleton,8478891
567
+ 5702,Olli Maatta,Olli,Maatta,8476874
568
+ 7589,Johnathan Kovacevic,Johnathan,Kovacevic,8480192
569
+ 7530,Erik Brannstrom,Erik,Brannstrom,8480073
570
+ 5415,Matt Nieto,Matt,Nieto,8476442
571
+ 6043,Spencer Martin,Spencer,Martin,8477484
572
+ 7332,Mathieu Olivier,Mathieu,Olivier,8479671
573
+ 7816,Sheldon Dries,Sheldon,Dries,8480326
574
+ 5976,Luke Glendening,Luke,Glendening,8476822
575
+ 5114,Petr Mrazek,Petr,Mrazek,8475852
576
+ 8152,Rafael Harvey-Pinard,Rafael,Harvey-Pinard,8481093
577
+ 7142,Andrew Peeke,Andrew,Peeke,8479369
578
+ 6857,Alexandre Carrier,Alexandre,Carrier,8478851
579
+ 6427,Christian Dvorak,Christian,Dvorak,8477989
580
+ 5004,Tyler Pitlick,Tyler,Pitlick,8475752
581
+ 8674,JJ Peterka,JJ,Peterka,8482175
582
+ 7951,Calen Addison,Calen,Addison,8480884
583
+ 8229,Reese Johnson,Reese,Johnson,8481147
584
+ 7129,Julien Gauthier,Julien,Gauthier,8479328
585
+ 6232,Nathan Walker,Nathan,Walker,8477573
586
+ 5120,Brendan Gallagher,Brendan,Gallagher,8475848
587
+ 4838,Nick Bonino,Nick,Bonino,8474009
588
+ 4266,Brendan Smith,Brendan,Smith,8474090
589
+ 3777,Jack Johnson,Jack,Johnson,8471677
590
+ 5899,Jaycob Megna,Jaycob,Megna,8477034
591
+ 7906,Adam Boqvist,Adam,Boqvist,8480871
592
+ 7152,Boris Katchouk,Boris,Katchouk,8479383
593
+ 5982,Jonathan Drouin,Jonathan,Drouin,8477494
594
+ 7506,Calle Rosen,Calle,Rosen,8480157
595
+ 7624,Adam Ruzicka,Adam,Ruzicka,8480008
596
+ 7947,Kirill Marchenko,Kirill,Marchenko,8480893
597
+ 6097,Hudson Fasching,Hudson,Fasching,8477392
598
+ 7931,Jonatan Berggren,Jonatan,Berggren,8481013
599
+ 4473,Zach Bogosian,Zach,Bogosian,8474567
600
+ 6132,Josh Brown,Josh,Brown,8477384
601
+ 6573,Jake Evans,Jake,Evans,8478133
602
+ 7926,Nils Lundkvist,Nils,Lundkvist,8480878
603
+ 7751,Sean Walker,Sean,Walker,8480336
604
+ 7584,MacKenzie Entwistle,MacKenzie,Entwistle,8480025
605
+ 7632,Emil Bemstrom,Emil,Bemstrom,8480205
606
+ 5864,Matt Benning,Matt,Benning,8476988
607
+ 7558,Dylan Samberg,Dylan,Samberg,8480049
608
+ 6506,Oskar Lindblom,Oskar,Lindblom,8478067
609
+ 7132,Max Jones,Max,Jones,8479368
610
+ 6365,Pierre-Edouard Bellemare,Pierre-Edouard,Bellemare,8477930
611
+ 7918,Rasmus Kupari,Rasmus,Kupari,8480845
612
+ 6379,Jakub Vrana,Jakub,Vrana,8477944
613
+ 6477,Kaapo Kahkonen,Kaapo,Kahkonen,8478039
614
+ 6021,Robert Hagg,Robert,Hagg,8477462
615
+ 7540,Ryan Poehling,Ryan,Poehling,8480068
616
+ 7093,Troy Stecher,Troy,Stecher,8479442
617
+ 5985,Sean Monahan,Sean,Monahan,8477497
618
+ 7544,Henri Jokiharju,Henri,Jokiharju,8480035
619
+ 4881,Matt Irwin,Matt,Irwin,8475625
620
+ 5950,Chad Ruhwedel,Chad,Ruhwedel,8477244
621
+ 4953,David Savard,David,Savard,8475233
622
+ 5377,Joel Armia,Joel,Armia,8476469
623
+ 3982,Nicklas Backstrom,Nicklas,Backstrom,8473563
624
+ 4287,Alex Goligoski,Alex,Goligoski,8471274
625
+ 8288,Vasily Podkolzin,Vasily,Podkolzin,8481617
626
+ 8292,Cam York,Cam,York,8481546
627
+ 4758,Robert Bortuzzo,Robert,Bortuzzo,8474145
628
+ 7529,Cal Foote,Cal,Foote,8479984
629
+ 7969,Jordan Harris,Jordan,Harris,8480887
630
+ 7564,Mario Ferraro,Mario,Ferraro,8479983
631
+ 5011,Jon Merrill,Jon,Merrill,8475750
632
+ 6750,Zach Werenski,Zach,Werenski,8478460
633
+ 7534,Josh Norris,Josh,Norris,8480064
634
+ 7168,Dylan Gambrell,Dylan,Gambrell,8479580
635
+ 8369,Aliaksei Protas,Aliaksei,Protas,8481656
636
+ 5117,Sam Carrick,Sam,Carrick,8475842
637
+ 6409,Andreas Englund,Andreas,Englund,8477971
638
+ 5727,Phillip Di Giuseppe,Phillip,Di Giuseppe,8476858
639
+ 5904,Kurtis MacDermid,Kurtis,MacDermid,8477073
640
+ 7098,Nikita Zaitsev,Nikita,Zaitsev,8479458
641
+ 7252,Axel Jonsson-Fjallby,Axel,Jonsson-Fjallby,8479536
642
+ 8654,Dylan Holloway,Dylan,Holloway,8482077
643
+ 6445,Elvis Merzlikins,Elvis,Merzlikins,8478007
644
+ 5837,Ben Hutton,Ben,Hutton,8477018
645
+ 5414,Joel Edmundson,Joel,Edmundson,8476441
646
+ 7141,Rasmus Asplund,Rasmus,Asplund,8479335
647
+ 3829,Marc-Edouard Vlasic,Marc-Edouard,Vlasic,8471709
648
+ 8665,Justin Barron,Justin,Barron,8482111
649
+ 7904,Filip Zadina,Filip,Zadina,8480821
650
+ 7220,Riley Stillman,Riley,Stillman,8479388
651
+ 7921,Isac Lundestrom,Isac,Lundestrom,8480806
652
+ 5559,Colin Blackwell,Colin,Blackwell,8476278
653
+ 4261,Max Pacioretty,Max,Pacioretty,8474157
654
+ 8865,Walker Duehr,Walker,Duehr,8482652
655
+ 4982,Jarred Tinordi,Jarred,Tinordi,8475797
656
+ 7869,Karson Kuhlman,Karson,Kuhlman,8480901
657
+ 7154,Givani Smith,Givani,Smith,8479379
658
+ 6800,Kevin Stenlund,Kevin,Stenlund,8478831
659
+ 5710,Tanner Pearson,Tanner,Pearson,8476871
660
+ 9243,Nick Blankenburg,Nick,Blankenburg,8483565
661
+ 8656,Kaiden Guhle,Kaiden,Guhle,8482087
662
+ 8318,Nils Hoglander,Nils,Hoglander,8481535
663
+ 8885,Dylan Guenther,Dylan,Guenther,8482699
664
+ 7773,Jacob MacDonald,Jacob,MacDonald,8479439
665
+ 7556,Jaret Anderson-Dolan,Jaret,Anderson-Dolan,8479994
666
+ 4633,Marco Scandella,Marco,Scandella,8474618
667
+ 7940,Jack Drury,Jack,Drury,8480835
668
+ 7824,Alex Belzile,Alex,Belzile,8475968
669
+ 6346,Jordan Oesterle,Jordan,Oesterle,8477851
670
+ 7288,Vincent Desharnais,Vincent,Desharnais,8479576
671
+ 7126,Logan Stanley,Logan,Stanley,8479378
672
+ 5859,Vinnie Hinostroza,Vinnie,Hinostroza,8476994
673
+ 7907,Vitali Kravtsov,Vitali,Kravtsov,8480833
674
+ 7184,Rem Pitlick,Rem,Pitlick,8479514
675
+ 6087,Ben Harpur,Ben,Harpur,8477433
676
+ 6974,Lane Pederson,Lane,Pederson,8478967
677
+ 7568,Jack Studnicka,Jack,Studnicka,8480021
678
+ 5282,Cam Atkinson,Cam,Atkinson,8474715
679
+ 5638,Chris Wideman,Chris,Wideman,8475227
680
+ 8286,Philip Broberg,Philip,Broberg,8481598
681
+ 5464,Mike Reilly,Mike,Reilly,8476422
682
+ 8806,Nils Aman,Nils,Aman,8482496
683
+ 7508,Radim Simek,Radim,Simek,8480160
684
+ 7121,Jake Bean,Jake,Bean,8479402
685
+ 7547,Conor Timmins,Conor,Timmins,8479982
686
+ 8598,Connor Mackey,Connor,Mackey,8482067
687
+ 7171,Markus Niemelainen,Markus,Niemelainen,8479338
688
+ 8666,Jake Neighbours,Jake,Neighbours,8482089
689
+ 6180,Andreas Johnsson,Andreas,Johnsson,8477341
690
+ 8056,Tim Berni,Tim,Berni,8481072
691
+ 9269,Juraj Slafkovsky,Juraj,Slafkovsky,8483515
692
+ 7958,David Gustafsson,David,Gustafsson,8481019
693
+ 7916,Liam Foudy,Liam,Foudy,8480853
694
+ 5744,Chris Tierney,Chris,Tierney,8476919
695
+ 8304,Jakob Pelletier,Jakob,Pelletier,8481592
696
+ 6833,Dennis Gilbert,Dennis,Gilbert,8478502
697
+ 6466,Fredrik Olofsson,Fredrik,Olofsson,8478028
698
+ 7647,Jacob Peterson,Jacob,Peterson,8480216
699
+ 8646,Jamie Drysdale,Jamie,Drysdale,8482142
700
+ 6955,Joel Hanley,Joel,Hanley,8477810
701
+ 4819,Jake Muzzin,Jake,Muzzin,8474162
702
+ 8335,Samuel Bolduc,Samuel,Bolduc,8481541
703
+ 8331,Nicholas Robertson,Nicholas,Robertson,8481582
704
+ 7119,Logan Brown,Logan,Brown,8479366
705
+ 5846,Connor Brown,Connor,Brown,8477015
706
+ 7194,Casey Fitzgerald,Casey,Fitzgerald,8479578
707
+ 8334,Brett Leason,Brett,Leason,8481517
708
+ 7929,Alexander Alexeyev,Alexander,Alexeyev,8480823
709
+ 8868,Justin Danforth,Justin,Danforth,8479941
710
+ 8301,Simon Holmstrom,Simon,Holmstrom,8481601
711
+ 7320,Michael Carcone,Michael,Carcone,8479619
712
+ 6721,Austin Czarnik,Austin,Czarnik,8478512
713
+ 6755,Jakub Zboril,Jakub,Zboril,8478415
714
+ 6283,Ross Johnston,Ross,Johnston,8477527
715
+ 7159,Kale Clague,Kale,Clague,8479348
716
+ 7445,Matt Luff,Matt,Luff,8479644
717
+ 6373,Haydn Fleury,Haydn,Fleury,8477938
718
+ 6805,Kyle Capobianco,Kyle,Capobianco,8478476
719
+ 7553,Gustav Lindstrom,Gustav,Lindstrom,8480184
720
+ 7695,Cole Guttman,Cole,Guttman,8480252
721
+ 8199,Brayden Pachal,Brayden,Pachal,8481167
722
+ 8863,Matt Kiersted,Matt,Kiersted,8482641
723
+ 9246,Ben Meyers,Ben,Meyers,8483570
724
+ 8097,Tyler Tucker,Tyler,Tucker,8481006
725
+ 8300,Tobias Bjornfot,Tobias,Bjornfot,8481600
726
+ 5902,Jayson Megna,Jayson,Megna,8477126
727
+ 7274,Tanner Laczynski,Tanner,Laczynski,8479550
728
+ 8296,Thomas Harley,Thomas,Harley,8481581
729
+ 6643,Darren Raddysh,Darren,Raddysh,8478178
730
+ 7572,Ian Mitchell,Ian,Mitchell,8480070
731
+ 7614,Jacob Bryson,Jacob,Bryson,8480196
732
+ 6776,Travis Dermott,Travis,Dermott,8478408
733
+ 5369,Sean Couturier,Sean,Couturier,8476461
734
+ 8373,Jordan Spence,Jordan,Spence,8481606
735
+ 6839,Colton White,Colton,White,8478841
736
+ 7374,Jeffrey Viel,Jeffrey,Viel,8479705
737
+ 6854,Parker Wotherspoon,Parker,Wotherspoon,8478450
738
+ 6107,Tucker Poolman,Tucker,Poolman,8477359
739
+ 8647,Alexander Holtz,Alexander,Holtz,8482125
740
+ 7116,Alex Nylander,Alex,Nylander,8479423
741
+ 4834,Zac Dalpe,Zac,Dalpe,8474610
742
+ 7217,Lucas Carlsson,Lucas,Carlsson,8479523
743
+ 8305,Nolan Foote,Nolan,Foote,8481518
744
+ 7207,Victor Mete,Victor,Mete,8479376
745
+ 6808,Guillaume Brisebois,Guillaume,Brisebois,8478465
746
+ 8131,Egor Zamula,Egor,Zamula,8481178
747
+ 30150,Akito Hirose,Akito,Hirose,8484254
748
+ 9272,Shane Wright,Shane,Wright,8483524
749
+ 30124,Tyler Kleven,Tyler,Kleven,8482095
750
+ 8884,Brandt Clarke,Brandt,Clarke,8482730
751
+ 30000,Nikita Nesterenko,Nikita,Nesterenko,8481754
752
+ 30115,Hunter McKown,Hunter,McKown,8484125
753
+ 7100,Drake Caggiula,Drake,Caggiula,8479465
754
+ 7219,Jacob Moverare,Jacob,Moverare,8479421
755
+ 7943,Scott Perunovich,Scott,Perunovich,8481059
756
+ 30104,Wyatt Kaiser,Wyatt,Kaiser,8482176
757
+ 30173,Cole McWard,Cole,McWard,8484287
758
+ 30227,Matthew Knies,Matthew,Knies,8482720
759
+ 7533,Urho Vaakanainen,Urho,Vaakanainen,8480001
760
+ 4691,Ryan Ellis,Ryan,Ellis,8475176
761
+ 8378,Matej Blumel,Matej,Blumel,8481712
762
+ 7522,Lias Andersson,Lias,Andersson,8480072
763
+ 5758,Mackenzie MacEachern,Mackenzie,MacEachern,8476907
764
+ 30106,Aidan McDonough,Aidan,McDonough,8481683
765
+ 7133,Riley Tufte,Riley,Tufte,8479362
766
+ 30145,Matt Coronato,Matt,Coronato,8482679
767
+ 30128,Henry Thrun,Henry,Thrun,8481567
768
+ 30075,Brock Faber,Brock,Faber,8482122
769
+ 30129,Sean Farrell,Sean,Farrell,8482081
770
+ 9276,Marco Kasper,Marco,Kasper,8483464
771
+ 8713,Jean-Luc Foudy,Jean-Luc,Foudy,8482147
772
+ 8882,Simon Edvinsson,Simon,Edvinsson,8482762
773
+ 7222,Rhett Gardner,Rhett,Gardner,8479587
774
+ 7750,Philippe Maillet,Philippe,Maillet,8477544
775
+ 8347,John Ludvig,John,Ludvig,8481206
776
+ 30139,Alex Laferriere,Alex,Laferriere,8482155
777
+ 7973,Oskar Back,Oskar,Back,8480840
778
+ 8333,Dillon Hamaliuk,Dillon,Hamaliuk,8481549
779
+ 8306,Ryan Suzuki,Ryan,Suzuki,8481576
780
+ 9270,Simon Nemec,Simon,Nemec,8483495
781
+ 9233,Brian Halonen,Brian,Halonen,8483531
782
+ 6863,Ryan Shea,Ryan,Shea,8478854
783
+ 8322,Jamieson Rees,Jamieson,Rees,8481579
784
+ 30251,Mike Benning,Mike,Benning,8482107
785
+ 8917,Francesco Pinelli,Francesco,Pinelli,8482748
786
+ 8465,Andre Lee,Andre,Lee,8481732
787
+ 9004,Topias Vilen,Topias,Vilen,8482873
788
+ 8934,Samuel Helenius,Samuel,Helenius,8482726
789
+ 5009,Alexander Petrovic,Alexander,Petrovic,8475755
790
+ 30832,Logan Cooley,Logan,Cooley,8483431
791
+ 8374,Tyce Thompson,Tyce,Thompson,8481740
792
+ 30154,Jackson LaCombe,Jackson,LaCombe,8481605
793
+ 8494,Nikolai Knyzhov,Nikolai,Knyzhov,8481812
794
+ 8649,Marco Rossi,Marco,Rossi,8482079
795
+ 8657,Lukas Reichel,Lukas,Reichel,8482117
796
+ 5993,Alex Wennberg,Alex,Wennberg,8477505
797
+ 6517,Rourke Chartier,Rourke,Chartier,8478078
798
+ 6789,Jansen Harkins,Jansen,Harkins,8478424
799
+ 6768,Noah Juulsen,Noah,Juulsen,8478454
800
+ 7933,Jesse Ylonen,Jesse,Yl�nen,8481058
801
+ 8302,Philip Tomasino,Philip,Tomasino,8481577
802
+ 8668,Ridly Greig,Ridly,Greig,8482092
803
+ 8682,Luke Evangelista,Luke,Evangelista,8482146
804
+ 9275,Kevin Korchinski,Kevin,Korchinski,8483466
805
+ 9322,Matthew Poitras,Matthew,Poitras,8483505