Im ersten Plotly-Beispiel ging es um die Erstellung eines Liniendiagramms, das die Entwicklung der Wahlbeteiligung zum EU-Parlament in Kiel zeigt. Es wurden dabei Daten verwendet, die fester Bestandteil des Codes waren. In diesem zweiten Beispiel demonstriere ich nun, wie ein Datensatz (CSV) zunächst mit requests
abgerufen und anschließend mit pandas
gelesen wird, um schließlich mit plotly
ein Liniendiagramm zu erzeugen.
Folgende Pakete müssen mit pip
(Windows) bzw. pip3
(Linux, macOS) installiert werden:
pip install requests pandas plotly
Das Python-Skript beginnt mit folgenden Importanweisungen:
import io
import requests
import pandas as pd
import plotly.express as px
Es folgt die URL zum Datensatz. In diesem Beispiel geht es um die Anzahl der Handwerksbetriebe in Kiel in den Jahren 2001 bis 2021:
CSV_URL = "https://www.kiel.de/de/kiel_zukunft/statistik_kieler_zahlen/open_data/kiel_wirtschaft_arbeit_handwerksbetriebe.csv"
Dieser Datensatz wird mit requests
abgerufen:
csv_data = requests.get(CSV_URL).content
Anschließend werden die Daten mit pandas
gelesen, d.h. es wird ein Pandas-Dataframe erstellt:
df = pd.read_csv(io.StringIO(csv_data.decode("utf-8")), sep=";")
Die ersten Zeilen dieses Dataframes lassen sich mit head()
anzeigen:
print(df.head(3)) # <- Die ersten drei Zeilen ausgeben.
Abschließend kommt plotly
zum Zug:
fig = px.line(
df,
x="Jahr",
y="Betriebe",
title="Handwerksbetriebe in Kiel (2001 - 2021)",
labels={"x": "Jahr", "y": "Betriebe"},
)
fig.show()
Dabei werden den Variablen x
und y
die Namen jener Spalten zugewiesen, deren Werte dargestellt werden sollen (hier: „Jahr“ und „Betriebe“). Zusätzlich (bzw. als Alternative zu fig.show()
) kann auch eine HTML-Datei erzeugt werden. Dabei bewirkt auto_open=True
, dass diese Datei im Browser geöffnet wird.
fig.write_html(„betriebe-kiel.html", auto_open=True)
Zum Abschluss nochmal der gesamte Code:
import io
import requests
import pandas as pd
import plotly.express as px
CSV_URL = "https://www.kiel.de/de/kiel_zukunft/statistik_kieler_zahlen/open_data/kiel_wirtschaft_arbeit_handwerksbetriebe.csv"
def main():
# Fetch data
csv_data = requests.get(CSV_URL).content
# Read data
df = pd.read_csv(io.StringIO(csv_data.decode("utf-8")), sep=";")
# Print the first three rows
# print(df.head(3))
# Create the lineplot
fig = px.line(
df,
x="Jahr",
y="Betriebe",
title="Handwerksbetriebe in Kiel (2001 - 2021)",
labels={"x": "Jahre", "y": "Anzahl der Betriebe"},
)
# Show the line chart
fig.show()
if __name__ == "__main__":
main()