Skip to content

Instantly share code, notes, and snippets.

View lspinheiro's full-sized avatar

Leonardo Pinheiro lspinheiro

  • Sydney
View GitHub Profile
def calc_glicko2_rank(df: pd.DataFrame, tau:float, rd_0:float, sigma_0:float = 0.06, date_freq:str = '180D') -> pd.DataFrame:
glicko_scorer = Glicko2(tau=tau)
fighter_set = set(df['fighter_slog'].unique().tolist() + df['opponent_slog'].unique().tolist())
for fighter in fighter_set:
glicko_scorer.add_player(fighter, rd=rd_0, sigma=sigma_0)
for group_idx, (date_idx, date_group) in tqdm(enumerate(df.groupby([pd.Grouper(key='date', freq=date_freq)]))):
# pre-rating map
rating_map = {fname: glicko_scorer[fname].rating for fname in fighter_set}
import math
import numpy as np
cdef class GlickoRating:
cdef public double mu, phi, sigma
cdef readonly double elo_scale
cdef readonly double glicko_scale
cdef public list fights
cdef public list scores
@lspinheiro
lspinheiro / add_rank,.py
Created June 11, 2021 06:33
Elo implementation for MMA
def calc_elo_rank(df: pd.DataFrame) -> pd.DataFrame:
elo_scorer = Elo(k = 20)
fighter_set = set(df['winner_slog'].unique().tolist() + df['loser_slog'].unique().tolist())
for fighter in fighter_set:
elo_scorer.add_player(fighter)
elo_f1 = np.zeros((len(df,)))
elo_f2 = np.zeros((len(df,)))
for rowidx, fs_row in tqdm(enumerate(df.itertuples())):