Praktiumsaufgaben PDF

Title Praktiumsaufgaben
Course Computergestützte Datenanalyse
Institution Georg-August-Universität Göttingen
Pages 21
File Size 388.1 KB
File Type PDF
Total Downloads 97
Total Views 168

Summary

SoSe 2018...


Description

Computergest¨ utzte Datenanalyse, SS 18 Institut f¨ ur Physikalische Chemie Georg-August-Universit¨ at G¨ ottingen Prof. Dr. Burkhard Geil

Skript zum Praktikum Computergest¨utzte Datenanalyse“ ”

10. September 2018 – 14. September 2018

1

Inhaltsverzeichnis 1 Allgemeine Hinweise

3

2 Tag 1: Laden der Daten 2.1 Datenformat . . . . . . . . . . . . . . . . 2.2 Datenformat nach dem Einlesen . . . . . 2.2.1 Erste Dimension: Die Zeit . . . . 2.2.2 Zweite Dimension: Die Parameter 2.2.3 Dritte Dimension: Die Stationen . 2.3 Die Einleseroutine . . . . . . . . . . . . . 2.4 Erste Auswertungen . . . . . . . . . . . 3 Tag 2: Erste Visualisierungen

. . . . . . .

. . . . . . .

. . . . . . .

. . . . . . .

. . . . . . .

. . . . . . .

. . . . . . .

. . . . . . .

. . . . . . .

. . . . . . .

. . . . . . .

. . . . . . .

. . . . . . .

. . . . . . .

. . . . . . .

. . . . . . .

. . . . . . .

. . . . . . .

. . . . . . .

. . . . . . .

. . . . . . .

. . . . . . .

4 4 5 5 6 6 6 7 8

4 Tag 3

10

5 Tag 4

11

2

1

Allgemeine Hinweise

Dieses Praktikum soll dazu dienen die in der Vorlesung erworbenen Kenntnisse und F¨ahigkeiten zu festigen, einige neue Dinge auszuprobieren und mit der am letzten Tage des Praktikums durchgef¨uhrten Probearbeit zu bewerten. Das Praktikum wird jeden Tag von 9:00 Uhr bis 17:00 Uhr stattfinden, es besteht Anwesenheitspflicht. Die Anwesenheit aller angemeldeten Teilnehmer wird t¨aglich u¨berpr¨uft. Es ist vorgesehen, dass Sie an ihren eigenen Laptops arbeiten. Wir k¨ onnen eine begrenzte Zahl an Rechnern f¨ur das Praktikum zur Verf¨ ugung stellen, sollten Sie keinen eigenen Laptop haben. Wir werden f¨ ur jeden Tag des Praktikums einen Satz an Aufgaben in diesem Skript stellen. Die L¨osungen der Aufgaben sind am Ende des Praktikumstages per Mail oder per USB-Stick abzugeben. Die Aufgaben der einzelnen Tage werden lose miteinander verbunden sein, sich m¨oglicherweise auf unterschiedliche Datens¨atze beziehen, eventuell aber auch unterschiedliche Aspekte ein und desselben Datensatzes beleuchten. Die Aufgaben f¨ur die Probearbeit am Freitag, den 14. September 2018, werden wir am Freitag morgen aush¨andigen. Prinzipiell d¨ urfen und sollen Sie sich an den Praktikumstagen austauschen, gegenseitig helfen und L¨ osungsstrategien diskutieren. Sie m¨ussen dennoch eine eigene L¨osung am Ende des Tages einreichen. Die Aufgaben am Freitag sollen jedoch individuell gel¨ ost werden. W¨ ahrend der Praktikumstage – auch w¨ ahrend der Arbeitsprobe – steht ihnen ¨uber eduroam Internet zur Verf¨ ugung. Nutzen Sie das Internet um Dokumentationen aufzurufen und L¨ osungsans¨ atze zu finden. Wir werden w¨ ahrend der gesamten Praktikumszeit zur Verf¨ugung stehen um bei Problemen Hilfestellung zu leisten oder eventuell Aufgaben zu erkl¨aren. Sie ¨. d¨ urfen alle Aufzeichnungen aus der Vorlesung oder andere Materialien wie z.B. B¨ucher o. A mitnehmen und benutzen.

3

2

