Multichem commited on
Commit
5ce7b63
·
1 Parent(s): 0f3cb17

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +37 -15
app.py CHANGED
@@ -59,10 +59,15 @@ def init_baselines():
59
  raw_display.replace('', np.nan, inplace=True)
60
  raw_display.replace('#DIV/0!', np.nan, inplace=True)
61
  prop_frame = raw_display.dropna()
 
 
 
 
 
62
 
63
- return game_model, overall_stats, timestamp, prop_frame, prop_trends
64
 
65
- game_model, overall_stats, timestamp, prop_frame, prop_trends = init_baselines()
66
  qb_stats = overall_stats.loc[overall_stats['Position'] == 'QB']
67
  non_qb_stats = overall_stats.loc[overall_stats['Position'] != 'QB']
68
  team_dict = dict(zip(prop_frame['Player'], prop_frame['Team']))
@@ -83,7 +88,7 @@ with tab1:
83
  st.info(t_stamp)
84
  if st.button("Reset Data", key='reset1'):
85
  st.cache_data.clear()
86
- game_model, overall_stats, timestamp, prop_frame, prop_trends = init_baselines()
87
  qb_stats = overall_stats.loc[overall_stats['Position'] == 'QB']
88
  non_qb_stats = overall_stats.loc[overall_stats['Position'] != 'QB']
89
  team_dict = dict(zip(prop_frame['Player'], prop_frame['Team']))
@@ -111,7 +116,7 @@ with tab2:
111
  st.info(t_stamp)
112
  if st.button("Reset Data", key='reset2'):
113
  st.cache_data.clear()
114
- game_model, overall_stats, timestamp, prop_frame, prop_trends = init_baselines()
115
  qb_stats = overall_stats.loc[overall_stats['Position'] == 'QB']
116
  non_qb_stats = overall_stats.loc[overall_stats['Position'] != 'QB']
117
  team_dict = dict(zip(prop_frame['Player'], prop_frame['Team']))
@@ -137,7 +142,7 @@ with tab3:
137
  st.info(t_stamp)
138
  if st.button("Reset Data", key='reset3'):
139
  st.cache_data.clear()
140
- game_model, overall_stats, timestamp, prop_frame, prop_trends = init_baselines()
141
  qb_stats = overall_stats.loc[overall_stats['Position'] == 'QB']
142
  non_qb_stats = overall_stats.loc[overall_stats['Position'] != 'QB']
143
  team_dict = dict(zip(prop_frame['Player'], prop_frame['Team']))
@@ -163,7 +168,7 @@ with tab4:
163
  st.info(t_stamp)
164
  if st.button("Reset Data", key='reset4'):
165
  st.cache_data.clear()
166
- game_model, overall_stats, timestamp, prop_frame, prop_trends = init_baselines()
167
  qb_stats = overall_stats.loc[overall_stats['Position'] == 'QB']
168
  non_qb_stats = overall_stats.loc[overall_stats['Position'] != 'QB']
169
  team_dict = dict(zip(prop_frame['Player'], prop_frame['Team']))
@@ -190,7 +195,7 @@ with tab5:
190
  st.info(t_stamp)
191
  if st.button("Reset Data", key='reset5'):
192
  st.cache_data.clear()
193
- game_model, overall_stats, timestamp, prop_frame, prop_trends = init_baselines()
194
  qb_stats = overall_stats.loc[overall_stats['Position'] == 'QB']
195
  non_qb_stats = overall_stats.loc[overall_stats['Position'] != 'QB']
196
  team_dict = dict(zip(prop_frame['Player'], prop_frame['Team']))
@@ -337,7 +342,7 @@ with tab6:
337
  st.info('The Over and Under percentages are a compositve percentage based on simulations, historical performance, and implied probabilities, and may be different than you would expect based purely on the median projection. Likewise, the Edge of a bet is not the only indicator of if you should make the bet or not as the suggestion is using a base acceptable threshold to determine how much edge you should have for each stat category.')
338
  if st.button("Reset Data/Load Data", key='reset6'):
339
  st.cache_data.clear()
340
- game_model, overall_stats, timestamp, prop_frame, prop_trends = init_baselines()
341
  qb_stats = overall_stats.loc[overall_stats['Position'] == 'QB']
342
  non_qb_stats = overall_stats.loc[overall_stats['Position'] != 'QB']
