TIL-Adventskalender 2024content image – Türchen 22

 

Violin Plot

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.

Die Daten

content image

Zusätzlich brauchen wir, um die Kurven berechnen zu können, ein Gerüst. Darin brauchen wir Zahlen von 1-99

content image

Visualisierung in Tableau

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

Join von Daten und Gerüst

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.

Join

Das hat zur Folge, dass jede Zeile aus dem Datensatz mit jeder Zeile aus dem originalen Datensatz gematched wird und der Datensatz riesig wird.

Parameter

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:

Parameter
Parameter

Berechnete Felder

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“.

content image

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.

content image

Das Ergebnis ist ein Violin Plot!

Über die Parameter kann das Aussehen des Plots noch angepasst werden.

Ausblick

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!

content image

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.

Kontakt