Tag 1: Laden der Daten

In dieser Praktikumswoche wollen wir uns Wetterdaten des Deutschen Wetterdienstes genauer anschauen. Dazu haben wir Ihnen 19 Datens¨ atze unterschiedlicher Wetterstationen in Deutschland herausgesucht, deren daten bis in das 19. Jahrhundert zur¨ uckreichen. Zun¨achst werden wir uns haupts¨ achlich auf die t¨ aglichen Temperaturen konzentrieren, sp¨ater aber auch Nieder¨ anschauen. schlagswerte und Ahnliches

2.1

Datenformat

Im StudIP finden Sie den ganzen Datensatz zum Herunterladen bereit. In dem ZIP-Archiv finden sie 19 Ordner, die jeweils mit der Stationsnummer und dem Ort an dem sich die Wetterstation befindet benannt sind. Jeder Ordner wiederum enth¨alt eine Textdatei mit den eigentlichen Daten. Aufgabe 2.1 a) W¨ahlen Sie einen der Ordner zuf¨allig aus. Schauen Sie sich die Datei mit den eigentlichen Daten an. Welche Probleme k¨onnte der Datensatz beim Laden aufweisen? Notieren Sie einige Eigenschaften wie die Anzahl der Zeilen, Anzahl der Spalten, Spaltentrennzeichen, Kommentare etc. Generell enth¨alt der Datensatz zeilenweise einzelne Messungen unterschiedlichster Klimaparameter, wobei jede Zeile einem Tag entspricht. In der ersten Spalte finden Sie die Stations ID, die sich innerhalb eines Datensatzes nicht a¨ndern sollte und mit der Stationsnummer im Namen des Ordners ¨ubereinstimmt. Die entsprechende Spalte ist mit STATIONS ID markiert. Die weiteren Parameter sind in folgender Tabelle erkl¨art: STATIONS ID MESS DATUM

QN 3 FX FM QN 4 RSK RSKF

SDK SHK TAG NM VPM PM TMK UPM

ID der Wetterstation in der Nomenklatur des Deutschen Wetterdienstes. Datum des Messwertes. Eine Integer-Zahl mit genau 8 Ziffern, wobei die ersten Vier dem Jahr entsprechen, die n¨achsten zwei Ziffern dem Monat und die letzten Zwei dem Tag der Messung. Eine Qualit¨ atskenngr¨oße, die wir im Folgenden ignorieren werden. Tagesmaximum Windspitze in m/s. Tagesmittel der Windgeschwindigkeit in m/s. Eine Qualit¨ atskenngr¨oße, die wir im Folgenden ignorieren werden. T¨agliche Niederschlagsh¨ ohe in mm. Numerischer Code der die Art des Niederschlags beschreibt. 0: Kein Niederschlag. 1: Nur Regen. 4: Unbekannt, obwohl Regen gemeldet. 6: Nur Regen. 7: Nur Schnee. 8: Regen und Schnee. 9: Unbekannt, fehlender Wert. T¨agliche Sonnenscheindauer in Stunden. Tageswert der Schneeh¨ ohe, in cm. Tagesmittel des Bedeckungsgrades, gegeben in Achteln. Tagesmittel des Dampfdrucks, in hPa. Tagesmittel des Luftdrucks, in hPa. Tagesmittel der Temperatur, in  C Tagesmittel der relativen Feuchte, in %. 4

TXK TNK TGK eor

Tagesmaximum der Lufttemperatur in 2 m H¨ ohe, in  C. Tagesminimum der Lufttemperatur in 2 m H¨ohe, in  C. Minimum der Lufttemperatur in 5 cm H¨ohe, in  C. Ende der Datenzeile.

Fehlende Werte in den einzelnen Spalten sind mit −999 markiert. Ihre Aufgabe wird es im Folgenden sein, diese Datens¨atze mit Python einzulesen und in eine Form zu bringen, mit der wir schnell eine Auswertung damit durchf¨ uhren k¨onnen.

2.2

Datenformat nach dem Einlesen

F¨ ur das Datenformat nach dem Einlesen schlagen wir Ihnen Folgendes vor, wobei Sie prinzipiell auch anders vorgehen k¨ onnen wenn Sie etwas Anderes bevorzugen. Die Daten sollen am Ende in einem NumPy-Array vorliegen. Dieses Array soll drei Dimensionen haben.

