Multichem commited on
Commit
2960923
·
1 Parent(s): 6deddb6

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +151 -169
app.py CHANGED
@@ -5,15 +5,12 @@ for name in dir():
5
  if not name.startswith('_'):
6
  del globals()[name]
7
 
8
- import pulp
9
  import numpy as np
10
  import pandas as pd
11
  import streamlit as st
12
  import gspread
13
- import time
14
  import random
15
- import scipy.stats
16
- import os
17
 
18
  @st.cache_resource
19
  def init_conn():
@@ -36,7 +33,7 @@ def init_conn():
36
  gc = gspread.service_account_from_dict(credentials)
37
  return gc
38
 
39
- gc = init_conn()
40
 
41
  game_format = {'Win Percentage': '{:.2%}','First Inning Lead Percentage': '{:.2%}',
42
  'Fifth Inning Lead Percentage': '{:.2%}', '8+ runs': '{:.2%}', 'DK LevX': '{:.2%}', 'FD LevX': '{:.2%}'}
@@ -644,12 +641,6 @@ with tab1:
644
  static_exposure['Exposure'] = static_exposure['count'] / len(split_portfolio)
645
  static_exposure = static_exposure[['Player', 'Exposure']]
646
 
647
- del player_salary_dict
648
- del player_proj_dict
649
- del player_own_dict
650
- del player_team_dict
651
- del static_col_raw
652
- del static_col
653
  with st.container():
654
  col1, col2 = st.columns([3, 3])
655
 
@@ -686,13 +677,14 @@ with tab1:
686
  display_portfolio = split_portfolio[['Lineup', 'QB', 'RB1', 'RB2', 'WR1', 'WR2', 'WR3', 'FLEX', 'S_FLEX', 'Salary', 'Projection', 'Ownership']]
687
  display_portfolio = display_portfolio.set_index('Lineup')
688
  st.dataframe(display_portfolio.style.background_gradient(axis=0).background_gradient(cmap='RdYlGn').background_gradient(cmap='RdYlGn_r', subset=['Ownership']).format(precision=2))
689
- del split_portfolio
690
- del exposure_col_raw
691
- del exposure_col
692
  with tab2:
693
  col1, col2 = st.columns([1, 7])
694
  with col1:
695
-
 
 
 
696
  slate_var1 = 'User'
697
  site_var1 = 'Draftkings'
698
  if proj_file is not None:
@@ -727,18 +719,6 @@ with tab2:
727
 
728
  with col2:
729
  if st.button("Simulate Contest"):
730
- try:
731
- del dst_freq
732
- del flex_freq
733
- del te_freq
734
- del wr_freq
735
- del rb_freq
736
- del qb_freq
737
- del player_freq
738
- del Sim_Winner_Export
739
- del Sim_Winner_Frame
740
- except:
741
- pass
742
  with st.container():
743
  st.write('Contest Simulation Starting')
744
  seed_depth1 = 10
@@ -780,8 +760,6 @@ with tab2:
780
  OwnFrame['Own%'] = np.where(OwnFrame['Own%'] > 75, 75, OwnFrame['Own%'])
781
  OwnFrame['Own'] = OwnFrame['Own%'] * (800 / OwnFrame['Own%'].sum())
782
  Overall_Proj = OwnFrame[['Player', 'Team', 'Position', 'Median', 'Own', 'Salary']]
783
-
784
- del OwnFrame
785
 
786
  if insert_port == 1:
787
  UserPortfolio = portfolio_dataframe[['QB', 'RB1', 'RB2', 'WR1', 'WR2', 'WR3', 'FLEX', 'S_FLEX']]
@@ -806,8 +784,6 @@ with tab2:
806
  Teams_used = Teams_used.drop(columns=['index'])
807
  Teams_used_dictraw = Teams_used.drop(columns=['team_item'])
808
  Teams_used_dict = Teams_used_dictraw.to_dict()
809
-
810
- del Teams_used_dictraw
811
 
812
  team_list = Teams_used['Team'].to_list()
813
  item_list = Teams_used['team_item'].to_list()
@@ -815,8 +791,6 @@ with tab2:
815
  FieldStrength_raw = Strength_var + ((30 - len(Teams_used)) * .01)
816
  FieldStrength = FieldStrength_raw - (FieldStrength_raw * (20000 / Contest_Size))
817
 
818
- del FieldStrength_raw
819
-
820
  if FieldStrength < 0:
821
  FieldStrength = Strength_var
822
  field_split = Strength_var
@@ -859,11 +833,6 @@ with tab2:
859
  s_pos_players = pd.concat([qbs_raw, rbs_raw, wrs_raw])
860
  pos_players.dropna(subset=['Median']).reset_index(drop=True)
861
  pos_players = pos_players.reset_index(drop=True)
862
-
863
- del qbs_raw
864
- del defs_raw
865
- del rbs_raw
866
- del wrs_raw
867
 
