Touchgrass

Touchgrass

Eine personalisierte Freizeitkarte Münsters, die passend zu den aktuellen Bedürfnissen der Nutzer*Innen verschiedene Freizeitaktivitäten inklusive zugehörigen relevanten Informationen anzeigt - als perfekter Guide um spontan etwas zu unternehmen oder auch einfach mal den Kopf frei zu bekommen - also: go outside and touch grass!

Eine personalisierte Freizeitkarte Münsters, die passend zu den aktuellen Bedürfnissen der Nutzer*Innen verschiedene Freizeitaktivitäten inklusive zugehörigen relevanten Informationen anzeigt - als perfekter Guide um spontan etwas zu unternehmen oder auch einfach mal den Kopf frei zu bekommen - also: go outside and touch grass!

Jede*r kennt diesen Moment - man sitzt im gleichermaßen hektischen wie routinierten Alltag auf der Couch und möchte gerade eigentlich einfach nur raus - raus an die frische Luft oder raus an einen anderen Ort, Hauptsache weg von dem Gewohnten, neuen Input bekommen oder Entspannung finden, sich eine kleine Auszeit schaffen von diesem immer wieder Gleichen.

Doch wohin? Worauf hat man eigentlich genau Lust? Was ist denn in der Nähe? Und was ist gerade überhaupt geöffnet? Viele Fragen und damit einhergehender Aufwand um Antworten auf sie zu finden - eine Schwelle, die uns allen manchmal einfach zu hoch ist, sodass wir sitzen bleiben und uns der Routine hingeben. Aber was, wenn es gar nicht so schwer sein muss?

Was, wenn es eine einfache und schnelle Möglichkeit gäbe, basierend auf den aktuellen Bedürfnissen, während wir dort auf der Couch sitzen, uns die Freizeitaktivitäten in unserer Stadt anzeigen zu lassen? Was, wenn wir dafür gar nicht selbst recherchieren, sondern einfach einige Fragen beantworten müssten und anschließend eine Übersicht darüber erhielten, wo sich diese Aktivitäten um uns herum befinden? Wenn diese verschiede Kategorien umfassen sowie nützliche Infos wie die Standorte von Refill-Stationen oder öffentlichen Toiletten bereitstellen würde? Was, wenn es gar nicht mal so schwer wäre, der Aufforderung “go touch grass!” nachzukommen?

Genau diese Frage haben wir uns zu Beginn unserer TechLabs Journey gestellt - und im Folgenden findet ihr die Beschreibung unserer Antwort darauf:

Unsere personalisierte Freizeitkarte TouchGrass!

In einem ersten Schritt formulierten wir das inhaltliche Ziel unseres Projekts, um im Anschluss einen Workflow erarbeiten zu können:

Eine Karte Münsters, die verschiedene Kategorien an Aktivitäten (z.B. Kinos, Gaststätten, Museen etc.) als Icons beinhalten und zusätzliche Infos wie die Öffnungszeiten bereitstellen sollte. Darüber hinaus sollte der eigene Standort (nach diesbezüglicher Abfrage) getracked und anschießend die Icons in einem selbst gewählten Umkreis gefiltert werden. Welche Kategorien initial angezeigt werden, sollte dabei durch einen Algorithmus bestimmt werden, der je nach Auswahl der Antwortmöglichkeiten auf fortlaufend engmaschigere Fragen Punkte verteilt, um diese Antworten zu gewichten und somit auf die Bedürfnisse der Nutzer*Innen abgestimmte Kategorien auszuwählen.

Somit ergaben sich verschiedene Unterpunkte des Projektes, die wir in verschiedene Branches auf GitHub übertrugen, um dort parallel an den jeweiligen Codes arbeiten zu können.

  1. Münster Map selbst

  2. Algorithmus

  3. Standort-Abfrage

1. Zunächst widmeten wir uns dabei der Münster Map:
Angenehmerweise fanden wir die benötigten Datensätze in dem Open Data Portal der Stadt Münster und extrahierten diese als GeoJSON-Dateien. Hierzu bleibt zu sagen, dass in manchen der daraus resultierten raw_geojson files die Öffnungszeiten nicht oder nicht korrekt angegeben waren, sodass es bspw. bei den Museen einer händischen Recherche sowie Integration dieser Angaben in den jeweiligen File bedurfte. Das war verhältnismäßig aufwendig, führte aber immerhin dazu, dass nun korrekte und aktuelle Öffnungszeiten auf der Karte angegeben werden. Anschließend wird in dem von uns erstellten Python-Skript mittels Folium eine interaktive Leaflet Karte mit Zentrierung auf Münster erstellt und diese GeoJSON Dateien mittels geopandas eingelesen. Daraufhin werden diese Punktdaten der Kategorien in Form verschiedener selbst gewählter Icons auf der Karte dargestellt. Zusätzlich werden die in den GeoJSON enthaltenen Angaben zu Name, Adresse, Websites und Öffnungszeiten der jeweiligen Orte bei Anklicken der Icons neben diesen in einer Box angezeigt. Zuletzt werden die Grünflächen aus der entsprechenden Datei eingelesen.

2. Nachdem die Struktur der Karte stand widmeten wir uns dem Algorithmus:
Hierfür besprachen wir zunächst, wie die Fragen aufgebaut sein sollten und entschieden uns für eine fortlaufende Konkretisierung, d.h. dass zunächst grobe Fragen gestellt werden (möchtest du lieber drinnen oder draußen etwas unternehmen?) und dann zunehmenden genauer Interessen eingegrenzt (Stimmung: aktiv; entspannt, kulturell?) sowie weitere Bedürfnisse integriert werden (lieber allein oder in Gesellschaft?). Schlussendlich werden Modifier wie die Frage nach Kindern oder dem Wunsch, Essen zu gehen, verwendet. Basierend auf den jeweiligen Antworten der Nutzer*Innen werden dabei Punkte von 1-5 vergeben. Diese Abstufung funktioniert deutlich besser als die zunächst verwendete grobere Abstufung von 1-3 Punkten, sodass letztendlich eine recht differenzierte Auswahl der Kategorien getroffen wird, wobei die Mindestzahl an vergebenen Punkten, um als Empfehlung ausgegeben zu werden, 6 beträgt und insgesamt mindestens 2 Kategorien empfohlen werden müssen.

3. Nachdem auch der Algorithmus (bisher noch getrennt von der Map) funktionierte, widmeten wir uns der Standort-Abfrage, was sich als der komplizierteste Teil des Projekts herausstellen sollte:
Während die Standortabfrage selbst recht einfach über die LocateControl-Funktion in Folium möglich ist (woraufhin auf der Leaflet-Karte ein Standortsymbol angezeigt wird, welches bei einem Klick über die HTML5-Geolocation-API den Standort der Nutzer*Innen abfragt), gestaltete sich das anschließende Filtern der Icons nach diesem Standort, bzw. einem zusätzlich einstellbaren Umkreisfilter als schwierig. Es gelang uns, eine Slidebar für den Umkreis zu erstellen sowie den Standort korrekt abzufragen, doch das Filtern der angezeigten Icons basierend auf diesem Standort + Einstellung der Slidebar misslang, so dass wir uns auf die Standortabfrage selbst beschränkten. Glücklicherweise war dies nicht weiter dramatisch, da die Karte bei Ermittlung des Standorts automatisch an diesen heranzoomt, sodass anschließend durch manuelles Verringern dieses Zooms die Icons im Umfeld des Standorts sichtbar werden.

4. Schlussendlich mussten die so erstellten Unterpunkte des Projekts zusammengeführt werden. Diese Verknüpfung erfolgte bei uns in Streamlit und deren Ergebnis wird im Folgenden erläutert.

Als Ergebnis der oben beschrieben Schritte öffnet sich bei Ausführung des finalen Skripts Streamlit, woraufhin der Algorithmus in der erläuterten Art und Weise in zunehmend feinerer Graduierung die Interessen der Nutzer*Innen erfragt und die Antworten dementsprechend gewichtet. Anschließend wird die Münster-Map generiert, welche zunächst nur die von dem Algorithmus als Empfehlung ausgegebenen Kategorien als Icons anzeigt. Dabei sind jedoch alle verfügbaren Kategorien als Checkboxen am Rand der Karte sichtbar, sodass manuell bei Anklicken derselbigen weitere Kategorien geladen werden können. Darüber hinaus findet sich auf der Karte selbst ein Standortbutton, der bei einem Klick nach Einwilligung der Nutzenden deren Standort abfragt. Dieser wird als blauer Punkt innerhalb der Karte angezeigt, sodass gut ersichtlich wird, welche der angezeigten Aktivitäten sich in der Nähe befinden. Bei einem weiteren Klick auf die entsprechenden Icons werden die relevanten Informationen wie Name, Adresse, Website und Öffnungszeiten angezeigt.

Dabei können die Nutzenden manuell innerhalb der Karte zoomen sowie diese in alle Richtungen verschieben, um einen besseren Überblick über die angezeigten Icons zu erhalten.

Bezogen auf die Learnings aus diesem Projekt lässt sagen, dass wir uns in erster Linie mit den für die Umsetzung eines solchen Projekts relevanten Tools vertraut machen konnten. Dazu zählt bspw. die Funktionsweise von GitHub mit den unterschiedlichen Branches und Prozessen wie dem Mergen derselbigen, aber auch mit Anwendungen wie Streamlit, um eine Nutzeroberfläche für den mit Python geschriebenen Code zu schaffen oder mit Open Data Portalen zur Datenakquisition.

In diesem Zuge lernten wir auch, wie man ein solches Projekt überhaupt strukturiert, d.h. welche Schritte auf welchen aufbauen, was zu welchem Zeitpunkt Sinn ergibt und wie man diese Steps am Besten unter den Teammitgliedern aufteilt und die so generierten Ergebnisse anschließend wieder zusammenführt.

Nicht zuletzt konnten wir natürlich auch Erkenntnisse bezogen auf Datenformate wie GeoJSON, die für unser Projekt benötigten Packages wie folium oder geopandas oder aber auch die passende Graduierung des Punktesystems bei dem Algorithmus gewinnen. Dieses Lernen erfolgte dabei primär über trial and error, da jedoch gerade das Scheitern eines Versuchs häufig den größten Erkenntnisgehalt birgt, war dies nicht weiter schlimm.

Insgesamt haben wir während der gemeinsamen Arbeit an dem Projekt gelernt, wie wichtig es ist, stets eine Übersicht über die bereits erfolgten und noch benötigten Schritte zu behalten und dass eine diesbezügliche Kommunikation dazu beiträgt, Redundanzen oder Komplikationen zu vermeiden. Wir haben einen guten Einblick in die Struktur der Programmiersprache Python erhalten. Außerdem lernten wir über die benötigten Tools, Libraries und die Aspekte der praktischen Umsetzung.

Team & Rollen

Philipp Rapp

In alle Schritte des Projekts eingebunden.

Sebastian Romo

In alle Schritte des Projekts eingebunden.

Cara Böhmer

In alle Schritte des Projekts eingebunden.

Mentor:in

Mathis Hunke

Unsere Partner

Unsere Partner

Unsere Partner