| von Ulrich Hölker

Data Science mit Tableau dank Analytics Extension API

Einleitung

Die Tableau Analytics Extension API ermöglicht es, fortgeschrittene Data Science innerhalb von Tableau zu betreiben, ausgeklügelte Modelle und Algorithmen in Dashboards zu integrieren und den Endanwender interaktiv damit arbeiten zu lassen.

Durch die dynamische Integration von Python oder R, die beiden populärsten Programmiersprachen im Bereich Data Science, können alle Funktionalitäten sowie externe Bibliotheken, die in Python bzw. R vorhanden sind, auch in Tableau genutzt werden. Damit bietet sich eine enorme Bandbreite von Anwendungsmöglichkeiten wie beispielweise Clustering, Szenario-Testing oder Forecasting, die nun auch in Tableau bewältigt werden können.

Es gibt drei Hauptgründe, aus denen Python und R so beliebt sind:

  • Die beiden Sprachen sind recht leicht verständlich und gut erlernbar
  • Es gibt eine enorme Menge externer Bibliotheken (auch Packages genannt). Jede dieser externen Bibliotheken enthält zusätzliche Funktionalitäten, die der User manuell seiner Toolbox hinzufügen kann. Für R existieren mehr als 10.000, für Python gar mehr als 100.000 solcher externen Bibliotheken.
  • Beide Programmiersprachen habe sehr aktive Communities, die sich rege austauschen und kontinuierlich weitere Bibliotheken entwickeln.

 

Installation

Mit dem Release von Tableau 2020.1 wurde die Integration von Python bzw. R stark vereinfacht. Eine Möglichkeit zur Integration von Python besteht auch für ältere Versionen von Tableau Desktop. Wir konzentrieren uns hier jedoch ausschließlich auf die verbesserte Integration ab Version 2020.1.

Voraussetzung ist natürlich die Installation von Tableau Desktop (2020.1. oder neuer) sowie Python bzw. R.

Dann wird in Tableau unter „Hilfe“ -> „Einstellungen und Leistung“ -> „Verbindung zu externen Diensten verwalten“ die Verbindung zum externen Service eingerichtet.

Hier wird angegeben, mit welchem externen Service gearbeitet wird (Python, R, …) und es müssen Server und Port spezifiziert werden. Der Login mit Usernamen und Passwort sowie die Verwendung von SSL sind optional, um höheren Sicherheitsstandards gerecht zu werden.

Anbindung externer Services in Tableau Desktop

Anbindung von externen Services in Tableau Desktop



Workflow

Die folgende Grafik veranschaulicht den Arbeitsablauf beim Zusammenspiel von Tableau und Python / R.

Tableau und Python/R.


Workflow schematisch dargestellt


Ausgehend von einem Datensatz in Tableau (oben links) wird in einem berechneten Feld in Tableau Python Code geschrieben. Dies wird mithilfe der Script-Funktionen SCRIPT_BOOL, SCRIPT_INT, SCRIPT_REAL, SCRIPT_STR ermöglicht (oben rechts). Script-Funktionen leiten  Ausdrücke an Analytics-Erweiterungen weiter und rufen ein Ergebnis ab.

Der Code wird dann innerhalb von Python ausgeführt (unten rechts) und an Tableau gesendet, wo das Ergebnis als Tabellenberechnung zurückgegeben wird und visualisiert werden kann.

Dies funktioniert sowohl lokal als auch auf einem Server. Bei aufwändigeren Projekten bietet es sich an, den Python Code auszulagern. Hierfür ist ein Jupyter Notebook eine geeignete Wahl.

Beispiel 1: Crime Hotspot Analysis in Seattle

In diesem Beispiel führen wir eine Hotspot-Analyse krimineller Aktivitäten in Seattle durch. Wir arbeiten mit einem Datensatz, der zu je einer kriminellen Aktivität den Zeitpunkt, die Kategorisierung sowie die genaue Geoposition enthält.

Wir stellen nun die Frage, welche Geopositionen als Hotspots von beispielsweise Überfällen gelten.  