868
  if insert_port == 1:
869
  try:
@@ -956,10 +925,6 @@ with tab2:
956
  'team_check_map':dict(zip(cleaport_players.Player,nerf_frame.Team))
957
  }
958
 
959
- del cleaport_players
960
- del Overall_Proj
961
- del nerf_frame
962
-
963
  st.write('Seed frame creation')
964
  FinalPortfolio, maps_dict = run_seed_frame(seed_depth1, Strength_var, strength_grow, Teams_used, Total_Runs)
965
 
@@ -1011,174 +976,191 @@ with tab2:
1011
  best_lineup = final_array[final_array[:, -1].argsort(kind='stable')[::-1][:1]]
1012
  Sim_Winners.append(best_lineup)
1013
  SimVar += 1
1014
-
1015
-
1016
- # del smple_arrays
1017
- # del smple_arrays1
1018
- # del smple_arrays2
1019
- # del final_array
1020
- # del best_lineup
1021
  st.write('Contest simulation complete')
1022
  # Initial setup
1023
  Sim_Winner_Frame = pd.DataFrame(np.concatenate(Sim_Winners), columns=FinalPortfolio.columns.tolist() + ['Fantasy'])
1024
  Sim_Winner_Frame['GPP_Proj'] = (Sim_Winner_Frame['Projection'] + Sim_Winner_Frame['Fantasy']) / 2
 
 
1025
 
1026
  # Type Casting
1027
- type_cast_dict = {'Salary': int, 'Projection': np.float16, 'Fantasy': np.float16, 'GPP_Proj': np.float16}
1028
  Sim_Winner_Frame = Sim_Winner_Frame.astype(type_cast_dict)
1029
 
 
 
1030
  # Sorting
1031
- Sim_Winner_Frame = Sim_Winner_Frame.sort_values(by='GPP_Proj', ascending=False)
 
 
 
 
1032
 
1033
  # Data Copying
1034
- Sim_Winner_Export = Sim_Winner_Frame.copy()
1035
 
1036
  # Conditional Replacement
1037
  columns_to_replace = ['QB', 'RB1', 'RB2', 'WR1', 'WR2', 'WR3', 'FLEX', 'S_FLEX']
 
 
1038
 
1039
- player_freq = pd.DataFrame(np.column_stack(np.unique(Sim_Winner_Frame.iloc[:,[0, 1, 2, 3, 4, 5, 6, 7]].values, return_counts=True)),
1040
  columns=['Player','Freq']).sort_values('Freq', ascending=False).reset_index(drop=True)
1041
- player_freq['Freq'] = player_freq['Freq'].astype(int)
1042
- player_freq['Position'] = player_freq['Player'].map(maps_dict['Pos_map'])
1043
- player_freq['Salary'] = player_freq['Player'].map(maps_dict['Salary_map'])
1044
- player_freq['Proj Own'] = player_freq['Player'].map(maps_dict['Own_map']) / 100
1045
- player_freq['Exposure'] = player_freq['Freq']/(Sim_size)
1046
- player_freq['Edge'] = player_freq['Exposure'] - player_freq['Proj Own']
1047
- player_freq['Team'] = player_freq['Player'].map(maps_dict['Team_map'])
1048
  for checkVar in range(len(team_list)):
1049
- player_freq['Team'] = player_freq['Team'].replace(item_list, team_list)
1050
-
1051
- player_freq = player_freq[['Player', 'Position', 'Team', 'Salary', 'Proj Own', 'Exposure', 'Edge']]
1052
 
1053
- qb_freq = pd.DataFrame(np.column_stack(np.unique(Sim_Winner_Frame.iloc[:,[0]].values, return_counts=True)),
1054
  columns=['Player','Freq']).sort_values('Freq', ascending=False).reset_index(drop=True)
1055
- qb_freq['Freq'] = qb_freq['Freq'].astype(int)
1056
- qb_freq['Position'] = qb_freq['Player'].map(maps_dict['Pos_map'])
1057
- qb_freq['Salary'] = qb_freq['Player'].map(maps_dict['Salary_map'])
1058
- qb_freq['Proj Own'] = qb_freq['Player'].map(maps_dict['Own_map']) / 100
1059
- qb_freq['Exposure'] = qb_freq['Freq']/(Sim_size)
1060
- qb_freq['Edge'] = qb_freq['Exposure'] - qb_freq['Proj Own']
1061
- qb_freq['Team'] = qb_freq['Player'].map(maps_dict['Team_map'])
1062
  for checkVar in range(len(team_list)):
1063
- qb_freq['Team'] = qb_freq['Team'].replace(item_list, team_list)
1064
 
1065
- qb_freq = qb_freq[['Player', 'Team', 'Position', 'Salary', 'Proj Own', 'Exposure', 'Edge']]
1066
-
1067
- rb_freq = pd.DataFrame(np.column_stack(np.unique(Sim_Winner_Frame.iloc[:,[1, 2]].values, return_counts=True)),
1068
  columns=['Player','Freq']).sort_values('Freq', ascending=False).reset_index(drop=True)
