Jamie PackerProjects

Copyright © 2026 Jamie Packer. All rights reserved.

Data Training Programme

April 2026

An intensive private data training programme covering industry tools and end-to-end workflows, with a showcase of select training deliverables.

PythonSQLSnowflakedbtTerraformPower BITableauStreamlitExcel
Data Training Programme screenshot

Introduction

I completed an intensive private data training programme (Rockborne) covering industry tools and end-to-end workflows that my degree did not cover.

Below are selected deliverables from the programme which showcase the skills learnt as a result the programme.

Personal Note

This training sits inside an attract-train-deploy model: unpaid training up front, then placement with clients as a data consultant.

As of writing, I am still on the "advanced" track (self-learning while placements are found). I am also actively seeking a permanent data role outside this scheme.

About the Training

The programme was structured as instructor-led classes followed by projects for a particular tool or skill. This page covers a selection of those deliverables.

Tools and skills covered:

Soft Skills (e.g. Data Storytelling)Excel
Data Modelling & SQL (Postgres)Tableau
Power BIPython (Intermediate)
Machine Learning BasicsAPIs and Web Scraping

Projects were built for learning, but scoped to mimic client-style work:

  • Researching the domain
  • Version control (GitHub) for all code
  • Documentation (data dictionaries, statements of work, use guidance)
  • Presenting the project at the end (some live, some recorded)

More about the programme: Rockborne Attract-Train-Deploy.


Projects

UK Crime ELT & Power BI Dashboard

SnowflakedbtTerraformPythonPower BIELT
Snowflake ELT GitHub

This started as a Rockborne two-parter: a (local) Python ETL over street-level crime data (enriched with population, deprivation, and economic activity), then a Power BI dashboard using the result. Grain throughout: area × force × year_month × crime_category.

The training pipeline had some honest limits (file stages on disk, Jupyter as orchestrator because the brief required it, not deployable). After the programme I rebuilt it as a more production-shaped ELT on Snowflake: land raw data first, transform in the warehouse.

UK Crime Snowflake ELT architecture diagram
High-level ELT: ingest → Snowflake bronze/silver/gold → Power BI.

What I rebuilt. Python extracts and loads (police.uk archives plus committed enrichments into bronze). dbt handles bronze → silver → gold in Snowflake (star schema plus a denormalised one-big-table for BI). Terraform provisions the database, schemas, warehouse, and stages. Bootstrap and monthly refresh run from the client or GitHub Actions.

Some source reality: police.uk switched their area codes mid-2023 (hard floor 2023-06), population lags crime months, and missing location codes become an UNKNOWN sentinel so force-level totals can stay honest. dbt tests assert uniqueness on the reporting grain.

The dashboard (training deliverable, presented live) was framed for a "time-poor, non-technical audience" (force leadership / crime analysis leads). UX is deliberately app-like: volume vs crimes-per-1k toggles, bookmarks, tooltips, and a global reset.

Fun Fact: The most crime-ridden place in south-east England is Brighton city centre (by far).

UK Crime Power BI dashboard
Power BI dashboard: Overview and Further Context pages.

Holiday Inspiration App

StreamlitPythonAPIsWeb ScrapingLLM IntegrationLive App
Live AppGitHub

This project had the coolest outcome. It's a Streamlit app where a user can input a description of what they'd like from a holiday, to get suggested destinations with useful information such as weather, activities, and safety information.

Holiday Inspiration App demo
Animated demo of the Holiday Inspiration App.

In short: it begins with a context-stuffing setup to have an LLM map a user description to a selection of three holiday destinations to choose from (out of a bespoke dataset of ~300 diverse locations). After destinations are chosen, the app loads weather/activities/safety via an IO layer backed by DuckDB. DuckDB is the source of truth: data is read from there first, and on a miss the IO layer fetches it (API or scraper), stores it, then returns it.

Here's a flowchart demonstrating how the application works at a high level:

Holiday Inspiration App data flow diagram
Holiday Inspiration App high-level diagram.

For a real deployment I’d swap the in-container DuckDB file for a persistent database (e.g. Postgres) and add a TTL or scheduled refresh so cached API/scrape data doesn’t go stale. It works now because the cache starts empty after each cold start on Streamlit Community Cloud. A natural next step would be upgrading from context-stuffing to a proper retrieval-augmented generation (RAG) setup, which I'd like to explore but wasn't within the scope of this project. For more detail, take a look at the GitHub repo.

Note: The map feature will stop working when I turn off the GCP billing/API key one day.


Sports League Database

SQLPostgreSQLData ModellingDatabasesGDPR Compliance

Designed and implemented a local relational database for a fictional football league. It served as a good refresher on data modelling (I only had one module on this at uni; see Database Theory & Design).

Sports League Database ERD
Entity relationship diagram for the database.

The schema itself was standard 3NF OLTP stuff (the ERD covers it). What I found more interesting was learning about where integrity and compliance should live.

I included a mix of constraints and triggers into Postgres for data integrity, including some business logic rules (such as disallowing red carded players to later score in a match) that afterwards I learnt wouldn't live there in a production design (they'd be upstream).

I also added an audit log and a player anonymisation procedure. That was the bit that connected most clearly to how this kind of system would need to behave under GDPR: scrub PII on request, keep the keys so historical match stats still work, and retain a trail of what changed.


Tableau Dashboard

TableauData VisualisationReal Data

This one was fairly simple. I was allowed to pick the data, so I sourced real Airbnb listings from Inside Airbnb and enriched them slightly with house price data for context. The framing: "if someone were considering opening an Airbnb in London, this could give them a feel for the market."

Tableau Airbnb dashboard
Airbnb market overview dashboard built in Tableau.

This was the first BI dashboard I made, so there are clear limitations: some metrics aren't reliable (take the last viz with a large grain of salt), and using line thickness for sample size is a weak choice for non-technical audiences. That said, it was a useful learning exercise, particularly when presenting it live.