Back to ProjectsActive

FL Men's League Analytics

A full analytics and scouting system built from four seasons of recreational men's league baseball data. Custom metrics, automated pipelines, leaderboards, spray charts, and player analysis -- all powered by GameChanger data and Python.

What it is

Scout Analytics is the data infrastructure layer that powers Replacement Level Media. Every stat that shows up in a Max article, every number Bill cites in Power Rankings, every xCHAOS leaderboard that Teddy gets wrong -- it all comes from this pipeline.

The system goes beyond tracking box scores. It applies major league analytical frameworks -- adjusted for a recreational league where the talent range runs from "former D1 player" to "found on Facebook this morning" -- and produces actionable player evaluations.

Custom Metrics

wRC+

Weighted Runs Created Plus

League-calibrated offensive production. 100 = average player in this specific league. Accounts for park and league context -- which matters when you're playing on a 250-foot left field line.

WAR

Wins Above Replacement

Custom men's league version. Replacement level is defined as the sub you found on Facebook 20 minutes before the game in gray sweatpants borrowing someone else's glove. Negative WAR exists and is tracked.

xCHAOS

Chaos Index

Three-pillar z-scored index measuring a batter's ability to create unpredictable situations. Outcome (50%), Process (30%), Contact (20%). Built as a more holistic alternative to OPS for recreational league context.

The Pipeline

Fully automated from data drop to published leaderboard. The weekly workflow runs in minutes.

  1. 1

    Export box score and play-by-play CSV from GameChanger after each game

  2. 2

    Drop CSV into the Scout input folder

  3. 3

    Run stats_calculator.py to compute all metrics

  4. 4

    Output CSVs update the leaderboard automatically

  5. 5

    RLM uses the updated stats for that week's analytics features

python stats_calculator.py --update --publish

Stack

PythonpandasNumPyGameChanger CSVGhost CMSCustom z-score engine

Four seasons of historical data. Each season builds on the last. The formulas are calibrated to this specific league -- not copy-pasted from FanGraphs.