343
  team_dict = dict(zip(prop_frame['Player'], prop_frame['Team']))
@@ -351,6 +356,19 @@ with tab6:
351
  export_container = st.empty()
352
 
353
  with col1:
 
 
 
 
 
 
 
 
 
 
 
 
 
354
  prop_type_var = st.selectbox('Select prop category', options = ['All Props', 'pass_yards', 'rush_yards', 'rec_yards', 'receptions', 'rush_attempts'])
355
 
356
  if st.button('Simulate Prop Category'):
@@ -360,6 +378,11 @@ with tab6:
360
  if prop_type_var == 'All Props':
361
  for prop in all_sim_vars:
362
 
 
 
 
 
 
363
  prop_df = prop_frame[['Player', 'over_prop', 'over_line', 'under_line', 'prop_type']]
364
  prop_df = prop_df.loc[prop_df['prop_type'] == prop]
365
  prop_df = prop_df[['Player', 'over_prop', 'over_line', 'under_line']]
@@ -450,9 +473,14 @@ with tab6:
450
  final_outcomes = sim_all_hold
451
 
452
  elif prop_type_var != 'All Props':
 
 
 
 
 
 
453
 
454
  if prop_type_var == "pass_yards":
455
- prop_df = prop_frame[['Player', 'over_prop', 'over_line', 'under_line', 'prop_type']]
456
  prop_df = prop_df.loc[prop_df['prop_type'] == 'pass_yards']
457
  prop_df = prop_df[['Player', 'over_prop', 'over_line', 'under_line']]
458
  prop_df.rename(columns={"over_prop": "Prop"}, inplace = True)
@@ -462,7 +490,6 @@ with tab6:
462
  prop_df['Under'] = np.where(prop_df['under_line'] < 0, (-(prop_df['under_line'])/((-(prop_df['under_line']))+101)), 101/(prop_df['under_line']+101))
463
  df = pd.merge(overall_stats, prop_df, how='left', left_on=['Player'], right_on = ['Player'])
464
  elif prop_type_var == "rush_yards":
465
- prop_df = prop_frame[['Player', 'over_prop', 'over_line', 'under_line', 'prop_type']]
466
  prop_df = prop_df.loc[prop_df['prop_type'] == 'rush_yards']
467
  prop_df = prop_df[['Player', 'over_prop', 'over_line', 'under_line']]
468
  prop_df.rename(columns={"over_prop": "Prop"}, inplace = True)
@@ -472,7 +499,6 @@ with tab6:
472
  prop_df['Under'] = np.where(prop_df['under_line'] < 0, (-(prop_df['under_line'])/((-(prop_df['under_line']))+101)), 101/(prop_df['under_line']+101))
473
  df = pd.merge(overall_stats, prop_df, how='left', left_on=['Player'], right_on = ['Player'])
474
  elif prop_type_var == "rec_yards":
475
- prop_df = prop_frame[['Player', 'over_prop', 'over_line', 'under_line', 'prop_type']]
476
  prop_df = prop_df.loc[prop_df['prop_type'] == 'rec_yards']
477
  prop_df = prop_df[['Player', 'over_prop', 'over_line', 'under_line']]
478
  prop_df.rename(columns={"over_prop": "Prop"}, inplace = True)
@@ -482,7 +508,6 @@ with tab6:
482
  prop_df['Under'] = np.where(prop_df['under_line'] < 0, (-(prop_df['under_line'])/((-(prop_df['under_line']))+101)), 101/(prop_df['under_line']+101))
483
  df = pd.merge(overall_stats, prop_df, how='left', left_on=['Player'], right_on = ['Player'])
484
  elif prop_type_var == "receptions":
485
- prop_df = prop_frame[['Player', 'over_prop', 'over_line', 'under_line', 'prop_type']]
486
  prop_df = prop_df.loc[prop_df['prop_type'] == 'receptions']
487
  prop_df = prop_df[['Player', 'over_prop', 'over_line', 'under_line']]
488
  prop_df.rename(columns={"over_prop": "Prop"}, inplace = True)
@@ -492,7 +517,6 @@ with tab6:
492
  prop_df['Under'] = np.where(prop_df['under_line'] < 0, (-(prop_df['under_line'])/((-(prop_df['under_line']))+101)), 101/(prop_df['under_line']+101))
493
  df = pd.merge(overall_stats, prop_df, how='left', left_on=['Player'], right_on = ['Player'])
