A cada dia, milhares de bancos de dados são atualizados e novas informações sobre a Covid-19 surgem. Para transformar tudo isso em informações acessíveis ao grande público, é essencial a utilização de técnicas de data science.

Neste artigo, apresentaremos as ferramentas e recursos de ciência de dados que contribuem para esse objetivo.

Dados geolocalizados e mapas interativos

Dados geolocalizados são cruciais para monitorar a evolução da Covid-19 em diferentes localidades. Para transformá-los em informações palpáveis, uma forma intuitiva é por meio da apresentação de mapas, e algumas bibliotecas no R são ferramentas viáveis para esse fim.

Neste post, daremos ênfase à biblioteca Leaflet, baseada em Javascript,  que é amplamente utilizada para aplicações de mapas na internet.

Um dos seus maiores benefícios está na facilidade de elaborar mapas personalizados e interativos, que entregam uma boa experiência ao usuário. Por isso, vamos demonstrar algumas formas de utilizar esse pacote no R e apresentar alguns dos seus recursos.

Tendo em vista a relevância do assunto, usaremos como base de exemplo os dados da Covid-19, disponibilizados pela Brasil.io.

Neste outro post do nosso blog, já foi apresentada uma breve análise dos dados para as cidades do estado de Santa Catarina, cujo código completo está disponível no GitHub. Vamos usá-lo como referência para explicar como você pode criar mapas interativos com R e Leaflet.

Confira agora todas as etapas e os processos que seguimos.

1. Obtenção dos dados da Covid-19

Inicialmente, é preciso obter os dados necessários. Nesse caso, utilizamos aqueles disponíveis pelas Secretarias de Saúde Estaduais, seguindo o seguinte processo:


2. Obtenção dos dados de geolocalização

Antes de fazer os mapas, também é preciso identificar as localizações referentes a cada dado.

É importante lembrar que existem diferentes formas de apresentar um mapa e cada uma delas pode demandar um tipo de referência diferente.

Por exemplo, quando o objetivo do mapa é ilustrar todas as cidades que apresentaram pelo menos um caso de Covid-19 no estado de Santa Catarina, você pode fazer isso utilizando círculos, ícones, customizações de ícones com imagens específicas etc.

No entanto, ao escolher um tipo de marcação, é necessário considerar a latitude e longitude ou outros pontos espaciais que identifiquem a localização dos dados que deseja apresentar.

No presente caso, como trabalhamos apenas com as cidades catarinenses, será possível utilizar uma base disponibilizada por Kelvins que contém uma marcação de latitude e longitude para cada município brasileiro.

Confira o processo para obter esses dados e associá-los à sua base:


3. Criação do mapa

Agora que temos todos os dados necessários, vamos colocá-los no mapa?

Para o artigo Covid-19: boletim SC, definimos duas formas possíveis de visualização do mapa. Mas, antes de irmos a essas visualizações apresentadas, vamos introduzir alguns recursos disponíveis no Leaflet.

Com o código a seguir, você criará um mapa com duas camadas: uma com ícones marcadores (markers) e outra com círculos (circle markers), capazes de destacar todas as cidades que obtiveram pelo menos um caso de Covid-19 registrado.

Optamos por essa abordagem porque ela possibilita a visualização desses dados de diferentes formas.

Além disso, para aumentar a interatividade do mapa, utilizamos o recurso de LayersControl, adicionando à possibilidade de o usuário escolher o tipo de visualização dos dados.

Para executar uma estratégia semelhante, basta seguir estes passos:

O exemplo acima demonstra como usamos o Leaflet para adicionar camadas de visualização (group) para interagir e visualizar os mesmos dados (ou dados diferentes) de formas variadas, em uma mesma apresentação.

Com isso, podemos definir grupos para serem visualizados individualmente (seleção única, definindo baseGroups), ou definir que esses grupos sejam apresentados com uma sobreposição (seleção múltipla, definindo overlayGroups).

Outra forma de interação apresentada nesse mapa inicial são os pop-ups e labels, que podem conter informações sobre os objetos apresentados no mapa.

Assim, quando o usuário clicar (popup) ou simplesmente passar o mouse por cima (label) de algum objeto com a informação definida, ela será automaticamente apresentada.

No mapa acima, é possível perceber que, embora haja uma aglomeração maior de cidades atingidas no litoral e no oeste de Santa Catarina, os casos de Covid-19 estão espalhados por todas as regiões do estado.

E se as informações acima não forem suficientes para atingir o objetivo do seu mapa?

Afinal, você deseja ter uma compreensão mais ampla para entender quais cidades têm mais casos e, assim, identificar as regiões em estado mais crítico, em números absolutos de casos.

Como fazer isso?

Podemos definir uma configuração para que o tamanho dos círculos seja interativo e varie de acordo com o número de casos registrado em cada localização. Assim, quanto maior o círculo, maior o número de casos naquela cidade. Veja um exemplo:

No mapa acima, o tamanho do círculo, definido em radius, representa a quantidade de casos em cada cidade. Desse modo, podemos identificar quais cidades de fato têm uma situação mais crítica em números absolutos de casos.

