Meta-análise R (1): Quais são os pacotes mais baixados?
Posted on May 25, 2016
Este é o primeiro post de uma nova série sobre meta-análises de pacotes R. Com o pacote miniCRAN é possível baixar logs de downloads de pacotes de R por meio do espelho (mirror) do RStudio do CRAN. Cada linha nesses logs representa um download de um pacote por um usuário.
O objetivo desta série é analisar os dados gerados por esses logs.
Para este primeiro post, é mostrado:
Como baixar os logs de downloads de pacotes do CRAN do RStudio de forma automatizada com o pacote miniCRAN;
Um grafo de redes criado a partir dos pacotes mais populares filtrados e suas dependências.
Os pacotes usados neste post são:
As linhas abaixo mostram como eu baixei os logs da mirror do RStudio do CRAN para o período entre 24 de Abril de 2016 a 24 de Maio a 2016. Os logs de cada dia desse período são salvos na pasta indicada no argumento log_folder, totalizando cerca de 250 MB. O dataframe gerado com o código gerado é enorme, por isso é recomendável removê-lo da memória após realizar os filtros desejados a partir dele.
Para não ter de carregar o objeto df_cran toda vez que eu renderizo o arquivo markdown deste post, salvei uma cópia em disco do dataframe df_pkgs. Para isso, usei o pacote feather, que torna os processos de escrita e leitura de arquivos no R muito rápidas.
Temos que 9236 diferentes pacotes foram baixados no período analisado.
Para determinar a quantidade de pacotes a serem analisados como membros de uma rede, usei o Princípio de Pareto:
Temos que 335 pacotes, cerca de 3,6% do total, equivalem a 80% de todos os downloads de pacotes nos últimos 30 dias, o que mostra que a regra de Pareto é aplicável aqui e que, apesar de haver milhares de pacotes disponíveis no CRAN, a grande maioria deles não são baixados muitas vezes, como mostram as seguintes estatísticas:
O número mediano de downloads por usuário é de 182, muito distante dos 10 mais populares mostrados acima.
Os vinte pacotes mais baixados são:
Pessoalmente, não fiquei surpreso ao ver que, dos 6 pacotes mais baixados, 3 (ggplot2, stringr e plyr) fazem parte do Hadleyverse, ou seja, foram criados pelo gênio Hadley Wickham, que revolucionou o modo como o R é usado e é ídolo para muitos usuários da linguagem, como eu :).
Após filtrar os pacotes que entrarão na análise, o pacote miniCRAN é usado para extrair as dependências de cada um e formar uma rede deles. A função makeDepGraph extrai as dependências dos pacotes indicados na função e cria um grafo. Por exemplo:
Assim, dos 335 pacotes mais populares, são gerados dois grafos: o da esquerda, com o método plot com as modificações nativas realizadas pelo miniCRAN e o da direita, feita pelo pacote igraph.
Como pode-se ver, ambos os gráficos acima são visualmente poluídos e não dá para aprender muita coisa a partir deles. Além disso, a fim de analisar a centralidade de um pacote em um grafo, é importante saber o que o argumento suggests da função makeDepGraph significa. Segundo Hadley Wickham, quando o pacote A sugere um outro pacote B, significa que o A pode usar o pacote B, mas ele não é requerido. Este pode ser usado para rodar testes, montar vignettes (tutoriais de pacotes), etc.
Vamos, então, como fica o grafo dos 20 pacotes mais populares, com e sem suggests, com o pacote ggplot2 destacado:
Agora sim já é possível aprender algumas coisas a partir do grafo. O sentido da linha vermelha indica que, por exemplo, o ggplot2 importa vários pacotes(digest, gtable, MASS, reshape2, plyr e scales), mas não é importado por nenhum outro. Já o grafo da direita mostra que o ggplot2 sugere muitos outros, o que aumenta sua centralidade na rede.
Conclusão: para realizar análises de centralidade de pacotes R, é necessário deixar o argumento suggests como FALSE.