Spaces:
Runtime error
Runtime error
import pandas as pd | |
import gradio as gr | |
# Função para determinar a faixa de probabilidade | |
def determinar_faixa(prob): | |
prob = float(prob) # Garantir que probabilidade seja float | |
if 0.95 <= prob <= 1.00: | |
return "95-100%" | |
elif 0.90 <= prob < 0.95: | |
return "90-95%" | |
elif 0.80 <= prob < 0.90: | |
return "80-90%" | |
elif 0.70 <= prob < 0.80: | |
return "70-80%" | |
elif 0.60 <= prob < 0.70: | |
return "60-70%" | |
elif 0.50 <= prob < 0.60: | |
return "50-60%" | |
else: | |
return None | |
# Função para converter strings com vírgula em float | |
def converter_para_float(valor): | |
if isinstance(valor, str): | |
valor = valor.replace(",", ".") | |
return float(valor) | |
# Função principal para calcular EV ajustado e proporção de aposta | |
def calcular(df_jogos, df_precisao, valor_distribuir): | |
# Converter as colunas de probabilidade e retorno para float, lidando com vírgulas | |
df_jogos['probabilidade'] = df_jogos['probabilidade'].apply(converter_para_float) | |
df_jogos['retorno'] = df_jogos['retorno'].apply(converter_para_float) | |
df_jogos['faixa'] = df_jogos['probabilidade'].apply(determinar_faixa) | |
df_jogos = df_jogos.merge(df_precisao, left_on='faixa', right_on='Faixa', how='left') | |
df_jogos['EV'] = df_jogos['probabilidade'] * df_jogos['retorno'] - (1 - df_jogos['probabilidade']) | |
df_jogos['EV_ajustado'] = df_jogos['EV'] * df_jogos['Precisao'] | |
df_jogos['proporcao_aposta'] = df_jogos['EV_ajustado'] / df_jogos['EV_ajustado'].sum() | |
# Calcular o valor a ser apostado em cada jogo | |
df_jogos['valor_aposta'] = df_jogos['proporcao_aposta'] * valor_distribuir | |
# Arredondar os valores para 2 casas decimais | |
df_jogos['Precisao'] = df_jogos['Precisao'].round(2) | |
df_jogos['EV'] = df_jogos['EV'].round(2) | |
df_jogos['EV_ajustado'] = df_jogos['EV_ajustado'].round(2) | |
df_jogos['proporcao_aposta'] = df_jogos['proporcao_aposta'].round(2) | |
df_jogos['valor_aposta'] = df_jogos['valor_aposta'].round(2) | |
return df_jogos[['retorno', 'probabilidade', 'faixa', 'Precisao', 'EV', 'EV_ajustado', 'proporcao_aposta', 'valor_aposta']] | |
# Interface Gradio | |
def gradio_interface(data, valor_distribuir): | |
df_jogos = pd.DataFrame(data) | |
# Faixas de probabilidade e suas precisões correspondentes | |
dados_precisao = { | |
"Faixa": ["50-60%", "60-70%", "70-80%", "80-90%", "90-95%", "95-100%"], | |
"Precisao": [0.784753, 0.786517, 0.818182, 0.822222, 0.853618, 0.902997] | |
} | |
df_precisao = pd.DataFrame(dados_precisao) | |
# Calcular EV ajustado, proporção de aposta e valor a ser apostado | |
result_df = calcular(df_jogos, df_precisao, valor_distribuir) | |
return result_df | |
# Definição das entradas para Gradio | |
input_df = gr.Dataframe(headers=["retorno", "probabilidade"], datatype=["str", "str"]) | |
input_valor = gr.Number(label="Valor a distribuir", value=100) # Corrigido aqui | |
# Definição da saída | |
output = gr.Dataframe() | |
# Construção da interface Gradio | |
iface = gr.Interface(fn=gradio_interface, inputs=[input_df, input_valor], outputs=output, title="Calculadora de Apostas", | |
description="Insira os dados das apostas (retorno_odds, probabilidade modelo) e o valor total a ser distribuído para calcular EV ajustado, proporção de aposta e valor a ser apostado.") | |
# Executa a interface | |
if __name__ == "__main__": | |
iface.launch() | |