131 VIEWS

Visualisierung von Adressen in Tableau – Wie man Straßen in Geo-Koordinaten umrechnet

04.12.2020

Da Essen ein menschliches Grundbedürfnis ist, ist es von Vorteil zu wissen, an welchen Standorten die jeweiligen Restaurants in der Umgebung zu finden sind.

Es wäre doch wunderbar, wenn man eine interaktive Karte in Tableau darstellen könnte, die einem anzeigt, welche Restaurants sich in der eigenen Stadt befinden und diese dann punktgenau auf der Karte anzeigen kann. Tableau bietet „out of the box“ nur die Möglichkeit Länder, Bundesländer und Städte zu visualisieren. Wenn die Anforderung einer Straßenvisualisierung kommen würde, kommt Tableau leider an seine Grenzen. Die Daten müssen vorher richtig präpariert werden, damit diese Anforderung umsetzbar ist. Wir zeigen wie.

Geo-Koordination in Tableau umsetzen

Wie geht man nun vor, wenn bisher nur Länder, Bundesländer und Städte visualisiert werden können?
Tableau stellt eine Funktion bereit, eigene Geo-Koordinaten zu verwenden. Standardmäßig bietet Tableau Geo-Koordinaten an (Breitengrad & Längengrad), mit denen es aber nicht möglich ist die von uns erstellten Standorte zu mappen. Wir brauchen also ein Programm, welches bestenfalls lokal auf unserem Rechner liegt, um die Geo-Koordinaten für die jeweilige Straße zu berechnen. Diese Geo-Koordinaten können dann im Koordinatensystem von Tableau punktgenau eine Straße mit Hausnummer darstellen.

Im Folgenden möchten wir zeigen, wie selbst mit einem kleinen Programm in KNIME mit einer Python-Extension die Daten so präpariert werden können, sodass Straßen mit Hausnummern punktgenau angezeigt werden.

So entsteht mit Tableau ein Restaurant-Dashboard mit genauen Adressdaten

Dashboard mit verschiedenen Restaurants und Gaststätten
Abbildung 1: Dashboard mit verschiedenen Restaurants und Gaststätten, Quelle: Eigene Darstellung mit Tableau

Hier zu sehen ist das fertige Dashboard. Alle von uns angelegten Restaurants sind auf der Karte auf die Geo-Koordinate genau dargestellt. Mit einem Hover über den jeweiligen Punkt ist der Name und die Adresse ablesbar. Mit einem Klick auf einen Punkt öffnet sich die dazugehörige Website, wo bestenfalls die aktuelle Speisekarte und die Öffnungszeiten aufzufinden sind. Diese Informationen könnte man natürlich auch direkt in die Quickinfo des Dashboards einbinden.

Außerdem ist bei dem Dashboard noch sehr viel Spielraum. Beispielsweise könnte daraus ein interaktiver Mittagessensplaner erstellt werden, wo sich Mitarbeiter zu einem gemeinsamen Mittagessen verabreden können und sich über eine WriteBack-Funktion in eine jeweilige Liste eintragen.

Die benötigten Geo-Koordinaten berechnen

Wer sich mit Datenanalyse und Datenaufbereitung gut auskennt, dem ist bestimmt schonmal der Begriff KNIME begegnet. KNIME ist eine freie Software für die interaktive Datenanalyse und Datenaufbereitung.

Sidefact: KNIME ist die Abkürzung von „Konstanz Information Miner“. Eine Gruppe von Software-Entwicklern aus dem Silicon Valley begann unter der Leitung von Michael Berthold an der Universität Konstanz mit der Konzeption der Plattform – eine Software direkt aus unserer Region.

Genau dieses Werkzeug benötigen wir, um unsere Berechnung von rohen Adressen in Geo-Koordinaten umzusetzen. KNIME bietet eine wunderbare Extension – die Implementierung von einem Python Script. Dies machen wir uns zu Nutze, da sich Python für die Datenanalyse sehr gut eignet.

