Extreme Temperature Events
A curated set of 62 historical extreme-weather events spanning 1899 to 2023, selected for power system studies. Unlike the other sources — which are continuous archives you slice by date — these are named events with a story: Winter Storm Uri, the 2023 Texas Heat Dome, the Great Arctic Outbreak of 1899.
Every event has weather data (.pww) and an animation (.mp4) showing the
event developing.
How events were selected
For each ISO zone: the three hottest and three coldest events on record, plus additional notable scenarios where they matter — for example ERCOT’s February 2011 rolling outages, which is an operational event rather than a temperature record.
Zone |
Events |
Hot |
Cold |
Range |
|---|---|---|---|---|
|
6 |
3 |
3 |
1942–2023 |
|
8 |
5 |
3 |
1962–2023 |
|
6 |
3 |
3 |
1982–2011 |
|
8 |
5 |
3 |
1954–2021 |
|
6 |
3 |
3 |
1980–2012 |
|
7 |
4 |
3 |
1954–2011 |
|
6 |
3 |
3 |
1952–1989 |
|
6 |
3 |
3 |
1963–2022 |
|
8 |
4 |
4 |
1954–2023 |
|
1 |
0 |
1 |
1899 |
NorthAmerica holds the Great Arctic Outbreak of 1899, which was
continent-wide rather than confined to one zone.
Important
Events are selected per zone, so one weather system can appear several times. 11 of the 62 do. Each copy is cropped and named for its own zone, and the date reflects when the system reached that zone — so the same event can carry different dates:
1983-12-23 North American Cold Wave SPP, Texas
1983-12-24 North American Cold Wave MISO, PJM, Southeast
Two entries, one storm, a day apart as it moved east. Match on title and approximate date rather than exact date if you are deduplicating across zones.
Finding an event
from TeamOverbyeWeather import WeatherClient
client = WeatherClient()
client.extreme.zones()
['CAISO', 'MISO', 'NYISO_ISONE', 'NorthAmerica', 'Northwest',
'PJM', 'SPP', 'Southeast', 'Southwest', 'Texas']
for event in client.extreme.events("Texas"):
print(event["date"], event["title"])
2023-06-25 Texas Heat Dome
2021-02-14 Winter Storm Uri
2011-08-01 Texas Drought and Heat
2011-02-01 ERCOT Rolling Outages
1989-12-22 Cold Wave
1983-12-23 North American Cold Wave
1980-07-14 US Heat Wave
1954-07-13 Central US Heat Wave
Search by title when you know the name but not the zone:
client.extreme.find("uri")
[{'key': '2021-02-14_Winter_Storm_Uri_Texas', 'date': '2021-02-14',
'title': 'Winter Storm Uri', 'zone': 'Texas', 'has_video': True}]
Event keys
Each event is identified by a key carrying its date, title and zone:
2021-02-14_Winter_Storm_Uri_Texas
^^^^^^^^^^ ^^^^^^^^^^^^^^^^ ^^^^^
date title zone
Pass keys straight from events() or find() rather than typing them.
Downloading event data
Same arguments as every other source — region and time cropping both apply:
event = client.extreme.find("uri")[0]
path = client.extreme.download(
event["key"],
region_ids=["TX"],
region_layer="states",
dest="./data",
)[0]
extreme_events_2021-02-14_Winter_Storm_Uri_Texas_TX.pww 168 steps
168 hourly steps — the event covers a week. Narrow it to the worst of the crisis:
path = client.extreme.download(
event["key"],
region_ids=["TX"], region_layer="states",
time_start="2021-02-15T00:00",
time_end="2021-02-15T12:00",
dest="./data",
)[0]
..._TX_T20210215H0000to20210215H1200.pww 13 steps
The unified call works too, if you prefer one entry point:
client.download("extreme", dates=event["key"], region="TX", dest="./data")
Several events at once
keys = [e["key"] for e in client.extreme.events("Texas")]
paths = client.extreme.download(keys, region_ids=["TX"], region_layer="states",
dest="./data")
One file per event, as everywhere else in this package.
Animations
Each event has an MP4 showing the event unfolding — typically 20–30 MB.
client.extreme.video(event["key"], dest="./data")
data/2021-02-14_Winter_Storm_Uri_Texas.mp4
These are also what the web portal plays inline in the event gallery. The server honours HTTP range requests, so a browser fetches only the part it plays rather than the whole file on each seek.
Coverage maps
Each zone has a PNG showing its geographic extent:
client.extreme.coverage("Texas", dest="./data")
data/coverage_Texas.png
Useful for figures, and for checking a zone covers what you assume before cropping to it.
Reading the data
Identical to every other .pww — see Working with PWW Files:
from TeamOverbyeWeather import pww_io
header, stations, arr = pww_io.read_pww(open(path, "rb").read())
print(arr.shape) # (time, variable, latitude, longitude)
A worked example
Every Texas cold event, cropped to ERCOT, ready for a resilience study:
from TeamOverbyeWeather import WeatherClient
client = WeatherClient()
cold = [e for e in client.extreme.events("Texas")
if any(w in e["title"].lower() for w in ("cold", "winter", "freeze"))]
for event in cold:
print(event["date"], event["title"])
client.extreme.download(event["key"], region_ids=["ERCOT"],
region_layer="iso", dest="./cold_events")
client.extreme.video(event["key"], dest="./cold_events")
2021-02-14 Winter Storm Uri
1989-12-22 Cold Wave
1983-12-23 North American Cold Wave
REST API
For non-Python callers:
Path |
Purpose |
|---|---|
|
|
|
event data |
|
cropped event data |
|
animation, supports range requests |
|
zone coverage map |
See REST API.