Programming lesson
Erdbebendaten mit Turtle-Grafiken visualisieren: Ein kompletter Leitfaden für CSCI 141 Lab 8
Lerne, wie du historische Erdbebendaten aus einer CSV-Datei liest und mit Turtle-Grafiken auf einer Weltkarte darstellst – inklusive Schritt-für-Schritt-Anleitung, Codebeispielen und Tipps zur Farbgestaltung.
Einführung: Erdbeben visualisieren – ein Klassiker der Informatik
In diesem Tutorial zeige ich dir, wie du mit Python und Turtle-Grafiken Erdbeben auf einer Weltkarte darstellst. Das Projekt stammt aus dem Lab 8 des Kurses CSCI 141 (Frühjahr 2019) und kombiniert wichtige Konzepte wie Dateieinlesen, Datenstrukturen und grafische Ausgabe. Gerade in Zeiten, in denen Naturkatastrophen durch den Klimawandel häufiger werden, ist das Verständnis von Erdbebendaten wichtiger denn je. Stell dir vor, du könntest mit deinem Code die gleiche Technik nutzen, die auch in Nachrichten-Apps oder Forschungsdashboards verwendet wird – genau das lernst du hier.
Setup und benötigte Dateien
Lege zunächst ein Verzeichnis lab8 an. Lade folgende Dateien von der Kurswebseite herunter:
plot_earthquakes.py– Skelettcode mit Pseudocodeearthquakes.csv– die Erdbebendatenearth.png– Weltkarte als Hintergrund (wird automatisch geladen)
Die Weltkarte hat eine Größe von 720×360 Pixeln, wobei der Nullpunkt in der Mitte liegt. Längengrad (x) reicht von -180 bis 180, Breitengrad (y) von -90 bis 90. Um die Turtle-Koordinaten zu erhalten, multiplizierst du einfach jeden Wert mit 2.
CSV-Daten einlesen: Schritt für Schritt
Der erste Schritt ist das Einlesen der CSV-Datei. Die Datei enthält eine Kopfzeile, die du überspringen musst. Verwende das csv-Modul von Python, um die Daten in eine Liste von Dictionaries zu laden. Jedes Dictionary repräsentiert ein Erdbeben mit Schlüsseln wie latitude, longitude und magnitude. Hier ein Beispiel, wie der Code aussehen könnte:
import csv
def read_earthquake_data(filename):
data = []
with open(filename, 'r') as file:
reader = csv.DictReader(file)
for row in reader:
data.append(row)
return dataBeachte: csv.DictReader liest automatisch die erste Zeile als Schlüssel. So sparst du dir das manuelle Überspringen.
Die parse_row-Funktion implementieren
Die Skelettdatei enthält eine Funktion parse_row, die eine Zeile (ein Dictionary) in ein Tupel aus (lon, lat, mag) umwandelt. Achte darauf, die Werte in Fließkommazahlen umzuwandeln. Beispiel:
def parse_row(row):
lon = float(row['longitude'])
lat = float(row['latitude'])
mag = float(row['magnitude'])
return (lon, lat, mag)Damit bereitest du die Daten für die grafische Darstellung vor.
Turtle-Grafik: Kreise zeichnen
Die Turtle-Grafik wird mit einem Hintergrundbild der Weltkarte initialisiert. Die Funktion teleport (aus Lab 5) bewegt die Turtle ohne Spuren zu hinterlassen. Für jedes Erdbeben rufst du teleport auf und zeichnest dann einen Kreis. Der Radius des Kreises soll proportional zur Magnitude sein. Zum Beispiel: turtle.circle(mag * 2). Optional kannst du die Farbe anpassen: Rot proportional zur Magnitude, Grün und Blau umgekehrt proportional. Hier ein Codeausschnitt:
import turtle
t = turtle.Turtle()
t.speed(0)
for quake in data:
lon, lat, mag = parse_row(quake)
x = lon * 2
y = lat * 2
teleport(t, x, y)
t.color(1, 0, 0) # rot
t.circle(mag * 2)Farbgebung nach Magnitude
Um die Kreise farblich nach Magnitude zu gestalten, berechnest du die RGB-Werte dynamisch. Ein einfaches Schema: red = mag / max_mag, green = 1 - red, blue = 1 - red. Dadurch werden starke Beben rot und schwache grün-blau. Du kannst auch nach Datum färben, wenn du eine Herausforderung suchst.
Häufige Fehler und Tipps
Ein typischer Fehler ist das Vergessen der Kopfzeile. Mit DictReader ist das aber kein Problem. Achte darauf, dass du die Turtle-Geschwindigkeit auf 0 setzt, sonst dauert das Zeichnen ewig. Teste dein Programm mit einer kleinen Anzahl von Zeilen, bevor du alle 500+ Beben zeichnest. Ein weiterer Tipp: Verwende try-except für den Fall, dass eine Zeile fehlerhafte Daten enthält.
Erweiterungen und aktuelle Bezüge
Stell dir vor, du würdest diese Technik nutzen, um Echtzeit-Erdbebendaten von einer API wie USGS zu visualisieren – so wie es viele Nachrichten-Websites tun. Oder du könntest die Daten nach Regionen filtern, um etwa die Pazifische Feuerkarte zu analysieren. Das Projekt ist eine hervorragende Übung für Prüfungen, da es viele Themen aus CSCI 141 zusammenführt: Datei-I/O, Listen, Dictionaries, Schleifen und Turtle-Grafik.
Abgabe und Bewertung
Deine Abgabe besteht aus einem ZIP-Archiv lab8.zip mit der bearbeiteten plot_earthquakes.py und einem Screenshot earthquakes.png. Die Bewertungskriterien umfassen: korrekte Dateistruktur (2 Punkte), Kopfkommentar (3 Punkte), Einlesen in Liste von Dictionaries (15 Punkte), Kreise für jedes Beben (5 Punkte) und Größenvariation (5 Punkte). Insgesamt 30 Punkte.
Fazit
Mit diesem Leitfaden hast du alle Werkzeuge an der Hand, um die Aufgabe erfolgreich zu lösen. Nutze die Gelegenheit, um dein Verständnis von Python-Datenstrukturen zu vertiefen. Viel Erfolg bei deinem Lab 8!