Vorweg schonmal der komplette KNIME-Workflow, der für die Umrechnung von Straßen in Geo-Koordinaten notwendig ist:

KNIME-Workflow Umrechnung Straßen in Geo-Koordinaten
Abbildung 2: KNIME-Workflow Umrechnung Straßen in Geo-Koordinaten, Quelle: Eigene Darstellung

KNIME verwendet zur Datenanalyse und Datenaufbereitung sogenannte „Nodes„, die verschiedene Funktionen erfüllen können. In unserem Falle benötigen wir nicht allzu viele Nodes, da die größte Arbeit unser Python Script erledigt. Nichtsdestotrotz gehen wir kurz auf alle einzelnen Nodes ein, für alle, die sich mit KNIME nicht auskennen.

  1. Table Creator
    Im Table Creator ist es möglich direkt in KNIME eine Tabelle in der Art einer Excel-Tabelle zu erstellen. Hier zu sehen ist eine selbst angelegte Tabelle mit verschiedenen Restaurants/Gaststätten in Friedrichshafen, die sich zu einem Mittagessen eignen. Noch sind hier keine Geo-Koordinaten vorhanden, sondern nur die „rohen“ Adressen.

    Table Creator im eigenen KNIME-Workflow mit Adressen
    Abbildung 3: Table Creator im eigenen KNIME-Workflow, Quelle: Eigener KNIME-Workflow
  2. Python Script
    Im Python Script steckt unsere tatsächliche Logik, welche unsere Geo-Koordinaten berechnet. Zu Nutzen machen wir uns im Python Script verschiedene Bibliotheken, die Adressen ganz einfach in Geo-Koordinatenumrechnen. Zur Berechnung der Geo-Koordinaten benötigt man auf jeden Fall die geopy-Bibliothek. Diese ermöglicht es uns, anhand einer API im Internet die Umrechnung von Straßen in punktgenaue Geo-Koordinaten. Die API, welche verwendet wird, heißt Nominatim. Es wäre auch möglich die Google Maps API zu verwenden, aber dafür ist ein Google Account notwendig, in dem man Kreditkarte und weitere persönliche Daten hinterlegen muss. Ebenfalls werden zwei berühmte Bibliotheken namens Pandas und NumPy verwendet, die für den Umgang mit Arrays und DataFrames benötigt werden.

    1. Nach den ganzen Imports und Initialisierungen wird ein kompletter String aus Straße, Stadt und Land erstellt (Angabe von Postleitzahlen sind ebenfalls möglich).
    2. Danach wird jede Zeile der Tabelle durchlaufen und zu jeder Adresse wird ein Längengrad und Breitengrad berechnet. Falls die Berechnung aufgrund von fehlerhaften Adressangaben wie z.B. Rechtsschreibfehler oder unpassende Straße zum Ort fehlschlägt, wird einfach eine Null reingeschrieben. Somit wird verhindert, dass es einen Error gibt.
    3. Als letztes wird ein DataFrame mit den neuen Daten befüllt und ausgegeben.
      Python Script im eigenen KNIME-Workflow mit Daten befüllt
      Abbildung 4: Python Script im eigenen KNIME-Workflow, Quelle: Eigener KNIME-Workflow

       

  3. Double To Int
    Das Python Script wandelt komischerweise die ID von einem Integer in einen Doublewert um. Mit diesem Node wandelt man den Doublewert wieder in einen Integer um.

    Double To Int Node
    Abbildung 5: Double To Int Node im eigenen KNIME-Workflow, Quelle: Eigener KNIME-Workflow

     

  4. Joiner
    Joint die ID der anfangs erstellten Tabelle und der ID aus dem Python Script. Joiner kennt man z.B. auch aus SQL-Queries. Diese agieren ähnlich.

    Joiner Node
    Abbildung 6: Joiner Node im eigenen KNIME-Workflow, Quelle: Eigener KNIME-Workflow

     

  5. Column Filter
    Column Filter macht nichts anderes, als eine Spalte aus der Tabelle auszufiltern. In unserem Fall filtern wir eine ID von den zwei IDs die wir nun haben, da diese denselben Wert haben und eine davon überflüssig im Ergebnis wäre.

    Column Filter
    Abbildung 7: Column Filter im eigenen KNIME-Workflow, Quelle: Eigener KNIME-Workflow

     

  6. Excel-Writer
    Schreibt das Ergebnis, also die Tabelle, in eine Excel-Datei. CSV-Writer o.ä. ist natürlich auch möglich.

    Excel-Writer
    Abbildung 8: Excel-Writer im eigenen KNIME-Workflow, Quelle: Eigener KNIME-Workflow

    Das Ergebnis unseres KNIME-Workflows sieht am Ende wie folgt aus:

    Excel-Tabelle mit Ergebnissen
    Hier schön zu sehen sind die neuen berechneten Geo-Koordinaten. Die letzten zwei Zeilen der Tabelle sind mit Absicht fehlerhaft, um zu zeigen, dass das Script, falls eine falsche Adresse angegeben wurde, eine „null“ in die Tabelle schreibt. Die geopy-Bibliothek verzeiht viele „Fehler“ wie z.B. ein fehlender Punkt bei Str. oder auch fehlende Bindestriche wie z.B. bei Otto Lilienthal Str 2. Diese Adresse würde die Bibliothek noch als gültig sehen. Falls ein gravierender Rechtschreibfehler z.B. ein Buchstabe zu viel oder zu wenig eingetragen wird, so wirft das Script einen Fehler. Normalerweise würde das Programm an der Stelle abbrechen, aber da wir den Error gecatcht haben, trägt er im Falle eines Fehlers einfach „null“ ein.

Wie verwende ich nun die Geo-Koordinaten in Tableau?

Das geht ganz einfach! Wir verwenden anstatt der vorgegebenen Geo-Koordinaten von Tableau, unsere eigens berechneten Geo-Koordinaten und tragen sie als Zeile und Spalte ein:

Dashboard nach eigenem Geschmack erstellen in Tableau
Dashboard nach eigenem Geschmack erstellen in Tableau, Quelle: Eigene Darstellung

Nun kann man wie gewohnt sein Dashboard nach dem eigenen Geschmack gestalten und optimieren.

Fazit

Die Umrechnung von rohen Adressen in Geo-Koordinaten kann ziemlich nützlich sein. Mit der oben beschriebenen Bibliothek ist es ebenfalls möglich, die Geo-Koordinaten wieder in Textform zurückzurechnen, was wieder einen anderen Use-Case mit sich bringt. Der einzige Nachteil bei dieser Art von Umrechnung ist, dass der Aufruf der API von der geopy-Bibliothek nicht die allerschnellste ist, da die Umrechnung von gerade mal ca. 35 Zeilen ca. 20 Sekunden braucht. Zudem nutzen wir eine Free-Version der Nominatim API, was uns somit in der Häufigkeit der Anfragen an die API beschränkt. Täglich sind so nur ca. 1500 kostenlose Anfragen möglich. Falls man es in einem größeren Umfang benötigt, ist entweder die Google-API eine Lösung oder ein kostenpflichtiges Abonnement bei der Nominatim API.

Zusammenfassend kann man sagen, dass dieser KNIME-Workflow die Umrechnung einer riesigen Liste von Adressen in Geo-Koordinaten erleichtert, da man nicht jede einzelne Adresse in einen Web-Converter eintippen muss. Außerdem gibt es noch sehr viel Spielraum und Anwendungsmöglichkeiten für die Visualisierung von Straßen in Tableau.

Mehr Blogbeiträge zu Datenvisualisierung gibt es hier.

 

Datenvisualisierung: Schnell Zusammenhänge erkennen und Daten interaktiv nutzbar machen

 

Zurück zur Übersicht

Kommentar verfassen

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.

*Pflichtfelder

*