New York ACTUALLY HAS 12 SEASONS
Loading...
- Winter
- Fool's Spring
- Second Winter
- Spring of Deception
- Third Winter
- The Pollening
- Actual Spring
- Summer
- Hell's Front Porch
- False Fall
- Second Summer
- Actual Fall
About this page...
This web page is based on this meme.

And, while the meme is simple, this web page is... not. It may even be a little over-engineered.
How this Works
My goal with this page to capture, not the astrological or meterological season of New York, but the experiential season of the New Yorker. A creature who lives their lives outside of the traditional American comforts of climate-controlled cars.
For example, if it's a hot in late astrological Winter, the New Yorker's brain knows it's not spring, but is fooled into thinking they can wear a light jacket. Only to be sorely corrected by the city later that night.
This is the New Yorker experiencing Fool's Spring.
Therefore, this web-page updates dynamically based on the day of the year, the hour of the day, and the real-time temperature in NYC.
It uses both live and 53 years of historical data from OpenWeatherMap.org.
Methodology
To start, I mapped the meme's seasons to a two-dimensional grid of astrological sub-season and the relative temperature of that season.
This part is more feeling than science.
Winter
Early | Mid | Late | |
---|---|---|---|
Cold | Winter | Second Winter |
|
Mid | |||
Warm | Fools Spring |
Spring
Early | Mid | Late | |
---|---|---|---|
Cold | Third Winter | ||
Mid | Spring of Deception |
Actual Spring | |
Warm | The Pollening |
Summer
Early | Mid | Late | |
---|---|---|---|
Cold | Summer | False Fall | |
Mid | |||
Warm | Hell's Front Porch |
Fall
Early | Mid | Late | |
---|---|---|---|
Cold | Winter | ||
Mid | Actual Fall | ||
Warm | Second Summer |
Next, I needed to define these axes.
Sub-Seasons
For the early, mid, and late I divided the seasons by into three roughly equal segments using their astrological definitions.
Span | Start | End | |
---|---|---|---|
Winter | Early | Dec 21 | Jan 20 |
Mid | Jan 20 | Feb 19 | |
Late | Feb 19 | Mar 20 | |
Spring | Early | Mar 20 | Apr 19 |
Mid | Apr 19 | May 19 | |
Late | May 22 | Jun 21 | |
Summer | Early | Jun 21 | Jul 21 |
Mid | Jul 21 | Aug 22 | |
Late | Aug 22 | Sep 22 | |
Fall | Early | Sep 22 | Oct 22 |
Mid | Oct 22 | Nov 21 | |
Late | Nov 21 | Dec 21 |
Ranges are inclusive start and exclusive end.
Historical Temperature Distributions
Next, I built a baseline for NYC weather by day of year and hour of day. I pulled hourly temperature data for NYC from Jan 1 1979 to Jan 1 2023 and computed a median and standard deviation for every hour of every day of the year.
If you're interested in exploring this data, it's available in the repo here.
import pandas as pd weather_df = pd.read_csv("nyc_weather.csv") weather_df["dt_datetime"] = pd.to_datetime(weather_df.dt_iso.str.replace(" UTC", "")) weather_df["day_hour"] = weather_df.dt_datetime.dt.strftime("%j-%H") weather_df = weather_df.groupby(by="day_hour").aggregate({"feels_like": ["mean", "std"]}) hour_temps_df = df.groupby(by="day_hour").aggregate({"feels_like": ["mean", "std"]})["feels_like"] import json hour_temps_json = json.dumps(hour_temps_df.to_dict("index"))
From here, we say that a "hot" day is anything that is 1.5 standard deviations above the mean and a "cold" day is anything that is 1.5 standard deviations below the mean.
Now that we have a baseline for what is "normal" we can dynamically compare the current temperature our baseline and decide if it's hot out by calling OpenWeatherMap.org every time the page loads. We use Time Square for our live temperature reading and compare it to our historical distribution.
Deciding the Season
Using these features we update the arrow using the above logic. If it's late Winter, and we're 1.5 stddevs above the average for this day and hour, we're in 'Fool's Spring'. An explainer to the data we used to make this decision is appended below the header.
This page was made by Devon Peticolas. If you'd like to see the source, fork, or suggest a change please check out it's repo on github.