Acesso a Séries Temporais com o sits

Prática com R Notebook

sits access time series

Neste hands-on, organizamos uma atividade prática no sits de acordo com o fluxograma apresentado ao lado. Nele, mostramos como é realizado o acesso a séries temporais no sits. Aqui você aprenderá a:

  • acessar séries temporais do serviço WTSS pelo sits.

  • acessar múltiplas séries temporais a partir de um arquivo CSV.

Notebook Kaggle: https://www.kaggle.com/rolfsimoes/sits-kaggle

Acesso à provedores de séries temporais

Séries temporais de imagens de satélite podem ser obtidas de várias formas. Atualmente, o sits é capaz de acessar os serviços Web WTSS e SATVEG de séries temporais. Além desses serviços, o sits, em breve, será capaz de acessar os produtos do projeto Brazil Data Cube. Além desses serviços Web, o sits permite acesso a arquivos GeoTIF remotos ou locais organizados como bricks (veremos como acessá-los mais adiante).

Nesta prática, nos concentraremos em um tipo de acesso a séries temporais: o serviço Web WTSS. No sits, a função sits_cube() cria referências a provedores de séries temporais. O código a seguir mostra um exemplo de chamada a essa função que cria uma referência ao serviço WTSS do INPE.

Code snippet 7 - Acesso ao WTSS no sits.
1
2
3
4
5
6
7
8
9
# Cria uma referencia ao servico WTSS do INPE
wtss <- sits_cube(type = "WTSS",
                  URL = "http://www.esensing.dpi.inpe.br/wtss",
                  name = "MOD13Q1")

# Obtem uma serie temporal nas coordenadas indicadas
ts1 <- sits_get_data(cube = wtss,
                     longitude = -55.57320,
                     latitude = -11.50566)

Para acessar uma série temporal, é necessário chamar a função sits_get_data(), que é a função que realiza o acesso ao provedor ou fonte de dados no sits. No exemplo acima, essa função recebe como primeiro argumento, o objeto que faz referência ao serviço WTSS. Os demais argumentos se referem à localização espacial da série temporal. A saída dessa função é uma tabela de formato específico e amplamente utilizada no pacote.

Formato de arquivo CSV para acesso em lote a séries temporais

A função sits_get_data() também permite o acesso em lote a séries temporais cujos metadados estejam salvos em formato CSV ou ESRI Shapefile de pontos. Veremos aqui como usar o formato CSV para obter um conjunto de séries temporais.

O formato CSV consiste em um arquivo texto que representa dados tabulares geralmente separados por vírgula. O arquivo CSV do sits deve ter o seguinte formato:

Campo

Formato

Exemplos

id

inteiro

1, 2, 3

longitude

numérico

-52.5432

latitude

numérico

1.5432

start_date

data (AAAA-MM-DD)

2010-06-24

end_date

data (AAAA-MM-DD)

2012-12-30

label

texto

  • Classe_Desconhecida

  • Floresta

  • Soja_Milheto

Em nosso ambiente Kaggle, há um arquivo CSV de exemplo localizado em "../input/sits-dataset/examples.csv". Seu conteúdo pode ser lido

cat(readLines("../input/sits-dataset/examples.csv"), fill = TRUE)

Podemos passar esse arquivo para a função sits_get_data() acessar as séries temporais em lote, como no exemplo a seguir:

Code snippet 8 - Acesso em lote a séries temporais no WTSS.
1
2
ts2 <- sits_get_data(cube = wtss,
                     file = "../input/sits-dataset/examples.csv")

Formato da tabela de dados de amostras no sits

No sits, todos os conjuntos de amostras são um objeto tibble do R com as seguintes colunas:

  • longitude: coordenada leste-oeste em EPSG:4326

  • latitude: coordenada norte-sul em EPSG:4326

  • start_date: data inicial da série temporal

  • end_date: data final da série temporal

  • label: classe associada à série temporal

  • cube: nome do cubo de dados que originou a série temporal

  • time_series: lista contendo os valores da série temporal armazenadas como tibble

Para visualizar a tabela podemos usar o comando print() sobre a variável que armazena a tabela de amostras.

