Spaces:
Runtime error
Runtime error
import numpy as np | |
import pandas as pd | |
from scipy.stats import poisson | |
def lambda_(df, team1, team2): | |
#forca1 = df.loc[team1]['forca'] | |
#forca2 = df.loc[team2]['forca'] | |
forca1 = df.loc[team1]['forca'] | |
forca2 = df.loc[team2]['forca'] | |
if forca1 >= 0.8: | |
forca1 = forca1 | |
else: | |
forca1 += 0.15*forca1 | |
#forca1 += 0.20 | |
m = 2.25 | |
lambda1 = m*forca1/(forca2 + forca1) | |
lambda2 = m - lambda1 | |
return [lambda1, lambda2] | |
def resultado_vde(gols1, gols2): | |
if gols1 > gols2: | |
resultado = 'V' | |
elif gols1 < gols2: | |
resultado = 'D' | |
else: | |
resultado = 'E' | |
return resultado | |
def pontos_time(gols1, gols2): | |
resultado = resultado_vde(gols1, gols2) | |
if resultado == 'V': | |
pontos1, pontos2 = 3, 0 | |
elif resultado == 'D': | |
pontos1, pontos2 = 0, 3 | |
else: | |
pontos1, pontos2 = 0, 0 | |
return [pontos1, pontos2, resultado] | |
def dist_poisson(media): | |
probs = [poisson.pmf(i, media) for i in range(0, 6, 1)] # calcula a probabilidade de sair i gols quando a média = media | |
probs.append(1-sum(probs)) # probabilidade de sair mais que 5 gols | |
return pd.Series(probs, index = ['0', '1', '2', '3', '4', '5', '6+']) | |
def probabilidades_partidas(df, team1, team2): | |
lambda1, lambda2 = lambda_(df, team1, team2) | |
dist1, dist2 = dist_poisson(lambda1), dist_poisson(lambda2) | |
matriz_resultados = np.outer(dist1, dist2) # outer produto dos valores de dist1 e dist2 | |
# empates | |
empates = np.trace(matriz_resultados) | |
# soma dos triangulos inferiores | |
vitoria_team1 = np.tril(matriz_resultados).sum() - empates | |
# soma dos triangulos superiores | |
vitoria_team2 = np.triu(matriz_resultados).sum() - empates | |
vde = np.around([vitoria_team1, empates, vitoria_team2], 3) | |
probabilidades = [f'{100*i:.2f}%' for i in vde] | |
return probabilidades, 100*matriz_resultados |