, I’m biologically required to endure the identical loop of small speak yearly: “It’s boiling, isn’t it? Method hotter than 2020,” or the traditional, “Again in my day, we truly had 4 seasons, not simply ‘Pre-Oven’ and ‘Deep Fryer.’”
Truthfully, I’m tempted to nod alongside and complain too, however I’ve the reminiscence of a goldfish and a mind that calls for chilly, laborious details earlier than becoming a member of a rant. Since I can’t keep in mind if final July was “sweaty” or “molten,” I’d like to have some precise information to again up my grumbling.
I work at icCube. It’s principally an expert sin for me to get right into a data-driven argument with out bringing enterprise-level tooling to a back-of-the-napkin debate.
On the subsequent apéro, when somebody begins reminiscing about how “1976 was the actual scorcher,” I shouldn’t simply be nodding politely whereas nursing my pastis. I must be whipping out a high-performance, pixel-perfect dashboard that visualizes their nostalgia proper into oblivion. If I can’t use multi-dimensional evaluation to show that our sweat glands are working tougher than they did within the seventies, then what am I even doing with my life?
Whereas this journey started as a quest to settle a neighborhood argument within the South of France, this publish goes past the local weather debate. It serves as a blueprint for a traditional information problem: the way to architect a high-performance analytical system able to making sense of a long time of historic information relevant to any area requiring historic vs. present benchmarking.
The Battle Plan
Right here is the plan mapping out our tactical strike towards imprecise nostalgia and anecdotal proof:
- Scouting the Intel: Searching down the uncooked numbers as a result of “it feels scorching” isn’t a metric, and we want the high-octane stuff.
- Constructing the Struggle Room: Architecting a construction sturdy sufficient to carry a long time of heatwaves with out breaking a sweat.
- The Analytical Sledgehammer: Deploying the heavy-duty logic required to show uncooked information into simple, nostalgia-incinerating proof.
- The Visible “I Advised You So”: Designing the pixel-perfect dashboard to finish any apéro argument in three seconds flat.
- Submit-Victory Lap: Now that we’ve conquered the local weather debate, what different home myths we could incinerate with information?
Scouting the Intel
Knowledge is central to our mission. Due to this fact, we have to safe correct, high-fidelity historic temperature information from France.
Méteo-France, the nationwide meteorological and climatological service, is a public institution of the State. It makes obtainable to all customers the info produced as a part of its public service missions in its public information portal: datagouv.fr. God bless public information portals. Whereas half the world’s information is locked behind paywalls and registration varieties that ask on your blood kind, France simply… fingers it over. Liberté, égalité, température.
The info used on this publish is made obtainable beneath the Open License 2.0.
The Observations
Climatological (each day/hourly) information from all metropolitan and abroad climate stations since their opening, for all obtainable parameters. The info have undergone climatological management: www.
The Climate Stations
Traits of meteorological climate stations in metropolitan France and abroad territories in operation: www.
Early Evaluation & Transformations
Being like Saint-Thomas, I prefer to see and overview a bit on my own the precise information to get first an excellent understanding and carry out a little bit of sanity checks earlier than drawing any conclusions in a while.
To maintain issues clear, I’ve been extracting uncooked temperature information from the pile of observations we have now. Being an unrepentant Java geek, I’ve constructed a group of lessons for this mission and tossed them right into a Github challenge. Be happy to tear by way of the code, re-use it as a lot as you want.
I’m not going to bore you with a dry lecture on the info proper now. That might be like serving a lukewarm rosé, completely prison, presumably unlawful in sure Provençal villages.
I’ll be diving into the gritty particulars when wanted.
Constructing the Struggle Room
If we’re going to settle these terrace debates as soon as and for all, we are able to’t simply flip up with a spreadsheet and a dream. We want an OLAP schema; a construction so sturdy it makes the native historic stone masonry look flimsy. We’re holding it lean for this particular battle, however belief me, it’s constructed to scale when the subsequent “mildest winter ever” argument inevitably breaks out.
Let’s break down the structure.
The Dimensions
- Stations: It lets us pinpoint the precise climate station within the France map as a result of saying “someplace within the South” gained’t reduce it. We want coordinates, names, the works.
- Time/Calendar: The standard suspects: years, months, days. Boring? Certain. Important for proving your neighbor’s reminiscence is rubbish? Completely. We’re tossing in Months and Days of Month to gas a calendar widget that can let me level at any particular date and say: “See? July 1st, 2025 was an absolute hellscape”. Precision is essential whenever you’re ruining somebody’s nostalgic buzz.
The Info (aka., Measures)
- Temperatures: The “Holy Trinity” of information factors—Common, Most, and Minimal. That is the first enter for our “Deep Fryer” versus “Pre-Oven” evaluation.
The complete schema definition is parked over within the GitHub challenge with the supply code, prepared for whenever you’re feeling notably vengeful.
The Dice
The ultimate outcome? A loaded schema containing greater than 500 million rows of French temperature information stretching again to 1780. Is it absolute overkill for an off-the-cuff chat over olives? After all it’s. That’s the purpose.
It provides us a playground to hack into different metrics in a while. However let’s save these for once we actually need to make folks remorse mentioning the climate within the first place.
The Analytical Sledgehammer
Time to construct the question that can shut down the subsequent apéro debate in three seconds flat.
To chop by way of the noise, I’m utilizing the MDX language: a question language particularly designed for this sort of multi-dimensional heavy lifting. To show that we’re certainly residing in a “Deep Fryer”, I’m going to check every day’s temperature towards a historic reference interval.
If you happen to don’t communicate MDX, skip to the gorgeous image. The question principally tells the info engine to seek out the common “regular” for this particular day over 30 years and subtract it from at present’s temperature.
First, the reference interval (aka., our regular baseline) is outlined as a static set utilizing the vary operator (e.g., 1991 – 2000):
with
static set [Period] as {
[Time].[Time].[Year].[1991] : [Time].[Time].[Year].[2020]
}
“Why 30 years?” As a result of that’s what climatologists and the World Meteorological Group determined counts as “regular” earlier than the planet began experimenting with new thermostat settings. It’s the gold normal for a “climatological regular”; lengthy sufficient to clean out the bizarre years, brief sufficient to nonetheless keep in mind what “regular” used to really feel like.”
The each day common temperature is outlined as the common of the utmost and minimal temperatures of the day. I’ve experimented with hourly averages; the outcomes are almost equivalent. So let’s keep on with this easy and nicely accepted definition:
with
[T_Avg_Daily] as
( [Measures].[Temperature (max.)] + [Measures].[Temperature (min.)] ) / 2
, FORMAT_STRING=".#"
Now, we have to know what the temperature ought to be. We calculate the common of these each day temperatures aggregated over our reference interval:
with
[T_Avg_Period] as
avg( [Period], [T_Avg_Daily] )
, FORMAT_STRING=".#"
Lastly, we calculate the distinction, measuring precisely how a lot hotter (or colder) it’s at present in comparison with my previous years. This delta worth places a exact quantity on our collective sweat:
with
[T_Avg_Diff] as
IIF( isEmpty( [T_Avg_Daily] ), null, [T_Avg_Daily] - [T_Avg_Period] )
Placing all collectively, right here is MDX question that compares the 2025 each day temperatures in Uzès towards the file:
with
static set [Period] as {
[Time].[Time].[Year].[1991] : [Time].[Time].[Year].[2020]
}
[T_Avg_Daily] as
( [Measures].[Temperature (max.)] + [Measures].[Temperature (min.)] ) / 2
, FORMAT_STRING=".#"
[T_Avg_Period] as
avg( [Period], [T_Avg_Daily] )
, FORMAT_STRING=".#"
[T_Avg_Diff] as
IIF( isEmpty( [T_Avg_Daily] ), null, [T_Avg_Daily] - [T_Avg_Period] )
choose
[Time].[Months].[Months] on 0
[Time].[Days of Months].[Days of Months] on 1
from [Observations]
the place [T_Avg_Diff]
filterby [Time].[Time].[Year].&[2025-01-01T00:00:00.000]
filterby [Station].[Station].[Name].&[30189001] -- Nîmes Courbessac
The attentive reader will discover I’ve swapped the native Uzès station for the Nîmes-Courbessac station. Why? As a result of I want that candy, candy historic information to gas my “again in my day” comparisons, and Nîmes merely has an extended reminiscence. It’s proper subsequent door, so the temperatures are just about equivalent although, if I’m being trustworthy, Nîmes often runs a bit hotter.
Within the subsequent part, I’ll present you the way to splash some colour on these values so you’ll be able to spot the heatwaves at a look.
The Visible “I Advised You So”
So it’s time to cease gazing uncooked code and truly construct a visible for that MDX outcome. My plan? Cram the whole 12 months right into a single 2D grid, as a result of taking a look at a scrollable checklist of 365 dates is a one-way ticket to a migraine.
The setup is easy: months throughout the horizontal axis, days of the month on the vertical. Every cell represents the temperature delta, that’s, the (Celsius levels) distinction between 2025 and our reference interval. To make it “idiot-proof” for the subsequent time I’m three pastis deep, I’ve utilized a warmth map: the warmer the day was in comparison with the previous, the redder the cell; the colder, the bluer.
Full disclosure: I’m not a “visible man.” My aesthetic choice often begins and ends with “does the question return in beneath 50 milliseconds?” However even with my lack of inventive aptitude, the info speaks for itself.

