Skip to content

Instantly share code, notes, and snippets.

@amwelch
Created August 6, 2023 20:46
Show Gist options
  • Save amwelch/7a439a0028ccd8ac300a3d1bf6519151 to your computer and use it in GitHub Desktop.
Save amwelch/7a439a0028ccd8ac300a3d1bf6519151 to your computer and use it in GitHub Desktop.
Sleeper League Roster Ages
import pandas as pd
from sleeper_wrapper import League, Players, User
import ipdb
import json
import os.path
from tabulate import tabulate
DYNO_LEAGUE = 976543638605881344
league = League(DYNO_LEAGUE)
rosters = league.get_rosters()
players_file = "players_cache.json"
if not os.path.exists(players_file):
with open(players_file, "w") as ofp:
buf = Players()
ofp.write(json.dumps(buf))
players = None
with open(players_file, "r") as ifp:
players = json.load(ifp)
rows = []
for roster in rosters:
user = User(roster["owner_id"]).get_user()
roster_players = [players[x] for x in roster["players"] if x in players]
for x in roster_players:
x["owner"] = user["display_name"]
rows += roster_players
df = pd.DataFrame(rows)
# Filter out DST
df = df[df["age"].notna()]
df["name"] = df["first_name"] + " " + df["last_name"]
owner_df = (
df[["owner", "age"]]
.groupby("owner")
.agg(
Average=("age", "mean"),
Median=("age", "median"),
Maximum=("age", "max"),
Minimum=("age", "min"),
)
)
owner_df.sort_values("Average", inplace=True)
print("Roster Age Stats")
print(
tabulate(owner_df, headers="keys", tablefmt="psql", showindex=True, floatfmt=".2f")
)
print(
"League-wide age stats: avg: {0:.2f} median: {0:.2f} min: {0:.2f} max: {0:.2f}".format(
df["age"].mean(), df["age"].median(), df["age"].max(), df["age"].min()
)
)
num_print = 10
df.sort_values("age", inplace=True)
df_young = df[["name", "owner", "age", "position"]].head(num_print)
print(f"Top {num_print} Youngest Players")
print(tabulate(df_young, headers="keys", tablefmt="psql", showindex=False))
df.sort_values("age", inplace=True, ascending=False)
df_old = df[["name", "owner", "age", "position"]].head(num_print)
print(f"Top {num_print} Oldest Players")
print(tabulate(df_old, headers="keys", tablefmt="psql", showindex=False))
num_over_30 = len(df[df["age"] >= 30])
num_under_25 = len(df[df["age"] < 25])
num_25_29 = len(df[(df["age"] >= 25) & (df["age"] < 30)])
total = len(df)
print(
"Players over 30: {} ({:.1f}%) Players 25-29: {} ({:.1f}%) Under 25: {} ({:.1f}%)".format(
num_over_30,
(num_over_30 / total) * 100,
num_25_29,
(num_25_29 / total) * 100,
num_under_25,
(num_under_25 / total) * 100,
)
)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment