TigerJython4Kids | HomeTurtlegrafikRobotikDatenbanken |
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 |
from dbtable import * meantemp = DbTable() meantemp.restoreFromTJ("tigerjython.db") print(meantemp) |
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") 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 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 |
|
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.