klimadaten

8. KLIMADATENBANK

 

 

DU LERNST HIER...

 

wie du grosse Datenmengen aus dem Internet holst und sie für deine Zwecke verwendest. Dabei gehst du von der Fragestellung aus, wie sich das Klima in den letzten rund 100 Jahren in verschiedenen Ländern verändert hat. Du gehst dabei von den Jahresmittelwerten der Temperaturen von 1901 bis 2015 in 89 Ländern aus.

Die Rohdaten beziehst du von der CRU (Climate Research Unit) auf http://www.cru.uac.uk. Sie stehen dir aufgearbeitet in der Tabelle meantemp der  Datenbank tigerJython.db zur Verfügung, die sich in der Distribution von TigerJython befindet. (Dieser Overlay enthält eine Anleitung, wie die Rohdaten aufbereitet werden.)

 

 

MUSTERBEISPIEL

 

Die Tabelle meantemp, die sich in der Distribution von TigerJython befindet, hat das Feld country mit dem Ländernamen und Felder mit den Jahrzahlen 1901 bis 2015 für die mittleren Jahrestemperaturen in diesen Jahren. Du kannst zuerst mit folgendem Programm die Werte für alle Länder anzeigen, musst aber etwas Geduld haben, bis der Computer die Daten extrahiert hat.

from dbtable import *

meantemp = DbTable()
meantemp.restoreFromTJ("tigerjython.db")
print(meantemp)
► In Zwischenablage kopieren

 

Willst du nur die Daten für die Schweiz ausschreiben, so verwendest du den Befehl view():

from dbtable import *

meantemp = DbTable()
meantemp.restoreFromTJ("tigerjython.db")
meantemp.view(country = "Switzerland")
► In Zwischenablage kopieren

Der Befehl view() funktioniert ähnlich wie select(), bezieht sich aber auf das Ausschreiben der Tabelle im Ausgabefenster. Mit view(country = "Switzerland") wählst du nur den Datensatz aus, der sich auf die Schweiz bezieht.

Viel schöner und eindrücklicher als eine Zahlenreihe ist eine grafische Darstellung. Die Turtlegrafik kann dir dabei behilflich sein, indem du mit der Turtle einen Balken als dicke Turtlespur zeichnet.

from dbtable import *
from gturtle import *

def drawBar(s):
    left(90)
    penDown()
    forward(s)
    back(s)
    penUp()
    right(90)

makeTurtle()
ht()
right(90)
setLineWidth(4)
setPos(-290, -250)

meantemp = DbTable()
meantemp.restoreFromTJ("tigerjython.db")

resultSet = meantemp.select(country = "Switzerland")
value = resultSet[0]
for i in range(1, len(value)):
    print value[i]
    s = int(value[i] * 60)
    drawBar(s)
    forward(5)

setPenColor("black")
setPos(-240, 240)
label("Durchschnittstemperatur in der Schweiz")
setFontSize(12) 
setPos(-300, -270)
label("1900")     
setPos(260, -270)
label("2015")       

        
► In Zwischenablage kopieren

In der Grafik ist die Temperaturzunahme offensichtlich.

 

 

MERKE DIR...

 

Datenbanken sind besonders für grosse Datenmengen hervorragend geeignet. Viele Daten sind im Internet frei zugänglich. Du kannst sie herunter laden und bei dir in eine eigene Datenbank übernehmen.

 

 

ZUM SELBST LÖSEN

 

1a.

Schreibe die Namen aller Länder aus, die in der Klimadatenbank aufgenommen sind.

1b.

Nehme ein Land deiner Wahl und untersuche den Temperaturverlauf zwischen 1901 und 2015.


2a.

Untersuche den Temperaturanstieg in allen Ländern, indem du die Temperaturdifferenz zwischen 2015 und 1901 für jedes Land auflistest.

2b.

Welches Land zeigt den höchsten Zuwachs?

   

 

8-1
Fachliche Hinweise:

Fachliche Anmerkung: Die Originaldaten können mit dem Programm Extract.py extrahiert werden.

# Extract.py

import os
from dbtable import *
datadir = "./cru/"

files = os.listdir(datadir)
countries = []
filenames = []
for file in files:
    index = file.find(".tmp")
    if index > 0:
        countries.append(file[22:index])
        filenames.append(datadir + file)
        
for i in range(len(countries)):
    table = DbTable("year", "jan", "feb", "mar", "apr", "may", "jun", "jul", "aug", "sep", "oct", "nov", "dec", "season1", "season2", "season3", "season4", "annual")
    with open(filenames[i]) as f:
        data = f.readlines()
        for line in data:
            if line[1].isdigit():
                entries = line.split()
                table.insert(entries)
    table.save("climate.db", countries[i])
    print "Country", countries[i], "saved."       
print "done"             

Dazu kopiert man die länderspezifischen Dateien von
https://crudata.uea.ac.uk/cru/data/hrg/cru_ts_4.00/crucy.1701270849.v4.00/countries/tmp/
in ein Unterverzeichnis cru des Programmverzeichnis.
Von hier kann man alle Dateien miteinander downloaden und sie im Unterverzeichnis cru auspacken. Das Programm erstellt je eine Tabelle mit dem Namen des Landes in der Datenbank climate.db mit folgenden Feldern (das erste Feld ist ein int, alle anderen sind floats):
year, jan, feb, mar, apr, may,  jun, jul, aug, sep, oct, nov, dec, season1, season2, season3, season4, annual
Mit dem folgenden Programm können die Daten für ein bestimmtes Land angezeigt werden:

ShowCountry.py

from dbtable import *

while True:
    country = inputString("Country")
    table = DbTable()
    table.restore("climate.db", country)
    print table

Aus den Ländertabellen wird nun eine einzige Tabelle meantemp mit folgenden Feldern erstellt und in der Datenbank tj.db gespeichert:
country 1901, 1902, 1903, 1904, ... 2015
Im ersten Feld befindet sich der Name des Landes, in den restlichen Feldern die mittlere Jahrestemperatur in den Jahren 1901 bis 2015.

# Transfer.py

import os
from dbtable import *
from sqlite3 import *

# List of all tables
with connect("climate.db") as con:
    countries = con.showTables()
    
# List of field names    
attributes = ["country"]
for i in range(1901, 2016):
    attributes.append(str(i))
result = DbTable(attributes)
                
for i in range(len(countries)):
    temp = DbTable()
    temp.restore("climate.db", countries[i])
    rows = temp.select("annual")
    record = [countries[i]]
    for row in rows:
        record.append(float(row[0]))
    result.insert(record)
    print "Country", countries[i], "saved."    
result.save("tj.db", "meantemp")    
print "done"  

Die Tabelle meantemp  befindet sich auch in der Datenbank tigerjython.db der  Distribution von TigerJython.