Spaces:
Runtime error
Runtime error
Update app.py
Browse files
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
|
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 |
-
|
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 |
-
|
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.
|
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 |
-
|
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(
|
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(
|
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 |
-
|
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(
|
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(
|
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(
|
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 |
-
|
1125 |
-
|
1126 |
-
|
1127 |
-
|
1128 |
-
|
1129 |
-
|
1130 |
-
|
1131 |
-
|
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 |
-
|
1139 |
-
|
1140 |
-
|
1141 |
-
|
1142 |
-
|
1143 |
-
|
1144 |
-
|
|
|
1145 |
with tab2:
|
1146 |
-
|
1147 |
-
|
1148 |
-
|
1149 |
-
|
1150 |
-
|
1151 |
-
|
1152 |
-
|
|
|
1153 |
with tab3:
|
1154 |
-
|
1155 |
-
|
1156 |
-
|
1157 |
-
|
1158 |
-
|
1159 |
-
|
1160 |
-
|
|
|
1161 |
with tab4:
|
1162 |
-
|
1163 |
-
|
1164 |
-
|
1165 |
-
|
1166 |
-
|
1167 |
-
|
1168 |
-
|
|
|
1169 |
with tab5:
|
1170 |
-
|
1171 |
-
|
1172 |
-
|
1173 |
-
|
1174 |
-
|
1175 |
-
|
1176 |
-
|
|
|
1177 |
with tab6:
|
1178 |
-
|
1179 |
-
|
1180 |
-
|
1181 |
-
|
1182 |
-
|
1183 |
-
|
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()
|