One look at this grid and it’s painfully clear: 2025 isn’t simply “a bit gentle.” It’s a sea of offended crimson that proves our reference interval belongs to a world that was considerably much less “pre-oven.” If this doesn’t shut down the “again in my day” crowd on the subsequent apéro, nothing will.
My Nostalgia Previous Years (1980-2000)
I’m recalibrating the baseline to match the years of my youth. By shifting the reference interval to these “glory days,” it seems my mind wasn’t exaggerating; the info confirms a transparent shift from the manageable summers of the previous to this new depth.

No marvel the lavender is confused.
#Days > 35
I began getting curious; was it simply my creativeness, or is the “oven” setting on this planet truly dashing up? I made a decision on a fast train: counting what number of days per 12 months the thermometer hits or cruises previous the 35°C mark.

To the shock of completely no person, the info confirms the “pre-oven” part is shrinking, and the “deep fryer” period is formally taking on.
2003: When Summer time Turned a Tragedy
There, within the information, a stark peak that towers above all others. The summer time of 2003. Fifteen thousand folks didn’t survive these relentless days above 35°C. In France alone. A nation that hadn’t understood how lethal warmth could possibly be. The chart doesn’t seize the empty chairs at dinner tables that autumn, the households endlessly modified, the belief that got here too late.
These charts don’t show international local weather change by itself; they merely show native lived actuality with rigor.
Submit-Victory Lap
And that’s the way you flip an informal sundown drink right into a data-driven interrogation.
We’ve formally unleashed the info and MDX to show that “it was once cooler” isn’t only a senior citizen grumbling after one too many Ricards; it’s a verifiable reality. Is bringing a multi-dimensional heatmap to a social gathering the quickest technique to lose mates and cease getting invited to apéros? In all probability. However is the silence that follows a superbly executed “I advised you so” price it? Each single time.
Knowledge gained’t cease the warmth however it’s going to hopefully cease the unhealthy arguments about it.
The “Mistral Insanity” Index
Now that the warmth is settled, I’m setting my sights on the legendary Mistral. In each village sq. from Valence to Marseille, there’s a sacred “Rule of three” that claims as soon as the Mistral begins, it should blow for 3, 6, or 9 days. It’s the sort of native numerology that folks defend with their lives.
I’m already prepping a brand new “Wind-Chill” schema to cross-reference hourly gust speeds with this calendar fantasy. I need to see if the wind truly cares about multiples of three, or if it’s simply our brains looking for patterns within the chaos whereas our shutters are rattling.
If you happen to’ve loved watching me over-engineer an answer to an informal dialog, observe my descent into analytical insanity over on Medium. We’re simply getting began.
