import random
import pandas as pd
= [random.gammavariate(1, 1) for x in range(1000)]
random_gamma
= pd.Series(random_gamma)
random_gamma
= "hist", bins = 50) random_gamma.plot(kind
ModuleNotFoundError: No module named 'pandas'
Es ist äusserst Zentral, Daten regelmässig und oft zu visualisieren. Die de facto standart Library hierfür in Python ist matplotlib
. Diese Library kann man direkt ansteuern wie in diesem Tutorial beschrieben wird. Wir verwenden die library jedoch etwas anders: Dabei nutzen wir die Tatsache aus, dass sowohl pandas
wie auch geopandas
eingebaute Methoden (methods) haben um deren Inhalte zu visualisieren. Die Methode heisst in beiden Fällen .plot()
, wie wir weiter unten noch sehen werden.
List
pandas
vereinfacht das Visualisieren von Daten sogar soweit, dass es sich jewils lohnt seine Listen, Dictionaries usw. zuerst in eine Series
oder DataFrame
zu überführen um sie zu visualisieren (wie ich zum Beispiel in Zufallszahlen generieren jeweils gemacht habe).
import random
import pandas as pd
= [random.gammavariate(1, 1) for x in range(1000)]
random_gamma
= pd.Series(random_gamma)
random_gamma
= "hist", bins = 50) random_gamma.plot(kind
ModuleNotFoundError: No module named 'pandas'
Weitere Beispiele zu Histogrammen aus Listen findet ihr im Kapitel Zufallszahlen generieren .
List
Das Visualisieren als Boxplot ist sehr ähnlich, man ersetzt "hist"
lediglich durch "box
. Eine komplette liste der möglichen Argumente für findet ihr hier: https://pandas.pydata.org/pandas-docs/stable/reference/api/pandas.Series.plot.html
= "box") random_gamma.plot(kind
NameError: name 'random_gamma' is not defined
Um einen Scatterplot zu erstellen, braucht es eine DataFrame
(eine Series
reicht hierfür nicht aus).
= pd.read_csv("data/zeckenstiche.csv") zeckenstiche
NameError: name 'pd' is not defined
"x", "y", kind = "scatter") zeckenstiche.plot(
NameError: name 'zeckenstiche' is not defined
Um aus GeoDataFrames Karten zu machen verwendet man ebenfalls die .plot()
Methode. Um wirklich schöne Karten mit Python herzustellen braucht man viel Übung. Für eine schnelle Visualisierung reicht aber die .plot()
Methode.
import geopandas as gpd
= gpd.read_file("data/zeckenstiche.gpkg")
zeckenstiche = gpd.read_file("data/wald.gpkg") wald
ModuleNotFoundError: No module named 'geopandas'
Einfache Plots ohne anpassung:
wald.plot()
NameError: name 'wald' is not defined
Anpassung der Plot Grösse:
= (5,5)) wald.plot(figsize
NameError: name 'wald' is not defined
Choroplethenkarte Karte
from matplotlib.colors import ListedColormap
= ListedColormap(["green","lightgrey"])
my_cmap = "Wald_text", legend = True, cmap = my_cmap) wald.plot(column
ModuleNotFoundError: No module named 'matplotlib'
Mehrere Layers:
= wald.plot(column = "Wald_text", legend = True, cmap = my_cmap)
base = "Red", ax = base) zeckenstiche.plot(color
NameError: name 'wald' is not defined
Weitere Informationen dazu findet ihr hier: https://geopandas.org/docs/user_guide/interactive_mapping.html
Vollautomatisch, ohne Anpassungen:
zeckenstiche.explore()
Zeckenstiche Rot eingefärbt:
= "red") zeckenstiche.explore(color
Zeckenstiche nach "accuracy"
eingefärbt:
= "accuracy") zeckenstiche.explore(column
Wald nach "Wald_text"
eingefärbt (beachte, dass ich my_cmap
weiter oben erstellt habe!):
= "Wald_text", cmap = my_cmap) wald.explore(column
Zwei übereinander gelagerte Layers:
= wald.explore(column = "Wald_text", cmap = my_cmap)
base = base, color = "red") zeckenstiche.explore(m
NameError: name 'wald' is not defined
In folgenden Beispielen zeigen wir noch ein paar einfache Wege, wie ihr die Zeckenstichdaten visualisieren könnt.
import pandas as pd
import geopandas as gpd
import matplotlib.pyplot as plt
import descartes
= gpd.read_file("data/wald.gpkg")
wald = pd.read_csv("data/zeckenstiche_full.csv")
zeckenstiche_full
= gpd.points_from_xy(zeckenstiche_full['x'], zeckenstiche_full['y'])
geom
= gpd.GeoDataFrame(
zeckenstiche_gpd
zeckenstiche_full,=geom,
geometry= 2056) crs
ModuleNotFoundError: No module named 'pandas'
Mit der Erweiterung seaborn
lassen sich mit wenigen Zeilen Code eine Kernel Density rechnen und visualisieren. Siehe nachstehenden Code:
import seaborn as sns
= plt.subplots(1, figsize=(6, 6))
f, ax =0.1, ax=ax)
wald.boundary.plot(linewidth='red', linewidth=0.1, ax=ax)
zeckenstiche_gpd.plot(color
= zeckenstiche_full.x, y= zeckenstiche_full.y,shade = False,n_levels = 10, cmap = "viridis", ax = ax)
sns.kdeplot(x
ax.set_axis_off() plt.show()
ModuleNotFoundError: No module named 'seaborn'
Mit der Erweiterung contextily
kann man sehr schnell und einfach Hintergrundkarten in den Plot einbinden. Dafür muss das GeoDataFrame vorher aber in WGS84 Koordinaten (EPSG 3857) konvertiert werden (mit to_crs
, s.u.).
import contextily as ctx
= plt.subplots(1, figsize=(6, 6))
f, ax = 3857).plot(ax = ax)
zeckenstiche_gpd.to_crs(epsg
ctx.add_basemap(ax)
ax.set_axis_off() plt.show()
ModuleNotFoundError: No module named 'contextily'
Kernel Denisty und Hintergrundkarte können auch kombiniert werden:
= zeckenstiche_gpd.to_crs(epsg = 3857).geometry.x
lat = zeckenstiche_gpd.to_crs(epsg = 3857).geometry.y
lng
= plt.subplots(1, figsize=(6, 6))
f, ax
= lat,y = lng,shade = False,n_levels = 25, cmap = "viridis", ax = ax)
sns.kdeplot(x
ctx.add_basemap(ax)
ax.set_axis_off() plt.show()
NameError: name 'zeckenstiche_gpd' is not defined