494
  elif prop_type_var == "rush_attempts":
495
- prop_df = prop_frame[['Player', 'over_prop', 'over_line', 'under_line', 'prop_type']]
496
  prop_df = prop_df.loc[prop_df['prop_type'] == 'rush_attempts']
497
  prop_df = prop_df[['Player', 'over_prop', 'over_line', 'under_line']]
498
  prop_df.rename(columns={"over_prop": "Prop"}, inplace = True)
@@ -502,7 +526,6 @@ with tab6:
502
  prop_df['Under'] = np.where(prop_df['under_line'] < 0, (-(prop_df['under_line'])/((-(prop_df['under_line']))+101)), 101/(prop_df['under_line']+101))
503
  df = pd.merge(overall_stats, prop_df, how='left', left_on=['Player'], right_on = ['Player'])
504
  elif prop_type_var == "pass_attempts":
505
- prop_df = prop_frame[['Player', 'over_prop', 'over_line', 'under_line', 'prop_type']]
506
  prop_df = prop_df.loc[prop_df['prop_type'] == 'pass_attempts']
507
  prop_df = prop_df[['Player', 'over_prop', 'over_line', 'under_line']]
508
  prop_df.rename(columns={"over_prop": "Prop"}, inplace = True)
@@ -512,7 +535,6 @@ with tab6:
512
  prop_df['Under'] = np.where(prop_df['under_line'] < 0, (-(prop_df['under_line'])/((-(prop_df['under_line']))+101)), 101/(prop_df['under_line']+101))
513
  df = pd.merge(overall_stats, prop_df, how='left', left_on=['Player'], right_on = ['Player'])
514
  elif prop_type_var == "pass_completions":
515
- prop_df = prop_frame[['Player', 'over_prop', 'over_line', 'under_line', 'prop_type']]
516
  prop_df = prop_df.loc[prop_df['prop_type'] == 'pass_completions']
517
  prop_df = prop_df[['Player', 'over_prop', 'over_line', 'under_line']]
518
  prop_df.rename(columns={"over_prop": "Prop"}, inplace = True)
 
59
  raw_display.replace('', np.nan, inplace=True)
60
  raw_display.replace('#DIV/0!', np.nan, inplace=True)
61
  prop_frame = raw_display.dropna()
62
+
63
+ worksheet = sh.worksheet('Pick6_ingest')
64
+ raw_display = pd.DataFrame(worksheet.get_all_records())
65
+ raw_display.replace('', np.nan, inplace=True)
66
+ pick_frame = raw_display.dropna(subset='Player')
67
 
68
+ return game_model, overall_stats, timestamp, prop_frame, prop_trends, pick_frame
69
 
70
+ game_model, overall_stats, timestamp, prop_frame, prop_trends, pick_frame = init_baselines()
71
  qb_stats = overall_stats.loc[overall_stats['Position'] == 'QB']
72
  non_qb_stats = overall_stats.loc[overall_stats['Position'] != 'QB']
73
  team_dict = dict(zip(prop_frame['Player'], prop_frame['Team']))
 
88
  st.info(t_stamp)
89
  if st.button("Reset Data", key='reset1'):
90
  st.cache_data.clear()
91
+ game_model, overall_stats, timestamp, prop_frame, prop_trends, pick_frame = init_baselines()
92
  qb_stats = overall_stats.loc[overall_stats['Position'] == 'QB']
93
  non_qb_stats = overall_stats.loc[overall_stats['Position'] != 'QB']
94
  team_dict = dict(zip(prop_frame['Player'], prop_frame['Team']))
 
116
  st.info(t_stamp)
117
  if st.button("Reset Data", key='reset2'):
118
  st.cache_data.clear()
119
+ game_model, overall_stats, timestamp, prop_frame, prop_trends, pick_frame = init_baselines()
120
  qb_stats = overall_stats.loc[overall_stats['Position'] == 'QB']
121
  non_qb_stats = overall_stats.loc[overall_stats['Position'] != 'QB']
122
  team_dict = dict(zip(prop_frame['Player'], prop_frame['Team']))
 
142
  st.info(t_stamp)
143
  if st.button("Reset Data", key='reset3'):
144
  st.cache_data.clear()
145
+ game_model, overall_stats, timestamp, prop_frame, prop_trends, pick_frame = init_baselines()
146
  qb_stats = overall_stats.loc[overall_stats['Position'] == 'QB']
