Wenn es um den Erkenntnisgewinn durch Daten geht, ist ein Blick auf die Rohdaten meist wenig gewinnbringend, da ohne weitere Analyse keine Schlussfolgerungen aus diesen gezogen werden können. Abhilfe können hierbei Visualisierungstools schaffen, welche eine flexible und schnelle Veranschaulichung der Daten ermöglichen. Dadurch können Muster und Zusammenhänge innerhalb der Datensätze für den Betrachter erkennbar gemacht werden. Unterschieden wird dabei zwischen Programmbibliotheken und Frontendtools zur Visualisierung. In vielen Unternehmen wird bezüglich der Datenvisualisierung auf kostenpflichtige Lösungen zurückgegriffen, dabei gibt es auch eine Reihe von Open Source Alternativen, welche zufriedenstellende Ergebnisse liefern. In diesem Beitrag wird eine Reihe von Open Source Visualisierungstools mit ihren jeweiligen Stärken und Schwächen vorgestellt.
Bibliotheken
Programmbibliotheken sind Sammlungen von Unterprogrammen und –Routinen für zusammengehörende Aufgaben. Sie stellen selbst keine eigenständigen und lauffähigen Einheiten dar. Vielmehr sind sie als Hilfsmodule anzusehen, welche anderen Programmen zur Verfügung gestellt werden. Bekannte Bibliotheken, welche zu Visualisierungszwecken genutzt werden können, sind D3.js und Matplotlib.
D3.js
D3.js ist eine große JavaScript-Entwicklerbibliothek, welche es ermöglicht, Dokumente anhand von Daten zu manipulieren und diese Manipulationen dynamisch im Webbrowser darzustellen. Die Visualisierung basiert hierbei auf HTML, SVG und CSS, wobei sowohl HTML- als auch Javascript-Komponenten inzwischen häufig auch in andere Programmiersprachen einbettbar sind. Da D3.js keine Chart-Engine ist, sondern man seine Layouts selbst implementieren und konfigurieren muss, ist die Arbeit mit D3.js anspruchsvoll. Dafür ist D3.js allerdings sehr flexibel einsetzbar und lässt sich individuell auf die jeweiligen Anforderungen anpassen. Zudem arbeitet sie auch bei großen Datenmengen noch sehr schnell. Leider haben ältere Browser, insbesondere der Internet Explorer 9 und frühere Versionen, häufig Probleme, D3.js Visualisierungen korrekt darzustellen.
Das folgende Codebeispiel stellt die Anwendung von D3.js exemplarisch dar. Es wird gezeigt, wie man ein einfaches Balkendiagramm auf Basis eines Arrays erstellt, welches ausschließlich Zahlen beinhaltet.
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8">
<title>Bar Chart</title>
<script type="text/javascript" src="https://d3js.org/d3.v4.min.js"></script>
</head>
<body>
<script>
var data = [5, 30, 14, 15, 39, 35, 7];
var height = "430";
var width = "400";
var svg = d3.select("body")
.append("svg")
.attr("height", height)
.attr("width", width);
svg.selectAll("rect")
.data(data)
.enter().append("rect")
.attr("height", function (d, i) { return (d * 10) })
.attr("width", "30")
.attr("x", function (d, i) { return (i * 50) })
.attr("y", function (d, i) { return height - (d * 10) })
.attr("fill", "cornflowerblue");
svg.selectAll("text")
.data(data)
.enter().append("text")
.text(function (d) { return d })
.attr("x", function (d, i) { return (i * 50) + 10 })
.attr("y", function (d, i) { return height - (d * 10) - 3 });
</script>
</body>
</html>
Generiert wird durch diesen Code das folgende Balkendiagramm:
Matplotlib
Matplotlib ist eine Python-Bibliothek, mit welcher Daten in verschiedensten Diagrammen dargestellt werden können. Die Bibliothek ist nicht im Standard enthalten, kann aber auf allen gängigen Betriebssystemen nachinstalliert werden. Matplotlib kann sowohl über die Python-Konsole genutzt als auch in bestehende Python-Programme integriert werden. Bei der Erstellung der Grafiken können die kompletten Sprachfeatures von Python genutzt werden. Zu den Formaten, die mit Matplotlib dargestellt werden können, gehören unter anderem SVG, PNG, Anti-Grain Geometry, EPS und PDF. Leider ermöglichen die Standardoptionen in Matplotlib häufig nur unbefriedigende Ergebnisse, wenn es um die Größe oder Farben von Grafiken geht. Damit diese dennoch ansprechend aussehen, ist deshalb meist ein umständliches und aufwändiges Coding nötig. Um dieses Problem aus der Welt zu schaffen, wurde Seaborn entwickelt. Seaborn ist eine Python Visualisierungsbibliothek, welche Matplotlib erweitert. Es bietet eine sehr gute Schnittstelle, um ansprechende Grafiken auf Basis statistischer Daten zu erstellen. Die Funktionen in Seaborn arbeiten auf DataFrames und Arrays, welche einen kompletten Datensatz enthalten. Sie verarbeiten beispielsweise die Bezeichnungen, welche innerhalb der Datensätze verwendet werden, automatisch zu entsprechenden Labels in den erstellten Grafiken.
Im folgenden Beispiel werden zunächst Daten aus einer csv-Datei ausgelesen. Anschließend werden die ersten Einträge tabellarisch dargestellt.
import pandas as pd
import seaborn as sns
tips = pd.read_csv('/opt/hdp/share/data/workshop/tips.csv')
tips.head()
sns.boxplot(x='day', y='total_bill', data=tips)
Ausgegeben wird die folgende Tabelle:
total_bill | tip | sex | smoker | day | time | size | |
0 | 16.99 | 1.01 | Female | No | Sun | Dinner | 2 |
1 | 10.34 | 1.66 | Male | No | Sun | Dinner | 3 |
2 | 21.01 | 3.50 | Male | No | Sun | Dinner | 3 |
3 | 26.68 | 3.31 | Male | No | Sun | Dinner | 2 |
4 | 24.59 | 3.61 | Female | No | Sun | Dinner | 4 |
Auf Grundlage dieser Daten können nun Grafiken erstellt werden. Der folgende Aufruf erstellt Boxplots auf Grundlage der Standarddesignparameter:
sns.boxplot(x='day', y='total_bill', data=tips)
Frontendtool
Frontendtools stellen dem Nutzer eine grafische Benutzeroberfläche bereit, über die er mit der Software kommunizieren kann, ohne selbst programmieren zu müssen. Im Vergleich zu Programmbibliotheken sind Frontendtools meist weniger individualisierbar, ermöglichen aber häufig eine schnellere und intuitivere Visualisierung der Daten. Deshalb sind in vielen Unternehmen kostenpflichtige Frontendtools wie Cognos, Tableau oder Power BI im Einsatz. Allerdings gibt es auch eine Reihe von Open Source-Tools, welche einen Teil der Funktionalitäten ebenfalls abdecken und dabei sogar häufig besser in Big Data-Umgebungen integriert sind als herkömmliche (und kostenpflichtige) Tools. Zwei dieser Open Source-Frontendtools zur Visualisierung sind Apache Superset und Kibana.
Apache Superset (incubating)
Superset ist eine intuitive und interaktive Web-Applikation, welche von Airbnb entwickelt wurde, um Daten einfach erforschen und visualisieren zu können. Es unterstützt alle Datenquellen, die SQL Alchemy unterstützen, aber bislang keine NoSQL-Datenbanken. SQLAlchemy ist eine Python Bibliothek, die Schnittstellen zu verschiedenen Datenbanken über eine einheitliche Syntax bereitstellt. Superset bietet außerdem ein simples Benutzerinterface sowie die Möglichkeit, individuelle Dashboards zu erstellen und zu teilen. Ein weiteres Feature von Apache Superset ist ein erweiterbares, hochwertiges Sicherheits-/Zutritts-Modell, welches das Setzen von Zugriffsberechtigungen individuell zulässt. Während Nutzer ohne Programmier- und/oder SQL-Kenntnisse lediglich die out-of-the-box Lösungen des Tools nutzen können, ist es programmieraffinen Nutzern auch möglich, die Applikation um weitere Features zu erweitern. Superset eignet sich besonders gut für die Visualisierung dimensionierter Daten oder Time Series-Daten und wird häufig als „Open Source Tableau“ bezeichnet.
Die Abbildungen 6 und 7 zeigen exemplarische Ausschnitte aus der Arbeit mit Superset.
Kibana
Kibana ist ein grafisches Open Source-Frontend zur browserbasierten Analyse von Daten aus ElasticSearch-Clustern. ElasticSearch ist eine verteilte Such- und Analytik-Engine, welche Suchergebnisse im JSON-Format speichert und über ein RESTful-Webinterface zurückliefert. Die Ergebnisse werden wiederum von Kibana entgegengenommen und können vom Benutzer anschließend beliebig gefiltert werden, um dynamische, interaktive und ansprechende Darstellungen der Daten zu generieren. Kibana unterstützt sowohl eine explorative Datenanalyse als auch das Erstellen von Visualisierungen wie Balkendiagrammen. Die Visualisierungen können außerdem vom Benutzer zu Dashboards zusammengestellt werden. Da Kibana auf Elasticsearch (bzw. auch auf Solr) aufsetzt, eignet es sich auch sehr gut für Textanalysen, Geo-Analysen bzw. –visualisierungen sowie Time Series-Daten. Es bietet eine leicht verständliche Benutzeroberfläche und kann somit auch von Nutzern mit minimalen IT-Kenntnissen genutzt werden.
Die Abbildungen 7 und 8 zeigen exemplarische Ausschnitte aus der Arbeit mit Kibana.
Unterschiede und Gemeinsamkeiten
Sowohl Apache Superset als auch Kibana sind Frontend-Tools für die Visualisierung von Daten. Ein großer Unterschied liegt beispielsweise in der Verwendung von Datenquellen. Während die Arbeit mit Superset die Nutzung aller Datenquellen ermöglicht,die SQL Alchemy unterstützen, ist man bei der Nutzung von Kibana auf ElasticSearch angewiesen. Allerdings ist es mit Logstash, dem Datenaufnahme-Tool für den Elastic Stack möglich, fast alle neuen Datenquellen in ElasticSearch zu importieren. Während Superset einen Authentifizierungs-Support anbietet, sind bei Kibana standardmäßig alle Dashboards öffentlich. Möchte man eine Authentifizierung einbauen, ist dies lediglich über Plugins wie Shield und Searchguard möglich. Alternativ kann diese auch über die Nutzung des Webservers Nginx als Proxy Server umgesetzt werden. Beide Tools können von programmieraffinen Nutzern um weitere Features erweitert werden. Außerdem sind sie, bedingt durch ihre Engine, auch gut für Big Data-Visualisierungen nutzbar.