1069
- rb_freq['Freq'] = rb_freq['Freq'].astype(int)
1070
- rb_freq['Position'] = rb_freq['Player'].map(maps_dict['Pos_map'])
1071
- rb_freq['Salary'] = rb_freq['Player'].map(maps_dict['Salary_map'])
1072
- rb_freq['Proj Own'] = rb_freq['Player'].map(maps_dict['Own_map']) / 100
1073
- rb_freq['Exposure'] = rb_freq['Freq']/Sim_size
1074
- rb_freq['Edge'] = rb_freq['Exposure'] - rb_freq['Proj Own']
1075
- rb_freq['Team'] = rb_freq['Player'].map(maps_dict['Team_map'])
1076
  for checkVar in range(len(team_list)):
1077
- rb_freq['Team'] = rb_freq['Team'].replace(item_list, team_list)
1078
-
1079
- rb_freq = rb_freq[['Player', 'Team', 'Position', 'Salary', 'Proj Own', 'Exposure', 'Edge']]
1080
 
1081
- wr_freq = pd.DataFrame(np.column_stack(np.unique(Sim_Winner_Frame.iloc[:,[3, 4, 5]].values, return_counts=True)),
1082
  columns=['Player','Freq']).sort_values('Freq', ascending=False).reset_index(drop=True)
1083
- wr_freq['Freq'] = wr_freq['Freq'].astype(int)
1084
- wr_freq['Position'] = wr_freq['Player'].map(maps_dict['Pos_map'])
1085
- wr_freq['Salary'] = wr_freq['Player'].map(maps_dict['Salary_map'])
1086
- wr_freq['Proj Own'] = wr_freq['Player'].map(maps_dict['Own_map']) / 100
1087
- wr_freq['Exposure'] = wr_freq['Freq']/Sim_size
1088
- wr_freq['Edge'] = wr_freq['Exposure'] - wr_freq['Proj Own']
1089
- wr_freq['Team'] = wr_freq['Player'].map(maps_dict['Team_map'])
1090
  for checkVar in range(len(team_list)):
1091
- wr_freq['Team'] = wr_freq['Team'].replace(item_list, team_list)
1092
-
1093
- wr_freq = wr_freq[['Player', 'Team', 'Position', 'Salary', 'Proj Own', 'Exposure', 'Edge']]
1094
 
1095
- flex_freq = pd.DataFrame(np.column_stack(np.unique(Sim_Winner_Frame.iloc[:,[6]].values, return_counts=True)),
1096
  columns=['Player','Freq']).sort_values('Freq', ascending=False).reset_index(drop=True)
1097
- flex_freq['Freq'] = flex_freq['Freq'].astype(int)
1098
- flex_freq['Position'] = flex_freq['Player'].map(maps_dict['Pos_map'])
1099
- flex_freq['Salary'] = flex_freq['Player'].map(maps_dict['Salary_map'])
1100
- flex_freq['Proj Own'] = flex_freq['Player'].map(maps_dict['Own_map']) / 100
1101
- flex_freq['Exposure'] = flex_freq['Freq']/Sim_size
1102
- flex_freq['Edge'] = flex_freq['Exposure'] - flex_freq['Proj Own']
1103
- flex_freq['Team'] = flex_freq['Player'].map(maps_dict['Team_map'])
1104
  for checkVar in range(len(team_list)):
1105
- flex_freq['Team'] = flex_freq['Team'].replace(item_list, team_list)
1106
-
1107
- flex_freq = flex_freq[['Player', 'Team', 'Position', 'Salary', 'Proj Own', 'Exposure', 'Edge']]
1108
 
1109
- dst_freq = pd.DataFrame(np.column_stack(np.unique(Sim_Winner_Frame.iloc[:,[7]].values, return_counts=True)),
1110
  columns=['Player','Freq']).sort_values('Freq', ascending=False).reset_index(drop=True)
1111
- dst_freq['Freq'] = dst_freq['Freq'].astype(int)
1112
- dst_freq['Position'] = dst_freq['Player'].map(maps_dict['Pos_map'])
1113
- dst_freq['Salary'] = dst_freq['Player'].map(maps_dict['Salary_map'])
1114
- dst_freq['Proj Own'] = dst_freq['Player'].map(maps_dict['Own_map']) / 100
1115
- dst_freq['Exposure'] = dst_freq['Freq']/Sim_size
1116
- dst_freq['Edge'] = dst_freq['Exposure'] - dst_freq['Proj Own']
1117
- dst_freq['Team'] = dst_freq['Player'].map(maps_dict['Team_map'])
1118
  for checkVar in range(len(team_list)):
