Die Weihnachtszeit ist auch immer eine große Zeit der Musik. Ob, Mariah Carey, dieses eine Lied von Wham!, von dem wir dieses Jahr alle mindestens schon einmal einen Ohrwurm hatten oder classics, wie „Morgen, Kinder wird’s was geben!“ – sie alle brauchen irgendwie musikalische Unterstützung.
Und deshalb – diese schmerzfreie Überleitung erlaube ich mir – wird es heute schon was geben und zwar den musikalischsten Chart überhaupt (auf jeden Fall vom Namen her): den Violin Plot!
Der Violin Plot ist eine Möglichkeit, Verteilungen in Datenmengen darzustellen. Gegenüber einem klassischen Boxplot, der lediglich zentrale Tendenzen (Median, Quartile) und mögliche Ausreißer zeigt, visualisiert der Violinen Plot die Dichte der Datenpunkte. Dadurch lässt sich erkennen, ob die Verteilung symmetrisch, schief oder mehrgipfelig ist.
In unserem Fall sammelt der Weihnachtsmann das Jahr über Daten darüber, wie brav die Kinder auf der Welt sind. Diese Daten hat er in sein großes Buch (i.e. eine csv Datei) geschrieben und möchte diese jetzt als Violine visualisieren.
Zusätzlich brauchen wir, um die Kurven berechnen zu können, ein Gerüst. Darin brauchen wir Zahlen von 1-99
Für die Visualisierung brauchen wir 3 spezielle Dinge:
Join der zu visualisierende Datenquelle mit dem Gerüst
Erstellen von 2 Parametern
Erstellen von 2 Berechneten Feldern
Zunächst müssen wir die Daten mit dem Gerüst joinen. Das brauchen wir, um die runden Kurven in der Verteilung zu bekommen. Der Vorgang nennt sich Densification (Hier gut beschrieben).
Als Join-Bedingung nutzen wir eine Join Berechnung, in der auf beiden Seiten des Joins der gleich Wert steht.
Das hat zur Folge, dass jede Zeile aus dem Datensatz mit jeder Zeile aus dem originalen Datensatz gematched wird und der Datensatz riesig wird.
Wie der Violin-Plot am Ende aussieht hängt unter anderem von 2 verschiedenen Parametern ab. Diese bestimmen, wie die Berechnung der Verdichtung der Verteilungen passiert. Details zum Hintergrund gibt es hier.
Diese 2 Parameter implementieren wir jeweils als Integer mit dem Wert 1:
Zuletzt sind noch Berechnungen notwendig. Die erste verteilt im Grunde die 99 Punkte aus unserem Gerüst gleichmäßig über eine bestimmte Range. Diese Range ist abhängig davon, wie der Scaffold scaling factor Parameter eingestellt ist.
Der [Niceness Score] ist in unserem Fall der Wert, dessen Verteilung visualisert werden soll.
IF [Gerüst] = 0 THEN {MIN([Niceness Score])} – [Scaffold scaling factor]
ELSEIF [Gerüst] = 99 THEN {MAX([Niceness Score])} + [Scaffold scaling factor]
ELSE
({MIN([Niceness Score])} – [Scaffold scaling factor]) +
(
ABS(
({MAX([Niceness Score])}+[Scaffold scaling factor]) – ({MIN([Niceness Score])}-[Scaffold scaling factor])
)
* ([Gerüst]/99)
)
END
Die zweite Berechnung berechnet, wie die Kurven geformt werden, der [Bandwidth] Parameter nimmt dabei Einfluss auf die Form.
Kernel
(1/({COUNTD([Niceness Score])}*[Bandwidth])
*
(1/(SQRT(2*PI())))
*
EXP(-0.5 * (([Evenly distributed scaffold values] – [Niceness Score])^2)/[Bandwidth]))
Bauen der Visualisierung
Evenly distributed scaffold values verteilt die Punkte auf der y-Achse und kommt daher unaggregiert in „Spalten“ und Kernel bestimmt die Höhe auf der y-Achse, kommt daher auf „Zeilen“.
Für die Violine fehlt jetzt nur noch die andere Seite des Plots. Dafür berechnen wir die negative Version von [Kernel] und erstellen eine synchronisierte geteilte Achse.
Das Ergebnis ist ein Violin Plot!
Über die Parameter kann das Aussehen des Plots noch angepasst werden.
Die Verteilung der „Bravheit“ der Werte der Kinder sieht schon einmal recht normalverteilt aus. Es wäre aber spannend zu wissen, wie die Werte in verschiedenen Altersklassen aussehen. Dafür legen wir diese einfach auf „Zeilen“ und können jetzt toll zwischen denk Gruppen vergleichen!
Teenager scheinen sich hier am besten verhalten zu haben! Mal sehen, wie der Weihnachtsmann diese Daten dann interpretiert.
In diesem Sinne – Frohe Weihnachten und viel Spaß noch mit diesem Adventskalender!
Sie haben Interesse an einer kurzen Demo zum Tableau Prep Builder? Sprechen sie uns gerne an.