Data is collected over time from Environment and Climate Change Canada and from the Citizen Weather Observer Program (CWOP). Every individual location web site has several links on the "about page" so you can see where the information came from.
All the locations provided by Environment and Climate Change Canada have been added to the system, with few exceptions. You can see the list of location on the location list.
Weatherstats.ca also gathers information from the Citizen Weather Observer Program. The Canadian stations listed at http://www.wxqa.com/states/canada.html are automatically added. There is a complete weatherstats.ca CWOP station list.
Sometimes Environment and Climate Change Canada discontinues one station and adds another. Therefore weatherstats.ca cannot get some or all of the data it used to. Send feedback to let us know about the issue and the problem will be worked as quickly as possible. We have monitoring in place that usually detects this situation and corrects it, but it doesn't catch all cases.
Sometimes the message to send out is too long for one tweet (140 characters) to the system splits it into multiple parts and adds a part designator to each part of the message.
If the system thinks it can fit the message into fewer parts it will abbreviate some words so they take less space. Examples:
temperature: | temp |
thunderstorm: | t-storm |
percent: | % |
periods: | pds |
morning: | morn |
afternoon: | aft |
UV index 3 or moderate: | UV: 3 moderate |
Not all abbreviations are always applied... it depends how much the content needs to be squished.
So that tweets don't exceed 140 characters, less-important metrics are dropped from the tweet starting from the end.
Weather conditions tweets sometimes need space for weather alerts and this takes a lot of space.
Yes, the background colour of the marker varies depending on the temperature so you can visually get the sense of the temperature without reading the actual numbers. The surrounding colour changes depending on if there is a weather alert or not.
Normal: | |
Alert: | |
No data* - Normal: | |
No data* with Warning/Watch: |
These icons are used for windchill and humidex as well.
* The no data icons are used when there is a temperature value, but there is no windchill or humidex at the time... the temperature is shown instead.
The sunrise and sunset icons will indicate if it is night time or daytime.
Day Time: | (9am) (noon) |
Night Time: | (9pm) (midnight) |
These are just examples. It may be still bright out at 9pm in the summer in which case the background would be yellow.
Not all cities have the same amount of historical data. When you exceed the data available for a city, the marker will disappear. Additionally, sometimes data is not available for a city for a period of time, so the marker will disappear then as well.
Data is accumulated in hourly and daily periods. There are charts for other time periods which are built by aggregating the daily data by either finding the min, max, sum and/or mean. Data download functions are not provided for these aggregations, since the calculations can be easily done by a pivot table in spreadsheet application.
Period | Explanation |
---|---|
Hourly | Rollup of realtime data, or summary for part of the whole or part of the hour |
Daily | Rollup of hourly values, or daily calculation |
Weekly | Starts on Monday |
Monthly | Starts on first day of the month |
Quarterly | Starts on January 1, April 1, July 1, October 1 |
Quarterly Seasonal | Starts on December 1, March 1, June 1, September 1 |
Yearly | Starts on January 1 |
Yearly July 1 - June 30 | Starts on July 1 and ends on June 30. Good for looking at what is happing over the winter (eg snowfall for one season) |
There is a download page for each location that allows you to download the daily data points for that location. Note that the data is an accumulation of multiple observation stations and when data is missing from one station it may be filled from another station.
avg_temperature is the average between the daily maximum temperature and the daily minimum temperature. avg_hourly_temperature is the average of all the hourly temperatures within the day.
Column labels for normals and extremes:
Suffix | Meaning |
---|---|
_v | Calculated value (max, min or mean) |
_s | Standard deviation of mean |
_c | Count of (number of) values included |
_d | Date range for values |
_y | Years where extreme occurred (limited to first 40) |
For monthly normal and extremes, the dates are always listed as the first day of the month. However, the data is for the first until the last day of the monthly (or until the current day for the ongoing month).
You need to put in code like this in your web page:
<IFRAME SRC="https://ottawa.weatherstats.ca/icharts/temperature-weekly.html?width=600;height=400" FRAMEBORDER="0" VSPACE="0" HSPACE="0" MARGINWIDTH="0" MARGINHEIGHT="0" SCROLLING="no" NORESIZE WIDTH="600" HEIGHT="400"></IFRAME>Replace the BOLDed items follows:
You may use the data and/or charts for non-commercial use without extra permission. Please cite the source as "weatherstats.ca based on Environment and Climate Change Canada data". ECCC imposes license restrictions on their data see: http://climate.weather.gc.ca/prods_servs/attachment1_e.html.
For commercial usage, please contact us.
Server side programming is written in Perl served up by Apache running mod_perl. Client side is javascript and the charts are generated on-the-fly using Google Visualization tools with Bulma style sheets. Leaflet using Mapbox data is used for maps. Data is stored in a MariaDB database.
The site is running on Debian Linux on dual processor Intel Xeon CPU E5-2650. The server has 512 GB of RAM and 10TB of storage (mirrored).
For daily rollup, wherever possible a localtime day is used. A localtime day means some days have either 23 or 25 hours on days where daylight savings time changes. The day starts at 01:00 and ends at 00:00 (eg July 6 01:00 to July 7 00:00). For precipitation, however, the day always ends at 06:00 UTC.
If you are looking at the download data you may see both an "avg" (average) value and an "avg_hourly" (hourly average) value. "avg" is the average of maximum and minium (avg + min /2), where as the hourly average is the average of all the data points retrieved during the day at the top of the hour (bottom of the hour for NL).
A heating/cooling degree-day is given for each degree Celsius that the daily mean temperature departs below/above the baseline of 18 degrees Celsius. It is used to estimate energy requirements and is an indication of fuel consumption.
A growing degree-day uses either 5 degrees or 10 degrees Celsius as the base. See https://en.wikipedia.org/wiki/Growing_degree-day#GDD_calculation for more details.
The value is calculated using the daily mean (average) temperature: (maximum temperature + minimum temperature) / 2.
The wind direction over the past 24 hours chart plots the number of hours the wind was in a specific direction. If it was not windy at all, there would be no data on the chart. Data is sampled once per hour. Wind speed is not taken into account.
Measuring cloud cover is dependent on the observation method. There are 3 possible charts available:
Value | Explanation |
---|---|
0 (Clear) | Sky clear (cloud amount of 0 oktas or 0/10) |
1 (Few) | Cloud amount of 1 to 2 oktas (1/10 to 3/10) |
2 (Scattered) | Cloud amount of 3 to 4 oktas (cloud coverage of ≤49% for MSC AWOS observations) |
3 (Broken) | Cloud amount of 5 to 7 oktas (cloud coverage of 50% to 89% for MSC AWOS observations) |
4 (Overcast) | Cloud amount of 8 oktas ( cloud coverage of ≥90% for MSC AWOS observations) |
Using oktas.
Value | Explanation |
---|---|
0 | 0 oktas or 0/10 - clear sky |
1 | 1 okta or less, but not zero (1/10 or less, but not zero) |
2 | 2 oktas (2/10 - 3/10) |
3 | 3 oktas (4/10) |
4 | 4 oktas (5/10) |
5 | 5 oktas (6/10) |
6 | 6 oktas (7/10 - 8/10) |
7 | 7 oktas or more, but not 8 oktas (9/10 or more, but not 10/10) |
8 | 8 oktas (10/10) |
Multiply by 10 to get a percentage.
Here is a brief explanation:
Type | Explanation |
---|---|
Precipitation | The amount of rain/snow/etc received. Snow is melted to create a water equivalent. 1cm snow is approx 1mm of precipitation, but the exact amount depends on the snow density (eg corn snow vs light fluffy snow). |
Rain | The amount of precipitation, not including snow. Measured in mm. |
Snow | Measured in cm. |
Different weather stations use different technologies to measure all types of precipitation. Some is measured by hand, others are automated.
To compute the daily amount, measuring runs from 06:00 to 05:59 UTC across the country.
Normals: ECCC calculates normals every 10 years (using data for previous 30 years) whereas weatherstats.ca calculates normals every day using the previous 30 years of data. Prior normals are always kept and can be used for comparison. The list of climate stations used to build a normal varies as well.
Extremes: The weatherstats.ca extremes are calculated for a given location, whereas the ECCC extremes are calculated for a given climate station. weatherstats.ca normally includes multiple climate stations in a given location to account for station changes and/or station unavailability.
Check the detailed normal or extreme charts for the details on sample size and date ranges. eg https://ottawa.weatherstats.ca/charts/normal_max_temperature-daily.html
sub humidex { my ($temp, $dew_point) = @_; if ((! defined $temp) || (! defined $dew_point)) { return undef; } return undef if ($temp < 20); my $humidex = $temp + 0.5555 * ((6.11 * 2.71828 ** (5417.753 * ((1/273.16) - (1/(273.15 + $dew_point))))) - 10); $humidex = round ($humidex); return undef if ($humidex <= 24); return $humidex; }
sub windchill { my ($temp, $wind_speed) = @_; if ((! defined $temp) || (! defined $wind_speed)) { return undef; } return undef if ($temp > 0); if ($wind_speed > 5) { my $windchill = 13.12 + 0.6215 * $temp - 11.37 * ($wind_speed ** 0.16) + 0.3965 * $temp * ($wind_speed ** 0.16); return round ($windchill); } elsif ($wind_speed > 0) { my $windchill = $temp + ((-1.59 + 0.1345 * $temp) / 5) * $wind_speed; return round ($windchill); } else { return undef; } }
Yes, there is a list of all available Air Quality Stations.
If you see a station listed that should be associated to one of the listed locations but is not, please send feedback.
The list of all available climate stations is available. Some are used by weatherstats.ca, others are not (yet). If you see a station listed that has data and should be associated to one of the listed locations but is not, please send feedback.
The list of all Canadian Location Codes is available.
Please check the wish list and see if your request is already noted. If not (or even if it is), send us feedback for anything that you want to see.
Please send us feedback for anything that is puzzling you.
Also, please see the Environment and Climate Change Canada Weather and Meteorology page for general weather topics. There is a comprehensive glossary section.