acquire
Get football data: fetch, scrape or download from StatsBomb, Opta, FBref, Understat, SportMonks, Wyscout, Kaggle or any source,…
Clean, filter, reshape, join and convert football data, including missing values and large datasets. Use for any data manipulation on football data.
Claude Code
$ npx -y skills add withqwerty/nutmeg --skill wrangle --agent claude-code
Codex
$ npx skills add withqwerty/nutmeg --skill wrangle -a codex -y
Cursor
$ npx skills add withqwerty/nutmeg --skill wrangle -a cursor -y
Gemini CLI
$ npx skills add withqwerty/nutmeg --skill wrangle -a gemini-cli -y
GitHub Copilot
$ npx skills add withqwerty/nutmeg --skill wrangle -a github-copilot -y
OpenCode
$ npx skills add withqwerty/nutmeg --skill wrangle -a opencode -y
Windsurf
$ npx skills add withqwerty/nutmeg --skill wrangle -a windsurf -y
name: nutmeg-wrangle description: "Clean, filter, reshape, join and convert football data, including missing values and large datasets. Use for any data manipulation on football data." argument-hint: "[what to do with the data]" allowed-tools: ["Read", "Write", "Bash", "Glob", "Grep", "Agent", "mcp__plugin_nutmeg_football-docs__search_docs", "mcp__football-docs__search_docs", "mcp__plugin_nutmeg_football-docs__get_metric", "mcp__football-docs__get_metric", "mcp__plugin_nutmeg_football-docs__list_metrics", "mcp__football-docs__list_metrics"]
Help the user manipulate football data effectively. This skill is about the mechanics of working with data, adapted to the user's language and tools.
Read and follow `${CLAUDE_PLUGIN_ROOT}/docs/accuracy-guardrail.md` before answering any question about provider-specific facts (IDs, endpoints, schemas, coordinates, rate limits). Always use `search_docs` — never guess from training data.
Read `.nutmeg.user.md`. If it doesn't exist, continue with sensible defaults (Python and pandas, intermediate level) and suggest running `/nutmeg` setup at the end. Use their profile for language preference and stack.
Football data coordinates vary by provider. Always verify and convert before combining data.
Use `search_docs(query="coordinate system", provider="[provider]")` to look up each provider's origin, ranges and y-axis direction. Do not write a conversion formula from memory: providers differ in which touchline y=0 sits on, so a formula that only rescales can mirror the pitch.
Common filtering patterns for football event data:
**By event type:**
**By match state:**
**By zone:**
Common joins in football data:
| Join | Key | Notes | |------|-----|-------| | Events + lineups | player_id + match_id | Get player names/positions for each event | | Events + xG | match_id + event sequence | Match xG to specific shots | | Multiple providers | Reep ID | Map each provider's `(provider, namespace, id)` to a Reep ID, then join on the Reep ID | | Season data + Elo | date | Join Elo rating at time of match |
**Joining providers:** join through Reep Register IDs, not names (see `${CLAUDE_PLUGIN_ROOT}/docs/entity-resolution-routing.md`). Names differ across providers ("Man City" / "Manchester City"), players share names, and a fuzzy name match fails silently.
Common reshaping operations:
A full season of event data can run to hundreds of megabytes, and tracking data to far more. Strategies:
**Python:**
**JavaScript/TypeScript:**
**R:**
Always validate after wrangling:
| Check | What to look for | |-------|-----------------| | Event counts | Compare each match with the other matches in the same dataset. Typical counts depend on the provider, so flag outliers rather than using a fixed number | | Coordinate range | Should be within provider's expected range | | Missing player IDs | Some events lack player attribution (ball out, etc.) | | Duplicate events | Same event_id appearing twice | | Time gaps | Large gaps in event timestamps within a match | | Team attribution | Verify home/away assignment is consistent |
| From | To | Tool/method | |------|-----|------------| | JSON events | DataFrame | pandas/polars `read_json` or manual parsing | | CSV | Parquet | `df.write_parquet()` (polars) or `df.to_parquet()` (pandas) | | Provider format | kloppy model | `kloppy.load_{provider}()` in Python | | kloppy model | DataFrame | `dataset.to_df()` | | Any | SQLite | Load into SQLite
A Claude Code plugin that makes Claude an expert at football data analytics. Who it's for: Anyone who works with football data — analysts, developers, journalists, researchers, hobbyists.
Get football data: fetch, scrape or download from StatsBomb, Opta, FBref, Understat, SportMonks, Wyscout, Kaggle or any source,…
Explore and interpret football data, and judge players or teams from stats: rankings, 'who is the best', 'is he a poor finisher',…
Ideas for football data visualisations: chart types and designs for match reports, player profiles, dashboards and other…
Calculate derived football metrics and models. Use when the user wants to compute xG, xGOT, PPDA, passing networks, expected…
Fix broken football data scrapers and pipelines: failed requests, API errors, changed formats. Also drafts upstream issues or PRs…
Explain football analytics concepts and provider documentation: what a metric means (xG, PPDA, xT), learning paths and resources,…
Use this skill to extract structured Markdown/JSON from PDFs and document images—tables with cell-level precision, formulas as…
Estimates intracellular metabolic fluxes from steady-state carbon-13 isotope-tracing measurements using validated atom maps,…