1119
- dst_freq['Team'] = dst_freq['Team'].replace(item_list, team_list)
1120
-
1121
- dst_freq = dst_freq[['Player', 'Team', 'Position', 'Salary', 'Proj Own', 'Exposure', 'Edge']]
1122
 
1123
  with st.container():
1124
- simulate_container = st.empty()
1125
- st.dataframe(Sim_Winner_Frame.head(100).style.background_gradient(axis=0).background_gradient(cmap='RdYlGn').background_gradient(cmap='RdYlGn_r', subset=['Own']).format(precision=2), use_container_width = True)
1126
-
1127
- st.download_button(
1128
- label="Export Tables",
1129
- data=convert_df_to_csv(Sim_Winner_Export),
1130
- file_name='NFL_consim_export.csv',
1131
- mime='text/csv',
1132
- )
 
 
 
 
 
 
 
 
 
 
 
1133
 
1134
  with st.container():
1135
  freq_container = st.empty()
1136
  tab1, tab2, tab3, tab4, tab5, tab6 = st.tabs(['Overall Exposures', 'QB Exposures', 'RB Exposures', 'WR Exposures', 'FLEX Exposures', 'S_FLEX Exposures'])
1137
  with tab1:
1138
- st.dataframe(player_freq.style.background_gradient(axis=0).background_gradient(cmap='RdYlGn').format(freq_format, precision=2), use_container_width = True)
1139
- st.download_button(
1140
- label="Export Exposures",
1141
- data=convert_df_to_csv(player_freq),
1142
- file_name='player_freq_export.csv',
1143
- mime='text/csv',
1144
- )
 
1145
  with tab2:
1146
- st.dataframe(qb_freq.style.background_gradient(axis=0).background_gradient(cmap='RdYlGn').format(freq_format, precision=2), use_container_width = True)
1147
- st.download_button(
1148
- label="Export Exposures",
1149
- data=convert_df_to_csv(qb_freq),
1150
- file_name='qb_freq_export.csv',
1151
- mime='text/csv',
1152
- )
 
1153
  with tab3:
1154
- st.dataframe(rb_freq.style.background_gradient(axis=0).background_gradient(cmap='RdYlGn').format(freq_format, precision=2), use_container_width = True)
1155
- st.download_button(
1156
- label="Export Exposures",
1157
- data=convert_df_to_csv(rb_freq),
1158
- file_name='rb_freq_export.csv',
1159
- mime='text/csv',
1160
- )
 
1161
  with tab4:
1162
- st.dataframe(wr_freq.style.background_gradient(axis=0).background_gradient(cmap='RdYlGn').format(freq_format, precision=2), use_container_width = True)
1163
- st.download_button(
1164
- label="Export Exposures",
1165
- data=convert_df_to_csv(wr_freq),
1166
- file_name='wr_freq_export.csv',
1167
- mime='text/csv',
1168
- )
 
1169
  with tab5:
1170
- st.dataframe(flex_freq.style.background_gradient(axis=0).background_gradient(cmap='RdYlGn').format(freq_format, precision=2), use_container_width = True)
1171
- st.download_button(
1172
- label="Export Exposures",
1173
- data=convert_df_to_csv(flex_freq),
1174
- file_name='flex_freq_export.csv',
1175
- mime='text/csv',
1176
- )
 
1177
  with tab6:
1178
- st.dataframe(dst_freq.style.background_gradient(axis=0).background_gradient(cmap='RdYlGn').format(freq_format, precision=2), use_container_width = True)
1179
- st.download_button(
1180
- label="Export Exposures",
1181
- data=convert_df_to_csv(dst_freq),
1182
- file_name='s_flex_freq_export.csv',
1183
- mime='text/csv',
1184
- )
 
 
 
 
 
 
 
 
 
 
5
  if not name.startswith('_'):
6
  del globals()[name]
7
 
 
8
  import numpy as np
9
  import pandas as pd
10
  import streamlit as st
11
  import gspread
 
12
  import random
13
+ import gc
 
14
 
15
  @st.cache_resource
16
  def init_conn():
 
33
  gc = gspread.service_account_from_dict(credentials)
34
  return gc
35
 
36
+ gcservice_account = init_conn()
37
 
38
  game_format = {'Win Percentage': '{:.2%}','First Inning Lead Percentage': '{:.2%}',
39
  'Fifth Inning Lead Percentage': '{:.2%}', '8+ runs': '{:.2%}', 'DK LevX': '{:.2%}', 'FD LevX': '{:.2%}'}
 
641
  static_exposure['Exposure'] = static_exposure['count'] / len(split_portfolio)
642
  static_exposure = static_exposure[['Player', 'Exposure']]
643
 
 
 
 
 
 
 
644
  with st.container():
645
  col1, col2 = st.columns([3, 3])
646
 
 
677
  display_portfolio = split_portfolio[['Lineup', 'QB', 'RB1', 'RB2', 'WR1', 'WR2', 'WR3', 'FLEX', 'S_FLEX', 'Salary', 'Projection', 'Ownership']]
