Come visualizzeresti un imbuto segmentato? (e potresti farlo con Python?)


9

Ho visto questo post su Moz che presentava una canalizzazione di marketing segmentata:inserisci qui la descrizione dell'immagine

Questo genere di cose avrebbe un bel po 'di valore nel mio lavoro. Quello che non ho idea è come visualizzare i dati grezzi per mostrare un imbuto segmentato come questo. L'idea è che i lead di vendita provengono da diverse fonti (che utilizziamo per segmentare i dati per) e attraversano diverse fasi quando si convertono in un affare. Da ogni fase all'altra un po 'cadono. La larghezza di ogni sezione è determinata dal numero assoluto di derivazioni in ciascuna. [ EDIT : nota che l'immagine qui usata come riferimento è fuorviante quando si tratta dei numeri specificati a destra di ogni sezione. Non sembra esserci alcuna relazione tra la larghezza della sezione e il numero. L'immagine deve essere presa solo come riferimento al design dell'imbuto segmentato].

Comunque, hai idea di come visualizzarlo? Se possibile, mi piacerebbe avere un modo per farlo in Python.

Ecco un documento Google con alcuni dati fittizi se qualcuno ha bisogno di alcuni ...

In attesa di vostre intuizioni. Grazie!


5
Trovo l'illustrazione confusa a causa dell'enorme Lie Factor incorporato in esso: i livelli successivi dell '"imbuto" usano scale diverse che cambiano in modo irregolare. Quindi le larghezze delle bande non sono determinate dai numeri assoluti in ciascuna - almeno non in alcun modo facilmente comprensibile o visualizzato. Quindi cosa stai chiedendo: se ci sono modi migliori per visualizzare tali dati o come creare questa grafica in Python?
whuber

Per lavorare con qualsiasi software, in genere puoi semplicemente incorporare una categoria di offset per le barre sovrapposte e renderlo invisibile. Ecco un esempio con lo stesso foglio di calcolo di Google. Puoi vedere che è un viz inefficace. per le categorie che sono ridotte a nulla in quell'esempio.
Andy W,

1
@whuber Ciao. Non sono sicuro di seguire. Ogni livello è un numero assoluto ... e ogni livello è un sottogruppo di quello precedente. Spiega perché la scala cambia in modo irregolare allora. Grazie!
Ottimizzato l'

3
Il segmento superiore rappresenta 1,5 milioni di visite e si estende su circa 500 pixel sul mio schermo: un pixel = 3000 visite. Il segmento inferiore rappresenta 5000 visite e si estende su circa 150 pixel sul mio schermo, anziché meno di 2 (come sottolineato da @Andy con il suo esempio). Questa è un'esagerazione di circa 100 a 1. Poiché il grafico in questa domanda sembra non preoccuparsi di tale esagerazione, allora non sembra avere senso riscalare i segmenti: otterresti informazioni migliori rendendole tutte della stessa lunghezza e del grafico sarebbe meno ingannevole.
whuber

1
@whuber Oh, capisco cosa intendi ora. Sì, ho appena portato quell'immagine come esempio di ciò che sto cercando di fare visivamente. I numeri stessi sono fuorvianti, senza dubbio.
Ottimizzato il

Risposte:


3

Questo diagramma mostra una tabella di contingenza a due vie i cui dati sono approssimativamente questi:

                      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

Ci sono una miriade di modi per costruire questa trama. Ad esempio, è possibile calcolare le posizioni di ogni patch rettangolare di colore e plat separatamente ogni patch. In generale, tuttavia, aiuta a trovare una descrizione sintetica di come una trama rappresenta i dati.

Come punto di partenza, possiamo vedere questo come una variazione di un grafico a barre in pila.

Figura 1: grafico a barre in pila.

Questa trama non ha quasi bisogno di una descrizione: attraverso la familiarità sappiamo che ogni riga di rettangoli corrisponde a ciascuna riga della tabella di contingenza; che le lunghezze dei rettangoli sono direttamente proporzionali ai loro conteggi; che non si sovrappongono; e che i colori corrispondono alle colonne della tabella.

Se convertiamo questa tabella in un "frame di dati" o "tabella di dati" con una riga per conteggio con campi che indicano il nome della riga, il nome della colonna e il conteggio, la sua rappresentazione in genere equivale a chiamare una funzione adatta e stabilire dove trovare i nomi delle righe, i nomi delle colonne e i conteggi. Usando un'implementazione Grammatica della Grafica (il pacchetto per ) questo sarebbe simileXggplot2R

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

I dettagli del grafico, come la larghezza di una fila di barre e i colori da utilizzare, devono in genere essere definiti esplicitamente. Il modo in cui ciò viene fatto dipende dall'ambiente di stampa (e quindi è di scarso interesse: devi solo cercare).

Questa particolare implementazione della Grammatica della Grafica offre poca flessibilità nel posizionamento delle barre. Un modo per produrre l'aspetto desiderato, con il minimo sforzo, è quello di inserire una categoria invisibile alla base di ogni barra in modo che le barre siano centrate. Un piccolo pensiero suggerisce che il conteggio falso necessario per centrare ogni barra deve essere la media della lunghezza totale della barra e quella della barra più lunga. Per questo esempio questa sarebbe una colonna iniziale con i valori

 254478.0       0.0  301115.0  897955.0  993610.5 1019817.0 

Ecco il grafico a barre in pila risultante che mostra i dati falsi in grigio chiaro:

figura 2

La figura desiderata viene creata rendendo invisibile la grafica per la falsa colonna:

Figura 3

La descrizione della grammatica della grafica della trama non ha bisogno di cambiare: abbiamo semplicemente fornito una tabella di contingenza diversa da renderizzare secondo la stessa descrizione (e sovrascrivendo l'assegnazione di colore predefinita per la colonna falsa).

Commenti

Questi elementi grafici sono onesti: l'estensione orizzontale di ogni patch colorata è direttamente proporzionale ai dati sottostanti, senza distorsioni. Confrontandoli con l'originale (nella domanda) si rivela quanto sia estrema la sua distorsione (Tufte's Lie Factor ).

Se si desidera mostrare i dettagli nella parte inferiore dell '"imbuto", considerare la possibilità di rappresentare i conteggi per area anziché per lunghezza. È possibile rendere le lunghezze delle barre proporzionali alle radici quadrate delle lunghezze totali e le loro larghezze (in direzione verticale) anche proporzionali alle radici quadrate. Ora il fondo dell '"imbuto" sarebbe circa un ventesimo della lunghezza più lunga, piuttosto che un quattrocentesimo di esso, consentendo alcuni dettagli da mostrare. Sfortunatamente, l' ggplot2implementazione non consente di mappare una variabile alla larghezza della barra, quindi è necessaria una soluzione più complessa (una che descriva effettivamente ogni rettangolo individualmente). Forse esiste un'implementazione di Python più flessibile.

Riferimenti

Edward Tufte, The Visual Display of Quantitative Information . Cheshire Press 1984.

Leland Wilkinson, The Grammar of Graphics. Springer 2005.


Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.