Wenn es um den Erkennt­nis­ge­winn durch Daten geht, ist ein Blick auf die Roh­da­ten meist wenig gewinn­brin­gend, da ohne wei­tere Ana­lyse keine Schluss­fol­ge­run­gen aus die­sen gezo­gen wer­den kön­nen. Abhilfe kön­nen hier­bei Visua­li­sie­rungs­tools schaf­fen, wel­che eine fle­xi­ble und schnelle Ver­an­schau­li­chung der Daten ermög­li­chen. Dadurch kön­nen Mus­ter und Zusam­men­hänge inner­halb der Daten­sätze für den Betrach­ter erkenn­bar gemacht wer­den. Unter­schie­den wird dabei zwi­schen Pro­gramm­bi­blio­the­ken und Front­end­tools zur Visua­li­sie­rung. In vie­len Unter­neh­men wird bezüg­lich der Daten­vi­sua­li­sie­rung auf kos­ten­pflich­tige Lösun­gen zurück­ge­grif­fen, dabei gibt es auch eine Reihe von Open Source Alter­na­ti­ven, wel­che zufrie­den­stel­lende Ergeb­nisse lie­fern. In die­sem Bei­trag wird eine Reihe von Open Source Visua­li­sie­rungs­tools mit ihren jewei­li­gen Stär­ken und Schwä­chen vorgestellt.

Biblio­the­ken

Pro­gramm­bi­blio­the­ken sind Samm­lun­gen von Unter­pro­gram­men und –Rou­ti­nen für zusam­men­ge­hö­rende Auf­ga­ben. Sie stel­len selbst keine eigen­stän­di­gen und lauf­fä­hi­gen Ein­hei­ten dar. Viel­mehr sind sie als Hilfs­mo­dule anzu­se­hen, wel­che ande­ren Pro­gram­men zur Ver­fü­gung gestellt wer­den. Bekannte Biblio­the­ken, wel­che zu Visua­li­sie­rungs­zwe­cken genutzt wer­den kön­nen, sind D3.js und Matplotlib.

D3.js
Open Source-Visualisierungstools Bild1
Abbil­dung 1 D3.js Ban­ner (Quelle)

D3.js ist eine große Java­Script-Ent­wick­ler­bi­blio­thek, wel­che es ermög­licht, Doku­mente anhand von Daten zu mani­pu­lie­ren und diese Mani­pu­la­tio­nen dyna­misch im Web­brow­ser dar­zu­stel­len. Die Visua­li­sie­rung basiert hier­bei auf HTML, SVG und CSS, wobei sowohl HTML- als auch Java­script-Kom­po­nen­ten inzwi­schen häu­fig auch in andere Pro­gram­mier­spra­chen ein­bett­bar sind. Da D3.js keine Chart-Engine ist, son­dern man seine Lay­outs selbst imple­men­tie­ren und kon­fi­gu­rie­ren muss, ist die Arbeit mit D3.js anspruchs­voll. Dafür ist D3.js aller­dings sehr fle­xi­bel ein­setz­bar und lässt sich indi­vi­du­ell auf die jewei­li­gen Anfor­de­run­gen anpas­sen.  Zudem arbei­tet sie auch bei gro­ßen Daten­men­gen noch sehr schnell. Lei­der haben ältere Brow­ser, ins­be­son­dere der Inter­net Explo­rer 9 und frü­here Ver­sio­nen, häu­fig Pro­bleme, D3.js Visua­li­sie­run­gen kor­rekt darzustellen.

Das fol­gende Code­bei­spiel stellt die Anwen­dung von D3.js exem­pla­risch dar. Es wird gezeigt, wie man ein ein­fa­ches Bal­ken­dia­gramm auf Basis eines Arrays erstellt, wel­ches aus­schließ­lich Zah­len 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>

Gene­riert wird durch die­sen Code das fol­gende Balkendiagramm:

Open Source-Visualisierungstools Bild2
Abbil­dung 2 Bal­ken­dia­gramm erstellt durch D3.js
Mat­plot­lib
Open Source-Visualisierungstools Bild3
Abbil­dung 3 Mat­plot­lib Bei­spiel­dia­gramme (Quelle)

Mat­plot­lib ist eine Python-Biblio­thek, mit wel­cher Daten in ver­schie­dens­ten Dia­gram­men dar­ge­stellt wer­den kön­nen. Die Biblio­thek ist nicht im Stan­dard ent­hal­ten, kann aber auf allen gän­gi­gen Betriebs­sys­te­men nach­in­stal­liert wer­den. Mat­plot­lib kann sowohl über die Python-Kon­sole genutzt als auch in bestehende Python-Pro­gramme inte­griert wer­den. Bei der Erstel­lung der Gra­fi­ken kön­nen die kom­plet­ten Sprach­fea­tures von Python genutzt wer­den. Zu den For­ma­ten, die mit Mat­plot­lib dar­ge­stellt wer­den kön­nen, gehö­ren unter ande­rem SVG, PNG, Anti-Grain Geo­me­try, EPS und PDF. Lei­der ermög­li­chen die Stan­dard­op­tio­nen in Mat­plot­lib häu­fig nur unbe­frie­di­gende Ergeb­nisse, wenn es um die Größe oder Far­ben von Gra­fi­ken geht. Damit diese den­noch anspre­chend aus­se­hen, ist des­halb meist ein umständ­li­ches und auf­wän­di­ges Coding nötig. Um die­ses Pro­blem aus der Welt zu schaf­fen, wurde Sea­born ent­wi­ckelt. Sea­born ist eine Python Visua­li­sie­rungs­bi­blio­thek, wel­che Mat­plot­lib erwei­tert. Es bie­tet eine sehr gute Schnitt­stelle, um anspre­chende Gra­fi­ken auf Basis sta­tis­ti­scher Daten zu erstel­len. Die Funk­tio­nen in Sea­born arbei­ten auf Data­Frames und Arrays, wel­che einen kom­plet­ten Daten­satz ent­hal­ten. Sie ver­ar­bei­ten bei­spiels­weise die Bezeich­nun­gen, wel­che inner­halb der Daten­sätze ver­wen­det wer­den, auto­ma­tisch zu ent­spre­chen­den Labels in den erstell­ten Grafiken.

Im fol­gen­den Bei­spiel wer­den zunächst Daten aus einer csv-Datei aus­ge­le­sen. Anschlie­ßend wer­den die ers­ten Ein­träge tabel­la­risch 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)

Aus­ge­ge­ben wird die fol­gende Tabelle:

total_billtipsexsmo­kerdaytimesize
016.991.01FemaleNoSunDin­ner2
110.341.66MaleNoSunDin­ner3
221.013.50MaleNoSunDin­ner3
326.683.31MaleNoSunDin­ner2
424.593.61FemaleNoSunDin­ner4

Auf Grund­lage die­ser Daten kön­nen nun Gra­fi­ken erstellt wer­den. Der fol­gende Auf­ruf erstellt Box­plots auf Grund­lage der Standarddesignparameter:

sns.boxplot(x='day', y='total_bill', data=tips)
Open Source-Visualisierungstools Bild5
Abbil­dung 4 Bei­spiel für einen Boxplot 

Front­end­tool

Front­end­tools stel­len dem Nut­zer eine gra­fi­sche Benut­zer­ober­flä­che bereit, über die er mit der Soft­ware kom­mu­ni­zie­ren kann, ohne selbst pro­gram­mie­ren zu müs­sen. Im Ver­gleich zu Pro­gramm­bi­blio­the­ken sind Front­end­tools meist weni­ger indi­vi­dua­li­sier­bar, ermög­li­chen aber häu­fig eine schnel­lere und intui­ti­vere Visua­li­sie­rung der Daten. Des­halb sind in vie­len Unter­neh­men kos­ten­pflich­tige Front­end­tools wie Cog­nos, Tableau oder Power BI im Ein­satz. Aller­dings gibt es auch eine Reihe von Open Source-Tools, wel­che einen Teil der Funk­tio­na­li­tä­ten eben­falls abde­cken und dabei sogar häu­fig bes­ser in Big Data-Umge­bun­gen inte­griert sind als her­kömm­li­che (und kos­ten­pflich­tige) Tools. Zwei die­ser Open Source-Front­end­tools zur Visua­li­sie­rung sind Apa­che Super­set und Kibana.

Apa­che Super­set (incu­ba­ting)
Open Source-Visualisierungstools Bild6
Abbil­dung 5 BI Dash­board auf Basis von Apa­che Super­set (Quelle)

Super­set ist eine intui­tive und inter­ak­tive Web-Appli­ka­tion, wel­che von Airbnb ent­wi­ckelt wurde, um Daten ein­fach erfor­schen und visua­li­sie­ren zu kön­nen. Es unter­stützt alle Daten­quel­len, die SQL Alchemy unter­stüt­zen, aber bis­lang keine NoSQL-Daten­ban­ken. SQL­Al­chemy ist eine Python Biblio­thek, die Schnitt­stel­len zu ver­schie­de­nen Daten­ban­ken über eine ein­heit­li­che Syn­tax bereit­stellt. Super­set bie­tet außer­dem ein simp­les Benut­zer­inter­face sowie die Mög­lich­keit, indi­vi­du­elle Dash­boards zu erstel­len und zu tei­len. Ein wei­te­res Fea­ture von Apa­che Super­set ist ein erwei­ter­ba­res, hoch­wer­ti­ges Sicher­heits-/Zu­tritts-Modell, wel­ches das Set­zen von Zugriffs­be­rech­ti­gun­gen indi­vi­du­ell zulässt. Wäh­rend Nut­zer ohne Pro­gram­mier- und/oder SQL-Kennt­nisse ledig­lich die out-of-the-box Lösun­gen des Tools nut­zen kön­nen, ist es pro­gram­mier­af­fi­nen Nut­zern auch mög­lich, die Appli­ka­tion um wei­tere Fea­tures zu erwei­tern. Super­set eig­net sich beson­ders gut für die Visua­li­sie­rung dimen­sio­nier­ter Daten oder Time Series-Daten und wird häu­fig als „Open Source Tableau“ bezeichnet.