678
  display_portfolio = display_portfolio.set_index('Lineup')
679
  st.dataframe(display_portfolio.style.background_gradient(axis=0).background_gradient(cmap='RdYlGn').background_gradient(cmap='RdYlGn_r', subset=['Ownership']).format(precision=2))
680
+
 
 
681
  with tab2:
682
  col1, col2 = st.columns([1, 7])
683
  with col1:
684
+ if st.button("Load/Reset Data", key='reset1'):
685
+ st.cache_data.clear()
686
+ for key in st.session_state.keys():
687
+ del st.session_state[key]
688
  slate_var1 = 'User'
689
  site_var1 = 'Draftkings'
690
  if proj_file is not None:
 
719
 
720
  with col2:
721
  if st.button("Simulate Contest"):
 
 
 
 
 
 
 
 
 
 
 
 
722
  with st.container():
723
  st.write('Contest Simulation Starting')
724
  seed_depth1 = 10
 
760
  OwnFrame['Own%'] = np.where(OwnFrame['Own%'] > 75, 75, OwnFrame['Own%'])
761
  OwnFrame['Own'] = OwnFrame['Own%'] * (800 / OwnFrame['Own%'].sum())
762
  Overall_Proj = OwnFrame[['Player', 'Team', 'Position', 'Median', 'Own', 'Salary']]
 
 
763
 
764
  if insert_port == 1:
765
  UserPortfolio = portfolio_dataframe[['QB', 'RB1', 'RB2', 'WR1', 'WR2', 'WR3', 'FLEX', 'S_FLEX']]
 
784
  Teams_used = Teams_used.drop(columns=['index'])
785
  Teams_used_dictraw = Teams_used.drop(columns=['team_item'])
786
  Teams_used_dict = Teams_used_dictraw.to_dict()
 
 
787
 
788
  team_list = Teams_used['Team'].to_list()
789
  item_list = Teams_used['team_item'].to_list()
 
791
  FieldStrength_raw = Strength_var + ((30 - len(Teams_used)) * .01)
792
  FieldStrength = FieldStrength_raw - (FieldStrength_raw * (20000 / Contest_Size))
793
 
 
 
794
  if FieldStrength < 0:
795
  FieldStrength = Strength_var
796
  field_split = Strength_var
 
833
  s_pos_players = pd.concat([qbs_raw, rbs_raw, wrs_raw])
834
  pos_players.dropna(subset=['Median']).reset_index(drop=True)
835
  pos_players = pos_players.reset_index(drop=True)
 
 
 
 
 
836
 
837
  if insert_port == 1:
838
  try:
 
925
  'team_check_map':dict(zip(cleaport_players.Player,nerf_frame.Team))
926
  }
927
 
 
 
 
 
928
  st.write('Seed frame creation')
929
  FinalPortfolio, maps_dict = run_seed_frame(seed_depth1, Strength_var, strength_grow, Teams_used, Total_Runs)
930
 
 
976
  best_lineup = final_array[final_array[:, -1].argsort(kind='stable')[::-1][:1]]
977
  Sim_Winners.append(best_lineup)
978
  SimVar += 1
979
+
 
 
 
 
 
 
980
  st.write('Contest simulation complete')
981
  # Initial setup
982
  Sim_Winner_Frame = pd.DataFrame(np.concatenate(Sim_Winners), columns=FinalPortfolio.columns.tolist() + ['Fantasy'])
983
  Sim_Winner_Frame['GPP_Proj'] = (Sim_Winner_Frame['Projection'] + Sim_Winner_Frame['Fantasy']) / 2
984
+ Sim_Winner_Frame['unique_id'] = Sim_Winner_Frame['Projection'].astype(str) + Sim_Winner_Frame['Salary'].astype(str) + Sim_Winner_Frame['Own'].astype(str)
985
+ Sim_Winner_Frame = Sim_Winner_Frame.assign(win_count=Sim_Winner_Frame['unique_id'].map(Sim_Winner_Frame['unique_id'].value_counts()))
986
 
987
  # Type Casting
988
+ type_cast_dict = {'Salary': int, 'Projection': np.float16, 'Fantasy': np.float16, 'GPP_Proj': np.float32}
989
  Sim_Winner_Frame = Sim_Winner_Frame.astype(type_cast_dict)
990
 
991
+ del FinalPortfolio, insert_port, type_cast_dict
992
+
993
  # Sorting
994
+ st.session_state.Sim_Winner_Frame = Sim_Winner_Frame.sort_values(by=['win_count', 'GPP_Proj'], ascending= [False, False]).copy().drop_duplicates(subset='unique_id').head(100)
995
+ st.session_state.Sim_Winner_Frame.drop(columns='unique_id', inplace=True)
996
+
997
+ # Data Copying
998
+ st.session_state.Sim_Winner_Export = Sim_Winner_Frame.copy()
999
 
