Wie würden Sie sich einen segmentierten Trichter vorstellen? (Und könntest du es mit Python machen?)

9

Ich habe diesen Beitrag auf Moz gesehen, in dem ein segmentierter Marketing-Trichter vorgestellt wurde:Geben Sie hier die Bildbeschreibung ein

So etwas hätte in meinem Job einen ziemlichen Wert. Was ich nicht weiß, ist, wie man Rohdaten visualisiert, um einen segmentierten Trichter wie diesen zu zeigen. Die Idee ist, dass Vertriebs-Leads aus verschiedenen Quellen stammen (nach denen wir die Daten segmentieren) und bis zur Umwandlung in ein Geschäft mehrere Phasen durchlaufen. Von jeder Stufe zur nächsten fallen einige ab. Die Breite jeder Schicht wird durch die absolute Anzahl der Ableitungen in jeder Schicht bestimmt. [ BEARBEITEN : Beachten Sie, dass das hier als Referenz verwendete Bild irreführend ist, wenn es um die Zahlen geht, die rechts von jedem Slice angegeben sind. Es scheint keine Beziehung zwischen der Breite des Slice und der Zahl zu geben. Das Bild sollte nur als Referenz für das Design des segmentierten Trichters dienen.

Wie auch immer, eine Idee, wie man es visualisiert? Wenn möglich, würde ich gerne eine Möglichkeit haben, dies in Python zu tun.

Hier ist ein Google Doc mit einigen Dummy-Daten, falls jemand etwas benötigt ...

Ich freue mich auf Ihre Erkenntnisse. Vielen Dank!

Optimesh
quelle
5
Ich finde die Abbildung aufgrund des darin eingebauten riesigen Lügenfaktors verwirrend: Die aufeinanderfolgenden Ebenen des "Trichters" verwenden unterschiedliche Skalen, die sich unregelmäßig ändern. Somit werden die Breiten der Bänder nicht durch die absoluten Zahlen in jedem bestimmt - zumindest nicht auf leicht verständliche oder visualisierbare Weise. Was fragen Sie sich also: Gibt es bessere Möglichkeiten, solche Daten zu visualisieren oder wie Sie diese Grafik in Python erstellen?
whuber
Wenn Sie in einer beliebigen Software arbeiten möchten, können Sie in der Regel nur eine Versatzkategorie für die gestapelten Balken einfügen und diese dann unsichtbar machen. Hier ist ein Beispiel mit derselben Google-Tabelle. Sie können sehen, dass es ein unwirksamer nämlich ist. für die Kategorien, die in diesem Beispiel auf nichts geschrumpft sind.
Andy W
1
@ Whuber Hallo. Ich bin mir nicht sicher, ob ich folge. Jede Ebene ist eine absolute Zahl ... und jede Ebene ist eine Untergruppe der vorherigen. Bitte erläutern Sie, warum sich die Skala dann unregelmäßig ändert. Vielen Dank!
Optimesh
3
Das obere Segment repräsentiert 1,5 Millionen Besuche und umfasst ungefähr 500 Pixel auf meinem Bildschirm: ein Pixel = 3000 Besuche. Das untere Segment repräsentiert 5000 Besuche und umfasst ungefähr 150 Pixel auf meinem Bildschirm anstelle von weniger als 2 (wie @Andy in seinem Beispiel hervorhob). Das ist eine Übertreibung von etwa 100 zu 1. Da sich die Grafik in dieser Frage anscheinend nicht um eine solche Übertreibung kümmert, scheint es keinen Sinn zu machen, die Segmente neu zu skalieren: Sie würden bessere Informationen erhalten, wenn Sie sie alle gleich lang und grafisch gestalten wäre weniger trügerisch.
whuber
1
@whuber Oh, ich verstehe was du jetzt meinst. Ja, ich habe dieses Bild nur als Beispiel für das gebracht, was ich visuell tun möchte. Die Zahlen selbst sind zweifellos irreführend.
Optimesh

Antworten:

3

Dieses Diagramm zeigt eine Zwei-Wege- Kontingenztabelle an, deren Daten ungefähr folgende sind:

                      Branded Unbranded Social Referring Direct   RSS
First-time...          177276    472737  88638    265915 472737 59092
Return Visits...       236002    629339 118001    354003 629339 78667
4+ Visits in ...       166514    444037  83257    249771 444037 55505
10+ Visit in ...        28782     76751  14391     43172  76751  9594
At Least One Visit...    6707     17886   3354     10061  17886  2236
Last Touch...             660      1759    330       989   1759   220

Es gibt unzählige Möglichkeiten, diese Handlung zu konstruieren. Sie können beispielsweise die Positionen jedes rechteckigen Farbfelds berechnen und jedes Feld separat plattieren. Im Allgemeinen ist es jedoch hilfreich, eine kurze Beschreibung zu finden, wie ein Diagramm Daten darstellt.

Als Ausgangspunkt können wir dieses als eine Variation eines gestapelten Balkendiagramms betrachten.

Abbildung 1: Gestapeltes Balkendiagramm.

Diese Darstellung bedarf kaum einer Beschreibung: Durch Vertrautheit wissen wir, dass jede Reihe von Rechtecken jeder Reihe der Kontingenztabelle entspricht; dass die Längen der Rechtecke direkt proportional zu ihrer Anzahl sind; dass sie sich nicht überlappen; und dass die Farben den Spalten der Tabelle entsprechen.

Wenn wir diese Tabelle in einen "Datenrahmen" oder eine "Datentabelle" mit einer Zeile pro Zählung mit Feldern konvertieren , die den Zeilennamen, den Spaltennamen und die Anzahl angeben, bedeutet das Plotten normalerweise, eine geeignete Funktion aufzurufen und festzulegen, wo sie zu finden ist die Zeilennamen, die Spaltennamen und die Anzahl. Bei Verwendung einer Grammatik-Grafik- Implementierung (dem Paket für ) würde dies ungefähr so ​​aussehenXggplot2R

ggplot(X, aes(Outcome, Count, fill=Referral)) + geom_col() 

Die Details der Grafik, z. B. wie breit eine Reihe von Balken ist und welche Farben verwendet werden sollen, müssen normalerweise explizit festgelegt werden. Wie das gemacht wird, hängt von der Plotumgebung ab (und ist daher von relativ geringem Interesse: Sie müssen es nur nachschlagen).

Diese spezielle Implementierung der Grammatik der Grafiken bietet wenig Flexibilität bei der Positionierung der Balken. Eine Möglichkeit, mit minimalem Aufwand das gewünschte Aussehen zu erzielen, besteht darin, an der Basis jedes Balkens eine unsichtbare Kategorie einzufügen, sodass die Balken zentriert sind. Ein wenig Nachdenken legt nahe, dass die falsche Anzahl, die zum Zentrieren jedes Balkens benötigt wird, der Durchschnitt der Gesamtlänge des Balkens und der des längsten Balkens sein muss. In diesem Beispiel wäre dies eine Anfangsspalte mit den Werten

 254478.0       0.0  301115.0  897955.0  993610.5 1019817.0 

Hier ist das resultierende gestapelte Balkendiagramm, das die gefälschten Daten in hellgrau zeigt:

Figur 2

Die gewünschte Figur wird erstellt, indem die Grafiken für die gefälschte Spalte unsichtbar gemacht werden:

Figur 3

Die Beschreibung der Grammatik der Grafik des Diagramms muss nicht geändert werden: Wir haben einfach eine andere Kontingenztabelle angegeben, die gemäß derselben Beschreibung gerendert werden soll (und die Standardfarbzuweisung für die gefälschte Spalte überschrieben).

Bemerkungen

Diese Grafiken sind ehrlich: Die horizontale Ausdehnung jedes farbigen Patches ist ohne Verzerrung direkt proportional zu den zugrunde liegenden Daten. Ein Vergleich mit dem Original (in der Frage) zeigt, wie extrem die Verzerrung ist (Tuftes Lügenfaktor ).

Wenn Details am unteren Rand des "Trichters" angezeigt werden sollen, sollten Sie die Anzahl nach Fläche und nicht nach Länge darstellen. Sie können die Längen der Balken proportional zu den Quadratwurzeln der Gesamtlängen und ihre Breite (in vertikaler Richtung) auch proportional zu den Quadratwurzeln machen. Jetzt wäre der Boden des "Trichters" etwa ein Zwanzigstel der längsten Länge und nicht ein Vierhundertstel davon, so dass einige Details sichtbar werden könnten. Leider ggplot2erlaubt die Implementierung nicht, eine Variable der Balkenbreite zuzuordnen, und daher ist eine aufwändigere Umgehung erforderlich (eine, die tatsächlich jedes Rechteck einzeln beschreibt). Vielleicht gibt es eine Python-Implementierung, die flexibler ist.

Verweise

Edward Tufte, Die visuelle Darstellung quantitativer Informationen . Cheshire Press 1984.

Leland Wilkinson, Die Grammatik der Grafik. Springer 2005.

whuber
quelle