“Warum wurde meiner Kreisliga-Basketballmannschaft diese zu kleine Halle zugeteilt? Da wäre doch bestimmt noch eine passendere frei!”
Aus dieser Frage entstand dieses Projekt, in dem zwar nicht direkt die Welt gerettet wird, aber dafür eine akute Frage aus dem Alltag behandelt wird. Insbesondere da eine Hallensuche auf der Internetseite der Stadt Münster zwar angeboten wird, aber zurzeit unbrauchbar ist (https://www.stadt-muenster.de/sportamt/sportstaetten/hallensuche). Darüber hinaus haben wir schnell die passenden öffentlich bereit gestellten Datensätze gefunden, sodass wir direkt loslegen konnten.
Denn bisher haben wir solche Hallenbelegungen als selbstverständlich angesehen: Mein Verein bietet einen Sportkurs an, also bekommt er auch eine Halle zur Verfügung gestellt. Aber wie ist eigentlich die Auslastung insgesamt? Sind alle Hallen ständig belegt oder gibt es Leerstand? Wie sind die Hallen im Stadtgebiet verteilt?
Datengrundlage und -integration
Datengrundlage sind die öffentlich bereit gestellten Datensätze der Stadt Münster zum Belegungsplan, den Sporthallen selbst, und den Vereinen. Diese drei Datensätze galt es zusammenzusetzen und zu verarbeiten. Zusätzlich wurden Geodaten der Münsteraner Stadtteile sowie Bevölkerungsstatistiken integriert, um räumliche Analysen und bevölkerungsbezogene Auslastungskennzahlen zu ermöglichen.
Datenbanksetup und -verarbeitung
Zur strukturierten Speicherung und effizienten Abfrage der Datenquellen haben wir uns entschieden, lokal einen MySQL-Server aufzusetzen. Die Rohdaten aus CSV-Dateien und Shapefiles wurden über ein Jupyter Notebook in normalisierte Datenbanktabellen importiert. Diese Architektur ermöglicht es, komplexe Joins zwischen Belegungsdaten, Einrichtungen, Adressen und Geodaten mit SQL-Befehlen durchzuführen.
Datenexploration
Die Datenexploration und -analyse haben wir mit Python durchgeführt, wobei hauptsächlich Pandas für Datenmanipulation, Scikit-learn für Clustering-Algorithmen (K-Means), und Matplotlib/Plotly für Visualisierungen zum Einsatz kamen. Für die Identifikation von Nutzungsmustern wurde eine K-Means-Clusteranalyse auf Basis von Auslastungsmerkmalen wie Wochentag-Verteilung und Zeitfenster-Präferenzen implementiert.
Geospatiale Analyse
Für räumliche Analysen und die Erstellung interaktiver Karten haben wir GeoPandas zur Verarbeitung von Shapefile-Daten der Münsteraner Stadtbezirke und Folium für die Web-basierte Kartendarstellung verwendet.
Web-Anwendung und Visualisierung
Um Ergebnisse zugänglich und interaktiv zu machen, haben wir sie in eine Streamlit-App eingebunden. Diese bietet verschiedene Optionen: Heatmaps, Verfügbarkeitssuche nach Zeitfenstern, Nutzergruppen-Segmentierung und Clusteranalysen von Sportarten-Nutzungsmustern.
Ergebnisse
Es hat sich schnell herauskristallisiert: Es ist keine schöne Halle mehr frei am Donnerstagabend für die Basketballmannschaft. In ganz Münster nicht. Was auch die Kern-Erkenntnis ist: Die Sporthallen Münsters sind vom Vereinssport an Wochentagen ab mittags praktisch komplett ausgelastet. (Vormittags sind die Hallen natürlich dem Schulsport gewidmet.)
Learnings
Bei diesem Projekt haben wir gelernt, wie man verschiedene Python-Tools zusammenbringt, um aus rohen Daten eine interaktive Web-App zu erstellen. MySQL als Datenbank war durchaus eine gute Idee, um unsere verschiedenen CSV-Dateien und Geodaten an einem Ort zu speichern und mit einfachen SQL-Befehlen wieder abzurufen. Gleichzeitig ist es nun aber etwas unglücklich, das der User erstmal selbst lokal die Datenbank erstellen muss. Was uns in Python überraschte, war, dass wir für unsere Zwecke immer schnell eine passende Library gefunden haben (GeoPandas, Folium, etc.). Das erleichterte natürlich die Umsetzung enorm, insbesondere die Karte Münsters war schnell importiert.
Auch Streamlit hat uns viel Arbeit erspart: Anstatt eine komplette Website programmieren zu müssen, konnten wir mit wenigen Zeilen Python-Code Dropdown-Menüs, Karten und Diagramme erstellen, die sofort im Browser funktionieren. Die größte Herausforderung war das "Daten-Chaos": Dieselben Stadtteile hatten in verschiedenen Dateien unterschiedliche Namen (z.B. "01 Mitte" vs. "Mitte"), was viel Aufräum-Arbeit bedeutete, bevor wir die Daten sinnvoll zusammenführen konnten. Außerdem bestehen große Hallen aus mehreren Segmenten, die separat belegt werden können.
Team & Rollen
Tim Goral
An allen Schritten des Projekts beteiligt
Anna Nowitzki
An allen Schritten des Projekts beteiligt
Thorsten Seifert
An allen Schritten des Projekts beteiligt
Mentor:in
Sebastian Schäper