joaomaia's picture
Update app.py
1c6cf12 verified
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()