Além disso, percebe-se que, apesar dos casos estarem distribuídos pelo território catarinense, a maior quantidade de casos está concentrada em 3 ou 4 clusters nessa extensão territorial.

Com o recurso addProviderTiles, podemos definir outras formas de visualizar o mapa, em outra cor, topografia, hidrografia etc.

Por exemplo, na visualização anterior, optamos pelo tile CartoDB.Positron, pois as cores são mais opacas, uma funcionalidade que destaca as informações que queremos apresentar.

4. Criar Mapas de calor (heatmaps)

E se todas essas informações ainda não forem suficientes para ter um panorama real da Covid-19 em Santa Catarina? Como aprofundar o nível das informações?

O tamanho do sistema de saúde das cidades é definido pelo número de habitantes. Logo, cidades com menos habitantes têm menos recursos para lidar com a crise.

Dito isso, uma opção plausível seria visualizar o número de casos por habitante de cada cidade. Nesse caso, os dados da Brasil.io podem ser utilizados, pois apresentam uma coluna com o cálculo de casos por 100 mil habitantes.

Além disso, outra forma de visualizar os dados de casos por 100 mil habitantes é através de um mapa de calor, que destaca as cidades que têm maior incidência de casos. Para isso, necessitamos da geometria dos espaços a serem analisados, isto é, o contorno da região que queremos definir que pode ser o limite de uma cidade, estado ou país.

Vamos começar?

Optamos por utilizar o pacote brazilmaps para a elaboração do nosso heatmap, pois disponibiliza dados oficiais sobre a geometria de cidades, estados, microrregiões e mesorregiões brasileiras.

Inclusive, vale ressaltar que a base do IBGE é outra fonte confiável e acurada para obter essas geometrias. Ela contempla inúmeros arquivos em formato shapefiles que podem ser baixados e utilizados para a elaboração do mapa.

Ainda sim, em nosso caso, não foi necessário recorrer à base do IBGE, pois o pacote brazilmaps atende bem à nossa demanda.O pacote sf é necessário para converter a coluna geometria, que vem em formato de texto (character), em dados geométricos, que darão forma às cidades catarinenses que queremos ver.

Fazer o mapa a partir desses dados segue os mesmos preceitos definidos nos mapas anteriores.

Para criar um heatmap, precisamos definir as tonalidades de cores para cada grupo de valores.

Isso pode ser feito de inúmeras formas, usando a funções, como colorNumeric (indicada para dados contínuos), colorQuantile (indicada para dados discretos) ou colorFactor (indicada para dados categóricos).

Definido isso e colocando os valores dentro da função color, na seção que define as configurações dos polígonos das cidades(addPolygons), temos um mapa de calor pronto, cujas cores serão definidas de acordo com a paleta de cores estabelecida no passo anterior.

Além disso, é possível destacar os polígonos de forma interativa e evidenciar o contorno das cidades quando o usuário arrastar o mouse sobre a região que deseja. Esse destaque é definido pelo recurso highlightOptions. Por fim, o recurso smoothFactor permite simplificar o polígono e melhorar a performance do mapa.

Vale destacar que, quanto maior o valor, mais simplificada é a delimitação e melhor é a performance do mapa.

5. Salvando o mapa

A imagem abaixo mostra como salvar o mapa.

6. Publicando o Mapa na Web

Pronto!

Agora que temos nosso mapa interativo, chegou a hora de prepará-lo para publicação.

Para isso, você pode incluir o código manualmente em um CMS como o Wordpress, ou através de um iframe.

Nesse caso, como queremos manter nossos dados sempre atualizados, a melhor opção foi utilizar o Github como “servidor” do nosso arquivo que contém o mapa, e incluir no nosso site utilizando o API de consulta do Github.

Se você ainda não sabe o que é Github, confira este tutorial completo.

Como publicar o mapa?

1.Incluir o arquivo exportado no repositório git

2. Incluir o código na página que você quer publicar.

Em seguida, precisamos incluir um pedaço de código em nosso blog para trazer esse arquivo do Github. Infelizmente, o Github não permite apenas incluir a url do mapa em um frame, então precisamos utilizar o API.

Para isso, incluímos um iframe com id=”github-iframe2” para onde queremos enviar a resposta do API (o mapa). Em seguida, precisamos incluir uma tag JavaScript que chama o API e retorna o mapa como resposta.

Chegamos no fim do processo!

Agora, sempre que atualizarmos o mapa no repositório do Github, teremos um mapa acurado e atualizado em nosso blog.

Você está pronto para criar o seu próprio mapa interativo!

Este post explicou de forma prática como criar mapas interativos com R e Leaflet.

Usamos como exemplo nosso mapa interativo da Covid-19, e mostramos todas as etapas utilizadas, desde a obtenção de dados até a publicação deles em um blog ou página de internet.

No entanto, você pode aplicar esse processo para a criação de qualquer mapa interativo que desejar!

Caso queira ir além, algumas referências que podem ajudar são: