The first step is to use only July temps for any station in the country that has records back to 1900. That's these stations:
Year, StnID, Station, Province
1900, 2205, CALGARY INT'L A, Alberta
1900, 2364, BANFF, Alberta
1900, 2971, MOOSOMIN, Saskatchewan
1900, 3080, CHAPLIN, Saskatchewan
1900, 3328, SASKATOON DIEFENBAKER INT'L A, Saskatchewan
1900, 3509, MINNEDOSA, Manitoba
1900, 380, BELLA COOLA, British Columbia
1900, 4333, OTTAWA CDA, Ontario
1900, 4442, DURHAM, Ontario
1900, 4576, LUCKNOW, Ontario
1900, 4862, BLOOMFIELD, Ontario
1900, 5168, HALIBURTON A, Ontario
1900, 5325, BROME, Quebec
1900, 588, FORT ST JAMES, British Columbia
17 in all. Good representation across the country.
What is a heat wave? The ScienceBlog link above used this Wiki reference. What I'm going to do is use any day the temperature is above the second Standard Deviation. 90% of all values are within 2 Standard Deviations. That means the top 5% of temps will be anomalous temperatures, and constitute the hottest days. It's easier to do that than count the days above 30C because of the diverse locations and lattitudes of these 17 stations.
The Wiki article claimed that the base line used to get the average should be 1961 to 1990. This is of course completely arbitrary, but I will use that range to get the average and Standard Deviations.
This analysis will need to be done in several steps. First is to get the average and Standard Deviation for each station during that period. This is the SQL used to get those records:
SELECT Stations.StnID, Avg(July.MaxTemp) AS AvgOfMaxTemp, StDev(July.MaxTemp) AS StDevOfMaxTemp
FROM Stations INNER JOIN July ON Stations.StnID = July.StnID
GROUP BY Stations.StnID, July.Year, Stations.StartYear
HAVING (((July.Year) Between 1961 And 1990) AND ((Stations.StartYear)=1900));
All station's July temps are in one table called July. This SQL was called StationAvgSD.
The next step is to get the upper second Sandard Deviation (USD) and lower second Standard Deviation (LSD) for each station:
SELECT StationAvgSD.StnID, [AvgOfMaxTemp]+([StDevOfMaxTemp]*2) AS USD, [AvgOfMaxTemp]-([StDevOfMaxTemp]*2) AS LSD
FROM StationAvgSD;
It was called StationUSDLSD.
The next step is to get all the stations whose TMax is above the station's USD.
SELECT July.StnID, July.Year, July.MaxTemp
FROM StationUSDLSD INNER JOIN July ON StationUSDLSD.StnID = July.StnID
WHERE (((July.MaxTemp)>[USD]));
It was called StationTempsAboveUSD.
We then count the total number of days for all stations for each year we have these records:
SELECT StationTempsAboveUSD.Year, Count(StationTempsAboveUSD.StnID) AS CountOfStnID
FROM StationTempsAboveUSD
GROUP BY StationTempsAboveUSD.Year
ORDER BY StationTempsAboveUSD.Year;
Those records are then copied and pasted into Excel for plotting:
Just for fun, what about the number of days TMax is below the lower second Standard Deviation?
Thus we need to get those records:
SELECT July.StnID, July.Year, July.MaxTemp
FROM StationUSDLSD INNER JOIN July ON StationUSDLSD.StnID = July.StnID
WHERE (((July.MaxTemp)<[LSD]));
and the records from:
SELECT StationTempsBelowLSD.Year, Count(StationTempsBelowLSD.StnID) AS CountOfStnID
FROM StationTempsBelowLSD
GROUP BY StationTempsBelowLSD.Year
ORDER BY StationTempsBelowLSD.Year;
Also dropping. There are fewer days below the lower second Standard Deviation. This means the lowest of the TMax in July is increasing. The two extreme ends of July temps over time is narrowing. There is less extreme swings in July TMax temps today than in the early 1900's.
An additional view of this data:
I zeroed the USD and subtracted that from those TMax temps that are above USD to get the absolute deviation from the USD using this:
SELECT July.Year, [MaxTemp]-[USD] AS Expr1, July.MaxTemp
FROM StationUSDLSD INNER JOIN July ON StationUSDLSD.StnID = July.StnID
WHERE (((July.MaxTemp)>[USD]));
Plus I zeroed the LSD and subtracted those TMax temps from that (to give a negative number) to get the absolute deviation from LSD using this:
SELECT July.Year, [LSD]-[MaxTemp] AS Expr1, July.MaxTemp
FROM StationUSDLSD INNER JOIN July ON StationUSDLSD.StnID = July.StnID
WHERE (((July.MaxTemp)<[LSD]));
Both datasets where plotted on a scatter plot:
The red dots are days above the USD for each year (X-Axis). The blue dots are days below the LSD for each year. The Y-Axis is the deviation from the second Standard Deviation in C.
Notice the definite narrowing in the range of these extreme temps. But more importantly is the lack of really extreme days since the early 1900's. The bulk of the red points are still clustered below 5C above the USD. With both the red and blue dots what has changed are there are no more far extreme temps since 1900.
It would be benificial to count the number of records at each degree.
This chart will need some explaining. The columnn headers are degrees above the USD. Each cell is the number of days at that temp for each year. For example, 2009 has only 2 days 1C above the USD, 1 day 2C above.
You can clearly see the drop off of the really extreme TMax deviations above USD since 1900.
A plot of these together get's messy:
This is just the same scatter plot data shown in column form. 1919 with 45 of these days stands right out above all the others. The second spike is 1999, with 25 days. There looks to be a pattern here, of a spike in extreme temps above USD, then a few quiet years with few in the high extreme, then back to a spike, and back to few again. More heartbeat like variation.So just the first column, a deviation of 1C above the USD, is revealing enough:
The Y-Axis is the number of days. The trend is quite varied, but is over all flat. This means that since 1900, with a few notable exceptions, the number of days above 1C above the upper second Standard Deviation hasn't changed. What has changed is there are fewer days in the higher deviation temps now than in the past. We are in a quiet period, which should change into a spike either this year or next. Once I get all the summer 2010 data we will know for sure.So there you have it fellas, Canada's heat waves are getting fewer in number.
No comments:
Post a Comment