1000
  # Data Copying
1001
+ st.session_state.Sim_Winner_Display = Sim_Winner_Frame.copy()
1002
 
1003
  # Conditional Replacement
1004
  columns_to_replace = ['QB', 'RB1', 'RB2', 'WR1', 'WR2', 'WR3', 'FLEX', 'S_FLEX']
1005
+
1006
+ del Sim_Winner_Frame, Sim_Winners
1007
 
1008
+ st.session_state.player_freq = pd.DataFrame(np.column_stack(np.unique(st.session_state.Sim_Winner_Display.iloc[:,[0, 1, 2, 3, 4, 5, 6, 7]].values, return_counts=True)),
1009
  columns=['Player','Freq']).sort_values('Freq', ascending=False).reset_index(drop=True)
1010
+ st.session_state.player_freq['Freq'] = st.session_state.player_freq['Freq'].astype(int)
1011
+ st.session_state.player_freq['Position'] = st.session_state.player_freq['Player'].map(maps_dict['Pos_map'])
1012
+ st.session_state.player_freq['Salary'] = st.session_state.player_freq['Player'].map(maps_dict['Salary_map'])
1013
+ st.session_state.player_freq['Proj Own'] = st.session_state.player_freq['Player'].map(maps_dict['Own_map']) / 100
1014
+ st.session_state.player_freq['Exposure'] = st.session_state.player_freq['Freq']/(Sim_size)
1015
+ st.session_state.player_freq['Edge'] = st.session_state.player_freq['Exposure'] - st.session_state.player_freq['Proj Own']
1016
+ st.session_state.player_freq['Team'] = st.session_state.player_freq['Player'].map(maps_dict['Team_map'])
1017
  for checkVar in range(len(team_list)):
1018
+ st.session_state.player_freq['Team'] = st.session_state.player_freq['Team'].replace(item_list, team_list)
 
 
1019
 
1020
+ st.session_state.qb_freq = pd.DataFrame(np.column_stack(np.unique(st.session_state.Sim_Winner_Display.iloc[:,[0]].values, return_counts=True)),
1021
  columns=['Player','Freq']).sort_values('Freq', ascending=False).reset_index(drop=True)
1022
+ st.session_state.qb_freq['Freq'] = st.session_state.qb_freq['Freq'].astype(int)
1023
+ st.session_state.qb_freq['Position'] = st.session_state.qb_freq['Player'].map(maps_dict['Pos_map'])
1024
+ st.session_state.qb_freq['Salary'] = st.session_state.qb_freq['Player'].map(maps_dict['Salary_map'])
1025
+ st.session_state.qb_freq['Proj Own'] = st.session_state.qb_freq['Player'].map(maps_dict['Own_map']) / 100
1026
+ st.session_state.qb_freq['Exposure'] = st.session_state.qb_freq['Freq']/(Sim_size)
1027
+ st.session_state.qb_freq['Edge'] = st.session_state.qb_freq['Exposure'] - st.session_state.qb_freq['Proj Own']
1028
+ st.session_state.qb_freq['Team'] = st.session_state.qb_freq['Player'].map(maps_dict['Team_map'])
1029
  for checkVar in range(len(team_list)):
1030
+ st.session_state.qb_freq['Team'] = st.session_state.qb_freq['Team'].replace(item_list, team_list)
1031
 
1032
+ st.session_state.rb_freq = pd.DataFrame(np.column_stack(np.unique(st.session_state.Sim_Winner_Display.iloc[:,[1, 2]].values, return_counts=True)),
 
 
1033
  columns=['Player','Freq']).sort_values('Freq', ascending=False).reset_index(drop=True)
1034
+ st.session_state.rb_freq['Freq'] = st.session_state.rb_freq['Freq'].astype(int)
1035
+ st.session_state.rb_freq['Position'] = st.session_state.rb_freq['Player'].map(maps_dict['Pos_map'])
1036
+ st.session_state.rb_freq['Salary'] = st.session_state.rb_freq['Player'].map(maps_dict['Salary_map'])
1037
+ st.session_state.rb_freq['Proj Own'] = st.session_state.rb_freq['Player'].map(maps_dict['Own_map']) / 100
1038
+ st.session_state.rb_freq['Exposure'] = st.session_state.rb_freq['Freq']/Sim_size
1039
+ st.session_state.rb_freq['Edge'] = st.session_state.rb_freq['Exposure'] - st.session_state.rb_freq['Proj Own']
1040
+ st.session_state.rb_freq['Team'] = st.session_state.rb_freq['Player'].map(maps_dict['Team_map'])
1041
  for checkVar in range(len(team_list)):
1042
+ st.session_state.rb_freq['Team'] = st.session_state.rb_freq['Team'].replace(item_list, team_list)
 
 
1043
 
