James McCool commited on
Commit
b8564ea
·
1 Parent(s): f56b951

Refactor player display logic to include 'FLEX5' in lineup data for both Draftkings and Fanduel. Adjust scoring percentage calculations to rename and drop unnecessary salary columns, enhancing clarity in player statistics. Update dataframe styling for improved visual representation of key metrics in the UI.

Browse files
Files changed (1) hide show
  1. app.py +31 -13
app.py CHANGED
@@ -1,7 +1,6 @@
1
  import streamlit as st
2
  import numpy as np
3
  import pandas as pd
4
- import gspread
5
  import pymongo
6
  import re
7
 
@@ -28,6 +27,7 @@ fd_columns = ['P', 'C_1B', '2B', '3B', 'SS', 'OF1', 'OF2', 'OF3', 'UTIL', 'salar
28
  dk_sd_columns = ['CPT', 'FLEX1', 'FLEX2', 'FLEX3', 'FLEX4', 'FLEX5', 'salary', 'proj', 'Team', 'Team_count', 'Secondary', 'Secondary_count', 'Own']
29
  fd_sd_columns = ['CPT', 'FLEX1', 'FLEX2', 'FLEX3', 'FLEX4', 'salary', 'proj', 'Team', 'Team_count', 'Secondary', 'Secondary_count', 'Own']
30
 
 
31
  @st.cache_resource(ttl = 61)
32
  def init_baselines():
33
 
@@ -203,7 +203,7 @@ def init_DK_lineups(type_var, slate_var):
203
 
204
  return DK_seed
205
 
206
- @st.cache_data(ttl = 61)
207
  def init_FD_lineups(type_var,slate_var):
208
 
209
  if type_var == 'Regular':
@@ -256,19 +256,19 @@ def init_FD_lineups(type_var,slate_var):
256
  cursor = collection.find().limit(10000)
257
 
258
  raw_display = pd.DataFrame(list(cursor))
259
- raw_display = raw_display[['CPT', 'FLEX1', 'FLEX2', 'FLEX3', 'FLEX4', 'salary', 'proj', 'Team', 'Team_count', 'Secondary', 'Secondary_count', 'Own']]
260
  elif slate_var == 'Secondary':
261
  collection = db['FD_MLB_SD2_seed_frame']
262
  cursor = collection.find().limit(10000)
263
 
264
  raw_display = pd.DataFrame(list(cursor))
265
- raw_display = raw_display[['CPT', 'FLEX1', 'FLEX2', 'FLEX3', 'FLEX4', 'salary', 'proj', 'Team', 'Team_count', 'Secondary', 'Secondary_count', 'Own']]
266
  elif slate_var == 'Auxiliary':
267
  collection = db['FD_MLB_SD3_seed_frame']
268
  cursor = collection.find().limit(10000)
269
 
270
  raw_display = pd.DataFrame(list(cursor))
271
- raw_display = raw_display[['CPT', 'FLEX1', 'FLEX2', 'FLEX3', 'FLEX4', 'salary', 'proj', 'Team', 'Team_count', 'Secondary', 'Secondary_count', 'Own']]
272
 
273
  FD_seed = raw_display.to_numpy()
274
 
@@ -386,11 +386,11 @@ with tab1:
386
  scoring_percentages = scoring_percentages.drop(['DK Main Slate', 'DK Secondary Slate', 'DK Turbo Slate', 'FD Main Slate', 'FD Secondary Slate', 'FD Turbo Slate', 'FD Main Top Score', 'DK Main Top Score', 'FD Secondary Top Score', 'DK Secondary Top Score', 'DK Turbo Top Score'], axis=1)
387
  scoring_percentages = scoring_percentages.sort_values(by='8+ runs', ascending=False)
388
  if site_var == 'Draftkings':
389
- scoring_percentages = scoring_percentages.rename(columns={'DK LevX': 'LevX', 'DK Own%': 'Own%', 'Avg Score': 'Runs', 'Win Percentage': 'Win%', '8+ runs': '8+ Runs', 'DK_Runs/$': 'Runs/$'})
390
- scoring_percentages = scoring_percentages.drop(['FD Own%', 'Avg_Salary_FD', 'FD_Runs/$'], axis=1)
391
  elif site_var == 'Fanduel':
392
- scoring_percentages = scoring_percentages.rename(columns={'FD LevX': 'LevX', 'FD Own%': 'Own%', 'Avg Score': 'Runs', 'Win Percentage': 'Win%', '8+ runs': '8+ Runs', 'FD_Runs/$': 'Runs/$'})
393
- scoring_percentages = scoring_percentages.drop(['DK Own%', 'Avg_Salary_DK', 'DK_Runs/$'], axis=1)
394
 
395
  if view_var == "Simple":
396
  scoring_percentages = scoring_percentages[['Names', 'Runs', '8+ Runs', 'Win%', 'LevX', 'Own%']]
@@ -400,7 +400,7 @@ with tab1:
400
  if prio_var is not None:
401
  scoring_percentages = scoring_percentages[scoring_percentages['Stack_Prio'] == prio_var]
402
  scoring_percentages = scoring_percentages.set_index('Names', drop=True)
403
- st.dataframe(scoring_percentages.style.background_gradient(axis=0).background_gradient(cmap='RdYlGn').background_gradient(cmap='RdYlGn_r', subset=['Own%']).format(game_format, precision=2), height=750, use_container_width = True)
404
 
405
  with tab2:
406
  st.header("Player ROO")
@@ -636,7 +636,7 @@ with tab3:
636
  if slate_type_var3 == 'Regular':
637
  map_columns = ['P', 'C_1B', '2B', '3B', 'SS', 'OF1', 'OF2', 'OF3', 'UTIL']
638
  elif slate_type_var3 == 'Showdown':
639
- map_columns = ['CPT', 'FLEX1', 'FLEX2', 'FLEX3', 'FLEX4']
640
  for col_idx in map_columns:
641
  export_file[col_idx] = export_file[col_idx].map(fd_id_map)
642
 
@@ -736,7 +736,7 @@ with tab3:
736
  if slate_type_var3 == 'Regular':
737
  player_columns = st.session_state.data_export_display.iloc[:, :9]
738
  elif slate_type_var3 == 'Showdown':
739
- player_columns = st.session_state.data_export_display.iloc[:, :5]
740
 
741
  # Flatten the DataFrame and count unique values
742
  value_counts = player_columns.values.flatten().tolist()
@@ -778,7 +778,7 @@ with tab3:
778
  if slate_type_var3 == 'Regular':
779
  player_columns = st.session_state.working_seed[:, :9]
780
  elif slate_type_var3 == 'Showdown':
781
- player_columns = st.session_state.working_seed[:, :6]
782
 
783
  # Flatten the DataFrame and count unique values
784
  value_counts = player_columns.flatten().tolist()
@@ -928,8 +928,26 @@ with tab4:
928
  # 3. Select the order range
929
  if auto_range_var == 'Top (1-5)':
930
  selected_players = team_players[team_players['Order'] > 0].head(auto_size_var)
 
 
 
 
 
 
 
 
 
931
  elif auto_range_var == 'Mid (4-8)':
932
  selected_players = team_players[team_players['Order'] > 0].iloc[3:3 + auto_size_var]
 
 
 
 
 
 
 
 
 
933
  elif auto_range_var == 'Wrap (7-2)':
934
  if auto_size_var == 5:
935
  first_three = team_players[team_players['Order'] > 0].head(2)
 
1
  import streamlit as st
2
  import numpy as np
3
  import pandas as pd
 
4
  import pymongo
5
  import re
6
 
 
27
  dk_sd_columns = ['CPT', 'FLEX1', 'FLEX2', 'FLEX3', 'FLEX4', 'FLEX5', 'salary', 'proj', 'Team', 'Team_count', 'Secondary', 'Secondary_count', 'Own']
28
  fd_sd_columns = ['CPT', 'FLEX1', 'FLEX2', 'FLEX3', 'FLEX4', 'salary', 'proj', 'Team', 'Team_count', 'Secondary', 'Secondary_count', 'Own']
29
 
30
+
31
  @st.cache_resource(ttl = 61)
32
  def init_baselines():
33
 
 
203
 
204
  return DK_seed
205
 
206
+ @st.cache_data(ttl = 60)
207
  def init_FD_lineups(type_var,slate_var):
208
 
209
  if type_var == 'Regular':
 
256
  cursor = collection.find().limit(10000)
257
 
258
  raw_display = pd.DataFrame(list(cursor))
259
+ raw_display = raw_display[['CPT', 'FLEX1', 'FLEX2', 'FLEX3', 'FLEX4', 'FLEX5', 'salary', 'proj', 'Team', 'Team_count', 'Secondary', 'Secondary_count', 'Own']]
260
  elif slate_var == 'Secondary':
261
  collection = db['FD_MLB_SD2_seed_frame']
262
  cursor = collection.find().limit(10000)
263
 
264
  raw_display = pd.DataFrame(list(cursor))
265
+ raw_display = raw_display[['CPT', 'FLEX1', 'FLEX2', 'FLEX3', 'FLEX4', 'FLEX5', 'salary', 'proj', 'Team', 'Team_count', 'Secondary', 'Secondary_count', 'Own']]
266
  elif slate_var == 'Auxiliary':
267
  collection = db['FD_MLB_SD3_seed_frame']
268
  cursor = collection.find().limit(10000)
269
 
270
  raw_display = pd.DataFrame(list(cursor))
271
+ raw_display = raw_display[['CPT', 'FLEX1', 'FLEX2', 'FLEX3', 'FLEX4', 'FLEX5', 'salary', 'proj', 'Team', 'Team_count', 'Secondary', 'Secondary_count', 'Own']]
272
 
273
  FD_seed = raw_display.to_numpy()
274
 
 
386
  scoring_percentages = scoring_percentages.drop(['DK Main Slate', 'DK Secondary Slate', 'DK Turbo Slate', 'FD Main Slate', 'FD Secondary Slate', 'FD Turbo Slate', 'FD Main Top Score', 'DK Main Top Score', 'FD Secondary Top Score', 'DK Secondary Top Score', 'DK Turbo Top Score'], axis=1)
387
  scoring_percentages = scoring_percentages.sort_values(by='8+ runs', ascending=False)
388
  if site_var == 'Draftkings':
389
+ scoring_percentages = scoring_percentages.rename(columns={'DK LevX': 'LevX', 'DK Own%': 'Own%', 'Avg Score': 'Runs', 'Win Percentage': 'Win%', '8+ runs': '8+ Runs', 'Avg_Salary_DK': 'Avg_Salary'})
390
+ scoring_percentages = scoring_percentages.drop(['FD Own%', 'FD_Runs/$', 'Avg_Salary_FD'], axis=1)
391
  elif site_var == 'Fanduel':
392
+ scoring_percentages = scoring_percentages.rename(columns={'FD LevX': 'LevX', 'FD Own%': 'Own%', 'Avg Score': 'Runs', 'Win Percentage': 'Win%', '8+ runs': '8+ Runs', 'Avg_Salary_FD': 'Avg_Salary'})
393
+ scoring_percentages = scoring_percentages.drop(['DK Own%', 'DK_Runs/$', 'Avg_Salary_DK'], axis=1)
394
 
395
  if view_var == "Simple":
396
  scoring_percentages = scoring_percentages[['Names', 'Runs', '8+ Runs', 'Win%', 'LevX', 'Own%']]
 
400
  if prio_var is not None:
401
  scoring_percentages = scoring_percentages[scoring_percentages['Stack_Prio'] == prio_var]
402
  scoring_percentages = scoring_percentages.set_index('Names', drop=True)
403
+ st.dataframe(scoring_percentages.style.background_gradient(axis=0).background_gradient(cmap='RdYlGn').background_gradient(cmap='RdYlGn_r', subset=['Avg_Salary', 'Own%']).format(game_format, precision=2), height=750, use_container_width = True)
404
 
405
  with tab2:
406
  st.header("Player ROO")
 
636
  if slate_type_var3 == 'Regular':
637
  map_columns = ['P', 'C_1B', '2B', '3B', 'SS', 'OF1', 'OF2', 'OF3', 'UTIL']
638
  elif slate_type_var3 == 'Showdown':
639
+ map_columns = ['CPT', 'FLEX1', 'FLEX2', 'FLEX3', 'FLEX4', 'FLEX5']
640
  for col_idx in map_columns:
641
  export_file[col_idx] = export_file[col_idx].map(fd_id_map)
642
 
 
736
  if slate_type_var3 == 'Regular':
737
  player_columns = st.session_state.data_export_display.iloc[:, :9]
738
  elif slate_type_var3 == 'Showdown':
739
+ player_columns = st.session_state.data_export_display.iloc[:, :6]
740
 
741
  # Flatten the DataFrame and count unique values
742
  value_counts = player_columns.values.flatten().tolist()
 
778
  if slate_type_var3 == 'Regular':
779
  player_columns = st.session_state.working_seed[:, :9]
780
  elif slate_type_var3 == 'Showdown':
781
+ player_columns = st.session_state.working_seed[:, :7]
782
 
783
  # Flatten the DataFrame and count unique values
784
  value_counts = player_columns.flatten().tolist()
 
928
  # 3. Select the order range
929
  if auto_range_var == 'Top (1-5)':
930
  selected_players = team_players[team_players['Order'] > 0].head(auto_size_var)
931
+ if len(selected_players) < auto_size_var:
932
+ team_players = player_select_df[
933
+ (player_select_df['Team'] == auto_team_var) &
934
+ (~player_select_df['Player'].isin(current_players))
935
+ ].copy()
936
+
937
+ # 2. Sort by Order
938
+ team_players = team_players.sort_values(by='Order')
939
+ selected_players = team_players[team_players['Order'] > 0].head(auto_size_var + 1)
940
  elif auto_range_var == 'Mid (4-8)':
941
  selected_players = team_players[team_players['Order'] > 0].iloc[3:3 + auto_size_var]
942
+ if len(selected_players) < auto_size_var:
943
+ team_players = player_select_df[
944
+ (player_select_df['Team'] == auto_team_var) &
945
+ (~player_select_df['Player'].isin(current_players))
946
+ ].copy()
947
+
948
+ # 2. Sort by Order
949
+ team_players = team_players.sort_values(by='Order')
950
+ selected_players = team_players[team_players['Order'] > 0].iloc[3:3 + auto_size_var + 1]
951
  elif auto_range_var == 'Wrap (7-2)':
952
  if auto_size_var == 5:
953
  first_three = team_players[team_players['Order'] > 0].head(2)