Abbildung 1: Struktur des vollst¨andigen Datensatzes in einem Numpy-Array.

2.2.1

Erste Dimension: Die Zeit

Die erste Dimension wird die Zeit sein, d.h. jede Zeile wird einem Tag entsprechen. Wir wollen uns auf ein einheitliches Anfangsdatum einigen: Den 01.01.1880. Dieses Anfangsdatum gegeben, sollte Ihr Datensatz am Ende in der ersten Dimension ca. 50000 Zeilen enthalten. Zus¨ atzlich einigen wir uns darauf, dass in jedem Jahr der 29. Februar enthalten sein soll. Ist das Jahr gerade kein Schaltjahr, dann werden die entsprechenden Parameter als fehlend markiert. So stellen wir sicher, dass jedes Jahr eine einheitliche Anzahl an Tagen besitzt. F¨ uhren Sie einen zus¨atzlichen Parameter ein: Die Nummer des Tages seit dem Anfang unserer Beobachtung, d.h. die Anzahl der Tage seit dem 01. Januar 1880. Den Tag innerhalb des Jahren k¨onnen Sie dann leicht berechnen, indem Sie diese Zahl modulo 366 teilen. Die Parameter werden wir dann in die zweite Dimension des Datensatzes schreiben. 5

2.2.2

Zweite Dimension: Die Parameter

In die zweite Dimension des Datenobjektes schreiben wir die Parameter. Der erste Parameter ist die fortlaufende Tagesnummer, wie oben besprochen. Die zweite Spalte sei die Nummer des Tages innerhalb eines Jahres, d.h. die Tagesnummer der ersten Spalte modulo 366. Die folgenden Spalten werden gef¨ ullt mit den Parametern, die Sie in den einzelnen Datensatz-Dateien finden. Ersetzen Sie dabei die fehlenden Werte durch numpy.nan. 2.2.3

Dritte Dimension: Die Stationen

In die dritte Dimension sollen die Stationen geschrieben werden, d.h. die letzte Dimension wird 19 Elemente lang sein. Wollen Sie beispielsweise die Tagesmitteltemperatur, die z.B. der f¨unfte Parameter ist, der dritten Station am 01. Januar 1880 indizieren, sieht das in etwa so aus: 1

p r i n t ( da ta [ 0 , 4 , 2 ] )

Die Tagesmitteltemperaturen aller Stationen am 01. Januar 1880 w¨ aren dann: 1

p r i n t ( da ta [ 0 , 4 , : ] )

2.3

Die Einleseroutine

Wir wollen die Einleseroutine selbst schreiben. Erinnern Sie sich dabei an die Vorlesung und die dort eingelesenen Daten. Das generelle Vorgehen ist dabei folgendes (es gibt mehrere L¨ osungswege, wenn Ihnen dieser nicht gef¨allt, probieren Sie Ihre eigene Idee): 1. Legen Sie einen leeren Datenkubus mit richtiger Dimensionalit¨at und Anzahl der Elemente an. ¨ 2. Offnen Sie eine der Stationsdateien. 3. Laufen Sie mit einer for-Schleife zeilenweise durch den Datensatz. 4. Trennen Sie die g¨ ultigen Zeilen an dem Spaltentrennzeichen. 5. Konvertieren Sie die Daten wenn n¨otig in angemessene Formate. 6. Schreiben Sie die Daten an die richtige Stelle im Datenkubus. 7. Wiederholen Sie diesen Schritt mit allen Stationen. Die Signatur der Funktion mag in etwa so aussehen: N¨ utzlich 2.1: Funktion zum Erstellen des Datenw¨ urfels 1

3

5

def rea d da ta ( l i s t o f f i l e n a m e s ) : # Hi e r da s E i n l e s e n r e t u r n d a ta cu b e

Alternativ k¨onnen Sie eine Funktion schreiben, die nur einen Stationsdatensatz einliest

6

und am Ende ein zweidimensionales Numpy-Array zur¨ uckgibt. Die 19 2D-Objekte k¨ onnen Sie dann in einem letzten Schritt zusammenf¨ ugen.

2.4

Erste Auswertungen

