Strukturierte Datenmengen

Man findet an einigen Stellen im Internet überraschend große Datenmengen mit freiem Zugang. Auf den ersten Blick können die Daten unüberschaubar wirken. Wenn sie sortiert sind und einzelnen Teilen bestimmte Datentypen erkennbar zugeordnet sind, wenn sie vielleicht sogar schon in Tabellenform vorliegen, kann man von strukturierten Datenmengen sprechen. Besonders leicht fällt der Zugang, wenn es Dateien vom Typ .csv oder .txt sind. Grundlage für das Einlesen der Daten ist das Modul numpy und dort besonders die Methode genfromtxt().

Das Modul numpy

Um mit den Daten arbeiten zu können, muss man sie zunächst einlesen und anschließend auf Datensätze und einzelnen Daten zugreifen können. Zum Einlesen wird die Methode Numpy.genfromtxt() verwendet. Die Methode liest Tabellen aus Textdateien ein und erzeugt dabei ein Array mit allen Datenreihen und den einzelnen Elementen jeder Reihe.

data = Numpy.genfromtxt('datensammlung.csv', delimiter=',')
print(data) # ggfs. zur Überprüfung, ob die Daten angekommen sind. 
# -> [[1,2,3], [4,5,6], [7,8,9]]

Zugreifen kann man sowohl auf einzelne Elemente als auch auf Teilmengen, also quasi Reihen und Spalten. Jede Liste beginnt mit dem Index 0. Das bedeutet, auf das erste Element wird mit dem Index 0 zugegriffen.

data[0][0]    -> 1
data[1]       -> [4,5,6]
data[1][1:]   -> [5,6]
data[:,1]     -> [2,5,8] zweites Element jeder Reihe

Das Anlegen für Listen oder Arrays funktioniert in Python mit der Schreibung von Klammern. Das Hinzufügen von neuen Elementen durch append(Wert).

data[3] = []
data[3][0] = 10
data[3].append(11)
data[3] = [10,11,12]

Das vorgestellte Beispiel nochmals in Code.

Beispiel 1: Temperaturen am Südpol

Die Klimaänderung in den Polargebieten ist ein spannendes Fachgebiet. Die Temperaturen am Südpol sind erstaunlich, weil sie im Minusbereich einer großen Schwankung zwischen antarktischem Sommer und antarktischem Winter unterliegen. Die Daten stammen vom NCAR/UCAR National Center for Atmospheric Research.

Aufgabe

Stelle dar, wie sich die Jahresdurchschnittstemperatur in den verschiedenen Stationen der Antarktis seit Mitte des 20. Jhdts entwickelt hat.

Beispiel 2: Eisdecke am Nordpol

Die Eisdecke am Nordpol hat eine Bedeutung für den Klimawandel, weil eine große Eisfläche mehr Sonnenlicht in den Weltraum zurückwirft als eine kleinere oder geschrumpfte Eisfläche. Es ist also bedenklich, wenn im Sommer mehr Eis schmilzt als im Winter neu entsteht. Anhand der frei zugänglichen Daten des National Snow and Ice Data Center bei der University of Colorado kann man solche Entwicklungen nachvollziehen.

Der folgende Programmcode stellt die Entwicklung des Wintereises (Januar) im Vergleich zum Jahresdurchschnitt dar.

Aufgabe

Binde die Entwicklung der Eisfläche im Sommer (August = Spalte 9) in das Diagramm ein.

Klimadaten

A) Temperatur

In Klimadiagrammen werden Durchschnittstemperaturen häufig mit Linien dargestellt. Möglicherweise steht bei vielen im Hintergrund die Vorstellung, dass Temperatur etwas ist, das mal da ist und mal nicht, sondern kontinuierlich zunimmt oder abnimmt. Das Diagramm enthält dann entlang der x-Achse 12 Abschnitte – für jeden Monat einen – und entlang der y-Achse die Temperaturscala. Trägt man die Durchschnittswerte eines Jahres ein, ergibt sich eine Darstellung, die charakteristisch für einen bestimmten Ort ist.

Aufgabe

Das folgende Skript basiert auf den Werten für die durchschnittliche Maximaltemperatur in Augsburg (Bayern).

  1. Füge eine zweite Liste Temperatur2 für die durchschnittliche Minimaltemperatur hinzu. Die nötigen Daten findest du auf den Seiten der Wetterdienste, z.B. hier: wetterdienst.de.
  2. Lass in einer anderen Farbe zusätzlich die zweite Datenreihe als Linie anzeigen.

Natürlich kannst du auch die minimalen und maximalen Temperaturwerte zu einem anderen Ort einsetzen.

