Notebooks · Apps · Papers

Notebooks, apps and papers, explained.

A portfolio of data projects you can explore, run and inspect. Each project states the question it asks, how it was approached, what it found, and its limitations.

How it works

  1. Explore

    Browse projects, each with its question, approach, result and limitations.

  2. Interact

    Run marimo notebooks and Streamlit apps in your browser, or read Quarto articles and PDF papers.

  3. Inspect

    Every project links to its source code and notes on its data.

Sales Trends Explorer

An interactive marimo notebook that explores trend and seasonality in sales.

  • marimo
  • time series
  • pandas
Question
How do trend, seasonality and noise combine to shape a monthly sales series?
Approach
Generate a synthetic series and adjust trend, seasonal amplitude and noise with sliders.
Result
With the default settings, average sales peak in April and bottom out in October.
Data notes
Synthetic data generated in the notebook; no real data. Runs in the browser via /wasm.

Customer Segments App

A Streamlit app that clusters customers and lets you inspect each segment.

  • Streamlit
  • clustering
  • scikit-learn
Question
Can customers be grouped into distinct segments by spend, visits and basket size?
Approach
K-means clustering on standardised features, with the number of segments and customers adjustable in the app.
Result
With k = 3 the app recovers three distinct, similar-sized groups: high spenders, frequent visitors and low-spend shoppers.
Data notes
Synthetic data generated in the app, with no personal information. Well-separated groups make this easier than real data.

Forecasting Walkthrough

A marimo notebook that compares simple baseline forecasts with a trend-plus-seasonality model.

  • marimo
  • forecasting
  • WebAssembly
Question
How much does a trend-plus-seasonality model improve on simple baselines?
Approach
Backtest naive, seasonal-naive and trend-plus-seasonality models on a held-out period, scored by mean absolute error (MAE).
Result
With the default settings, the trend-plus-seasonality model has an MAE of 5.4, against 14.5 for seasonal naive and 21.1 for naive.
Data notes
Synthetic data generated in the notebook, so results will differ on real series. Runs in the browser via /wasm.

See all projects →