147
  non_qb_stats = overall_stats.loc[overall_stats['Position'] != 'QB']
148
  team_dict = dict(zip(prop_frame['Player'], prop_frame['Team']))
 
168
  st.info(t_stamp)
169
  if st.button("Reset Data", key='reset4'):
170
  st.cache_data.clear()
171
+ game_model, overall_stats, timestamp, prop_frame, prop_trends, pick_frame = init_baselines()
172
  qb_stats = overall_stats.loc[overall_stats['Position'] == 'QB']
173
  non_qb_stats = overall_stats.loc[overall_stats['Position'] != 'QB']
174
  team_dict = dict(zip(prop_frame['Player'], prop_frame['Team']))
 
195
  st.info(t_stamp)
196
  if st.button("Reset Data", key='reset5'):
197
  st.cache_data.clear()
198
+ game_model, overall_stats, timestamp, prop_frame, prop_trends, pick_frame = init_baselines()
199
  qb_stats = overall_stats.loc[overall_stats['Position'] == 'QB']
200
  non_qb_stats = overall_stats.loc[overall_stats['Position'] != 'QB']
201
  team_dict = dict(zip(prop_frame['Player'], prop_frame['Team']))
 
342
  st.info('The Over and Under percentages are a compositve percentage based on simulations, historical performance, and implied probabilities, and may be different than you would expect based purely on the median projection. Likewise, the Edge of a bet is not the only indicator of if you should make the bet or not as the suggestion is using a base acceptable threshold to determine how much edge you should have for each stat category.')
343
  if st.button("Reset Data/Load Data", key='reset6'):
344
  st.cache_data.clear()
345
+ game_model, overall_stats, timestamp, prop_frame, prop_trends, pick_frame = init_baselines()
346
  qb_stats = overall_stats.loc[overall_stats['Position'] == 'QB']
347
  non_qb_stats = overall_stats.loc[overall_stats['Position'] != 'QB']
348
  team_dict = dict(zip(prop_frame['Player'], prop_frame['Team']))
 
356
  export_container = st.empty()
357
 
358
  with col1:
359
+ game_select_var = st.selectbox('Select prop source', options = ['Aggregate', 'Pick6'])
360
+ if game_select_var == 'Aggregate':
361
+ prop_df = prop_frame[['Player', 'over_prop', 'over_line', 'under_line', 'prop_type']]
362
+ elif game_select_var == 'Pick6':
363
+ prop_df = pick_frame[['Full_name', 'over_prop', 'over_line', 'under_line', 'prop_type']]
364
+ prop_df.rename(columns={"Full_name": "Player"}, inplace = True)
365
+ st.download_button(
366
+ label="Download Prop Source",
367
+ data=convert_df_to_csv(prop_df),
368
+ file_name='Nba_prop_source.csv',
369
+ mime='text/csv',
370
+ key='prop_source',
371
+ )
372
  prop_type_var = st.selectbox('Select prop category', options = ['All Props', 'pass_yards', 'rush_yards', 'rec_yards', 'receptions', 'rush_attempts'])
373
 
374
  if st.button('Simulate Prop Category'):
 
378
  if prop_type_var == 'All Props':
379
  for prop in all_sim_vars:
380
 
381
+ if game_select_var == 'Aggregate':
382
+ prop_df = prop_frame[['Player', 'over_prop', 'over_line', 'under_line', 'prop_type']]
383
+ elif game_select_var == 'Pick6':
384
+ prop_df = pick_frame[['Full_name', 'over_prop', 'over_line', 'under_line', 'prop_type']]
385
+ prop_df.rename(columns={"Full_name": "Player"}, inplace = True)
386
  prop_df = prop_frame[['Player', 'over_prop', 'over_line', 'under_line', 'prop_type']]
387
  prop_df = prop_df.loc[prop_df['prop_type'] == prop]
388
  prop_df = prop_df[['Player', 'over_prop', 'over_line', 'under_line']]
 
473
  final_outcomes = sim_all_hold
474
 
475
  elif prop_type_var != 'All Props':
476
+
477
+ if game_select_var == 'Aggregate':
478
+ prop_df = prop_frame[['Player', 'over_prop', 'over_line', 'under_line', 'prop_type']]
479
+ elif game_select_var == 'Pick6':
480
+ prop_df = pick_frame[['Full_name', 'over_prop', 'over_line', 'under_line', 'prop_type']]
481
+ prop_df.rename(columns={"Full_name": "Player"}, inplace = True)
482
 
