Spaces:
Running
Running
James McCool
Update cache duration in init_team_data function in app.py from 100 to 60 seconds to optimize data retrieval efficiency. This change aims to balance performance and resource usage during data analysis.
53059ec
import streamlit as st | |
st.set_page_config(layout="wide") | |
import numpy as np | |
import pandas as pd | |
import pymongo | |
import time | |
from datetime import datetime, timedelta | |
def init_conn(): | |
uri = st.secrets['mongo_uri'] | |
client = pymongo.MongoClient(uri, retryWrites=True, serverSelectionTimeoutMS=500000) | |
db = client["League_of_Legends_Database"] | |
collection = db["gamelogs"] | |
min_date = datetime.strptime(collection.find_one({}, sort=[("date", 1)])["date"], "%Y-%m-%d %H:%M:%S") | |
max_date = datetime.strptime(collection.find_one({}, sort=[("date", -1)])["date"], "%Y-%m-%d %H:%M:%S") | |
team_names = collection.distinct("teamname") | |
player_names = collection.distinct("playername") | |
return db, team_names, player_names, min_date, max_date | |
db, team_names, player_names, min_date, max_date = init_conn() | |
display_formats = {'wKill%': '{:.2%}', 'wDeath%': '{:.2%}', 'wAssist%': '{:.2%}', 'lKill%': '{:.2%}', 'lDeath%': '{:.2%}', 'lAssist%': '{:.2%}'} | |
# Create sidebar container for options | |
with st.sidebar: | |
st.header("Team Analysis Options") | |
# Date filtering options | |
st.subheader("Date Range") | |
date_filter = st.radio( | |
"Select Date Range", | |
["Last Year", "Custom Range"] | |
) | |
if date_filter == "Last Year": | |
end_date = max_date | |
start_date = (end_date - timedelta(days=365)) | |
else: | |
col1, col2 = st.columns(2) | |
with col1: | |
start_date = st.date_input( | |
"Start Date", | |
value=(max_date - timedelta(days=365)), | |
min_value=min_date, | |
max_value=max_date | |
) | |
with col2: | |
end_date = st.date_input( | |
"End Date", | |
value=max_date, | |
min_value=min_date, | |
max_value=max_date | |
) | |
selected_team = st.selectbox( | |
"Select Team", | |
options=team_names, | |
index=team_names.index("T1") if "T1" in team_names else 0 | |
) | |
st.subheader("Prediction Settings") | |
win_loss = st.selectbox( | |
"Select Win/Loss", | |
options=["Win", "Loss"], | |
index=0 | |
) | |
kill_prediction = st.number_input( | |
"Predicted Team Kills", | |
min_value=0, | |
max_value=100, | |
value=20 | |
) | |
death_prediction = st.number_input( | |
"Predicted Team Deaths", | |
min_value=0, | |
max_value=100, | |
value=5 | |
) | |
def init_team_data(team, win_loss, kill_prediction, death_prediction, start_date, end_date): | |
collection = db["gamelogs"] | |
cursor = collection.find({"teamname": team, "date": {"$gte": start_date, "$lte": end_date}}) | |
raw_display = pd.DataFrame(list(cursor)) | |
raw_display = raw_display[['playername', 'teamname', 'playername_avg_kill_share_win', 'playername_avg_death_share_win', 'playername_avg_assist_share_win', 'playername_avg_total_cs_win', 'playername_avg_kill_share_loss', 'playername_avg_death_share_loss', 'playername_avg_assist_share_loss', 'playername_avg_total_cs_loss']] | |
raw_display = raw_display.rename(columns = {'playername_avg_kill_share_win': 'wKill%', 'playername_avg_death_share_win': 'wDeath%', 'playername_avg_assist_share_win': 'wAssist%', 'playername_avg_total_cs_win': 'wCS', 'playername_avg_kill_share_loss': 'lKill%', 'playername_avg_death_share_loss': 'lDeath%', 'playername_avg_assist_share_loss': 'lAssist%', 'playername_avg_total_cs_loss': 'lCS'}) | |
team_data = raw_display.drop_duplicates(subset = ['playername']) | |
if win_loss == "Win": | |
team_data['Kill_Proj'] = team_data['wKill%'] * kill_prediction | |
team_data['Death_Proj'] = team_data['wDeath%'] * death_prediction | |
team_data['Assist_Proj'] = team_data['wAssist%'] * kill_prediction | |
team_data = team_data[['playername', 'teamname', 'wKill%', 'wDeath%', 'wAssist%', 'wCS', 'Kill_Proj', 'Death_Proj', 'Assist_Proj']] | |
else: | |
team_data['Kill_Proj'] = team_data['lKill%'] * kill_prediction | |
team_data['Death_Proj'] = team_data['lDeath%'] * death_prediction | |
team_data['Assist_Proj'] = team_data['lAssist%'] * kill_prediction | |
team_data = team_data[['playername', 'teamname', 'lKill%', 'lDeath%', 'lAssist%', 'lCS', 'Kill_Proj', 'Death_Proj', 'Assist_Proj']] | |
return team_data.dropna().reset_index(drop=True) | |
if st.button("Run"): | |
st.dataframe(init_team_data(selected_team, win_loss, kill_prediction, death_prediction, start_date, end_date).style.background_gradient(axis=0).background_gradient(cmap='RdYlGn').format(display_formats, precision=2), use_container_width = True) |