Canadian metro observed-weather demand panel (daily)
Daily observed-weather demand panel for the 5 Canadian metros of the 20-metro family (Toronto, Montreal, Vancouver, Calgary, Ottawa) from ECCC MSC GeoMet climate-daily, fetched keyless: the trailing 365 days of observed TMAX/TMIN, precipitation, snowfall and snow depth at the metro airport station, and the 10-year (2016-2025) day-of-year climatology baseline from the same collection. Per (date, metro): daily mean temperature, HDD18/CDD18 degree-days, temperature and precipitation anomaly z-scores versus a 10-year (2016-2025) day-of-year climatology, heat-wave / cold-snap / heavy-rain / snow-day flags, a pleasant-day flag, and a documented 0-100 weather-demand score with per-day cross-metro rank — high means pleasant foot-traffic/shopping weather. Same ICAO metro keys as the US sibling metro_weather_demand_intel (no key collisions), so the two panels stack into one 20-metro North America panel; same formulas throughout. One deliberate schema difference: ECCC climate-daily publishes daily maximum gust only (no mean-wind column), so the CA panel omits awnd_ms/high_wind_flag and the score's wind penalty is 0 by construction. ECCC data is under the ECCC Data Services End-use Licence v2.1.1 (commercial reuse allowed, attribution required). Who joins this: an online shop or subscription business joins (date, icao) to daily orders/signups to model weather-driven demand in Canada; a sales team joins it to territory-day activity.
- Rows
- 1,825
- Columns
- 30
- Source cadence
- Daily
- Last refreshed
- Oct 1, 2026
- Theme
- environment
| Column | Type | Description |
|---|---|---|
| date | string | Calendar date of the observation day (station local day), ISO date. Primary join key with icao; stacks 1:1 with the US sibling metro_weather_demand_intel. (unit: ISO date) |
| metro | string | Metro name, shared with the metro_degree_days / metro_daylight_intel / metro_thermal_demand_intel family for 1:1 joins. (unit: name) |
| state_prov | string | Canadian province containing the metro (airport station). (unit: name) |
| country_code | string | ISO alpha-3 country code (CAN for every row). (unit: ISO 3166-1 alpha-3) |
| icao | string | Metro airport ICAO code (CYYZ, CYUL, CYVR, CYYC, CYOW): the stable metro key shared with the sibling weather datasets. Primary join key with date. (unit: code) |
| lat | float | Airport station latitude, decimal degrees. (unit: decimal degrees) |
| lon | float | Airport station longitude, decimal degrees. (unit: decimal degrees) |
| tz_name | string | IANA timezone of the metro. (unit: IANA name) |
| tmax_c | float | Observed daily maximum temperature (ECCC MAX_TEMPERATURE, degC). Null where the station did not report; never zero-filled. (unit: degC) |
| tmin_c | float | Observed daily minimum temperature (ECCC MIN_TEMPERATURE, degC). Null where the station did not report. (unit: degC) |
| tmean_c | float | Daily mean temperature as (TMAX+TMIN)/2. Null when either is null. (unit: degC) |
| prcp_mm | float | Observed daily precipitation (ECCC TOTAL_PRECIPITATION, mm). Null where the station did not report. (unit: mm) |
| snow_mm | float | Observed daily snowfall (ECCC TOTAL_SNOW, cm -> mm). Null where not reported. (unit: mm) |
| snow_depth_mm | float | Observed snow on ground (ECCC SNOW_ON_GROUND, cm -> mm). Null where not reported. (unit: mm) |
| hdd18_c | float | Heating degree-days, base 18 degC: max(0, 18 - tmean_c). Null when tmean_c is null. Base 18 matches the ECCC convention. (unit: degree-days (degC)) |
| cdd18_c | float | Cooling degree-days, base 18 degC: max(0, tmean_c - 18). Null when tmean_c is null. (unit: degree-days (degC)) |
| tmax_anom_z | float | TMAX anomaly z-score versus the station's 10-year (2016-2025) day-of-year climatology: (tmax - clim_mean)/max(clim_std, 0.5). Null when the climatology cell has < 7 baseline years or tmax is null. (unit: z-score) |
| tmin_anom_z | float | TMIN anomaly z-score versus the 10-year day-of-year climatology (std floor 0.5 degC). Null when the climatology cell has < 7 baseline years or tmin is null. (unit: z-score) |
| tavg_anom_z | float | TAVG=(TMAX+TMIN)/2 anomaly z-score versus the 10-year day-of-year climatology (std floor 0.5 degC). (unit: z-score) |
| prcp_anom_z | float | Precipitation anomaly z-score versus the 10-year day-of-year climatology: (prcp - clim_mean)/max(clim_std, 2.0 mm). (unit: z-score) |
| heat_wave_flag | integer | 1 on days inside a run of >= 3 consecutive calendar days with tmax_c >= 35.0, else 0. Same threshold as the US sibling for comparability (rare in Canada by design). Runs are computed on the station's full fetched history so window edges cannot split a run. (unit: 0/1 flag) |
| cold_snap_flag | integer | 1 on days inside a run of >= 2 consecutive calendar days with tmin_c <= -12.0, else 0. (unit: 0/1 flag) |
| heavy_rain_flag | integer | 1 when prcp_mm >= 25.0, else 0 (null when prcp null). (unit: 0/1 flag) |
| snow_day_flag | integer | 1 when snow_mm >= 25.0 (one inch), else 0 (null when snow null). (unit: 0/1 flag) |
| pleasant_day_flag | integer | 1 when 15 <= tmean_c <= 26 and prcp_mm < 1.0 and tmax_c < 32.0 and tmin_c > 5.0, else 0 (null when any input null). (unit: 0/1 flag) |
| weather_demand_score | float | Documented 0-100 pleasant-weather proxy: 100 minus min(45, 2.2*|tmean_c - 21|) for temperature distance from the 21 degC ideal, minus min(30, 1.2*prcp_mm) for rain, minus 15/15/10/10 for heat-wave / cold-snap / heavy-rain / snow-day days (floored at 0). High = pleasant foot-traffic/shopping weather. Null when tmean_c is null. The US sibling's wind penalty is absent: ECCC climate-daily has no mean-wind column, so the wind term is 0 by construction. (unit: 0-100 score) |
| weather_demand_rank | integer | Per-date dense rank of weather_demand_score across the 5 metros, 1 = best weather that day. Null when the score is null. (unit: dense rank) |
| as_of | string | Latest observation date in the fetched panel (ISO date): the latest date on which >= 4 stations reported. Identical on every row and across runs on the same vintage, so a re-fetch of unchanged data produces a byte-identical panel and the ingest is a no-op. (unit: ISO date) |
| source_station | string | ECCC climate identifier behind the row's observations. (unit: code) |
| row_hash | string | Deterministic 16-hex id: sha256('WXDEMAND|<icao>|<date>') — same scheme as the US sibling, collision-free across the two panels because the ICAO keys do not overlap. (unit: hex) |
First 10 sample rows — a preview, not the complete dataset.
| date | metro | state_prov | country_code | icao | lat | lon | tz_name | tmax_c | tmin_c | tmean_c | prcp_mm | snow_mm | snow_depth_mm | hdd18_c | cdd18_c | tmax_anom_z | tmin_anom_z | tavg_anom_z | prcp_anom_z | heat_wave_flag | cold_snap_flag | heavy_rain_flag | snow_day_flag | pleasant_day_flag | weather_demand_score | weather_demand_rank | as_of | source_station | row_hash |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 2025-10-02 | Ottawa | Ontario | CAN | CYOW | 45.317 | -75.667 | America/Toronto | 18.6 | 2.4 | 10.5 | 0 | 0 | — | 7.5 | 0 | 0.56 | -0.81 | -0.14 | -0.75 | 0 | 0 | 0 | 0 | 0 | 76.9 | 4 | 2026-10-01 | 6106001 | c93577ac818596ed |
| 2025-10-02 | Montreal | Quebec | CAN | CYUL | 45.47 | -73.74 | America/Toronto | 18.7 | 3.9 | 11.3 | 0 | — | — | 6.7 | 0 | 0.65 | -1.22 | -0.29 | -0.78 | 0 | 0 | 0 | 0 | 0 | 78.66 | 3 | 2026-10-01 | 702S006 | a80a3724d3f9e6d4 |
| 2025-10-02 | Vancouver | British Columbia | CAN | CYVR | 49.195 | -123.184 | America/Vancouver | 17.6 | 11 | 14.3 | 10.3 | 0 | — | 3.7 | 0 | 0.67 | — | — | 2.01 | 0 | 0 | 0 | 0 | 0 | 72.9 | 5 | 2026-10-01 | 1108395 | cb5d481098145100 |
| 2025-10-02 | Calgary | Alberta | CAN | CYYC | 51.123 | -114.013 | America/Edmonton | 17.9 | 8.4 | 13.1 | 0 | 0 | — | 4.9 | 0 | 0.59 | 1.79 | 1.06 | -0.37 | 0 | 0 | 0 | 0 | 0 | 82.73 | 2 | 2026-10-01 | 3031092 | c8aaa425d5f5ae87 |
| 2025-10-02 | Toronto | Ontario | CAN | CYYZ | 43.677 | -79.631 | America/Toronto | 18.8 | 9.5 | 14.2 | 0 | 0 | — | 3.8 | 0 | -0.13 | -0.13 | -0.14 | -0.63 | 0 | 0 | 0 | 0 | 0 | 84.93 | 1 | 2026-10-01 | 6158731 | 15afe33f36ae65ce |
| 2025-10-03 | Ottawa | Ontario | CAN | CYOW | 45.317 | -75.667 | America/Toronto | 25.4 | 4.3 | 14.8 | 0 | 0 | — | 3.2 | 0 | 1.08 | -0.51 | 0.53 | -0.35 | 0 | 0 | 0 | 0 | 0 | 86.47 | 3 | 2026-10-01 | 6106001 | 0fda981c0364ae39 |
| 2025-10-03 | Montreal | Quebec | CAN | CYUL | 45.47 | -73.74 | America/Toronto | 22.4 | 8.3 | 15.3 | 0 | — | — | 2.7 | 0 | — | — | — | — | 0 | 0 | 0 | 0 | 1 | 87.57 | 2 | 2026-10-01 | 702S006 | 34ef582a8d9b0b4b |
| 2025-10-03 | Vancouver | British Columbia | CAN | CYVR | 49.195 | -123.184 | America/Vancouver | 15.7 | 8 | 11.8 | 0 | 0 | — | 6.2 | 0 | -0.05 | 0.32 | 0.16 | -0.13 | 0 | 0 | 0 | 0 | 0 | 79.87 | 5 | 2026-10-01 | 1108395 | 47d1982b10ef5e9c |
| 2025-10-03 | Calgary | Alberta | CAN | CYYC | 51.123 | -114.013 | America/Edmonton | 18.5 | 6.8 | 12.7 | 0 | 0 | — | 5.3 | 0 | 0.6 | 1.19 | 0.87 | -0.04 | 0 | 0 | 0 | 0 | 0 | 81.63 | 4 | 2026-10-01 | 3031092 | b536685309b7750c |
| 2025-10-03 | Toronto | Ontario | CAN | CYYZ | 43.677 | -79.631 | America/Toronto | 24.3 | 8.9 | 16.6 | 0 | 0 | — | 1.4 | 0 | 0.83 | -0.18 | 0.44 | -0.45 | 0 | 0 | 0 | 0 | 1 | 90.32 | 1 | 2026-10-01 | 6158731 | 829479e55f9e89b5 |
Profiled Oct 2, 2026 from snapshot 20261001T235646Z-7437a91d70dd
Measured- Completeness
- 95%
- Rows
- 1,825
- Columns
- 30
- Columns with gaps
- 10
| Column | Missing | Distinct | Range | Distribution |
|---|---|---|---|---|
| datevarchar | 0% | 575 | — |
|
| metrovarchar | 0% | 5 | — |
|
| state_provvarchar | 0% | 3 | — |
|
| country_codevarchar | 0% | 1 | — |
|
| icaovarchar | 0% | 4 | — |
|
| latdouble | 0% | 5 | 43.68 → 51.12median 45.47 | |
| londouble | 0% | 5 | -123.18 → -73.74median -79.63 | |
| tz_namevarchar | 0% | 3 | — |
|
| tmax_cdouble | 2.5% | 434 | -22.1 → 36.8median 13.3 | 36 outside 1st–99th percentile |
| tmin_cdouble | 2.5% | 519 | -28 → 24median 4.6 | 36 outside 1st–99th percentile |
| tmean_cdouble | 2.5% | 491 | -24.4 → 30median 8.8 | 35 outside 1st–99th percentile |
| prcp_mmdouble | 0.77% | 198 | 0 → 118.4median 0 | 19 outside 1st–99th percentile |
| snow_mmdouble | 20.4% | 57 | 0 → 462median 0 | 14 outside 1st–99th percentile |
| snow_depth_mmdouble | 71.6% | 57 | 0 → 560median 80 | 6 outside 1st–99th percentile |
| hdd18_cdouble | 0% | 355 | 0 → 42.4median 8.9 | 18 outside 1st–99th percentile |
| cdd18_cdouble | 0% | 82 | 0 → 12median 0 | 19 outside 1st–99th percentile |
| tmax_anom_zdouble | 13.7% | 486 | -4.16 → 5.65median -0.14 | 32 outside 1st–99th percentile |
| tmin_anom_zdouble | 14% | 472 | -4.89 → 4.78median -0.05 | 32 outside 1st–99th percentile |
| tavg_anom_zdouble | 15.1% | 479 | -4.13 → 4.19median -0.1 | 31 outside 1st–99th percentile |
| prcp_anom_zdouble | 6.9% | 392 | -1.23 → 21.51median -0.35 | 33 outside 1st–99th percentile |
| heat_wave_flagbigint | 0% | 1 | 0 → 0median 0 | |
| cold_snap_flagbigint | 0% | 2 | 0 → 1median 0 | |
| heavy_rain_flagbigint | 0% | 2 | 0 → 1median 0 | |
| snow_day_flagbigint | 0% | 2 | 0 → 1median 0 | |
| pleasant_day_flagbigint | 0% | 2 | 0 → 1median 0 | |
| weather_demand_scoredouble | 0% | 964 | 8.64 → 100median 68.86 | 31 outside 1st–99th percentile |
| weather_demand_rankbigint | 0% | 5 | 1 → 5median 3 | |
| as_ofvarchar | 0% | 1 | — |
|
| source_stationvarchar | 0% | 5 | — |
|
| row_hashvarchar | 0% | 1,968 | — |
|
- Current
20261001T235646Z-7437a91d70dd · sha256 7437a91d70dd…
1,825 rows · first snapshot
Point any LLM at the metadata endpoint — the documentation above is machine-readable too (JSON-LD + Croissant).
curl "https://datazimuts.com/v1/datasets/ca_metro_weather_demand_intel/ca_metro_weather_demand_daily" | jq '{title, rows, columns_count, license}'import requests
ds = requests.get("https://datazimuts.com/v1/datasets/ca_metro_weather_demand_intel/ca_metro_weather_demand_daily").json()
print(ds["title"], ds["rows"], "rows")
# Sample rows for an LLM context window
for row in ds.get("sample_rows", [])[:5]:
print(row)API endpoint: https://datazimuts.com/v1/datasets/ca_metro_weather_demand_intel/ca_metro_weather_demand_daily
Tip: fetch /llms.txt for the full machine-readable catalog.
Where this data comes from and what was made from it. Other people's work shows as counts; only shared projects are named.
Cite this snapshot
Pinned to snapshot 20261001T235646Z-7437a91d70dd and its content hash, so readers get exactly the data you used.
Environment and Climate Change Canada. (2026). Canadian metro observed-weather demand panel (daily) [Data set, snapshot 20261001T235646Z-7437a91d70dd, sha256 7437a91d70dd]. Datazimuts. Retrieved 2026-10-02, from https://datazimuts.com/en/datasets/ca_metro_weather_demand_intel/ca_metro_weather_demand_daily?snapshot=20261001T235646Z-7437a91d70dd
@misc{dz_ca_metro_weather_demand_intel_ca_metro_w_7437a91d,
title = {{Canadian metro observed-weather demand panel (daily)}},
author = {{Environment and Climate Change Canada}},
year = {2026},
publisher = {Datazimuts},
howpublished = {\url{https://datazimuts.com/en/datasets/ca_metro_weather_demand_intel/ca_metro_weather_demand_daily?snapshot=20261001T235646Z-7437a91d70dd}},
note = {Snapshot 20261001T235646Z-7437a91d70dd, sha256 7437a91d70dd94aa50b69426ab226a4b3937fed7d104d7547a93cd4d34cfb0f9; accessed 2026-10-02}
}Embed a table or a chart
Paste this into any page. The embed is pinned to the same snapshot, follows the reader's light or dark setting, and always shows the source, license and a link back.
<iframe src="https://datazimuts.com/embed/chart?dataset=ca_metro_weather_demand_intel%2Fca_metro_weather_demand_daily&lang=en&theme=auto&snapshot=20261001T235646Z-7437a91d70dd&x=date&y=lat&agg=avg" title="Canadian metro observed-weather demand panel (daily)" width="100%" height="380" style="border:0" loading="lazy"></iframe>
Ask about this dataset. Answers come only from its catalog record, measured profile and change history, and list the facts they used.