Why a portfolio matters
In football analytics, a public portfolio is the standard way to stand out. Clubs want to see that you can take raw data and turn it into something useful, and a set of real projects proves that far better than a CV alone.
The good news is that you don't need to build everything at once. If you follow the data scientist career pathway, each stage of the roadmap gives you a new skill — and each skill can become a portfolio project.
Start with real GoalPro data
To help you get going, I'm sharing a real, anonymised dataset from GoalPro: player stats from grassroots matches, captured by the platform. Every player and venue has been replaced with an ID, so no one can be identified. Use it for every step below.
GoalPro grassroots match dataset
CSV · 18 columns · one row per player per match
| match_player_id | match_id | venue_id | match_total_xp | players_in_match | player_id | position | result | goals | assists | shots | dribbles | interceptions | tackles | blocks | player_match_xp | is_captain | highlight_count |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| RECORD-0001 | MATCH-0001 | VENUE-0001 | 0 | 10 | PLAYER-0001 | Forward | l | 2 | 3 | 18 | 18 | 6 | 6 | 0 | 80 | FALSE | 1 |
| RECORD-0002 | MATCH-0001 | VENUE-0001 | 0 | 10 | PLAYER-0002 | Forward | l | 8 | 5 | 24 | 24 | 7 | 2 | 0 | 122 | FALSE | 1 |
| RECORD-0003 | MATCH-0001 | VENUE-0001 | 0 | 10 | PLAYER-0003 | Forward | l | 1 | 1 | 11 | 6 | 6 | 0 | 0 | 38 | FALSE | 1 |
| RECORD-0004 | MATCH-0001 | VENUE-0001 | 0 | 10 | PLAYER-0004 | Forward | w | 3 | 4 | 21 | 16 | 8 | 8 | 0 | 101 | FALSE | 1 |
| RECORD-0005 | MATCH-0001 | VENUE-0001 | 0 | 10 | PLAYER-0005 | Forward | l | 5 | 3 | 19 | 3 | 14 | 4 | 0 | 93 | FALSE | 1 |
The first five rows. Scroll sideways to see every column.
What each column means
| match_player_id | Unique ID for one player's record in one match |
|---|---|
| match_id | ID of the match |
| venue_id | ID of the venue where the match was played |
| match_total_xp | Total XP for the match (always 0 in this release) |
| players_in_match | Number of players who played in the match |
| player_id | Anonymised ID of the player — the same player keeps the same ID across matches |
| position | Player's position: Forward, Midfielder, Defender, Goalkeeper or Unknown |
| result | Result for the player's team: w = win, l = loss, d = draw |
| goals | Goals scored |
| assists | Assists |
| shots | Shots taken |
| dribbles | Dribbles |
| interceptions | Interceptions |
| tackles | Tackles |
| blocks | Blocks |
| player_match_xp | GoalPro XP the player earned in the match |
| is_captain | TRUE if the player was captain |
| highlight_count | Number of highlight clips for the player in the match |
The plan: one project per roadmap stage
Here's how I would do it. Each step builds on the one before, so your portfolio grows with your skills.
These are the five stages of the football analytics roadmap.
Start with SQL: find insights in a dataset
Download a football dataset — like the GoalPro one above — and load it into a database. Then use SQL to answer real questions: who creates the most chances, which teams concede late goals, how a player's output changes over a season. SQL is the foundation of almost every data job, and it's the quickest way to start finding insights.
Football project idea
Start with the GoalPro dataset above, then try a bigger public one such as StatsBomb's open data or a Kaggle football dataset. Answer five questions you're genuinely curious about.
What to show
- Your SQL queries, clearly commented
- A short write-up of what you found and why it matters
Try it with the GoalPro dataset
- Who are the top 10 players for goals plus assists?
- Which venue sees more goals per match?
- Do captains win more often than other players?
Rebuild it in Python
Take the same analysis and convert it into Python. Using pandas to load, clean and analyse the data shows you can work in the language most clubs use, and charts with Matplotlib, Seaborn or Plotly make your findings easier to understand.
Football project idea
Recreate your SQL insights in a Jupyter notebook and add charts — for example, a shot map or a comparison of players' chance creation.
What to show
- A clean, well-organised notebook on GitHub
- Charts that each tell one clear story
Try it with the GoalPro dataset
- Load the CSV with pandas and recreate your SQL answers.
- Chart goals against shots to find the most clinical finishers (goals per shot).
- Find the players who've played the most matches and how their stats change.
Build a dashboard people can use
Turn your insights into a dashboard that someone else can explore. This shows you can think about your audience — a coach, a scout or a fan — and not just the code. Add filters so people can find their own answers.
Football project idea
A player comparison dashboard where a scout can filter by position, age and league, built in Tableau, Power BI or a Python tool such as Streamlit.
What to show
- A live link people can click and use
- Screenshots plus a short explanation of who it's for
Try it with the GoalPro dataset
- Build a player leaderboard people can filter by venue and position.
- Add a player page showing their stats match by match.
Take on bigger, messier data and build models
Real data is large and messy. Work with a bigger dataset, clean it properly, and use it to build a machine learning model. This is what separates a data scientist from a data analyst: you're not just describing what happened, you're predicting or finding patterns.
Football project idea
Build an expected goals (xG) model from shot data, or a player similarity model that finds look-alike players from their stats.
What to show
- How you cleaned the data and the choices you made
- How you tested the model and what its limits are
Try it with the GoalPro dataset
- Clean it first: 95 rows have the position
Unknown,match_total_xpandhighlight_countnever change, and onematch_player_idis used twice. Decide how to handle each. - Build a model that predicts a win or loss from a player's stats, or one that explains how
player_match_xpis earned.
Use AI to make your insights shine
Finally, use large language models (LLMs) to turn your analysis into something people love to use — polished match reports written from your data, or an interactive tool where someone can ask questions in plain English and get answers back.
Football project idea
A scouting assistant that turns your player data into a written scouting report, or a chat tool that answers questions about a team's season.
What to show
- A working demo or short video of it in action
- A note on how you checked the AI's answers are accurate
Try it with the GoalPro dataset
- Use an LLM to write a short match report for each
match_idfrom the stats. - Build a tool where someone can ask, in plain English, “who was the best defender at venue 2?”
Tips to make your portfolio stand out
- Pick questions you care about. Your curiosity shows, and it makes the work far more interesting to read.
- Explain, don't just show. A short write-up of what you found and why it matters is as important as the code.
- Make it public. Put your code on GitHub and share your findings in a blog post or on social media.
- Keep it tidy. Clear titles, readable code and a simple README make a big difference.
- Finish things. Three finished projects beat ten half-built ones.
Start small. Your first project only needs a dataset, a few SQL queries and a curious question.