Chelsea Striker Analysis
A data-driven scouting report that shortlists striker targets from Big 5 league shooting data, argued from queries rather than opinion.

Overview
Context
A self-directed project asking a concrete question — who should Chelsea sign at striker for 2025/26 — and answering it from data rather than reputation. The output is a written scouting report backed by a queryable database.
The problem
What it needed to solve
Scouting arguments usually run on goal totals, which reward the striker on the best team rather than the best finisher. Goals alone say nothing about how a player is getting them, or whether the volume is repeatable.
Scrape a season of shooting data for every forward in Europe's top five leagues, load it into MySQL, and rank candidates on efficiency measures — xG per shot, goal conversion, average shot distance — instead of raw output.
Contribution
My role in the work
- Scraped shooting statistics for every forward in the Big 5 European leagues from FBref with requests and BeautifulSoup, flattening the multi-index table and coercing the stat columns to numeric.
- Designed the MySQL schema and loaded the cleaned CSV through SQLAlchemy, renaming source columns to a consistent internal vocabulary.
- Wrote the ranking queries — goal conversion, xG per shot, and average shot distance, each filtered to a minimum shot volume.
- Produced the comparison charts and wrote the final report, including tactical film study alongside the numbers.
Decisions
Key decisions
- Ranked on efficiency rather than goal totals, so a striker on a weaker side is not penalised for taking fewer chances.
- Filtered every query to at least 20 shots, because conversion rate over a handful of attempts is noise, not signal.
- Kept xG and npxG separate so penalties do not inflate a player's underlying numbers.
- Paired the statistical shortlist with video review — the data narrows the field, but it does not tell you how a player moves.
Implementation
How it was built
- A Python scraping script that filters to forwards and writes a clean CSV of shooting stats.
- A MySQL table keyed on player and season, loaded via SQLAlchemy from the same CSV.
- A set of SQL queries ranking the pool by conversion, xG per shot, and shot distance, then pulling the full row for each shortlisted name.
- Matplotlib charts comparing the shortlist across all three measures.
Outcome
What exists today
A shortlist with Emanuel Emegha as the recommended target, Gonçalo Ramos as backup, and Mika Biereth and Myron Boadu as depth — each defensible from a query rather than a hunch.