Eine Anleitung für die Bearbeitung und Abgabe der Übunsgaufgaben in Python findet Ihr im Abgabebereich des Moodlekurses ( Link ).
Kurzform: Eine Aufgabe besteht immer aus einer "Funktion", die für einen definierten Input (Argumente) einen definierten Output zurückgeben soll (engl.: return
). Überprüft die Korrektheit dieses Outputs und damit Eurer Lösung mit testme(funktionsname)
. Wenn Ihr fertig seid, erzeugt unter im Abschnitt Gesamtauswertung Euer Zertifikat und gebt es dann in Moodle zusammen mit diesem Notebook ab.
Hier ein Beispiel für eine Funktion: Die Funktion heißt beispiel
, hat die Argumente (den Input) x
und y
und gibt die Variable ergebnis
zurück. Das Ergebnis ist in diesem Fall die Summe der Argumente x
und y
.
def beispiel(x, y):
ergebnis = x + y
return(ergebnis)
beispiel(1,1)
beispiel(2,-3)
Damit die Tests bei Euch laufen, müsst Ihr folgende Zeile ausführen. Und dann geht es los!
from testzentrum import *
import pandas as pd
Die Funktion eintraege
soll ausgeben, wie viele Einträge ein Dataframe df
insgesamt hat. Erweitert sie entsprechend.
Hinweis: Mit "Einträge" sind hier die Äquivalente zu "Zellen" einer Tabelle gemeint.
def eintraege(df):
pass
testme(eintraege)
Erweitert die Funktion erster
so, dass sie den ersten Eintrag eines Dataframes df
ausgibt - also den Eintrag, der in der ersten Spalte in der ersten Zeile steht. Nutzt dafür iloc
.
def erster(df):
pass
testme(erster)
Die Funktion letzter
soll den letzten Eintrag der Spalte spalte
des Dataframes df
zurückgeben. Achtung: Das scheint eigentlich trivial, ist aber ein bisschen tricky. In pandas
spricht man einzelne Zeilen eines DataFrame mit dem eingebauten Zeilenindex (DataFrame.index
) und .loc[...]
an.
Den dritten Eintrag der Spalte temp
des DataFrame df
wählt man also wie folgt aus:
# Python-Indizierung beachten: erster Index ist die 0!
df.loc[df.index[2],"temp"]
Den letzten Eintrag einer Liste oder eines Arrays wählt kann man übrigens mit dem Index -1
auswählen. Praktisch!
# Beispiel anhand einer Liste
>>> a = [2,5,9,6]
>>> a[-1]
6
Tja, warum einfach, wenn's auch kompliziert geht. Also nochmal: Gibt den letzten Eintrag der Spalte spalte
zurück. Kriegst Du das hin?
def letzter(df, spalte):
pass
testme(letzter)
Die Funktion mittelmass
soll den Median (median
) der Spalte spalte
des Dataframes df
zurückgeben.
Achtung: Wenn der Spaltenname als Funktionsargument (also als Variable) übergeben wird, erfolgt der Zugriff mit df[spalte]
. Der Ausdruck df.spalte
hingegen funktioniert dann nicht.
def mittelmass(df, spalte):
pass
testme(mittelmass)
Bevor man Berechnungen anstellt, kann es sinnvoll sein zu überprüfen, ob denn überhaupt in jeder Zelle ein gültiger Wert vorhanden ist. Die Funktion fehlend
soll daher die Anzahl an NaN
-Einträgen in einer bestimmten Spalte spalte
eines Dataframes df
zurückgeben. Macht Euch dafür die Funktion pandas.DataFrame.isna
zunutze.
Hinweis: Überlegt euch, was passiert, wenn man True
und False
Werte addiert...
def fehlend(df, spalte):
pass
testme(fehlend)
Aus einem DataFrame wollen wir Zeilen auswählen, in denen die Spalte spalte
bestimmte Bedingungen erfüllt: Die Werte der Spalte spalte
sollen größer als xmin
und kleiner als xmax
sein. Wir wählen nun zunächst alle Zeilen des DataFrame df
aus, die diese Bedingung erfüllen. Die Funktion teilmenge
soll dann die Menge der Elemente in dieser Auswahl zurückgeben (also die Zahl der verbleibende Zeilen mal der Zahl der Spalten).
Hinweis: Für die Auswahl der Zeilen verwendet Ihr die Syntax df.loc[condition]
. Mal ein Beispiel:
condition = (df[spalte] > 5) & (df[spalte] < 99)
df_auswahl = df.loc[condition]
...
Schaut genau hin: Die Einzelbedingungen müssen in Klammern gefasst werden, bevor sie über das logische &
verknüpft werden.
def teilmenge(df, spalte, xmin, xmax):
pass
testme(teilmenge)
Wir nutzen nun einen DataFrame df
mit zwei Spalten: Die erste Spalte standort
spezifiziert die Landnutzung am Standort (also z.B. "Wald", "Wiese"), die zweite Spalte temp
enthält die gemessene Lufttemperatur.
Nun interessiert uns aus einem großen Datensatz der Mittelwert der Temperatur (Spalte temp
), die an Standorten (Spalte standort
) mit einer bestimmten Landnutzung lanu
gemessen wurden. Wir müssen also zunächst diejenigen Zeilen von df
auswählen, in denen die Spalte standort
den Wert lanu
annimmt. Für die verbleibenden Zeilen ermitteln wir den Mittelwert der Spalte temp
und runden diesen auf zwei Dezimalstellen. Hinweis: Der Befehl zur Rundung eines Wertes x
auf zwei Nachkommastellen lautet round(x, 2)
. Den gerundeten Mittelwert gibst Du schließlich mit return
zurück.
def mitteltemp(df, lanu):
pass
testme(mitteltemp)
Der DataFrame df
enthält zwei Spalten: Die Spalte datum
enthält das Datum der Messwerte in der Spalte messung
. Das Datumsformat ist %d.%m.%Y
, also z.B. "09.11.1989" für den Tag des Mauerfalls. Nutze in der Funktion aufjahrundtag
zunächst die Spalte datum
, um einen datetime-Index für den DataFrame zu erzeugen. Die Funktion soll dann den Messwert zurückgeben, der für ein Datum ondate
in der Spalte messung
steht.
Hinweis: Die Erzeugung eines datetime-Index findet Ihr im Notebook zur Säkularstation. Hier nochmal der prinzipielle Ablauf:
df["datum"] = pd.to_datetime(df["datum"], format=...)
df = df.set_index("datum")
Die Auswahl erfolgt dann wieder mittels df.loc[...]
def aufjahrundtag(df, ondate):
pass
testme(aufjahrundtag)
get_certificate(testmysolutions=[eintraege, erster, letzter, mittelmass, fehlend, teilmenge, mitteltemp, aufjahrundtag],
lesson=3)