Work
Projects you can open, read, and run. Each one states the problem, the data, the method, and what it shows, with the code and sample files to download.
Healthcare projects use synthetic data built to behave like the real thing: weekly cycles, seasonal pressure, messy codes. No patient or organisational data appears anywhere on this site.
Healthcare BI
Operational and clinical reporting, forecasting, and decision support with governance in mind.
-
Emergency department demand forecasting
Daily attendance forecasts 28 days ahead from three models and an average, scored with a rolling-origin backtest across 2025 and given 80% intervals built from past errors.
- Python
- pandas
- statsmodels
- scikit-learn
- NumPy
-
Bed occupancy simulation
A discrete-event simulation of 120 acute medical beds on synthetic data, run for 200 simulated years per scenario to test earlier discharges, weekend discharging and 5% more demand.
- Python
- NumPy
- pandas
- statsmodels
-
Appointment reminder experiment
A four-arm randomised trial of text reminders on synthetic outpatient appointments, sized from pre-trial data before any outcome existed, and analysed with patient-clustered intervals, intention to treat and cautious subgroups.
- Python
- statsmodels
- pandas
- NumPy
- SciPy
-
Swansea and Neath Port Talbot boundary map
An interactive LSOA and MSOA map built from ONS Open Geography, with a fetch script that refuses truncated or failed downloads.
- Python
- ArcGIS REST
- GeoJSON
- Leaflet
- OpenStreetMap
Analytics engineering
SQL models, metric definitions, and pipelines that make dashboards reliable instead of fragile.
-
Outpatient analytics pipeline
A dbt-style SQL pipeline on SQLite that turns a messy outpatient extract into tested marts, with data tests that catch the planted problems and every rate defined once in YAML.
- SQL
- SQLite
- Python
- pandas
- PyYAML
-
SPC toolkit, a small Python package
XmR and p-chart limits, the four special-cause rules and funnel plot limits with overdispersion adjustment, packaged as typed, pure functions with 471 test cases and installable from a zip.
- Python
- NumPy
- pandas
- pytest
- uv
Power BI & Fabric
Semantic models, DAX, performance, and reporting design for people who need to act.
-
Referral-to-treatment waiting list semantic model
A Power BI semantic model written in TMDL for RTT waiting list reporting, with a weekly snapshot fact, a pathway fact, 18 DAX measures and the same KPIs reproduced in pandas on synthetic data.
- Power BI
- TMDL
- DAX
- Power Query M
- Python
-
Theatre utilisation semantic model
A Power BI semantic model in TMDL for operating theatre utilisation across three sites, with a time intelligence calculation group, dynamic format strings, a field parameter and row-level security, on synthetic data.
- Power BI
- TMDL
- DAX
- Power Query M
- Python
Applied AI
Workflows and tools that use AI where it helps, with clear limits, auditability, and human review.
-
30-day readmission risk model
A readmission risk score for a discharge team that can only call so many patients, tested on a time split for calibration, subgroup performance and a planted data leak.
- Python
- scikit-learn
- statsmodels
- pandas
- NumPy
-
Content gate: LLM review with code-owned verdicts
A build-time tool that asks a model typed questions about 40 archive documents, then lets plain Python decide what moves to this site and what needs a human look.
- Python
- TypeSafe SDK
- pytest
- uv
-
Referral triage text classifier
A TF-IDF and logistic regression baseline that routes synthetic GP referral letters by specialty and urgency, with a human-review threshold, calibration checks and error analysis. It's the bar an LLM would have to beat.
- Python
- scikit-learn
- pandas
- statsmodels
- NumPy