Skip to content

Advanced Examples

Advanced usage patterns and examples for Edgework.

Custom Filtering and Analysis

Player Analysis

from edgework import Edgework
from collections import defaultdict

client = Edgework()

# Get player statistics
players = client.skater_stats(season="2023-2024", limit=100)

# Analyze by position
position_stats = defaultdict(list)
for player in players:
    position_stats[player.position].append(player)

for position, players_list in position_stats.items():
    avg_points = sum(p.points for p in players_list) / len(players_list)
    print(f"{position}: {len(players_list)} players, avg {avg_points:.1f} points")

Team Performance Analysis

# Compare team offensive and defensive performance
teams = client.team_stats(season="2023-2024")

# Sort by different metrics
by_offense = sorted(teams, key=lambda t: t.goals_for, reverse=True)
by_defense = sorted(teams, key=lambda t: t.goals_against)

print("Top 5 Offensive Teams:")
for team in by_offense[:5]:
    print(f"{team.name}: {team.goals_for} goals for")

print("\nTop 5 Defensive Teams:")
for team in by_defense[:5]:
    print(f"{team.name}: {team.goals_against} goals against")

Historical Data Comparison

Multi-Season Player Analysis

seasons = ["2022-2023", "2023-2024"]
player_comparison = {}

for season in seasons:
    stats = client.skater_stats(season=season, limit=50)
    player_comparison[season] = {p.name: p.points for p in stats}

# Find players who improved
for player in player_comparison["2023-2024"]:
    if player in player_comparison["2022-2023"]:
        old_points = player_comparison["2022-2023"][player]
        new_points = player_comparison["2023-2024"][player]
        improvement = new_points - old_points
        if improvement > 10:
            print(f"{player}: +{improvement} points ({old_points}{new_points})")

Data Export and Visualization

Export to CSV

import csv
from edgework import Edgework

client = Edgework()
players = client.skater_stats(season="2023-2024", limit=100)

# Export player stats to CSV
with open('player_stats.csv', 'w', newline='', encoding='utf-8') as csvfile:
    fieldnames = ['name', 'team', 'position', 'games', 'goals', 'assists', 'points']
    writer = csv.DictWriter(csvfile, fieldnames=fieldnames)

    writer.writeheader()
    for player in players:
        writer.writerow({
            'name': player.name,
            'team': player.team_abbr,
            'position': player.position,
            'games': player.games_played,
            'goals': player.goals,
            'assists': player.assists,
            'points': player.points
        })

print("Player stats exported to player_stats.csv")

Data Visualization with Matplotlib

import matplotlib.pyplot as plt
from edgework import Edgework

client = Edgework()
teams = client.team_stats(season="2023-2024")

# Create scatter plot of goals for vs goals against
goals_for = [team.goals_for for team in teams]
goals_against = [team.goals_against for team in teams]
team_names = [team.abbrev for team in teams]

plt.figure(figsize=(10, 8))
plt.scatter(goals_for, goals_against, alpha=0.7)

# Add team labels
for i, name in enumerate(team_names):
    plt.annotate(name, (goals_for[i], goals_against[i]),
                xytext=(5, 5), textcoords='offset points')

plt.xlabel('Goals For')
plt.ylabel('Goals Against')
plt.title('Team Offensive vs Defensive Performance')
plt.grid(True, alpha=0.3)
plt.show()

Roster Management

Team Roster Analysis

from edgework import Edgework

client = Edgework()

# Get a team and analyze its roster
teams = client.team_stats(season="2023-2024", limit=5)

for team in teams:
    roster = team.get_roster()

    # Analyze roster by age (if birth_date available)
    ages = []
    for player in roster.players:
        if hasattr(player, 'birth_date') and player.birth_date:
            # Calculate age from birth_date
            from datetime import datetime
            birth_year = int(player.birth_date[:4])
            age = 2024 - birth_year
            ages.append(age)

    if ages:
        avg_age = sum(ages) / len(ages)
        print(f"{team.name}: {len(roster.players)} players, avg age {avg_age:.1f}")

Position Distribution

# Analyze position distribution across teams
position_counts = defaultdict(int)

teams = client.team_stats(season="2023-2024", limit=10)
for team in teams:
    roster = team.get_roster()
    for player in roster.players:
        position_counts[player.position] += 1

print("Position Distribution Across Teams:")
for position, count in position_counts.items():
    print(f"{position}: {count} players")

Schedule Analysis

Game Scheduling Patterns

from edgework import Edgework
from datetime import datetime
from collections import Counter

client = Edgework()

# Get schedule for a month
schedule = client.schedule(
    start_date="2024-01-01",
    end_date="2024-01-31"
)

# Analyze games by day of week
game_days = []
for game in schedule.games:
    game_date = datetime.fromisoformat(game.start_time_utc.replace('Z', '+00:00'))
    game_days.append(game_date.strftime('%A'))

day_counts = Counter(game_days)
print("Games by Day of Week:")
for day, count in day_counts.items():
    print(f"{day}: {count} games")

Performance Monitoring

API Response Timing

import time
from edgework import Edgework

client = Edgework()

# Time different API calls
operations = [
    ("Get Players", lambda: client.players(active_only=True)),
    ("Get Skater Stats", lambda: client.skater_stats(season="2023-2024", limit=50)),
    ("Get Team Stats", lambda: client.team_stats(season="2023-2024")),
    ("Get Schedule", lambda: client.schedule()),
]

for name, operation in operations:
    start_time = time.time()
    result = operation()
    end_time = time.time()

    print(f"{name}: {end_time - start_time:.2f}s ({len(result)} items)")

Custom Data Models

Creating Summary Objects

from dataclasses import dataclass
from typing import List
from edgework import Edgework

@dataclass
class TeamSummary:
    name: str
    points: int
    goals_for: int
    goals_against: int
    goal_differential: int

    @classmethod
    def from_team_stats(cls, team_stats):
        return cls(
            name=team_stats.name,
            points=team_stats.points,
            goals_for=team_stats.goals_for,
            goals_against=team_stats.goals_against,
            goal_differential=team_stats.goals_for - team_stats.goals_against
        )

# Usage
client = Edgework()
teams = client.team_stats(season="2023-2024")
summaries = [TeamSummary.from_team_stats(team) for team in teams]

# Sort by goal differential
summaries.sort(key=lambda s: s.goal_differential, reverse=True)

print("Teams by Goal Differential:")
for summary in summaries[:10]:
    print(f"{summary.name}: +{summary.goal_differential}")