Spaces:
Runtime error
Runtime error
File size: 3,435 Bytes
5fdfbc2 9c29563 5fdfbc2 9c29563 5fdfbc2 9c29563 5fdfbc2 9c29563 5fdfbc2 9c29563 5fdfbc2 266f5f5 5fdfbc2 56b83c4 266f5f5 9c29563 5fdfbc2 56b83c4 5fdfbc2 56b83c4 5fdfbc2 9c29563 5fdfbc2 56b83c4 5fdfbc2 56b83c4 1c6cf12 5fdfbc2 cc7a492 5fdfbc2 56b83c4 5fdfbc2 |
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 |
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()
|