Es gibt zwar keine mathematische Funktion, die einem Monat eine bestimmte Temperatur zuordnet, aber man kann trotzdem mit den Werten rechnen. Im Fall der minimalen und maximalen Werte ist es interessant, den Durchschnittswert für jeden Monat zu ermitteln. Für jeden Monat müssen dazu Minimal- und Maximalwert addiert und durch zwei geteilt werden.

temperatur3 sei []
Für jedes n von 0 bis ausschließlich 12 tue:
   d sei (temperatur[n] + temperatur2[n])/2
   füge d zu temperatur3 hinzu

Aufgabe

Berechne die Durchschnittstemperaturen, bilde daraus eine dritte Datenreihe und lass sie dir im Diagramm mit einer anderen Farbe anzeigen.

B) Niederschlag

Niederschlag kann es mal geben oder eben nicht. Sie sind in der Regel nicht kontinuierlich, sondern werden als bestimmte Menge zu einem Zeitabschnitt gemessen. Häufig wird daher die Niederschlagsmenge in Säulen dargestellt. Die folgende Darstellung basiert auf der monatlichen Durchschnittsmenge für Augsburg (Bayern).

Im Unterschied zur Methode matplotlib.pyplot.plot() wird hier die Methode matplotlib.pyplot.bar() verwendet. Der umgebende Code hat sich nicht wesentlich verändert.

Aufgabe

Lass eine zweite Datenreihe mit möglichst unterschiedlicher Ausprägung als kontrastierende Linie zu den Säulen zeichnen. Etwas anders stellt sich etwa der Niederschlagsverteilung in Los Angeles dar: Link.

C) Kombinierte Daten: Temperatur und Niederschlag

Wenn man unterschiedliche Daten in einer Ansicht kombinieren möchte, müssen diese zumindest eine Gemeinsamkeit haben. Im Fall der Klimadaten ist das der zeitliche Verlauf. Im folgenden Diagramm dient die Methode twinx() dazu, eine zweite Instanz einer Achse zu erzeugen, die synchronisiert mit der ersten einen weiteren Graphen zeichnen kann.

Aufgabe

  • Finde die Zeile im Code, an der eine weitere Achseninstanz erzeugt wird.
  • Beobachte, wie danach die Anweisung zum Zeichnen der Daten aufgerufen wird.
  • Ergänze die drei Datenreihen und korrigiere die beiden Label für die beiden y-Achsen.

Weiter: Strukturierte Datenmengen >>

Physikalische Daten

Geschwindigkeit

Die Bewegung von Körpern ist ein klassisches Gebiet der Physik. Zu bestimmten Zeitpunkten t wird der Ort eines Gegenstandes in Bewegung gemessen. Mit Smartphones kann man das sehr gut filmen und nachträglich zu festen Zeitabständen den Ort ermitteln. Bei Leifiphysik findet sich etwa die folgende Datenreihe:

t in s012345678910
x in m2020202020202326293235
Entnommen aus: Leifiphysik [Link]

Die Datenreihe kann man in einem Diagramm umsetzen. Dabei zeigt normalerweise die Achse für die Zeit (t) nach rechts und die Achse für den Weg (x) nach oben. Mit Matplotlib lässt sich das so darstellen:

Betrachtet man die Bewegung im Diagramm von Sekunde 5 bis Sekunde 10, erkennt man dass jeder Verlängerung der Zeit in diesem Bereich eine gleichartige Vergrößerung des Weges entspricht.

Aufgabe:

  1. Das Auto soll von Sekunde 10 bis 13 am gleichen Ort bleiben und danach wieder für 2 Sekunden zurückfahren. Ergänze die Datenreihen entsprechend und lass dir das Diagramm anzeigen.
  2. Die Gerade mit der gleichbleibenden Steigung ist im Diagramm gut zu erkennen und gleichbleibende Steigung bedeutet gleichbleibende Geschwindigkeit. Überlege: Was ist eigentlich am Knick, am Übergang von der liegenden Geraden zur ansteigenden Gerade?

Beschleunigung

Das Herunterfallen von Gegenständen gehört zu den alltäglichen Erlebnissen, seien es nun Äpfel, Schlüssel, Handys oder ganz andere Dinge. Messdaten zu fallenden Gegenständen kann man bekommen, wenn man den Vorgang vor einem Maßband filmt und anschließend die Einzelbilder des Films zu gleichen Zeitabständen betrachtet, um dann im Bild den jeweils zurückgelegten Weg zu bestimmen.

Die folgenden Daten sind bei einer Beobachtung der Bewegung aufgezeichnet worden:

t in msy in cm
33-43
67-54
100-70
133-113
167-145
200-204
234-253
267-312
300-387
334-462
367-543
Daten aus einem Beispiel zum Freien Fall von D. Brown [Link]