Im Folgenden wollen wir mit dem Datenkubus in der Hand erste Auftragungen erstellen. Aufgabe 2.2 • Tragen Sie die Tagesmitteltemperatur als schwarze Linie gegen die fortlaufende Tagesnummer auf. Nutzen Sie daf¨ ur jeweils nur eine Station. • Tragen Sie zus¨atzlich zu der Tagesmitteltemperatur auch die Minimal- und Maximaltemperatur als blaue bzw. rote Linie in die obige Auftragung ein. Schraffieren Sie den Bereich zwischen Maximal- und Minimaltemperatur in einer Farbe Ihrer Wahl. • Schreiben Sie eine Funktion f¨ur diese Auftragung. Sie sollte als Argumente den Datenkubus und einen Stationsindex u ¨bernehmen und die entsprechende Auftragung generieren. So weit f¨ ur heute. Falls Sie schon vor Ende des Tages mit diesen Aufgaben durch sind, sagen Sie uns Bescheid!

7

3

Tag 2: Erste Visualisierungen

F¨ ur alle Aufgaben am zweiten Tag m¨ussen Sie Funktionen schreiben, die eine Auftragung mit Matplotlib erzeugen. Die Funktionen sollen dabei m¨oglichst flexibel sein, die Messgr¨ oße (Temperatur, Niederschlag, etc.) soll beispielsweise nicht fest in die Funktion reingeschrieben werden, sondern soll ¨uber ein Argument ausgew¨ahlt werden k¨ onnen. F¨ur die Abbildungen, die Sie am Ende des Tages im PDF Format abgeben sollen, w¨ ahlen Sie als Messgr¨oße aber bitte stets das Tagesmittel der Temperatur. N¨ utzlich 3.1: Speichern und Lesen des fertigen Datenw¨ urfels Das erstellen des Datenw¨ urfels aus den 19 verschiedenen Textdateien kann recht lange dauern. Numpy liefert Funktionen um auch mehrdimensionale Arrays einfach zu speichern und zu lesen. Nutzen Sie die Funktionen numpy.save und numpy.load um sich jede Menge Zeit zu sparen. Aufgabe 3.1: Verf¨ ugbarkeit von Daten • Sie sollen zun¨achst visualisieren, welche Station zu welchen Zeitpunkten Daten geliefert hat. • Schreiben Sie eine Funktion, die als Argumente den Datenkubus und einen Index f¨ur die zweite Dimension erwartet (der Index w¨ahlt also die Messgr¨oße: Windgeschwindigkeit, Temperatur, etc.) • F¨ur den gew¨ahlten Index, tragen Sie f¨ ur jede Station eine schwarze Linie gegen die daynumber auf. Diese Linie soll f¨ ur jede Station auf einer anderen H¨ohe sein. Die Linie soll nur dort gezeichnet werden, wo tats¨ achlich Daten f¨ ur diese Funktion vorhanden sind (also nur dort, wo ein Zahlenwert und nicht numpy.nan steht). Aufgabe 3.2: Auftragung Mittelwerte gegen Tageszahlen • Schreiben Sie eine Funktion, die als Argumente den Datenkubus und einen Index f¨ur die zweite Dimension erwartet (der Index w¨ahlt also die Messgr¨oße: Windgeschwindigkeit, Temperatur, etc.) • F¨ur den gew¨ahlten Index, bilden Sie den Mittelwert u¨ber alle Stationen, und tragen Sie den Mittelwert gegen die Tageszahl auf. • Um gleichzeitig darzustellen, wie viele Stationen an dem jeweiligen Tag Daten geliefert haben, tragen Sie außerdem in dasselbe Plotfenster die Anzahl der Stationen ein, die zur Berechnung des Mittelwertes beigetragen haben. Sie k¨onnen dazu mit Axes.twinxa ein weiteres Axes-Objekt erzeugen, das in dasselbe Plotfenster zeichnet. Passen Sie die ylim dieses zweiten Axes-Objekts so an, dass die Auftragung der Anzahl an Stationen nur im unteren Bereich des gesamten Plotfensters zu sehen ist. • Eine Skizze wie so ein Plotfenster mit twinx grob aussehen k¨ onnte in Abbildung 2 ... a

