Pandas und Plotly für die Datenvisualisierung nutzen

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()