Betrachtet man den Graphen, kann man anfangs die Hälfte einer Parabel erkennen, bei der jedem gleichen Zeitabschnitt auf der t-Achse ein Vielfaches an zurückgelegtem Weg entspricht. Das geht so lange, bis die Krümmung in eine Gerade übergegangen und scheinbar eine gleichbleibende, maximale Geschwindigkeit erreicht ist. Diese Beobachtung der Bewegung führt zur Annahme, dass zumindest in der ersten Phase eine Kraft den fallenden Gegenstand immer weiter beschleunigt. Und dann?

Aufgabe

  1. Frag eine Physiklehrkraft deines Vertrauens, warum die Daten zur Bewegung eines fallenden Körpers diesen Graphen ergeben.
  2. Das Muffinförmchen wird zunächst nach Oben geworfen und fällt anschließend herunter. Ändere die Datenreihe entsprechend und lass dir das Diagramm anzeigen.

Projektidee

Eigentlich hast Du mit Deinem Smartphone und einem Metermaß alles, um selbst das Experiment durchzuführen und eigene Daten zu gewinnen.

Ein kleiner Ball, Krimskrams, Marmeladenbrote … Es fallen ja so viele Dinge recht schön. Filme den freien Fall des Objekts vor einem Metermaß. Du musst nicht unbedingt synchron starten; die Aufnahme kann schon laufen, während das Objekt noch gar nicht fällt. Lade den Film anschließend in einer Schnittsoftware, wähle anhand der Frames gleiche Zeitabstände und ermittle im Bild die gefallene Distanz: Fertig ist die Datenreihe. Jetzt nur noch im Programm laden und die Kurve anzeigen lassen. Zum Beispiel so: [Link]

Alternativ gibt es inzwischen Software für das Smartphone, die Aufnahmen in festen Zeitabständen erlaubt und dadurch Bewegungen quasi „einfriert“. [Link]

Links

  • Lineare Bewegung / Zeit-Ort-Diagramm bei Leifiphysik [Link]
  • Artikel s.v. „Freier Fall“, in: Wikipedia. [Link]
  • Einführendes Video [Link], Theorie zum Freien Fall bei Leifiphysik [Link].
  • Smartphone-Experiment mit phyphox [Link]

Weiter: Klimadaten >>

Funktionsgraphen

Einführung

Die grundlegende Idee von Funktionsgraphen ist es, dass mit derselben Vorschrift zu jedem x-Wert ein bestimmter y-Wert errechnet werden kann und dass sich dieser Zusammenhang in einer speziellen Graphik ausdrücken lässt.

f(x): x -> y = etwas, das mit x errechnet wird.

Mathematiker beschäftigt bei Funktionen z.B. die Frage, ob man eigentlich alles für x einsetzen darf oder aus welchem Bereich von Zahlen die Werte für y genommen werden. Aus Sicht der Informatik kann man die Menge der Werte, aus denen das x gewählt wird, unabhängig vom Inhalt als Liste betrachten, z.B. x = [-1,0,1,2,3,4,5,…]. Und auch die Menge der Werte, die sich aus der Anwendung der Verarbeitungsvorschrift in der Funktion ergeben, kann eine Liste sein. Es gilt insbesondere, dass für jedes xn in der Menge aller x ein bestimmtes yn errechnet werden kann. Kompliziert? Nein.

Beispiel lineare Funktion:
x sei [-1,0,1,2,3,4,5,...]; y sei anfangs [] 
Für jedes xn aus x tue: 
    yn = 1.5 * xn  # d.h.: führe die Funktion aus
    Füge yn zu y hinzu.
Gib y aus.
Code
Ergebnis
x-1012345
y-1,501,534,567,5
Wertetabelle für x = [-1,5] und y = 1.5*x

Praktische Vereinfachungen

Es gibt zu dieser Grundform noch zwei ganz praktische Vereinfachungen

  1. Die Funktion range
    range([int von,] int bis_ausschließlich [, float schritt]) -> Array erzeugt Zahlenmengen. Unbedingt nötig ist nur der zweite Parameter; so erzeugt range(11) eine Reihe von ganzen Zahlen von 0 bis 10, also mathematisch [0, 10] oder in Code [0,1,2,3,4,5,6,7,8,9,10]. Beachtenswert: range hat einen Rückgabewert, nur deswegen kann man schreiben
    x = range(-1,6)
  2. Listcomprehension ist eine besondere Fähigkeit von Python. Sie vereinfacht die Schreibweise bei der Verarbeitung von Listen, indem die For-Schleife in die Klammern für eine anfangs leere Liste gezogen wird. Mit x = range(-1,6) lässt sich so schreiben
    y = [1.5*xn for xn in x]
    Im Ergebnis ist y dann dieselbe Liste von Werten wie oben.

