Methodology
Data
Daily weather observations for Melbourne (-37.8136, 144.9631) from 1981-2025, totalling 16,436 days.
The primary data source is the Open-Meteo Historical Weather API, which provides ERA5 reanalysis data. ERA5 is produced by the European Centre for Medium-Range Weather Forecasts (ECMWF) and combines weather station observations with atmospheric modelling to produce a globally consistent dataset at ~30km resolution.
The pipeline also supports NASA POWER (MERRA-2 reanalysis, 1981-present) as an alternative source. NASA POWER provides temperature, precipitation, humidity, wind, and solar radiation. Variables not directly available from NASA POWER (apparent temperature, sunshine hours) are computed using standard formulas - the BOM apparent temperature formula and astronomical daylight calculations.
Variables Used in Analysis
Annual Profile
Each day-of-year (1-366) is averaged across all 44 years to produce a single "typical year" climate profile. This collapses decades of variability into the underlying annual cycle. The profiles are then smoothed with a Savitzky-Golay filter (window=15, polynomial order=3) with circular padding to handle the year-end wraparound.
Changepoint Detection
The annual profile is standardised (zero mean, unit variance per variable) and then analysed with kernel changepoint detection using a radial basis function (RBF) kernel, implemented via the Ruptures library. This finds the points in the year where the multivariate climate signal changes most abruptly.
For a given target number of seasons K, the algorithm uses dynamic programming to find the optimal set of breakpoints that minimise within-segment variance. A minimum segment size of 15 days prevents trivially short seasons.
Crucially, the detection is circular - seasons can wrap across the December/January boundary. A naive linear approach would force a season break at January 1, artificially splitting summer. Instead, the algorithm tests multiple rotations of the annual profile (shifting the starting point around the year), runs changepoint detection on each rotation, and selects the rotation with the lowest total cost. This finds K natural season boundaries anywhere in the year, allowing seasons like Melbourne's summer to span December through February as a single season.
Selecting the Number of Seasons
The analysis is run for K = 2 through 12. Each result is scored using the Bayesian Information Criterion (BIC), which balances goodness of fit against model complexity:
The cost term measures within-segment variance (lower = better fit). The penalty term grows with K, discouraging unnecessary complexity. The K that minimises BIC is selected as the statistically optimal number of seasons.
With the real ERA5 data, the optimal breakdown is 7 seasons. The explorer lets you override this and view any K from 2 to 12, so you can see how the seasons merge or split as granularity changes.
Season Naming
Each season is given an evocative one-word noun as its name, using a cosine-similarity approach inspired by word embeddings. A vocabulary of 27 candidate nouns (e.g. Furnace, Ember, Gloom, Thaw, Dawn) is defined, each with a hand-crafted "climate archetype" - a vector of weights across temperature, rainfall, sunshine, wind, humidity, solar radiation, and daylight.
Each season's climate fingerprint is normalised to z-scores across all seasons, then compared to every word archetype via cosine similarity. A greedy unique-assignment algorithm picks the best-matching word for each season, ensuring no two seasons share a name.
Limitations
- The analysis uses ERA5 reanalysis data, not raw station observations. Reanalysis fills gaps and corrects biases using atmospheric models, but may smooth some local effects (e.g. the urban heat island).
- Climate change means the "typical year" is a moving target. The 44-year average blends warmer recent decades with cooler earlier ones. A future version could weight recent years more heavily or show how seasons have shifted over time.
- Changepoints are detected on the smoothed annual profile, not on raw daily data. This finds broad seasonal transitions but not short-lived weather patterns like individual cold snaps or heat waves.
- The season names are heuristic and subjective - the word archetypes reflect the author's judgement about what each word evokes climatically.
- Two variables from the original dataset (precipitation hours and dewpoint) were excluded from the clustering because they are highly correlated with other included variables.