Painel brilhante / plotado COVID-19

cupom com desconto - o melhor site de cupom de desconto cupomcomdesconto.com.br


Governos e COVID-19: Qual deles para mais rápido, melhor, com menos pessoas morrendo? Essas perguntas são respondidas com meu painel.

Uma contribuição para o concurso brilhante: https://community.rstudio.com/t/material-design-corona-covid-19-dashboard-2020-shiny-contest-submission/59690

Introdução

Como Corona se espalhou? Usando o recurso de animação do R-shiny, isso pode ser facilmente rastreado.

COVID-19 é o principal tópico em todos os canais de notícias. O lugar em que moro é Munique, Alemanha. Em poucas semanas, a Alemanha passou de três pacientes no hospital ao lado de minha casa, para ter 20.000 pacientes. Como cientista de dados, não vi apenas os números, mas o crescimento exponencial. Eu queria saber:

  • Como está o desempenho do governo alemão?
  • Como outros países impedem a propagação da doença?
  • Quanto tempo leva para a doença se espalhar?
  • Por quanto tempo há crescimento exponencial?
  • Quantas pessoas realmente morrem?

Para habilitar isso, fiquei muito rápido usando brilhante. Com brilhante, você pode selecionar países, intervalos de datas, criar tabelas flexíveis com tabela de dados. Ótimo! Além disso, usei plotly para ampliar todos os gráficos, obter melhores lendas, facilitar a navegação pelos meus dados.
O que mais … o material brilhante faz com que o aplicativo inteiro pareça agradável. É um ótimo pacote e é fácil de usar em dispositivos móveis. Eu acho que é isso.
Agora eu posso responder todas as minhas perguntas navegando pelo aplicativo. É fácil ver como a Coréia do Sul conseguiu gerenciar Corona, por exemplo. Você também pode ver quanto tempo as pessoas levaram para morrer nos hospitais alemães, enquanto o surto foi bastante rápido na Itália. Além disso, o aplicativo mostra que, nos EUA até o dia 3 de abril, o spread não é realmente interrompido.

Acesse o aplicativo para ver o desempenho do seu país:

Leia Também  Tribe Payments lança a primeira sandbox de pagamentos completos

Se todos esses dados do Corona são demais para você, você também pode conferir a seção de dados divertidos dentro do aplicativo.

Implementação

Usei os seguintes pacotes para criar o aplicativo:

Todo o código deste aplicativo está hospedado no github:

Para limpar os dados, escrevi principalmente um script que faz o seguinte:

  • Limpe as regiões para dados CSSE dependentes de datas diferentes (a codificação foi alterada 3x em três semanas)
  • Dados agregados por país
  • Mesclar conjuntos de dados para mortes confirmadas e recuperadas para também compilar os casos ativos
  • Agregue por data para visualizar dados no mapa

Todo esse código pode ser encontrado em data_gen.R

Para criar o aplicativo, usei módulos brilhantes. Como criar aplicativos brilhantes modulares Eu já expliquei várias vezes: App – do Truck and Trailer. Dessa vez, usei módulos brilhantes padrão sem aulas. Cada uma das páginas mostradas dentro do aplicativo é um módulo. Então, um para o mapa, um para os gráficos da linha do tempo, um para a Itália….

Para renderizar as parcelas, usei apenas plotly. Plotly permite ao usuário selecionar determinadas linhas, rolar para dentro da plotagem e mover uma rodada. Com poucas linhas de código, é possível criar um gráfico de linhas que pode ser agrupado e colorido por grupo:

cupom com desconto - o melhor site de cupom de desconto cupomcomdesconto.com.br
plotly() %>% add_trace(
        data = simple_data,
        x = ~as.numeric(running_day),
        y = ~as.numeric(active),
        name = country_name,
        text="",
        type = if(type == "lines") NULL else type,
        line = list(color = palette_col[which(unique(plot_data_intern2$country) == country_name)])
)

O resultado fica assim:

Um recurso importante que eu queria incluir era uma tabela, na qual muitas medidas por país estão disponíveis. Eu configurei estas medidas:

  • Tempo máximo de crescimento exponencial consecutivo: O número de dias em que um país apresentou crescimento exponencial (duplicação de infecções em pouco tempo) seguidas. Isso significa que não houve fase de crescimento lento ou diminuição no meio.
  • Dias para dobrar infecções: Isso leva o tempo que levou até hoje para dobrar o número de infecções. Um número maior é melhor, porque leva mais tempo para infectar mais pessoas
  • Crescimento exponencial hoje: Se o número de infecções nos países ainda está crescendo exponencialmente
  • Casos confirmados: Casos confirmados hoje devido ao conjunto de dados Johns Hopkins CSSE
  • Mortes: Resumidas mortes até hoje devido ao conjunto de dados Johns Hopkins CSSE
  • População: Número de pessoas que vivem dentro do país
  • Casos confirmados em 100.000 habitantes: Quantas pessoas foram infectadas se você escolher aleatoriamente 100.000 pessoas deste país.
  • taxa de mortalidade: Porcentagem de mortes por caso confirmado
Leia Também  Proxyclick levanta US $ 15 milhões para expandir ainda mais os EUA e outros mercados

Com o pacote de dados, esta tabela é rolável e pesquisável. Mesmo em dispositivos móveis:

Por último, mas não menos importante, eu queria ter um mapa que muda com o tempo. Isso foi ativado usando o pacote de folhetos. leafletProxy permite adicionar novos círculos sempre que o data_for_display alterar. O código para o mapa ficaria assim:

leafletProxy(mapId = "outmap") %>%
       clearGroup(curr_date()) %>%
       addCircles(data = data_for_display,
                  lng = ~Long, lat = ~Lat,
                  radius = ~active_scaled,
                  popup = ~text,
                  fillColor = ~color, stroke = FALSE, fillOpacity = 0.5,
                  group = stringr::str_match(date_to_choose, "\d{4}\-\d{2}\-\d{2}")[1,1]
     )

Com brilho, o controle deslizante de data pode ser facilmente animado

shiny::sliderInput(inputId = session$ns("datum"),
                   min = as.POSIXct("2020-02-01"),
                   max = max(all_dates()),
                   value = max(all_dates()),
                   step = 86400,
                   label = "Date", timeFormat="%Y-%m-%d", 
                   animate = animationOptions(interval = 200))
)

O resultado é o vídeo acima:

Ligações



Se você chegou até aqui, por que não inscreva-se para atualizações do site? Escolha seu sabor: e-mail, Twitter, RSS ou facebook …



cupom com desconto - o melhor site de cupom de desconto cupomcomdesconto.com.br