Eine Verallgemeinerung wäre es, wenn man die Verarbeitungsvorschrift in eine selbstdefinierte Funktion auslagert. So würde man für y = 1,5*x schreiben:

def func(x):
  y = 1.5*x
  return y

Mit x = range(-1,6) und der selbstdefinierten Funktion func ließe sich so schreiben
y = [func(xn) for xn in x]

Die beiden Listen x und y lassen sich anschließend wie im vorhergehenden Abschnitt „Punkte“ durch matplotlib zeichnen.

Aufgabe

Wende die beiden Vereinfachungen auf das untenstehende Beispiel an und lass dir das Diagramm anzeigen.

Weitere Funktionen

Mathematische Funktionen sind vielfältig. Mit x2 ergeben sich Parabeln, mit x3 monoton steigende Graphen 3. Grades, mit 1/x ergeben sich Hyperbeln. Im untenstehenden Beispiel wurde die Verarbeitungsvorschrift x -> y in eine selbstdefinierte Funktion ausgelagert.

Aufgabe

Experimentiere mit der Verarbeitungsvorschrift und versuche eine Parabel und eine Hyperbel zu erzeugen.

Weiter: Physikalische Daten >>

Punkte

Eine Menge von Punkten auf einem weißen Blatt Papier kann alles und nichts bedeuten.

Abb. 1: Drei Tropfen im Schnee?

Punkte in einem Kartesischen Koordinatensystem werden dagegen durch zwei Koordinaten bestimmt. Dabei ergibt sich der Wert jeder Koordinate als Abmessung auf einer zugeordneten Achse. Häufig sind das eine x-Achse (nach rechts) und eine y-Achse (nach oben), daher spricht man auch von x-Koordinate (1. Bestandteil) und y-Koordinate (2. Bestandteil).

Python verfügt mit matplotlib über ein Modul zur Darstellung von Punkten. Die Punkte A (-1/-2), B (1/1.5) und C (2/3) würden mit diesem Modul aussehen wie folgt.

Abb. 2: Die Punkte (-1/-2), (1/1.5) und (2/3) in einem Kartesischen Koordinatensystem

Die drei Punkte A, B und C kann man voneinander getrennt angeben: A (-1/-2), B (1/1.5) und C (2/3). Man kann sie aber auch in eine Wertetabelle eintragen:

ABC
x-112
y-21.53
Wertetabelle zu den Punkten A, B und C

Durch das Notieren der Punkte in einer Wertetabelle wird anschaulicher, dass durch die drei Punkte im Koordinatensystem eine Reihe von x-Werten einer Reihe von y-Werten zugeordnet ist. Diese Darstellung der x-Werte und y-Werte als Liste ist die Grundlage für das Zeichnen mit matplotlib.

Aufgabe

Versuche mit Punkten andere Darstellungen: ein Rechteck, ein Herz, eine Kurve, die Sonne mit Strahlen, …

Weiter: Funktionsgraphen >>

Visualisierung von Daten

Jede Stunde werden unvorstellbare Mengen an Daten produziert und alle Menschen, die sich über digitale Geräte vernetzen, tragen dazu bei. Um in einer vernetzten Welt kluge Entscheidungen zu treffen, muss man solche Daten analysieren und interpretieren können. Allerdings bestehen große Datenmengen häufig aus ungeordneten Zeichenketten oder aus unüberschaubaren vielen Zahlenreihen und für das Verständnis von beidem ist das menschliche Gehirn nicht besonders gut geeignet. Die Visualisierung von Daten kann da helfen, weil viele Menschen aus Bildern und gut aufbereiteten Graphiken komplexe Informationen häufig schneller entnehmen und leichter dazu Stellung beziehen können.

Johanna Schmidt (VRVis): Data Literacy und Datenvisualisierung [YouTube]

Die folgenden Seiten umkreisen das Themengebiet Visualisierung von Daten:

Weiterführende Links

  • David McCandless: The Beauty of Data Visualisization. Video von 2010 [Link], Website: Informationisbeautiful [Link], Webinar von 11-2020 [Link]
  • Was Sie über Big Data wissen müssen. Big Data Basics von Infineon [Link]
  • Niklas Steenfat: Wie wird man Data Scientist? Video [Link]

Referenzen und Tutorials

  • Python-Modul Matplotlib [Link]
  • Bernhard Grotz: Matplotlib – ein Plotter für Diagramme [Link]
  • Benjamin Aunkofer: Datenvisualisierung in Python [Link]
  • Bernd Klein: Numerisches Python [Link]
  • Gerd-Ludwig Ingold: Erstellung von Graphiken [Link]

Weiter: Punkte >>

Creative Commons Lizenzvertrag Dieses Werk ist lizenziert unter einer Creative Commons Namensnennung 4.0 International Lizenz.