Code snippet 9 - Print objeto tibble no sits.
1
2
# Mostra as primeiras linhas da tabela de amostras
print(ts2)

Essa tabela é gerada toda vez que o usuário utiliza a função sits_get_data(). Cada linha nessa tabela representa uma amostra.

Salvando e lendo tabelas de amostras

Como qualquer objeto R, a tabela de amostras pode ser salva para e lida de um dos formatos de arquivos suportados pelo R. Usaremos aqui o formato RDS para salver e carregar conjunto de dados no ambiente R.

Para salvar uma tabela de amostras usamos o comando saveRDS() sobre a variável contendo a tabela a ser salva e adicionalmente informamos o local onde será salvo o arquivo. A leitura de um arquivo RDS é feita com a função readRDS()

Code snippet 10 - Salvando e lendo tabela de amostras.
1
2
3
4
5
6
7
8
# Salva a tabela em um arquivo 'tabela.rds'
saveRDS(ts2, "tabela.rds")

# Lê o arquivo e armazena na variável `ts3`
ts3 <- readRDS("tabela.rds")

# Mostra as linhas da tabela
print(ts3)

Em nosso ambiente Kaggle, temos um conjunto com 1.892 amostras do Mato Grosso usadas para gerar o mapa descrito em [Simoes et al. (2020)](#simoes2020). O arquivo encontra-se em "../input/sits-dataset/samples.rds" e vamos carregá-lo para a variável samples:

Code snippet 11 - Lendo uma tabela de amostras.
1
2
3
4
5
# Lê o arquivo de amostras e armazena na variável `samples`
samples <- readRDS("../input/sits-dataset/samples.rds")

# Mostra as primeiras linhas da tabela
print(samples)

Obtendo informações de uma tabela de amostras

O pacote sits possui algumas funções que fornecem informações úteis sobre uma tabela de amostras. Por exemplo, para sabermos as classes existentes e a quantidade de amostras de cada classe, podemos usar a função sits_labels(). Já a função sits_bands() nos informa sobre os nomes das bandas ou dos índices espectrais presentes no dado.

Code snippet 12 - Obtendo informações de uma tabela de amostras.
1
2
3
4
5
# Quais bandas estão presentes?
sits_bands(samples)

# Quantas amostras existem em cada classe?
sits_labels(samples)

Filtrando uma tabela de amostras

As tabelas de amostras são armazenados como um objeto tibble. Uma vez que esse formato de dados é comum ao tidyverse, é possível usar as mesmas funções de manipulação de tabelas do dplyr. No exemplo a seguir, usamos a função filter(), do pacote dplyr, para filtrar as amostras da classe "Forest":

Code snippet 13 - Filtrando uma tabela de amostras.
1
2
3
4
5
# Carrega a biblioteca `dplyr`
library(dplyr)

# Filtra as amostras e mostra as primeiras linhas da tabela
print(filter(ts2, label == "Forest"))

Também é possível extrair bandas específicas dos dados usando a função sits_select(). Essa função faz uma cópia dos dados de amostras mas selecionando apenas as bandas solicitadas. No exemplo a seguir, criamos uma variável para armazenar uma cópia de samples mas apenas com a banda 'NDVI':

Code snippet 14 - Selecionando a banda ‘NDVI’ de uma tabela de amostras.
1
2
3
4
5
# Copia a tabela apenas com a banda 'NDVI'
samples_ndvi <- sits_select(samples, bands = "NDVI")

# Mostra as bandas presentes na tabela de amostras
sits_bands(samples_ndvi)

Gerando gráficos das séries temporais

Para gerar um gráfico com as séries temporais podemos usar a função genérica do R plot() sobre a variável que contém a tabela com as amostras e, assim, obter o gráfico das séries temporais correspondentes. A seguir mostramos exemplos de uso dessas funções:

Code snippet 15 - Visualizando série temporais.
1
2
3
4
5
6
7
8
# Gera gráfico da serie temporal `ts1`
plot(ts1)

# Gera gráfico da primeira série temporal em `samples`
plot(head(samples, 1))

# Gera os gráficos das séries temporais de NDVI das classes separadamente
plot(samples_ndvi)