Um diese Frage zu beantworten, verwenden wir eine Clustering-Methode namens Density-based spatial clustering of applications with noise (DBSCAN). Tableau bietet zwar die Möglichkeit, simple Clustering-Methoden zu nutzen. Häufig jedoch liefern fortgeschrittene, an bestimmte Szenarien angepasste Methoden wie beispielsweise DBSCAN bessere Ergebnisse als die „Allround“-Methoden, die in Tableau von Haus aus vorhanden sind. Daher bedienen wir uns der Funktionalitäten aus Python.

Ausschnitt verwendeter Datensatz

Ausschnitt des verwendeten Datensatzes

Wie eingangs beschrieben, erstellen wir ein berechnetes Feld, das Python-Code enthält. Dieser Python-Code (grau eingefärbt) wird dann außerhalb von Tableau ausgeführt. Dabei machen wir von der Möglichkeit Gebrauch, Parameter nach Python zu übergeben. Die hier verwendeten Parameter sind die Geoposition, die vom User tolerierte Distanz zwischen Vorfällen sowie die tolerierte Anzahl von Vorfällen in einem vordefinierten Zeitraum (hier 60 Tage). Mit „Parametern“ sind an dieser Stelle allgemein Variablen im mathematischen Sinne gemeint – nicht die technischen Elemente in Tableau.

Berechnetes Feld mit Python Code in Tableau

Berechnetes Feld mit Python Code in Tableau


Die beiden letztgenannten Parameter können vom User auf dem Dashboard interaktiv geändert werden und wirken sich direkt auf das Ergebnis des Klassifizierungs-Algorithmus aus.

Bei einer risikoaversen Wahl der Parameter (geringe Anzahl an Vorfällen und große Distanz zwischen Vorfällen) werden viele Geopositionen als kriminelle Hotspots klassifiziert, wie im Dashboard unschwer an den roten Einfärbungen auf der Karte zu erkennen ist. Die hellen, nicht eingefärbten Punkte hingegen stellen je eine Geoposition dar, an der eine kriminelle Aktivität erfasst wurde, die aber nicht als Hotspot klassifiziert wurde.

Bei einer risikoaffinen Wahl der Parameter (große Anzahl an tolerierten Vorfällen und geringe Distanz zwischen Vorfällen) sieht der User hingegen schnell, dass aufgrund der von ihm modifizierten Parameter weniger Geopositionen als kriminelle Hotspots klassifiziert werden.

Dashboard Analyse


Dashboard: Analyse krimineller Hotspots in Seattle


Diese Modifikation der Modellparameter geschieht über die Filter bzw. Parameter auf der linken Seite des Dashboards. Der Nutzer des Dashboards hat also unmittelbaren Einfluss auf die Wahl der Modellparameter der Klassifizierung und somit auf die Ergebnisse des Algorithmus.

 

Beispiel 2: Klassifizierung von Brusttumoren

In diesem Beispiel möchten wir illustrieren, wie der Python-Code ausgelagert werden kann. Dies hat enorme Vorteile:

  • Bessere Wartbarkeit des Codes (gerade bei viel Code relevant)
  • Anwendbarkeit auf mehrere Projekte
  • Model Selection und Model Training sind vorab möglich (d.h. Supervised-Machine Learning)

In diesem Beispiel arbeiten wir mit einem Datensatz, der zu je einer Röntgen-Aufnahme eines Brusttumors 9 numerische Größen wie beispielsweise Zellgröße oder Adhäsion sowie eine Diagnose beinhaltet.

Ausschnitt verwendeter Datensatz


Ausschnitt des verwendeten Datensatzes

 

Für eine neue Messung eines Brusttumors möchten wir nun den behandelnden Arzt dabei unterstützen, eine Diagnose zu stellen, ob es sich um einen gutartigen oder um einen bösartigen Tumor handelt.

Dazu greifen wir auf die historischen Messungen von Brusttumoren sowie deren validierte Diagnosen aus dem gegebenen Datensatz zurück. Welche statistische Methode wir zur Klassifikation nutzen, ist vorab nicht definiert. Vielmehr prüfen wir mehrere statistische Methoden auf deren Vorhersage-Güte für den gegebenen Datensatz. Diejenige Methode, welche die besten Ergebnisse auf dem Trainingsdatensatz liefert, werden wir dann für die Diagnose der neuen Fälle nutzen. Wir folgen hier also einem klassischen Data Science Ansatz, indem wir vorab eine Model Selection durchführen, danach das beste Modelle trainieren und dann auf den „echten“ Datensatz, also die Messungen neuer Patienten, anwenden.

In Tableau stand-alone ist ein solches Vorgehen nicht möglich. Durch die Anbindung von Python sowie die Nutzung eines Jupyter Notebooks stehen uns diese Funktionalitäten jedoch zur Verfügung.

Im Folgenden werden wir die Methoden Support Vector Machine, Logistische Regression, Naive Bayes Klassifikation sowie ein Gradienten Boosting Verfahren verwenden. Auf die mathematischen Feinheiten wollen wir an dieser Stelle hingegen nicht tiefer eingehen.
 

Jupyter Breast Cancer Exeample

 

 

Jupyter Breast Cancer Exeample


Ausschnitte aus dem Jupyter Notebook, welches den Python Code enthält.

Nach Ausführung des Python Codes und Interpretation der Ergebnisse stellt sich heraus, dass das Gradienten Boosting Verfahren für den gegebenen Datensatz die besten Ergebnisse liefert. Dieses Verfahren wird somit genutzt, um „neue Datenpunkte“ zu klassifizieren, also um bisher undiagnostizierte Brusttumore als gutartig oder bösartig zu bewerten.

Dies geschieht, indem der Nutzer des Tableau Dashboards in den Test-Results neue Zahlen einträgt. Im Hintergrund werden dann diese Zahlen als modifizierte Modell-Parameter an den Python Server gesendet. Dort wird der Gradienten Boosting Algorithmus auf Basis der neuen Messwerte des Tumors ausgeführt und das Ergebnis (gutartig oder bösartig) wird an Tableau zurückgesendet, wo es dann auf dem Dashboard visualisiert wird. In diesem Fall als schlichtes Textfeld.

Dashboard Brustkrebs Klassifizierung


Dashboard: Brustkrebs Klassifizierung



In Tableau selbst wurde nur ein absolutes Minimum an Python-Code geschrieben. Einzig die Verbindung zum Python Server wird aufgebaut und eine von uns im Jupyter Notebook definierte Funktion mit dem Namen „DiagnosticsDemo“ wird aufgerufen, die Kennzahlen als Parameter enthält. Die eigentliche Arbeit geschieht im Jupyter Notebook.

Berechnetes Feld mit Python Code in Tableau

Berechnetes Feld mit Python Code in Tableau

 

Das Vorgehen in diesem Beispiel kann wie folgt schematisch dargestellt werden:

Schematisches Vorgehen


Schematisches Vorgehen in Beispiel 2


Fazit

Die Analytics Extension API bietet somit die einzigartige Möglichkeit, fortgeschrittene statistische Methoden jedem Nutzer eines Tableau Dashboards interaktiv zur Verfügung zu stellen. Erwähnenswert ist außerdem, dass der Installationsaufwand sehr gering ist und keine weiteren Lizenzkosten anfallen.

Mithilfe der Tableau Analytics Extension API ist ebenso eine Anbindung weiterer Programmiersprachen wie Haskell, Matlab oder Rapidminer möglich. In diesem Artikel wollen wir uns aber auf die beiden gängigsten beschränken: Python und R.

Sprechen Sie uns bei Interesse gerne an!

Quellen und Links:

  • https://help.tableau.com/current/pro/desktop/de-de/r_connection_manage.html
  • https://www.tableau.com/about/blog/2020/1/python-tableau-now-10
  • https://tableau.github.io/analytics-extensions-api/
  • https://www.tableau.com/about/blog/2017/1/building-advanced-analytics-applications-tabpy-64916

Teile diesen Artikel mit anderen

Über den Autor

Uli arbeitete von 2018-2021 als Tableau Entwickler und Big Data Consultant für die Woodmark. Als ausgebildeter Mathematiker interessiert es ihn vor allem, komplexe Zusammenhänge in nutzerfreundlichen Dashboards greifbar und verständlich zu machen.

Zur Übersicht Blogbeiträge