I've downloaded the Central England Temperature Data available from Met Office Hadley Centre. On their summary page, it is described thus (emphasis mine):
These daily and monthly temperatures are representative of a roughly triangular area of the United Kingdom enclosed by Lancashire, London and Bristol. The monthly series, which begins in 1659, is the longest available instrumental record of temperature in the world. The daily series begins in 1772. Manley (1953, 1974) compiled most of the monthly series, covering 1659 to 1973. These data were updated to 1991 by Parker et al (1992), who also calculated the daily series. Both series are now kept up to date by the Climate Data Monitoring section of the Hadley Centre, Met Office. Since 1974 the data have been adjusted to allow for urban warming.
The data comes in a nicely compact but not immediately processable format:
Column 1: year
Column 2: day
Columns 3-14: daily CET values expressed in tenths of a degree. There are 12 columns; one for each of the 12 months.
1772 1 32 -15 18 25 87 128 187 177 105 111 78 112
1772 2 20 7 28 38 77 138 154 158 143 150 85 62
1772 3 27 15 36 33 84 170 139 153 113 124 83 60
1772 4 27 -25 61 58 96 90 151 160 173 114 60 47
1772 5 15 -5 68 69 133 146 179 170 173 116 83 50
1772 6 22 -45 51 77 113 105 175 198 160 134 134 42
(The description doesn't to mention that not available / applicable data is encoded as -999.)
I've processed this in to a 3.8 Meg CSV file that provides columns for both unix time and iso8601, then columns for min, mean and max daily temperature. Temperatures are in centigrade. Rows are in time order.
Here's my ruby code for doing that:
#!/Users/benjohn/.rvm/rubies/ruby-2.1.0/bin/ruby
require 'time'
def with_time_and_temp(data_file)
File.readlines(data_file).each do |line|
line = line.split
year = line[0]
day = line[1]
1.upto 12 do |month|
miligrade = line[1+month].to_i
unless(miligrade == -999)
time = Time.gm(year, month, day)
temp = miligrade / 10.0
yield(time, temp)
end
end
end
end
time_to_temps = Hash.new {|h,k| h[k] = Array.new(ARGV.count)}
(0...ARGV.count()).each do |i|
with_time_and_temp(ARGV[i]) do |time, temp|
time_to_temps[time][i] = temp
end
end
puts "unix-time,iso8601,#{ARGV.join(",")}"
time_to_temps.to_a().sort().each do |record|
puts("#{record[0].to_i},#{record[0].iso8601},#{record[1..-1].join(",")}")
end
Here're the first few lines of the output file:
unix-time,iso8601,cetmindly1878on_urbadj4.dat,cetdl1772on.dat,cetmaxdly1878on_urbadj4.dat
-6248275200,1772-01-01T00:00:00Z,,3.2,
-6248188800,1772-01-02T00:00:00Z,,2.0,
-6248102400,1772-01-03T00:00:00Z,,2.7,
-6248016000,1772-01-04T00:00:00Z,,2.7,
-6247929600,1772-01-05T00:00:00Z,,1.5,
-6247843200,1772-01-06T00:00:00Z,,2.2,
-6247756800,1772-01-07T00:00:00Z,,2.5,
-6247670400,1772-01-08T00:00:00Z,,0.0,
-6247584000,1772-01-09T00:00:00Z,,0.0,
(Note that for the earlier dates the min and max are not available).
I would like to share this data more effectively than sticking it in my drop box. Is there some kind of repository for this sort of thing?
I would also like to process and graph this data. In particular, I would like to try and see how "extreme events" are distributed.
I am a total beginner with visualisation and processing but experienced as a programmer. I'm pretty sure that I could write some scripts, or use SQLite for processing, and get a graphing application from somewhere… but, I wonder if there are some friendly and accessible tools I should be using in this web 2.0 world of 2014?
I'm on a Mac computer, if that's relevant.
Thanks!