1044
+ st.session_state.wr_freq = pd.DataFrame(np.column_stack(np.unique(st.session_state.Sim_Winner_Display.iloc[:,[3, 4, 5]].values, return_counts=True)),
1045
  columns=['Player','Freq']).sort_values('Freq', ascending=False).reset_index(drop=True)
1046
+ st.session_state.wr_freq['Freq'] = st.session_state.wr_freq['Freq'].astype(int)
1047
+ st.session_state.wr_freq['Position'] = st.session_state.wr_freq['Player'].map(maps_dict['Pos_map'])
1048
+ st.session_state.wr_freq['Salary'] = st.session_state.wr_freq['Player'].map(maps_dict['Salary_map'])
1049
+ st.session_state.wr_freq['Proj Own'] = st.session_state.wr_freq['Player'].map(maps_dict['Own_map']) / 100
1050
+ st.session_state.wr_freq['Exposure'] = st.session_state.wr_freq['Freq']/Sim_size
1051
+ st.session_state.wr_freq['Edge'] = st.session_state.wr_freq['Exposure'] - st.session_state.wr_freq['Proj Own']
1052
+ st.session_state.wr_freq['Team'] = st.session_state.wr_freq['Player'].map(maps_dict['Team_map'])
1053
  for checkVar in range(len(team_list)):
1054
+ st.session_state.wr_freq['Team'] = st.session_state.wr_freq['Team'].replace(item_list, team_list)
 
 
1055
 
1056
+ st.session_state.flex_freq = pd.DataFrame(np.column_stack(np.unique(st.session_state.Sim_Winner_Display.iloc[:,[6]].values, return_counts=True)),
1057
  columns=['Player','Freq']).sort_values('Freq', ascending=False).reset_index(drop=True)
1058
+ st.session_state.flex_freq['Freq'] = st.session_state.flex_freq['Freq'].astype(int)
1059
+ st.session_state.flex_freq['Position'] = st.session_state.flex_freq['Player'].map(maps_dict['Pos_map'])
1060
+ st.session_state.flex_freq['Salary'] = st.session_state.flex_freq['Player'].map(maps_dict['Salary_map'])
1061
+ st.session_state.flex_freq['Proj Own'] = st.session_state.flex_freq['Player'].map(maps_dict['Own_map']) / 100
1062
+ st.session_state.flex_freq['Exposure'] = st.session_state.flex_freq['Freq']/Sim_size
1063
+ st.session_state.flex_freq['Edge'] = st.session_state.flex_freq['Exposure'] - st.session_state.flex_freq['Proj Own']
1064
+ st.session_state.flex_freq['Team'] = st.session_state.flex_freq['Player'].map(maps_dict['Team_map'])
1065
  for checkVar in range(len(team_list)):
1066
+ st.session_state.flex_freq['Team'] = st.session_state.flex_freq['Team'].replace(item_list, team_list)
 
 
1067
 
1068
+ st.session_state.dst_freq = pd.DataFrame(np.column_stack(np.unique(st.session_state.Sim_Winner_Display.iloc[:,[7]].values, return_counts=True)),
1069
  columns=['Player','Freq']).sort_values('Freq', ascending=False).reset_index(drop=True)
1070
+ st.session_state.dst_freq['Freq'] = st.session_state.dst_freq['Freq'].astype(int)
1071
+ st.session_state.dst_freq['Position'] = st.session_state.dst_freq['Player'].map(maps_dict['Pos_map'])
1072
+ st.session_state.dst_freq['Salary'] = st.session_state.dst_freq['Player'].map(maps_dict['Salary_map'])
1073
+ st.session_state.dst_freq['Proj Own'] = st.session_state.dst_freq['Player'].map(maps_dict['Own_map']) / 100
1074
+ st.session_state.dst_freq['Exposure'] = st.session_state.dst_freq['Freq']/Sim_size
1075
+ st.session_state.dst_freq['Edge'] = st.session_state.dst_freq['Exposure'] - st.session_state.dst_freq['Proj Own']
1076
+ st.session_state.dst_freq['Team'] = st.session_state.dst_freq['Player'].map(maps_dict['Team_map'])
1077
  for checkVar in range(len(team_list)):
1078
+ st.session_state.dst_freq['Team'] = st.session_state.dst_freq['Team'].replace(item_list, team_list)
 
 
1079
 
1080
  with st.container():
