Portfolio

Flagship Projects

The work that best shows how I combine finance, data engineering and analytics.

An end to end Python pipeline that loads NHS England financial data into a MySQL star schema, with analytical views, key performance indicators and Power BI reporting across 206 trusts.

  • 206 NHS trusts across three financial years
  • Python to MySQL extract, transform and load pipeline
  • Analytical views and KPI metrics feeding Power BI
PythonMySQLETLPower BI

Explores sales, discounts and profitability by category, segment and region, then trains a logistic regression model to separate profitable orders from loss making ones.

  • Five fold cross validation scored with ROC AUC
  • Flask prediction endpoint, example client and Dockerfile
  • Performance figures still need independent validation
PythonScikit-learnFlaskDocker

Tests whether changes in NHS waiting lists come from treatment capacity or from the number of patients starting treatment pathways, using NHS England Referral to Treatment statistics.

  • Waiting list rose from about 4.4 million before COVID to about 7.5 million in 2024 to 2025
  • Waits over 52 weeks grew from under 2,000 to over 300,000
  • Python, MySQL, Databricks and Power BI used end to end
PythonMySQLDatabricksPower BI

Power BI & Data Visualisation

Dashboards and data models that turn public and financial data into decision-ready views.

Rebuilds the visa, asylum, settlement and citizenship journey as a Power BI data model, using Home Office statistics from the September 2025 release alongside Office for National Statistics economy data.

  • Built in Power BI project format, so the model is versioned and transparent
  • Tables renamed and cleaned to agreed naming conventions
  • Transformation of the remaining tables comes next
Power BIPBIP/TMDLPower Query

Interactive report on the QS World University Rankings 2025 to 2026, comparing institutions and countries on the published ranking measures.

  • Five report pages
  • 29 DAX measures
  • 592 universities across 73 countries
Power BIDAXPBIP

Python, Finance & Automation

Python workflows for financial data, applied machine learning, model deployment and automated reporting.

A modular data engineering project that gathers economic indicators and market prices from public sources into reproducible research datasets.

  • Extraction with yfinance and pandas datareader
  • Saved research datasets and exploratory notebooks
  • Forecasting and trading simulation are planned next phases
PythonAPIsPandasyfinance

Seven numbered modules that turn finance and business questions into prediction tasks, from regression and classification to decision trees and ensembles, finishing with a deployed model.

  • Churn model served by a Flask endpoint that returns a probability
  • Dockerfile and saved model included
  • Covers model evaluation and random forests
PythonScikit-learnFlaskDocker

SQL & Databases

MySQL data models, analytical SQL queries and Python integration.

Three modules from MySQL basics to stored programs on the ClassicModels sample database, run from Python so every query returns a clean pandas data frame.

  • Basics: joins, grouping, subqueries and set operations
  • Functions: aggregate, string, date, window and pattern matching
  • Advanced: procedures, loops, cursors, transactions and error handling
MySQLPythonJupyter

Collects public comments on two UK immigration videos through the YouTube Data API and stores them in MySQL, as the groundwork for sentiment analysis.

  • Up to 100 top level comments per video
  • Comment text and metadata kept in a local MySQL database
  • Airflow, sentiment models and Streamlit are planned
PythonMySQLYouTube API

Machine Learning

Prediction, classification and explainability work on business data.

Investigates how product features drive price, using a first case study of 53,940 diamonds, with a Streamlit app that estimates a price from quality grades and measurements.

  • Compares linear regression, decision tree and random forest models
  • Reported R squared of 0.98 for the tuned random forest
  • Results await a fully documented rerun
PythonScikit-learnXGBoostStreamlit

Explores how job title, experience, location and remote work relate to salary, comparing a PyTorch neural network with linear regression, random forest and XGBoost.

  • Cleaned and encoded datasets included
  • Compared on mean absolute error, root mean squared error and R squared
  • SHAP explanations are the stated next step
PythonPyTorchXGBoostSHAP

Frames lead conversion as a classification problem on the Kaggle leads dataset, with a plan for an interpretable logistic regression baseline and lead scoring bands.

  • Exploratory notebook in Jupyter and Marimo
  • Detailed scope of work document
  • Model evaluation and calibration are still to build
PythonScikit-learnMarimo

Profiles mobile shop customers and trains an XGBoost classifier to tell repeat phone buyers from first time customers, using demographics, price and Facebook engagement.

  • Predicts whether a customer has bought a phone before
  • Saved model, accuracy and ROC AUC reporting
  • Streamlit interface is a demonstration, not yet linked to the model
PythonXGBoostStreamlit

AI & LLM Applications

Retrieval, agents and automation built on large language models.

A retrieval agent built step by step, from keyword search over FAQ data to a reusable retrieval augmented generation pipeline and an agent loop with function calling.

  • Seven notebooks, from keyword search to a typed agent framework comparison
  • SQLite search index and a reusable pipeline class
  • Started on the DataTalks.Club LLM Zoomcamp
PythonRAGTool Calling

Streamlit dashboard that retrieves headlines and articles from NewsAPI, with category and keyword search and interactive charts.

  • Command line script plus a larger Streamlit application
  • Handles missing credentials and failed requests
  • Scheduling and AI summaries are planned
PythonStreamlitNews API

Flask web app that reads an uploaded PDF and answers questions about it, using LangChain, OpenAI and a FAISS vector index for semantic search.

  • PDF text extraction with PyPDF2
  • FAISS index for similarity search
  • Separate pages for upload, questions and results
LangChainFAISSFlaskPython

Gmail agent that fetches messages, sorts them into categories with a rule based classifier and drafts replies, using OpenAI or a built in fallback.

  • Fetcher, classifier, reply generator and orchestrator loop working
  • Command line flags for configuration
  • Sign in script, tests and automatic sending are still on the roadmap
AI AgentPythonGmail API

Docker Compose set up for an agent that talks to a locally running Ollama server, so language models run on your own machine.

  • Configurable Ollama address in Docker Compose
  • Setup and management shell scripts
  • Contributing and troubleshooting guides
Local LLMOllamaDocker

Get In Touch

Let's Build Better Analytics Together

Interested in discussing Finance Analytics, Data Engineering, Power BI implementation, or Python-based financial solutions? I'm based in the UK and available for immediate engagement.

Start a Conversation