Die Abbil­dun­gen 6 und 7 zei­gen exem­pla­ri­sche Aus­schnitte aus der Arbeit mit Superset.

Open Source-Visualisierungstools Bild7
Abbil­dung 6 Edi­tie­ren von Dia­gram­men in Apa­che Super­set (Quelle)
Open Source-Visualisierungstools Bild8
Abbil­dung 7 SQL Queries in Apa­che Super­set (Quelle)
Kibana
Open Source-Visualisierungstools Bild9
Abbil­dung 8 Kibana Dash­board (Quelle)

Kibana ist ein gra­fi­sches Open Source-Front­end zur brow­ser­ba­sier­ten Ana­lyse von Daten aus Ela­s­tic­Se­arch-Clus­tern. Ela­s­tic­Se­arch ist eine ver­teilte Such- und Ana­ly­tik-Engine, wel­che Such­ergeb­nisse im JSON-For­mat spei­chert und über ein RESTful-Web­in­ter­face zurück­lie­fert. Die Ergeb­nisse wer­den wie­derum von Kibana ent­ge­gen­ge­nom­men und kön­nen vom Benut­zer anschlie­ßend belie­big gefil­tert wer­den, um dyna­mi­sche, inter­ak­tive und anspre­chende Dar­stel­lun­gen der Daten zu gene­rie­ren. Kibana unter­stützt sowohl eine explo­ra­tive Daten­ana­lyse als auch das Erstel­len von Visua­li­sie­run­gen wie Bal­ken­dia­gram­men. Die Visua­li­sie­run­gen kön­nen außer­dem vom Benut­zer zu Dash­boards zusam­men­ge­stellt wer­den. Da Kibana auf Ela­s­tic­se­arch (bzw. auch auf Solr) auf­setzt, eig­net es sich auch sehr gut für Text­ana­ly­sen, Geo-Ana­ly­sen bzw. –visua­li­sie­run­gen sowie Time Series-Daten. Es bie­tet eine leicht ver­ständ­li­che Benut­zer­ober­flä­che und kann somit auch von Nut­zern mit mini­ma­len IT-Kennt­nis­sen genutzt werden.

Die Abbil­dun­gen 7 und 8 zei­gen exem­pla­ri­sche Aus­schnitte aus der Arbeit mit Kibana.

Open Source-Visualisierungstools Bild10
Abbil­dung 9 Erstel­len von Dia­gram­men in Kibana (Quelle)
Open Source-Visualisierungstools Bild11
Abbil­dung 10 Erstel­len eines Kibana Dash­boards (Quelle)
Unter­schiede und Gemeinsamkeiten

Sowohl Apa­che Super­set als auch Kibana sind Front­end-Tools für die Visua­li­sie­rung von Daten. Ein gro­ßer Unter­schied liegt bei­spiels­weise in der Ver­wen­dung von Daten­quel­len. Wäh­rend die Arbeit mit Super­set die Nut­zung aller Daten­quel­len ermöglicht,die SQL Alchemy unter­stüt­zen, ist man bei der Nut­zung von Kibana auf Ela­s­tic­Se­arch ange­wie­sen. Aller­dings ist es mit Logs­tash, dem Daten­auf­nahme-Tool für den Ela­s­tic Stack mög­lich, fast alle neuen Daten­quel­len in Ela­s­tic­Se­arch zu impor­tie­ren. Wäh­rend Super­set einen Authen­ti­fi­zie­rungs-Sup­port anbie­tet, sind bei Kibana stan­dard­mä­ßig alle Dash­boards öffent­lich. Möchte man eine Authen­ti­fi­zie­rung ein­bauen, ist dies ledig­lich über Plug­ins wie Shield und Search­guard mög­lich. Alter­na­tiv kann diese auch über die Nut­zung des Web­ser­vers Nginx als Proxy Ser­ver umge­setzt wer­den. Beide Tools kön­nen von pro­gram­mier­af­fi­nen Nut­zern um wei­tere Fea­tures erwei­tert wer­den. Außer­dem sind sie, bedingt durch ihre Engine, auch gut für Big Data-Visua­li­sie­run­gen nutzbar.