1081
+ if 'player_freq' in st.session_state:
1082
+ player_split_var2 = st.radio("Are you wanting to isolate any lineups with specific players?", ('Full Players', 'Specific Players'), key='player_split_var2')
1083
+ if player_split_var2 == 'Specific Players':
1084
+ find_var2 = st.multiselect('Which players must be included in the lineups?', options = st.session_state.player_freq['Player'].unique())
1085
+ elif player_split_var2 == 'Full Players':
1086
+ find_var2 = st.session_state.player_freq.Player.values.tolist()
1087
+
1088
+ if player_split_var2 == 'Specific Players':
1089
+ st.session_state.Sim_Winner_Display = st.session_state.Sim_Winner_Frame[np.equal.outer(st.session_state.Sim_Winner_Frame.to_numpy(), find_var2).any(axis=1).all(axis=1)]
1090
+ if player_split_var2 == 'Full Players':
1091
+ st.session_state.Sim_Winner_Display = st.session_state.Sim_Winner_Frame
1092
+ if 'Sim_Winner_Display' in st.session_state:
1093
+ st.dataframe(st.session_state.Sim_Winner_Display.style.background_gradient(axis=0).background_gradient(cmap='RdYlGn').background_gradient(cmap='RdYlGn_r', subset=['Own']).format(precision=2), use_container_width = True)
1094
+ if 'Sim_Winner_Export' in st.session_state:
1095
+ st.download_button(
1096
+ label="Export Tables",
1097
+ data=convert_df_to_csv(st.session_state.Sim_Winner_Export),
1098
+ file_name='NFL_consim_export.csv',
1099
+ mime='text/csv',
1100
+ )
1101
 
1102
  with st.container():
1103
  freq_container = st.empty()
1104
  tab1, tab2, tab3, tab4, tab5, tab6 = st.tabs(['Overall Exposures', 'QB Exposures', 'RB Exposures', 'WR Exposures', 'FLEX Exposures', 'S_FLEX Exposures'])
1105
  with tab1:
1106
+ if 'player_freq' in st.session_state:
1107
+ st.dataframe(st.session_state.player_freq.style.background_gradient(axis=0).background_gradient(cmap='RdYlGn').format(freq_format, precision=2), use_container_width = True)
1108
+ st.download_button(
1109
+ label="Export Exposures",
1110
+ data=st.session_state.player_freq.to_csv().encode('utf-8'),
1111
+ file_name='player_freq_export.csv',
1112
+ mime='text/csv',
1113
+ )
1114
  with tab2:
1115
+ if 'qb_freq' in st.session_state:
1116
+ st.dataframe(st.session_state.qb_freq.style.background_gradient(axis=0).background_gradient(cmap='RdYlGn').format(freq_format, precision=2), use_container_width = True)
1117
+ st.download_button(
1118
+ label="Export Exposures",
1119
+ data=st.session_state.qb_freq.to_csv().encode('utf-8'),
1120
+ file_name='qb_freq_export.csv',
1121
+ mime='text/csv',
1122
+ )
1123
  with tab3:
1124
+ if 'rb_freq' in st.session_state:
1125
+ st.dataframe(st.session_state.rb_freq.style.background_gradient(axis=0).background_gradient(cmap='RdYlGn').format(freq_format, precision=2), use_container_width = True)
1126
+ st.download_button(
1127
+ label="Export Exposures",
1128
+ data=st.session_state.rb_freq.to_csv().encode('utf-8'),
1129
+ file_name='rb_freq_export.csv',
1130
+ mime='text/csv',
1131
+ )
1132
  with tab4:
1133
+ if 'wr_freq' in st.session_state:
1134
+ st.dataframe(st.session_state.wr_freq.style.background_gradient(axis=0).background_gradient(cmap='RdYlGn').format(freq_format, precision=2), use_container_width = True)
1135
+ st.download_button(
1136
+ label="Export Exposures",
1137
+ data=st.session_state.wr_freq.to_csv().encode('utf-8'),
1138
+ file_name='wr_freq_export.csv',
1139
+ mime='text/csv',
1140
+ )
1141
  with tab5:
1142
+ if 'flex_freq' in st.session_state:
1143
+ st.dataframe(st.session_state.flex_freq.style.background_gradient(axis=0).background_gradient(cmap='RdYlGn').format(freq_format, precision=2), use_container_width = True)
1144
+ st.download_button(
1145
+ label="Export Exposures",
1146
+ data=st.session_state.flex_freq.to_csv().encode('utf-8'),
1147
+ file_name='flex_freq_export.csv',
1148
+ mime='text/csv',
1149
+ )
1150
  with tab6:
1151
+ if 'dst_freq' in st.session_state:
1152
+ st.dataframe(st.session_state.dst_freq.style.background_gradient(axis=0).background_gradient(cmap='RdYlGn').format(freq_format, precision=2), use_container_width = True)
1153
+ st.download_button(
1154
+ label="Export Exposures",
1155
+ data=st.session_state.dst_freq.to_csv().encode('utf-8'),
1156
+ file_name='dst_freq_export.csv',
1157
+ mime='text/csv',
1158
+ )
1159
+
1160
+ del gcservice_account
1161
+ del static_exposure, overall_exposure
1162
+ del insert_port1, Contest_Size, sharp_split, Strength_var, scaling_var, Sort_function, Sim_function, strength_grow, field_growth
1163
+ del raw_baselines
1164
+ del freq_format
1165
+
1166
+ gc.collect()