https://matplotlib.org/api/ as gen/matplotlib.axes.Axes.twinx.html

8

# der Stationen

Temperaturmittel

Abbildung 2: Struktur des vollst¨andigen Datensatzes in einem Numpy-Array.

Zeit

Aufgabe 3.3: Jahresmittel f¨ ur einzelne Stationen • Schreiben Sie eine Funktion, die den Datenkubus und zwei Indizes als Argumente erwartet, einen Index f¨ur die zweite Dimension (w¨ ahlt also die Messgr¨ oße), einen Index f¨ ur dritte Dimension (w¨ahlt also die Station). • Die Funktion soll eine Auftragung des Jahresmittels f¨ ur die gew¨ahlte Station und gew¨ahlte Messgr¨oße erstellen. ¨ Sie sich auch hier ein Maß zur G¨ultigkeit der Werte a¨hnlich zu der Anzahl • Uberlegen der aktiven Messstationen in der vorherigen Aufgabe.

Aufgabe 3.4: Jahresmittel gemittelt uber alle Stationen ¨ • Schreiben Sie eine Funktion, die den Datenkubus und einen Index f¨ur die zweite Dimension (w¨ahlt also die Messgr¨ oße) als Argumente erwartet. • Die Funktion soll eine Auftragung des Jahresmittels, gemittelt f¨ ur alle Stationen, f¨ ur die gew¨ahlte Messgr¨oße erstellen.

9

4

Tag 3 Wichtig 4.1: Aufgaben abschließen • Es wird nicht erwartet, dass Sie alle Aufgaben des jeweiligen Tages bearbeiten. • Wir helfen auch an Tag 3 noch gerne bei Aufgaben von Tag 1 oder Tag 2. • Sie k¨onnen sich also auch gerne noch an alten Aufgaben aufhalten, wenn Sie denken, dass Sie die Aufgabe noch nicht ordentlich gel¨ost haben, oder das Gef¨uhl haben, dass es bei dieser Aufgabe noch viel zu lernen gibt.

Aufgabe 4.1: x-Achse uber ein Jahr ¨ • Schreiben Sie eine Funktion, die die mittlere Temperatur einer Station plottet. Dabei soll jedes Jahr als eigene Linie geplottet werden, und die x-Achse soll von Tag 1 des Jahres bis Tag 366 des Jahres laufen. • So erhalten Sie einen Plot, in dem bis zu 139 Linien in demselben Fenster/AxesObjekt aufgetragen sind. Das kann ganz sch¨ on un¨ubersichtlich werden, Sie sollten also eventuell mit m¨oglichst d¨ unnen und/oder transparenten Linien arbeiten. Eine gute Farbwahl ist dabei auch sehr hilfreich. • Plotten Sie die Linie f¨ur das aktuelle Jahr deutlich erkennbar, es sollte also aus der Menge der 138 weiteren Linien hervorstechen. • Zeichnen Sie den Mittelwert ¨uber alle Jahre von 1880 bis einschließlich 2017 ein. Sie m¨ussen dazu das Mittel f¨ ur jeden Tag des Jahres aus diesen 138 Jahren berechnen. • Berechnen Sie die Standardabweichung σ f¨ ur jeden Tag des Jahres von den Jahren 1880 bis einschließlich 2017. Zeichnen Sie die 1σ- und 2σ-Grenzen in Ihren Plot ein.

Aufgabe 4.2: Das Gleiche nochmal, jetzt f¨ ur alle 19 Stationen • Erstellen Sie auf Grundlage Ihrer Funktion aus Aufgabe 4.1 eine weitere Funktion. Diese soll einen sehr ¨ahnlichen Plot erzeugen. Diesmal soll allerdings f¨ ur jede Station eine Linie f¨ur jedes Jahr aufgetragen werden. Sie werden also Diesmal nJahre · nStationen = 138 · 19 Linien erhalten, plus Linien f¨ur das Jahr 2018.

Aufgabe 4.3: Temperaturanomalien • Wenn Sie fertig sind mit Aufgabe 4.1 und Aufgabe 4.2, sprechen Sie uns an f¨ ur diese Aufgabe!

10

5

