Estou tentando representar graficamente o número de ações dos usuários (neste caso, "curtidas") ao longo do tempo.
Portanto, tenho "Número de ações" como meu eixo y, meu eixo x é o tempo (semanas) e cada linha representa um usuário.
Meu problema é que quero analisar esses dados para um conjunto de cerca de 100 usuários. Um gráfico de linhas rapidamente se torna uma bagunça confusa com 100 linhas. Existe um tipo melhor de gráfico que eu possa usar para exibir essas informações? Ou devo considerar ser capaz de ativar / desativar linhas individuais?
Gostaria de ver todos os dados de uma só vez, mas ser capaz de discernir o número de ações com alta precisão não é muito importante.
Por que estou fazendo isso
Para um subconjunto de meus usuários (usuários principais), quero descobrir quais podem não ter gostado de uma nova versão do aplicativo que foi lançada em uma determinada data. Estou procurando quedas significativas no número de ações de usuários individuais.
fonte
facet_wrap
função ggplot2 para criar um bloco de gráficos 4 x 5 (4 linhas, 5 colunas - ajuste dependendo da proporção desejada) com ~ 5 usuários por gráfico. Isso deve ficar claro o suficiente e você pode escalá-lo para cerca de 10 usuários por gráfico, dando espaço para 200 com um gráfico 4x5 ou 360 com um gráfico 6x6.Respostas:
Eu gostaria de sugerir uma análise preliminar (padrão) para remover os principais efeitos de (a) variação entre usuários, (b) resposta típica entre todos os usuários à mudança e (c) variação típica de um período para o próximo .
Uma maneira simples (mas de nenhuma maneira a melhor) de fazer isso é executar algumas iterações de "polimento mediano" nos dados para varrer as medianas do usuário e medianas do período e suavizar os resíduos ao longo do tempo. Identifique os suaves que mudam muito: eles são os usuários que você deseja enfatizar no gráfico.
Como esses são dados de contagem, é uma boa ideia expressá-los novamente usando uma raiz quadrada.
Como exemplo do que pode resultar, aqui está um conjunto de dados simulado de 60 semanas de 240 usuários que normalmente realizam de 10 a 20 ações por semana. Uma mudança em todos os usuários ocorreu após a semana 40. Três deles foram "instruídos" a responder negativamente à mudança. O gráfico à esquerda mostra os dados brutos: contagem de ações do usuário (com usuários diferenciados por cor) ao longo do tempo. Como afirmado na pergunta, é uma bagunça. A plotagem correta mostra os resultados dessa EDA - nas mesmas cores de antes - com os usuários incomumente responsivos identificados e destacados automaticamente . A identificação - embora seja um pouco ad hoc - está completa e correta (neste exemplo).
Aqui está o
R
código que produziu esses dados e realizou a análise. Poderia ser melhorado de várias maneiras, incluindoUsando um polonês mediano completo para encontrar os resíduos, em vez de apenas uma iteração.
Suavização dos resíduos separadamente antes e depois do ponto de mudança.
Talvez usando um algoritmo de detecção de outlier mais sofisticado. O atual apenas sinaliza todos os usuários cujo intervalo de resíduos é mais do que o dobro do intervalo médio. Embora simples, é robusto e parece funcionar bem. (Um valor configurável pelo usuário,,
threshold
pode ser ajustado para tornar essa identificação mais ou menos rigorosa.)No entanto, os testes sugerem que esta solução funciona bem para uma ampla variedade de contagens de usuários, 12 - 240 ou mais.
fonte
threshold
n.users <- 500
n.outliers <- 100
threshold <- 2.5
Geralmente, acho que mais de duas ou três linhas em uma única faceta de um enredo começam a ser difíceis de ler (embora eu ainda o faça o tempo todo). Portanto, este é um exemplo interessante do que fazer quando você tem algo que conceitualmente pode ser um gráfico de 100 facetas. Uma maneira possível é desenhar todas as 100 facetas, mas em vez de tentar colocá-las na página de uma só vez, olhando uma de cada vez em uma animação.
Na verdade, usamos essa técnica no meu trabalho - originalmente fizemos a animação mostrando 60 gráficos de linhas diferentes como pano de fundo para um evento (o lançamento de uma nova série de dados) e descobrimos que, ao fazê-lo, captamos alguns recursos dos dados. que não eram visíveis em gráficos facetados com 15 ou 30 facetas por página.
Então, aqui está uma maneira alternativa de apresentar os dados brutos, antes de começar a remover o usuário e os efeitos de tempo típicos, conforme recomendado pelo @whuber. Isso é apresentado apenas como uma alternativa adicional à sua apresentação dos dados brutos - eu recomendo totalmente que você prossiga com a análise em linhas como as que ele sugere.
Uma maneira de contornar esse problema é produzir as séries cronológicas de 100 (ou 240 no exemplo do whuber) separadamente e uni-las em uma animação. O código abaixo produzirá 240 imagens separadas desse tipo e você poderá usar o software gratuito para criação de filmes para transformá-lo em filme. Infelizmente, a única maneira de fazer isso e manter a qualidade aceitável era um arquivo de 9 MB, mas se você não precisar enviá-lo pela Internet, isso pode não ser um problema. animação experiente. O pacote de animação em R pode ser útil aqui (permite fazer tudo em uma chamada de R), mas mantive isso simples para esta ilustração.
Fiz a animação de tal forma que desenha cada linha em preto pesado e deixa uma sombra verde semi-transparente pálida para trás, para que o olho obtenha uma imagem gradual dos dados acumulados. Existem riscos e oportunidades nisso - a ordem em que as linhas são adicionadas deixará uma impressão diferente; portanto, considere torná-la significativa de alguma forma.
Aqui estão algumas das fotos do filme, que usa os mesmos dados que o @whuber gerou:
fonte
windows()
ouquartz()
e aninhar seufor()
loop dentro dela. NB, você precisará colocar umSys.sleep(1)
na parte inferior do seu loop para poder ver as iterações. Obviamente, essa estratégia não salva um arquivo de filme - você só precisa executá-lo novamente sempre que quiser vê-lo novamente.Uma das coisas mais fáceis de fazer é um boxplot. Você pode ver imediatamente como as medianas da amostra se movem e quais dias têm mais discrepâncias.
Para análise individual, sugiro coletar uma pequena amostra aleatória de seus dados e analisar séries temporais separadas.
fonte
Certo. Primeiro, classifique pelo número médio de ações. Então faça (digamos) 4 gráficos, cada um com 25 linhas, uma para cada quartil. Isso significa que você pode reduzir os eixos y (mas deixar o rótulo do eixo y claro). E com 25 linhas, você pode variar de acordo com o tipo e a cor da linha e, talvez, com o símbolo de plotagem e obter alguma clareza
Empilhe os gráficos verticalmente com um único eixo de tempo.
Isso seria bem fácil no R ou SAS (pelo menos se você tiver o v. 9 do SAS).
fonte
Acho que quando você está se esgotando, se há opções relacionadas ao tipo, se o gráfico e as configurações do gráfico, a introdução do tempo através da animação é a melhor maneira de exibir, porque fornece uma dimensão extra para trabalhar e permite exibir mais informações de uma maneira fácil de seguir . Seu foco principal deve estar na experiência do usuário final.
fonte
Se você está mais interessado na mudança para usuários individuais, talvez seja uma boa situação para uma coleção de Sparklines (como este exemplo do The Pudding ):
Estes são bastante detalhados, mas você pode mostrar muito mais gráficos ao mesmo tempo removendo as etiquetas e as unidades do eixo.
Muitas ferramentas de dados os incorporam (o Microsoft Excel possui linhas de flutuação ), mas acho que você desejaria extrair um pacote para construí-los em R.
fonte