483
  if prop_type_var == "pass_yards":
 
484
  prop_df = prop_df.loc[prop_df['prop_type'] == 'pass_yards']
485
  prop_df = prop_df[['Player', 'over_prop', 'over_line', 'under_line']]
486
  prop_df.rename(columns={"over_prop": "Prop"}, inplace = True)
 
490
  prop_df['Under'] = np.where(prop_df['under_line'] < 0, (-(prop_df['under_line'])/((-(prop_df['under_line']))+101)), 101/(prop_df['under_line']+101))
491
  df = pd.merge(overall_stats, prop_df, how='left', left_on=['Player'], right_on = ['Player'])
492
  elif prop_type_var == "rush_yards":
 
493
  prop_df = prop_df.loc[prop_df['prop_type'] == 'rush_yards']
494
  prop_df = prop_df[['Player', 'over_prop', 'over_line', 'under_line']]
495
  prop_df.rename(columns={"over_prop": "Prop"}, inplace = True)
 
499
  prop_df['Under'] = np.where(prop_df['under_line'] < 0, (-(prop_df['under_line'])/((-(prop_df['under_line']))+101)), 101/(prop_df['under_line']+101))
500
  df = pd.merge(overall_stats, prop_df, how='left', left_on=['Player'], right_on = ['Player'])
501
  elif prop_type_var == "rec_yards":
 
502
  prop_df = prop_df.loc[prop_df['prop_type'] == 'rec_yards']
503
  prop_df = prop_df[['Player', 'over_prop', 'over_line', 'under_line']]
504
  prop_df.rename(columns={"over_prop": "Prop"}, inplace = True)
 
508
  prop_df['Under'] = np.where(prop_df['under_line'] < 0, (-(prop_df['under_line'])/((-(prop_df['under_line']))+101)), 101/(prop_df['under_line']+101))
509
  df = pd.merge(overall_stats, prop_df, how='left', left_on=['Player'], right_on = ['Player'])
510
  elif prop_type_var == "receptions":
 
511
  prop_df = prop_df.loc[prop_df['prop_type'] == 'receptions']
512
  prop_df = prop_df[['Player', 'over_prop', 'over_line', 'under_line']]
513
  prop_df.rename(columns={"over_prop": "Prop"}, inplace = True)
 
517
  prop_df['Under'] = np.where(prop_df['under_line'] < 0, (-(prop_df['under_line'])/((-(prop_df['under_line']))+101)), 101/(prop_df['under_line']+101))
518
  df = pd.merge(overall_stats, prop_df, how='left', left_on=['Player'], right_on = ['Player'])
519
  elif prop_type_var == "rush_attempts":
 
520
  prop_df = prop_df.loc[prop_df['prop_type'] == 'rush_attempts']
521
  prop_df = prop_df[['Player', 'over_prop', 'over_line', 'under_line']]
522
  prop_df.rename(columns={"over_prop": "Prop"}, inplace = True)
 
526
  prop_df['Under'] = np.where(prop_df['under_line'] < 0, (-(prop_df['under_line'])/((-(prop_df['under_line']))+101)), 101/(prop_df['under_line']+101))
527
  df = pd.merge(overall_stats, prop_df, how='left', left_on=['Player'], right_on = ['Player'])
528
  elif prop_type_var == "pass_attempts":
 
529
  prop_df = prop_df.loc[prop_df['prop_type'] == 'pass_attempts']
530
  prop_df = prop_df[['Player', 'over_prop', 'over_line', 'under_line']]
531
  prop_df.rename(columns={"over_prop": "Prop"}, inplace = True)
 
535
  prop_df['Under'] = np.where(prop_df['under_line'] < 0, (-(prop_df['under_line'])/((-(prop_df['under_line']))+101)), 101/(prop_df['under_line']+101))
536
  df = pd.merge(overall_stats, prop_df, how='left', left_on=['Player'], right_on = ['Player'])
537
  elif prop_type_var == "pass_completions":
 
538
  prop_df = prop_df.loc[prop_df['prop_type'] == 'pass_completions']
539
  prop_df = prop_df[['Player', 'over_prop', 'over_line', 'under_line']]
540
  prop_df.rename(columns={"over_prop": "Prop"}, inplace = True)