Spaces:
Sleeping
Sleeping
File size: 7,911 Bytes
ca38258 2f15270 ca38258 a5417e9 ca38258 a5417e9 ca38258 e6d790c ca38258 2f15270 f5cf6d2 ca38258 93f697f a5417e9 ca38258 |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 |
import pulp
import numpy as np
import pandas as pd
import streamlit as st
import gspread
scope = ['https://www.googleapis.com/auth/spreadsheets',
"https://www.googleapis.com/auth/drive"]
credentials = {
"type": "service_account",
"project_id": "sheets-api-connect-378620",
"private_key_id": "1005124050c80d085e2c5b344345715978dd9cc9",
"private_key": "-----BEGIN PRIVATE KEY-----\nMIIEvQIBADANBgkqhkiG9w0BAQEFAASCBKcwggSjAgEAAoIBAQCtKa01beXwc88R\nnPZVQTNPVQuBnbwoOfc66gW3547ja/UEyIGAF112dt/VqHprRafkKGmlg55jqJNt\na4zceLKV+wTm7vBu7lDISTJfGzCf2TrxQYNqwMKE2LOjI69dBM8u4Dcb4k0wcp9v\ntW1ZzLVVuwTvmrg7JBHjiSaB+x5wxm/r3FOiJDXdlAgFlytzqgcyeZMJVKKBQHyJ\njEGg/1720A0numuOCt71w/2G0bDmijuj1e6tH32MwRWcvRNZ19K9ssyDz2S9p68s\nYDhIxX69OWxwScTIHLY6J2t8txf/XMivL/636fPlDADvBEVTdlT606n8CcKUVQeq\npUVdG+lfAgMBAAECggEAP38SUA7B69eTfRpo658ycOs3Amr0JW4H/bb1rNeAul0K\nZhwd/HnU4E07y81xQmey5kN5ZeNrD5EvqkZvSyMJHV0EEahZStwhjCfnDB/cxyix\nZ+kFhv4y9eK+kFpUAhBy5nX6T0O+2T6WvzAwbmbVsZ+X8kJyPuF9m8ldcPlD0sce\ntj8NwVq1ys52eosqs7zi2vjt+eMcaY393l4ls+vNq8Yf27cfyFw45W45CH/97/Nu\n5AmuzlCOAfFF+z4OC5g4rei4E/Qgpxa7/uom+BVfv9G0DIGW/tU6Sne0+37uoGKt\nW6DzhgtebUtoYkG7ZJ05BTXGp2lwgVcNRoPwnKJDxQKBgQDT5wYPUBDW+FHbvZSp\nd1m1UQuXyerqOTA9smFaM8sr/UraeH85DJPEIEk8qsntMBVMhvD3Pw8uIUeFNMYj\naLmZFObsL+WctepXrVo5NB6RtLB/jZYxiKMatMLUJIYtcKIp+2z/YtKiWcLnwotB\nWdCjVnPTxpkurmF2fWP/eewZ+wKBgQDRMtJg7etjvKyjYNQ5fARnCc+XsI3gkBe1\nX9oeXfhyfZFeBXWnZzN1ITgFHplDznmBdxAyYGiQdbbkdKQSghviUQ0igBvoDMYy\n1rWcy+a17Mj98uyNEfmb3X2cC6WpvOZaGHwg9+GY67BThwI3FqHIbyk6Ko09WlTX\nQpRQjMzU7QKBgAfi1iflu+q0LR+3a3vvFCiaToskmZiD7latd9AKk2ocsBd3Woy9\n+hXXecJHPOKV4oUJlJgvAZqe5HGBqEoTEK0wyPNLSQlO/9ypd+0fEnArwFHO7CMF\nycQprAKHJXM1eOOFFuZeQCaInqdPZy1UcV5Szla4UmUZWkk1m24blHzXAoGBAMcA\nyH4qdbxX9AYrC1dvsSRvgcnzytMvX05LU0uF6tzGtG0zVlub4ahvpEHCfNuy44UT\nxRWW/oFFaWjjyFxO5sWggpUqNuHEnRopg3QXx22SRRTGbN45li/+QAocTkgsiRh1\nqEcYZsO4mPCsQqAy6E2p6RcK+Xa+omxvSnVhq0x1AoGAKr8GdkCl4CF6rieLMAQ7\nLNBuuoYGaHoh8l5E2uOQpzwxVy/nMBcAv+2+KqHEzHryUv1owOi6pMLv7A9mTFoS\n18B0QRLuz5fSOsVnmldfC9fpUc6H8cH1SINZpzajqQA74bPwELJjnzrCnH79TnHG\nJuElxA33rFEjbgbzdyrE768=\n-----END PRIVATE KEY-----\n",
"client_email": "gspread-connection@sheets-api-connect-378620.iam.gserviceaccount.com",
"client_id": "106625872877651920064",
"auth_uri": "https://accounts.google.com/o/oauth2/auth",
"token_uri": "https://oauth2.googleapis.com/token",
"auth_provider_x509_cert_url": "https://www.googleapis.com/oauth2/v1/certs",
"client_x509_cert_url": "https://www.googleapis.com/robot/v1/metadata/x509/gspread-connection%40sheets-api-connect-378620.iam.gserviceaccount.com"
}
gspreadcon = gspread.service_account_from_dict(credentials)
st.set_page_config(layout="wide")
roo_format = {'Top_finish': '{:.2%}','Top_5_finish': '{:.2%}', 'Top_10_finish': '{:.2%}',
'120+%': '{:.2%}','10x%': '{:.2%}','11x%': '{:.2%}','12x%': '{:.2%}','Own': '{:.2%}','LevX': '{:.2%}', 'CPT_Own': '{.2%}'}
odds_format = {'Odds': '{:.2%}'}
stat_format = {'Odds%': '{:.2%}'}
map_proj_format = {'Win%': '{:.2%}'}
master_hold = 'https://docs.google.com/spreadsheets/d/1dOXsbeWbvWjRyohsEEDXOiWji4-1R1J6E-Lu2CSM9AM/edit#gid=928272897'
@st.cache_resource(ttl=600)
def pull_baselines():
sh = gspreadcon.open_by_url(master_hold)
worksheet = sh.worksheet('Overall_Vegas')
raw_display = pd.DataFrame(worksheet.get_all_records())
raw_display = raw_display.loc[raw_display['Team'] != ""]
odds_table = raw_display[['Team', 'Vegas', 'Odds', 'Games']]
worksheet = sh.worksheet('Overall_ROO')
raw_display = pd.DataFrame(worksheet.get_all_records())
overall_roo = raw_display.loc[raw_display['Player'] != ""]
worksheet = sh.worksheet('Win_ROO')
raw_display = pd.DataFrame(worksheet.get_all_records())
win_roo = raw_display.loc[raw_display['Player'] != ""]
worksheet = sh.worksheet('Loss_ROO')
raw_display = pd.DataFrame(worksheet.get_all_records())
loss_roo = raw_display.loc[raw_display['Player'] != ""]
worksheet = sh.worksheet('3_map_Proj')
raw_display = pd.DataFrame(worksheet.get_all_records())
raw_display = raw_display.loc[raw_display['Player'] != ""]
map_proj_3 = raw_display[['Player', 'Team', 'Opponent', 'Odds', 'Win%', 'Avg Kills', 'Avg Deaths', 'Proj_Kills', 'Proj_Deaths']]
data_cols = map_proj_3.columns.drop(['Player', 'Team', 'Opponent', 'Win%'])
map_proj_3[data_cols] = map_proj_3[data_cols].apply(pd.to_numeric, errors='coerce')
worksheet = sh.worksheet('Timestamp')
timestamp = worksheet.acell('A1').value
return odds_table, overall_roo, win_roo, timestamp, loss_roo, map_proj_3
def convert_df_to_csv(df):
return df.to_csv().encode('utf-8')
odds_table, overall_roo, win_roo, timestamp, loss_roo, map_proj_3 = pull_baselines()
t_stamp = f"Last Update: " + str(timestamp) + f" CST"
tab1, tab2, tab3 = st.tabs(["COD Odds Tables", "COD Range of Outcomes", "COD 3-map projections"])
with tab1:
st.info(t_stamp)
if st.button("Reset Data", key='reset1'):
st.cache_data.clear()
odds_table, overall_roo, win_roo, timestamp, loss_roo, map_proj_3 = pull_baselines()
t_stamp = f"Last Update: " + str(timestamp) + f" CST"
odds_display = odds_table
st.dataframe(odds_display.style.background_gradient(axis=0).background_gradient(cmap='RdYlGn').format(odds_format, precision=2), use_container_width = True)
st.download_button(
label="Export Tables",
data=convert_df_to_csv(odds_display),
file_name='COD_Odds_Tables_export.csv',
mime='text/csv',
)
with tab2:
st.info(t_stamp)
if st.button("Reset Data", key='reset2'):
st.cache_data.clear()
odds_table, overall_roo, win_roo, timestamp, loss_roo, map_proj_3 = pull_baselines()
t_stamp = f"Last Update: " + str(timestamp) + f" CST"
model_choice = st.radio("What table would you like to display?", ('Overall', 'Wins', 'Losses'), key='roo_table')
team_var1 = st.multiselect('View specific team?', options = overall_roo['Team'].unique(), key = 'roo_teamvar')
if model_choice == 'Overall':
hold_display = overall_roo
elif model_choice == 'Wins':
hold_display = win_roo
elif model_choice == 'Losses':
hold_display = loss_roo
hold_display['Cpt_Own'] = (hold_display['Own']) * ((100 - (100-hold_display['Own'])))
cpt_own_norm = 100 / hold_display['Cpt_Own'].sum()
hold_display['Cpt_Own'] = (hold_display['Cpt_Own'] * cpt_own_norm)
display = hold_display.set_index('Player')
export_display = display
export_display['Position'] = "FLEX"
if team_var1:
display = display[display['Team'].isin(team_var1)]
st.dataframe(display.style.background_gradient(axis=0).background_gradient(cmap='RdYlGn').format(roo_format, precision=2), use_container_width = True)
st.download_button(
label="Export Range of Outcomes",
data=convert_df_to_csv(export_display),
file_name='CSGO_ROO_export.csv',
mime='text/csv',
)
with tab3:
st.info(t_stamp)
if st.button("Reset Data", key='reset3'):
st.cache_data.clear()
odds_table, overall_roo, win_roo, timestamp, loss_roo, map_proj_3 = pull_baselines()
t_stamp = f"Last Update: " + str(timestamp) + f" CST"
team_var2 = st.multiselect('View specific team?', options = map_proj_3['Team'].unique(), key = 'stat_teamvar')
map_stat_display = map_proj_3
if team_var2:
map_stat_display = map_stat_display[display['Team'].isin(team_var2)]
st.dataframe(map_stat_display.style.background_gradient(axis=0).background_gradient(cmap='RdYlGn').format(map_proj_format, precision=2), use_container_width = True)
st.download_button(
label="Export Projections",
data=convert_df_to_csv(map_stat_display),
file_name='COD_Projections_export.csv',
mime='text/csv',
) |