Como Criar Mapas Interativos com R e Leaflet com Dados do Covid-19

Ana Claudia Garcia
Indicium Engineering
8 min readMay 14, 2020

A cada dia, milhares de bancos de dados são atualizados e novas informações sobre o COVID-19 surgem. A utilização de técnicas de data science é essencial para transformar tudo isso em informações acessíveis para o grande público. Neste artigo, apresentaremos 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 do COVID-19 em diferentes localidades. Uma forma intuitiva de transformá-los em informações palpáveis é por meio da apresentação de mapas. Algumas bibliotecas no R são ferramentas viáveis para esse fim.

Neste artigo, 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 este pacote no R e apresentar alguns dos seus recursos.

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

Um exemplo prático da utilização desses dados é o artigo publicado no blog da Indicium: COVID-19: Boletim SC, que apresenta uma breve análise dos dados para as cidades do estado de Santa Catarina, cujo código completo está disponível em no GitHub. Por isso, usaremos este artigo como referência para explicar como você pode criar mapas interativos com R e Leaflet.

Confira as etapas e processos que seguimos a seguir:

1. Obtenção dos dados de COVID-19 das Secretarias de Saúde Estaduais

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

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

Antes de fazer os mapas, é 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.

Digamos que 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 de diversas maneiras incluindo utilizar círculos, ícones, customizar í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, foi 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 a seguir:

3. Criação do mapa

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

Para o artigo Covid-19: Boletim SC, definimos duas formas possíveis para a visualização do mapa. Antes de irmos a essas visualizações apresentadas lá, vamos introduzir alguns recursos que temos no Leafltet.

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, acrescentando a possibilidade do usuário escolher o tipo de visualização dos dados.

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

Comparação dos dois tipos de visualização criados no Leaflet (dados de 13/05/2020)

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. Nesse sentido, 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, a mesma será automaticamente apresentada.

No mapa acima, percebe-se 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 estado.

Mas vamos supor que as informações acima não sejam 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.

Segue o exemplo:

Mapa com a distribuição do número absoluto de casos de COVID-19 entre as cidades catarinenses (dados de 13/05/2020)

No mapa acima, o tamanho do círculo, definido em radius, representa a quantidade de casos em cada cidade. Assim, 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 (cores, topografia, hidrografia..). Por exemplo, na visualização anterior as cores são mais opacas, por isso optamos pelo CartoDB.Positron, uma funcionalidade que destaca as informações que queremos apresentar.

4: Criar Mapas de calor (heatmaps)

Agora, digamos que toda essa informação ainda não seja suficiente para ter um panorama real noção do problema que Santa Catarina pode ter com a COVID-19.

Como faço 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 habitantes 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, uma forma diferente 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.

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.

No entanto, 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 a 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:

Mapa de casos confirmados por 100 mil habitantes nas cidades catarinenses (dados de 13/05/2020)

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

Para salvar o mapa basta:

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.

Neste 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.

Conclusão

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

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

Usamos como exemplo nosso mapa interativo do 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:

Comente o que achou e nos acompanhe por aqui para saber mais sobre R e outros recursos de Data Science.

--

--

Ana Claudia Garcia
Indicium Engineering

Economista pela UFSC e Analista de Dados na Indicium Tech