import pandas as pd
import random
def offset_coordinate(old, distance = 100):
= old + random.normalvariate(0, distance)
new return new
= pd.read_csv("data/zeckenstiche.csv") zeckenstiche
ModuleNotFoundError: No module named 'pandas'
Für diese Übung brauchen wir
pandas
sowie random
offset_coordinate
aus Übung 8.5pandas DataFrame
in der Variabel zeckenstiche
import pandas as pd
import random
def offset_coordinate(old, distance = 100):
= old + random.normalvariate(0, distance)
new return new
= pd.read_csv("data/zeckenstiche.csv") zeckenstiche
ModuleNotFoundError: No module named 'pandas'
Mache dich nochmals damit vertraut, einzelne Spalten zu selektieren. Schau dir DataFrames nochmals an wenn du nicht mehr weisst wie das geht.
"x"]
zeckenstiche["y"] zeckenstiche[
Mache dich nochmals damit vertraut, wie man neue Spalten erstellt. Schau dir DataFrames nochmals an wenn du nicht mehr weisst wie das geht. Erstelle ein paar neue Spalten nach dem Beispiel unten um die Hangriffe zu üben. Lösche die Spalten im Anschluss wieder mit del zeckenstiche['test1']
etc.
"test1"] = "test1"
zeckenstiche[
"test2"] = 10
zeckenstiche[
"test3"] = range(10) zeckenstiche[
# zeckenstiche könnte danach folgendermassen aussehen:
zeckenstiche
NameError: name 'zeckenstiche' is not defined
# unnötigen Spalten wieder entfernen:
del zeckenstiche['test1']
del zeckenstiche['test2']
del zeckenstiche['test3']
NameError: name 'zeckenstiche' is not defined
pandas
kennt eine ganze Familie von Methoden, um Spalten zu Manipulieren und Daten zu Aggregieren (apply
, map
, mapapply
, assign
). Es würde den Rahmen dieses Kurses sprengen, die alle im Detail durchzugehen, es lohnt sich aber sehr sich mit diesen auseinanderzusetzen wenn man sich näher mit Python befassen möchte.
Im unserem Fall brauchen wir lediglich die Methode apply
um die Funktion offset_coordinate()
auf die Zeckenstichkoordinaten anzuwenden. Dabei gehen wir wie folgt for:
"x"].apply(offset_coordinate)
zeckenstiche[#\______1_______/ \_2_/\_______3_________/
# 1. Spalte selektieren (["x"])
# 2. Methode "apply" aufrufen
# 3. Function übergeben
Verwende dieses Schema um auch offset_coordinate
auf die y
Spalte anzuwenden und speichere den Output dieser beiden Operationen als neue Spalten x_sim
sowie y_sim
. Die DataFrame zeckenstiche
sollte danach wie folgt aussehen:
"x_sim"] = zeckenstiche["x"].apply(offset_coordinate)
zeckenstiche["y_sim"] = zeckenstiche["y"].apply(offset_coordinate) zeckenstiche[
zeckenstiche
NameError: name 'zeckenstiche' is not defined
In Übung 9.3 haben wir unsere Funktion offset_coordinate
aufgerufen, ohne den Parameter distance
zu spezifizieren. Dies war möglich, weil wir für distance
einen Defaultwert festgelegt hatten (100 Meter). Wir können aber auch zusätzliche Parameter kommagetrennt nach der Funktion angeben. Dies sieht folgendermassen aus:
"x"].apply(offset_coordinate, distance = 200) zeckenstiche[
Nutze diese Möglichkeit, um den Offset (distance
) auf maximal 10 Meter zu reduzieren.
"x_sim"] = zeckenstiche["x"].apply(offset_coordinate, distance = 10)
zeckenstiche["y_sim"] = zeckenstiche["y"].apply(offset_coordinate, distance = 10) zeckenstiche[
Um die Original x
/y
-Werte sowie die simulierten Daten im gleichen Plot darzustellen, wird folgendermassen vorgegangen: Der erste Datensatz wird mit .plot()
visualisiert, wobei der Output einer Variabel (z.B. basemap
) zugewiesen wird. Danach wird der zweite Datensatz ebenfalls mit .plot()
visualisiert, wobei auf den ersten Plot via dem Argument ax
verwiesen wird.
Bei den roten Punkten handelt es sich um die Original-Zeckenstichen, bei den blauen um die simulierten (leicht verschoben) Zeckenstiche. Visualisiere deine eigenen Zeckenstiche auf diese Weise.
from matplotlib import pyplot as plt
= zeckenstiche.plot("x", "y", kind = "scatter", color = "red")
basemap "x_sim", "y_sim", kind = "scatter", ax = basemap, color = "blue")
zeckenstiche.plot(
"equal") plt.axis(
ModuleNotFoundError: No module named 'matplotlib'