Como você visualizaria um funil segmentado? (e você poderia fazer isso com Python?)

9

Vi este post na Moz, que apresentava um funil de marketing segmentado:insira a descrição da imagem aqui

Esse tipo de coisa teria muito valor no meu trabalho. O que não faço ideia é como visualizar dados brutos para mostrar um funil segmentado como este. A ideia é que os leads de vendas venham de diferentes fontes (que usamos para segmentar os dados) e passem por vários estágios no momento em que são convertidos em um acordo. De cada estágio para outro, alguns desaparecem. A largura de cada fatia é determinada pelo número absoluto de derivações em cada uma. [ EDIT : Observe que a imagem usada aqui para referência é enganosa quando se trata dos números especificados à direita de cada fatia. Parece não haver relação entre a largura da fatia e o número. A imagem deve ser tomada apenas como referência ao design do funil segmentado].

Enfim, alguma idéia de como visualizá-lo? Se possível, eu adoraria ter uma maneira de fazer isso em Python.

Aqui está um documento do Google com alguns dados fictícios, se alguém precisar ...

Ansioso por suas idéias. Obrigado!

Optimesh
fonte
5
Acho a ilustração confusa por causa do enorme fator de mentira incorporado nela: os níveis sucessivos do "funil" usam escalas diferentes que mudam irregularmente. Assim, as larguras das bandas não são determinadas pelos números absolutos em cada uma - pelo menos não de maneira fácil de entender ou visualizar. Então, o que você está perguntando: se existem maneiras melhores de visualizar esses dados ou como criar esse gráfico no Python?
whuber
Para trabalhar em qualquer software, normalmente você pode apenas incorporar uma categoria de deslocamento para as barras empilhadas e torná-la invisível. Aqui está um exemplo com a mesma planilha do Google. Você pode ver que é um viz ineficaz. para as categorias reduzidas a nada nesse exemplo.
21714 Andy
11
@whuber Oi. Não tenho certeza se eu sigo. Cada nível é um número absoluto ... e cada nível é um subgrupo do anterior. Por favor, explique por que a escala muda irregularmente então. Obrigado!
Optimesh 11/03/14
3
O segmento superior representa 1,5 milhão de visitas e abrange aproximadamente 500 pixels na minha tela: um pixel = 3000 visitas. O segmento inferior representa 5000 visitas e mede cerca de 150 pixels na minha tela, em vez de menos de 2 (como @Andy apontou em seu exemplo). Isso é um exagero de cerca de 100 a 1. Como o gráfico nesta pergunta parece não se importar com esse exagero, parece que não há sentido em redimensionar os segmentos: você obteria informações melhores ao torná-las do mesmo comprimento e do gráfico. seria menos enganoso.
whuber
11
@ Whuber Oh, entendo o que você quer dizer agora. Sim, eu apenas trouxe essa imagem como exemplo para o que estou procurando fazer visualmente. Os números em si são enganosos, sem dúvida.
Optimesh

Respostas:

3

Esse gráfico exibe uma tabela de contingência bidirecional cujos dados são aproximadamente os seguintes:

                      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

Existem inúmeras maneiras de construir esse enredo. Por exemplo, você pode calcular as posições de cada amostra retangular de cor e colocar cada amostra separadamente. Em geral, porém, ajuda a encontrar uma descrição sucinta de como um gráfico representa dados.

Como ponto de partida, podemos vê-lo como uma variação de um gráfico de barras empilhadas.

Figura 1: gráfico de barras empilhadas.

Esse gráfico dificilmente precisa de uma descrição: por familiaridade, sabemos que cada linha de retângulos corresponde a cada linha da tabela de contingência; que comprimentos dos retângulos são diretamente proporcionais às suas contagens; que eles não se sobrepõem; e que as cores correspondem às colunas da tabela.

Se convertermos esta tabela em um "quadro de dados" ou "tabela de dados" com uma linha por contagem com campos indicando o nome da linha, o nome da coluna e a contagem, plotar isso normalmente significa chamar uma função adequada e estipular onde encontrar os nomes das linhas, os nomes das colunas e as contagens. Usando uma implementação de Gramática de Gráficos (o pacote para ), isso seria algo comoXggplot2R

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

Os detalhes do gráfico, como a largura de uma linha de barras e quais cores usar, geralmente precisam ser estipulados explicitamente. Como isso é feito depende do ambiente de plotagem (e isso é relativamente pouco interessante: você só precisa procurar).

Essa implementação específica da gramática dos gráficos oferece pouca flexibilidade no posicionamento das barras. Uma maneira de produzir a aparência desejada, com o mínimo esforço, é inserir uma categoria invisível na base de cada barra para que as barras fiquem centralizadas. Um pouco de reflexão sugere que a contagem falsa necessária para centralizar cada barra deve ser a média do comprimento total da barra e a da barra mais longa. Para este exemplo, isso seria uma coluna inicial com os valores

 254478.0       0.0  301115.0  897955.0  993610.5 1019817.0 

Aqui está o gráfico de barras empilhadas resultante mostrando os dados falsos em cinza claro:

Figura 2

A figura desejada é criada tornando os gráficos da coluna falsa invisíveis:

Figura 3

A descrição Gramática dos gráficos do gráfico não precisa ser alterada: simplesmente fornecemos uma tabela de contingência diferente para ser renderizada de acordo com a mesma descrição (e substituímos a atribuição de cores padrão para a coluna falsa).

Comentários

Esses gráficos são honestos: a extensão horizontal de cada amostra colorida é diretamente proporcional aos dados subjacentes, sem distorção. Compará-los com o original (na pergunta) revela quão extrema é sua distorção ( fator de mentira de Tufte ).

Se desejar mostrar detalhes na parte inferior do "funil", considere representar as contagens por área, e não por comprimento. Você pode tornar os comprimentos das barras proporcionais às raízes quadradas dos comprimentos totais e suas larguras (na direção vertical) também proporcionais às raízes quadradas. Agora, a parte inferior do "funil" teria cerca de um vigésimo do comprimento mais longo, em vez de um quatrocésimo, permitindo a exibição de alguns detalhes. Infelizmente, a ggplot2implementação não permite mapear uma variável para a largura da barra e, portanto, é necessária uma solução alternativa mais envolvente (uma que realmente descreva cada retângulo individualmente). Talvez haja uma implementação Python que seja mais flexível.

Referências

Edward Tufte, a exibição visual de informações quantitativas . Cheshire Press 1984.

Leland Wilkinson, A gramática dos gráficos. Springer 2005.

whuber
fonte