Tag 4 Aufgabe 5.1: Einlesen mit numpy Funktionen • Lesen Sie die Daten einer einzelnen Wetterstation noch einmal ein, diesmal mit einer der numpy Funktionen numpy.loadtxt oder numpy.genfromtxt. Immer, wenn sich ein Datensatz ordentlich verh¨ alt, l¨ asst sich das Einlesen wesentlich schneller mit diesen Funktionen machen als mit einer selbstgeschriebenen Funktion, die Zeile f¨ur Zeile geparst werden muss. • Schreiben Sie eine Funktion, die aus allen Dateien, gelesen mit einer der oben genannten Funktionen, den Datenw¨urfel generiert. Aufgabe 5.2: Rumspielen mit Textdateien • Diese Aufgabe ist nur interessant f¨ur Sie, wenn Sie das Einlesen von Dateien mit selbstgeschriebenen Funktionen noch etwas u¨ben wollen. • Schreiben Sie eine Funktion, die per open eine Datei ¨offnet. Die Datei soll daraufhin untersucht werden, wie H¨aufig ein bestimmtes Zeichen auftaucht. Das Ergebnis soll per return zur¨ uckgegeben werden. Die Funktion soll den Namen einer Datei und das Zeichen, das gez¨ahlt werden soll, als Argumente erwarten. • Schreiben Sie eine Funktion, der Sie beliebig viele Zeichen ¨ubergeben k¨onnen (z.B. in einer Liste), dessen h¨aufigkeiten gez¨ahlt werden sollen. F¨uhren Sie die Funktion mit der Datei einer Wetterstation aus, und lassen Sie die H¨aufigkeiten von allen Ziffern von 0-9 z¨ahlen. Tragen Sie die H¨aufigkeiten der Ziffern mit plt.bar beziehungsweise Axes.bar auf. • Schreiben Sie eine Funktion, die zwei Argumente erwartet: den Namen der Datei einer Wetterstation, und den Namen einer Spalte des Datensatzes. Mit Name einer Spalte ist hier die Bezeichnung einer Spalte in der ersten Zeile der Datei gemeint, also so etwas wie STATIONS ID f¨ ur die erste Spalte, oder TMK f¨ ur die Tagesmittel der Temperatur. Die Funktion soll nur die Werte der gew¨ahlten Spalte aus der Datei auslesen, und als Numpy Array zur¨ uckgeben. Die Position der Spalte soll programmatisch aus der ersten Zeile ermittelt werden, und nicht einfach manuell vorgegeben werden. Aufgabe 5.3: Rekorde • Stellen Sie in einem Plot f¨ur jeden Tag des Jahres dar, in welchem Jahr dieser Tag der heißeste war. Eine Achse sollte dabei alle Jahre von 1880-2018 enthalten. Die andere Achse sollte die Tage eines Jahres von 1 bis 366 enthalten. F¨ur jeden Tag sollte dann ein Punkt bei genau dem Jahr eingezeichnet werden, welches den Rekord f¨ur den jeweiligen Tag h¨alt. Aufgabe 5.4: Kriterien kombinieren • Erstellen Sie eine Funktion, die f¨ur eine beliebige Station f¨ ur jedes Jahr die Anzahl der

11

Tage ermittelt, an denen es heißer als 20  C war und gleichzeitig der Bedeckungsgrad kleiner war als 2. (Der Bedeckungsgrad kann Werte von 0 bis 8 annehmen.) • Tragen Sie die ermittelten Werte f¨ur alle Jahre von 1880 bis 2018 auf. • Mit diesem Rezept k¨onnen Sie noch weiter sch¨one Dinge ermitteln: Gibt es Tage an denen es viel Niederschlag hab und gleichzeitig sehr heiß war? Vielleicht war an solchen Tagen auch die Windgeschwindigkeit uberdurchschnittlich hoch? Sie k¨onnen ¨ ja noch verschiedene Kriterien kombinieren und darstellen. • F¨ur weitere Aufgaben sprechen Sie uns bitte an!

12

#--------------------------------------------------------------------# Importe #--------------------------------------------------------------------import numpy import matplotlib.pyplot as plt import os #--------------------------------------------------------------------# Die Stationsnamen und andere wichtige Parameter #--------------------------------------------------------------------s_names = os.listdir("station_data") days_in_month = [31, 29, 31, 30, 31, 3...


Similar Free PDFs