Acesso a Séries Temporais com o sits¶
Prática com R Notebook¶
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.
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 |
|
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:
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.
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()
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
:
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.
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"
:
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'
:
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:
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)
|