¿Cómo visualizarías un embudo segmentado? (¿y podrías hacerlo con Python?)

9

Vi esta publicación en Moz que presentaba un embudo de marketing segmentado:ingrese la descripción de la imagen aquí

Este tipo de cosas tendría bastante valor en mi trabajo. Lo que no tengo idea es cómo visualizar datos sin procesar para mostrar un embudo segmentado como este. La idea es que los clientes potenciales de ventas provienen de diferentes fuentes (que usamos para segmentar los datos) y pasan por varias etapas cuando se convierten en un acuerdo. De cada etapa a otra, algunos caen. El ancho de cada segmento está determinado por el número absoluto de clientes potenciales en cada uno. [ EDITAR : observe que la imagen utilizada aquí como referencia es engañosa cuando se trata de los números especificados a la derecha de cada segmento. Parece que no hay relación entre el ancho de la porción y el número. La imagen solo debe tomarse como referencia al diseño del embudo segmentado].

De todos modos, ¿alguna idea de cómo visualizarlo? Si es posible, me encantaría tener una manera de hacerlo en Python.

Aquí hay un Google Doc con algunos datos ficticios si alguien necesita algunos ...

Esperamos sus ideas. ¡Gracias!

Optimesh
fuente
55
Encuentro la ilustración confusa debido al enorme Factor de mentira incorporado: los niveles sucesivos del "embudo" utilizan diferentes escalas que cambian de manera irregular. Por lo tanto, los anchos de las bandas no están determinados por los números absolutos en cada uno, al menos no de una manera fácil de entender o visualizar. Entonces, ¿qué está preguntando: si hay mejores formas de visualizar dichos datos o cómo crear este gráfico en Python?
whuber
Para trabajar en cualquier software, normalmente puede incorporar una categoría de desplazamiento para las barras apiladas y luego hacerla invisible. Aquí hay un ejemplo con esa misma hoja de cálculo de Google. Puedes ver que es una visualización ineficaz. para las categorías que se reducen a nada en ese ejemplo.
Andy W
1
@whuber Hola. No estoy seguro de seguir. Cada nivel son números absolutos ... y cada nivel es un subgrupo del anterior. Por favor explique por qué la escala cambia de manera irregular entonces. ¡Gracias!
Optimesh
3
El segmento superior representa 1,5 millones de visitas y abarca aproximadamente 500 píxeles en mi pantalla: un píxel = 3000 visitas. El segmento inferior representa 5000 visitas y abarca alrededor de 150 píxeles en mi pantalla, en lugar de menos de 2 (como señaló @Andy con su ejemplo). Eso es una exageración de alrededor de 100 a 1. Dado que el gráfico en esta pregunta parece no importarle tal exageración, entonces parece que no tiene sentido reescalar los segmentos: obtendría una mejor información al hacer que todos tengan la misma longitud y el gráfico Sería menos engañoso.
whuber
1
@whuber Oh, veo a qué te refieres ahora. Sí, acabo de traer esa imagen como un ejemplo de lo que estoy buscando hacer visualmente. Los números mismos son engañosos, sin duda.
Optimesh

Respuestas:

3

Este gráfico muestra una tabla de contingencia bidireccional cuyos datos son aproximadamente estos:

                      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

Hay miles de formas de construir esta trama. Por ejemplo, podría calcular las posiciones de cada parche rectangular de color y colocar cada parche por separado. Sin embargo, en general, es útil encontrar una descripción sucinta de cómo una gráfica representa los datos.

Como punto de partida, podemos ver este como una variación de un gráfico de barras apiladas.

Figura 1: gráfico de barras apiladas.

Esta gráfica apenas necesita una descripción: a través de la familiaridad sabemos que cada fila de rectángulos corresponde a cada fila de la tabla de contingencia; que las longitudes de los rectángulos son directamente proporcionales a sus recuentos; que no se superponen; y que los colores corresponden a las columnas de la tabla.

Si convertimos esta tabla en un "marco de datos" o "tabla de datos" tiene una fila por conteo con campos que indican el nombre de la fila, el nombre de la columna y el conteo, entonces trazarlo normalmente equivale a llamar a una función adecuada y estipular dónde encontrar los nombres de fila, los nombres de columna y los recuentos. Usando una implementación de Gramática de Gráficos (el paquete para ) esto sería algo así comoXggplot2R

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

Los detalles del gráfico, como qué tan ancha es una fila de barras y qué colores usar, generalmente deben estipularse explícitamente. La forma en que se hace depende del entorno de trazado (y, por lo tanto, es de relativamente poco interés: solo hay que buscarlo).

Esta implementación particular de la Gramática de Gráficos proporciona poca flexibilidad en el posicionamiento de las barras. Una forma de producir el aspecto deseado, con un esfuerzo mínimo, es insertar una categoría invisible en la base de cada barra para que las barras estén centradas. Un poco de reflexión sugiere que la cuenta falsa necesaria para centrar cada barra debe ser el promedio de la longitud total de la barra y la de la barra más larga. Para este ejemplo, esta sería una columna inicial con los valores

 254478.0       0.0  301115.0  897955.0  993610.5 1019817.0 

Aquí está el gráfico de barras apiladas resultante que muestra los datos falsos en gris claro:

Figura 2

La figura deseada se crea haciendo invisibles los gráficos de la columna falsa:

figura 3

La descripción de la Gramática de Gráficos de la trama no necesita cambiar: simplemente proporcionamos una tabla de contingencia diferente para representarla de acuerdo con la misma descripción (y anulamos la asignación de color predeterminada para la columna falsa).

Comentarios

Estos gráficos son honestos: la extensión horizontal de cada parche de color es directamente proporcional a los datos subyacentes, sin distorsión. Compararlos con el original (en la pregunta) revela cuán extrema es su distorsión ( Factor de mentira de Tufte ).

Si se desea mostrar detalles en la parte inferior del "embudo", considere representar los recuentos por área en lugar de longitud. Puede hacer que las longitudes de las barras sean proporcionales a las raíces cuadradas de las longitudes totales y sus anchos (en la dirección vertical) también proporcionales a las raíces cuadradas. Ahora la parte inferior del "embudo" sería aproximadamente una vigésima parte de la longitud más larga, en lugar de una cuarta parte de ella, lo que permitiría mostrar algunos detalles. Desafortunadamente, la ggplot2implementación no permite asignar una variable al ancho de la barra, por lo que se necesita una solución más complicada (una que de hecho describa cada rectángulo individualmente). Quizás haya una implementación de Python que sea más flexible.

Referencias

Edward Tufte, La visualización de información cuantitativa . Cheshire Press 1984.

Leland Wilkinson, La gramática de los gráficos. Springer 2005.

whuber
fuente