10.5 Exercícios
Pacotes necessários
# carregue aqui os pacotes necessários para sua resolução
Dados
arq_temp <- tempfile(fileext = ".RData")
download.file(
"https://github.com/lhmet/adar-ufsm/blob/master/data/dados-lista-exerc4-cap9.RData?raw=true",
destfile = arq_temp,
mode = "wb"
)
# nome dos dados carregados para os exercícios
print(load(arq_temp))
Enunciados
- Converta os dados de anomalias padronizadas do índice de oscilação sul armazenados no quadro de dados
soi
(mostrado abaixo) para o formato "arrumado" e em ordem cronológica. Os nomes das variáveis na tabela de dados arrumado deve estar sempre em letras minúsculas (conheça a funçãotolower()
).
A estrutura esperada dos dados processados é mostrada abaixo:
Rows: 36
Columns: 3
$ year <int> 1951, 1951, 1951, 1951, 1951, 1951, 19...
$ mes <int> 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12,...
$ soi <dbl> 1.5, 0.9, -0.1, -0.3, -0.7, 0.2, -1.0,...
- Faça a conversão dos dados de precipitação diária, armazenados em um
tibble
, para o "formato arrumado" e transforme as datas para o tipo de dados date.
precd_ncdf
A estrutura esperada do tibble
resultante é mostrada abaixo:
Rows: 40
Columns: 4
$ x <dbl> -60.625, -60.625, -60.625, -60.625, -60.625, -60.625, -6...
$ y <dbl> 5.125, 5.125, 5.125, 5.125, 5.125, 5.125, 5.125, 5.125, ...
$ date <date> 2010-01-01, 2010-01-02, 2010-01-03, 2010-01-04, 2010-01...
$ prec <dbl> 0.0000000, 0.0000000, 0.0000000, 0.4484863, 2.3515625, 4...
- Coloque os dados de poluição (
tibble
poluentes
) no formato "arrumado".
- Coloque os dados meteorológicos diários da estação meteorológica de Santa Maria (
dados_sm
) no formato arrumado.
- Coloque os dados meteorológicos diários da estação meteorológica de Santa Maria (
dados_sm
#> # A tibble: 12 x 35
#> id element month year d1 d2
#> <chr> <chr> <dbl> <dbl> <dbl> <dbl>
#> 1 83936 tmax 1 2010 32.6 33.4
#> 2 83936 tmin 1 2010 17.9 21.4
#> 3 83936 tmax 2 2010 36.8 38.4
#> 4 83936 tmin 2 2010 25.4 25
#> 5 83936 tmax 3 2010 32 32.4
#> 6 83936 tmin 3 2010 18.6 19
#> 7 83936 tmax 4 2010 34.4 28.6
#> 8 83936 tmin 4 2010 17.5 21
#> 9 83936 tmax 5 2010 27 26.4
#> 10 83936 tmin 5 2010 7.2 7
#> 11 83936 tmax 6 2010 19.2 23.8
#> 12 83936 tmin 6 2010 4.1 8.8
#> # ... with 29 more variables: d3 <dbl>,
#> # d4 <dbl>, d5 <dbl>, d6 <dbl>, d7 <dbl>,
#> # d8 <dbl>, d9 <dbl>, d10 <dbl>,
#> # d11 <dbl>, d12 <dbl>, d13 <dbl>,
#> # d14 <dbl>, d15 <dbl>, d16 <dbl>,
#> # d17 <dbl>, d18 <dbl>, d19 <dbl>,
#> # d20 <dbl>, d21 <dbl>, d22 <dbl>,
#> # d23 <dbl>, d24 <dbl>, d25 <dbl>,
#> # d26 <dbl>, d27 <dbl>, d28 <dbl>,
#> # d29 <dbl>, d30 <dbl>, d31 <dbl>
- Deixe os dados ordenados cronologicamente e obtenha as variáveis com nomes e ordem conforme mostrado na estrutura de dados esperada.
Rows: 186
Columns: 6
$ id <chr> "83936", "83936", "83936", "83936", "83936", "...
$ year <dbl> 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010...
$ month <dbl> 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1...
$ day <int> 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14,...
$ tmax <dbl> 32.6, 33.4, 24.8, 29.4, 27.0, 24.4, 29.6, 29.4...
$ tmin <dbl> 17.9, 21.4, 21.6, 23.4, 23.2, 21.8, 18.0, 19.4...
- Acrescente uma nova variável
tmed
aos dados de temperatura diária arrumados, obtida da média diária datmax
etmin
.
- Com os dados obtidos na questão 4c:
renomeie as as colunas
year
,month
eday
paraano
,mes
edia
, respectivamente.junte as colunas
ano
,mes
edia
em uma única coluna denominadadata
de forma que a classe dessa nova váriavel sejadate
.Filtre os dados obtidos em (b) de forma a descobrir as datas em que as observações de
tmax
outmin
são faltantes. Mostre otibble
filtrado com as datas e explique o porquê de seus valores. DICA: quantas observações são esperadas por ano?.
- A amostra de dados abaixo (print da tabela
dados_zorra
) possui medidas a cada 6 horas de uma estação meteorológica de superfície. Reestruture os dados no formato "arrumado" e junte as informações de data e horário em uma única variável da classe POSIXct denominadadate
.
#> date tmax.0 tmax.600 tmax.1200
#> 2 01-01-2010 22.1 21.0 26.4
#> 3 02-01-2010 26.0 25.0 29.4
#> 4 03-01-2010 25.7 26.3 28.4
#> 5 04-01-2010 23.5 24.5 27.4
#> tmax.1800 tmin.0 tmin.600 tmin.1200
#> 2 27.0 16 13.5 18.2
#> 3 29.5 19 13.7 16.3
#> 4 29.0 21 14.1 17.2
#> 5 28.0 23 16.2 16.9
#> tmin.1800
#> 2 24.1
#> 3 22.3
#> 4 26.0
#> 5 23.0
A estrutura esperada do tibble resultante é mostrada abaixo:
Rows: 16
Columns: 3
$ date <dttm> 2010-01-01 00:00:00, 2010-01-01 06:00:00, 2010-01-01 12:00:00, 2010-01-01 18:...
$ tmax <dbl> 22.1, 21.0, 26.4, 27.0, 26.0, 25.0, 29.4, 29.5, 25.7, 26.3, 28.4, 29.0, 23.5, ...
$ tmin <dbl> 16.0, 13.5, 18.2, 24.1, 19.0, 13.7, 16.3, 22.3, 21.0, 14.1, 17.2, 26.0, 23.0, ...
- Faça uma junção da tabela de dados de informações das estações de poluição (
eatacoes
, dada abaixo) com os períodos de duração de poluição crítica (poluentes
). A tabela resultante deve conter somente estações que tenham coordenadas espaciais e medidas de poluentes válidas.
A estrutura da tabela resultante é:
Rows: 3
Columns: 5
$ id <int> 1, 1, 2
$ lat <dbl> 42.46757, 42.46757, 42.04915
$ lon <dbl> -87.81005, -87.81005, -88.27303
$ poluente <chr> "ozone", "so2", "ozone"
$ duracao <chr> "1h", "1h", "8h"
- Combine as 2 tabelas abaixo de forma que:
- A tabela resultante contenha todas as datas compreendidas pelas duas tabelas (e em ordem cronológica) e as observações de umidade do solo (
theta
) sejam preenchidas comNA
.
# datas completas
datas_comp
# datas das observações de theta
datas_obs
Os resultados esperados, estruturados em um tibble, são:
Rows: 8
Columns: 2
$ date <date> 2018-07-13, 2018-07-14, 2018-07-15, 2018-07-16, 2018-07-17, 2018-07-18, 2018-07-19, 2018-07-20
$ theta <dbl> 0.3295812, 0.4123798, 0.3917322, NA, NA, 0.3268883, NA, NA
- a tabela resultante contenha exatamente as datas da tabela
data_comp
(em ordem cronológica) e as observações de umidade do solo (theta
) sejam preenchidas comNA
.
Os resultados esperados, estruturados em um tibble, são:
Rows: 7
Columns: 2
$ date <date> 2018-07-14, 2018-07-15, 2018-07-16, 2018-07-17, 2018-07-18, 2018-07-19, 2018-07-20
$ theta <dbl> 0.4123798, 0.3917322, NA, NA, 0.3268883, NA, NA
- Utilizando os dados horários de estações meteorológicas automáticas (EMA) do RS (
dados_rs_08_16
), determine a data inicial, final e o período de dados (em anos) de cada estação (identificada pela variávelsite
).
A estrutura esperada do tibble resultante é mostrada abaixo:
Rows: 42
Columns: 6
$ site <chr> "A899", "A897", "A894", "A889", "A886", "A884", "A883", "A882", "A881", "A880", "A879", "A878", "A856", "…
$ inicio <dttm> 2008-03-07 21:00:00, 2016-11-23 21:00:00, 2016-06-30 21:00:00, 2016-06-30 21:00:00, 2016-08-10 21:00:00,…
$ fim <dttm> 2016-12-31 20:00:00, 2016-12-31 20:00:00, 2016-12-31 20:00:00, 2016-12-31 20:00:00, 2016-12-31 20:00:00,…
$ period <dbl> 8.32, 0.10, 0.50, 0.50, 0.39, 2.59, 3.55, 3.75, 6.20, 8.19, 7.86, 8.31, 8.35, 8.50, 8.50, 8.50, 8.50, 8.5…
- Determine a porcentagem de dados válidos (ou seja, não faltantes) de cada variável para cada EMA. Aproxime os valores para números inteiros.
A estrutura esperada do tibble resultante é mostrada abaixo:
Rows: 42
Columns: 6
$ site <chr> "A801", "A802", "A803", "A804", "A805", "A808", "A809", "A810", "A811", "A812", "A813", "A826", "A827", "A828", "A8…
$ tair <int> 99, 93, 96, 80, 93, 96, 97, 86, 97, 96, 96, 94, 97, 95, 96, 95, 94, 95, 96, 96, 96, 97, 94, 99, 96, 96, 89, 98, 98,…
$ rh <int> 99, 86, 96, 77, 93, 91, 97, 86, 95, 96, 96, 94, 97, 95, 96, 95, 94, 95, 96, 94, 96, 97, 94, 99, 96, 96, 89, 98, 98,…
$ prec <int> 99, 93, 96, 80, 93, 96, 97, 87, 95, 96, 97, 93, 97, 93, 96, 90, 91, 95, 96, 96, 96, 97, 94, 99, 96, 95, 88, 98, 98,…
$ rg <int> 52, 49, 51, 44, 49, 50, 48, 46, 51, 51, 51, 49, 51, 50, 51, 50, 50, 50, 49, 50, 50, 50, 49, 50, 51, 51, 47, 51, 51,…
$ ws <int> 99, 93, 95, 80, 93, 96, 96, 87, 97, 97, 96, 94, 97, 96, 75, 95, 94, 95, 92, 95, 96, 97, 94, 99, 96, 96, 89, 98, 98,…
- Com o resultado da questão anterior, adicione uma variável indicativa da porcentagem média de observações válidas de todas variáveis. Ordene esta tabela em ordem decrescente da disponibilidade média de observações.
A estrutura esperada do tibble resultante é mostrada abaixo:
Rows: 42
Columns: 7
$ site <chr> "A894", "A886", "A801", "A884", "A839", "A889", "A879", "A853", "A854", "A880", "A882", "A827", "A897", "A837",…
$ tair <int> 100, 99, 99, 99, 99, 100, 98, 98, 98, 98, 98, 97, 96, 97, 96, 96, 97, 97, 96, 96, 96, 96, 96, 95, 96, 95, 96, 9…
$ rh <int> 100, 99, 99, 99, 99, 94, 98, 98, 98, 98, 98, 97, 96, 97, 96, 96, 97, 95, 96, 96, 96, 96, 94, 95, 91, 95, 96, 97…
$ prec <int> 100, 99, 99, 99, 99, 100, 98, 98, 98, 98, 95, 97, 96, 97, 96, 97, 97, 95, 96, 96, 96, 95, 96, 95, 96, 93, 96, 8…
$ rg <int> 53, 55, 52, 52, 50, 53, 52, 51, 51, 52, 52, 51, 56, 50, 51, 51, 48, 51, 51, 51, 50, 51, 50, 50, 50, 50, 49, 48,…
$ ws <int> 99, 99, 99, 99, 99, 99, 98, 98, 98, 95, 98, 97, 95, 97, 97, 96, 96, 97, 96, 95, 96, 96, 95, 95, 96, 96, 92, 97,…
$ disp_med <dbl> 90.4, 90.2, 89.6, 89.6, 89.2, 89.2, 88.8, 88.6, 88.6, 88.2, 88.2, 87.8, 87.8, 87.6, 87.2, 87.2, 87.0, 87.0, 87.…
- Para a EMA de Santa Maria (ver
info_emas_rs_08_16
) obtenha o ciclo diurno médio da temperatura do ar e a porcentagem de dados válidos usados para compor atair
média de cada hora.
Dica: Para extrair as horas das datas use a função
lubridate::hour(date)
.
A estrutura esperada do tibble resultante é mostrada abaixo:
Rows: 24
Columns: 3
$ hour <int> 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23
$ tair_med <dbl> 17.26933, 16.87304, 16.52604, 16.21440, 15.94268, 15.73293, 15.57606, 15.70728, 16.40075, 17.63952, 19.12996, …
$ tair_disp <dbl> 96.68384, 96.55505, 96.42627, 96.26529, 96.13651, 96.10431, 96.10431, 96.00773, 96.13651, 96.74823, 96.81262, …
- Com os dados de temperatura do ar (
tair
) filtrados para EMA de Santa Maria (a) selecione somente os dias observações válidas nas 24 horas (dias completos, ou seja, sem nenhuma falha nas 24 h). A partir destes dados (b) obtenha a frequência de ocorrência da temperatura mínima para cada horário do dia. (c) Apresente a tabela de resultados em ordem decrescente da frequência de ocorrência.
Dica: para obter o dia a partir da data e hora (coluna
date
do tipoPOSIXct
) uselubridate::floor_date(date, unit = "day")
.
Os resultados para (a) são mostrados abaixo:
nrow(sm_tair)
74544
glimpse(dias_completos)
Rows: 2,945
Columns: 1
$ dias <dttm> 2008-01-01, 2008-01-02, 2008-01-03, 2008-01-04, 2008-01-05, 2008-01-06, 2008-01-07, 2008-01-08, 2008-01-09, 2008-01…
glimpse(tail(dias_completos))
Rows: 6
Columns: 1
$ day <dttm> 2016-12-25, 2016-12-26, 2016-12-27, 2016-12-28, 2016-12-29, 2016-12-30
A estrutura dos resultados para (b) é mostrada abaixo:
glimpse(freq_htmin)
Rows: 24
Columns: 2
$ h_tmin <int> 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23
$ n <int> 75, 60, 90, 122, 190, 311, 720, 560, 196, 28, 16, 7, 8, 3, 7, 6, 4, 7, 2, 6, 15, 29, 47, 436
A estrutura dos resultados para (c) é mostrada abaixo:
Rows: 24
Columns: 2
$ h_tmin <int> 6, 7, 23, 5, 8, 4, 3, 2, 0, 1, 22, 21, 9, 10, 20, 12, 11, 14, 17, 15, 19, 16, 13, 18
$ n <int> 720, 560, 436, 311, 196, 190, 122, 90, 75, 60, 47, 29, 28, 16, 15, 8, 7, 7, 7, 6, 6, 4, 3, 2
- Neste exercício aplicaremos um controle de qualidade básico de dados meteorológicos. Você irá verificar se nos dados da EMA de Santa Maria (A803, mesmos dados do item a do exercício anterior) ocorreram casos em que a temperatura máxima (mínima) diária foi acima (abaixo) dos recordes históricos registrados pela estação meteorológica convencional do INMET de Santa Maria (site 83936). Os recordes históricos de temperatura máxima e mínima estão disponíveis nos dados
recordes_temp
para cada mês do ano. Você deve obter os casos suspeitos na estrutura conforme abaixo.
# A tibble: 8 x 7
date tmax tmin mes site
<dttm> <dbl> <dbl> <dbl> <chr>
1 2009-10-30 00:00:00 35.8 20.4 10 83936
2 2009-10-31 00:00:00 36.8 21.8 10 83936
3 2013-12-26 00:00:00 38.3 21.2 12 83936
4 2014-02-05 00:00:00 38 23.8 2 83936
5 2014-02-06 00:00:00 38.3 24.4 2 83936
6 2014-02-07 00:00:00 39.5 23.2 2 83936
7 2014-02-09 00:00:00 38.3 22.9 2 83936
8 2014-10-29 00:00:00 36.8 22.4 10 83936
# ... with 2 more variables: tmin_abs <dbl>,
# tmax_abs <dbl>
A estrutura dos dados resultantes esperados é mostrada abaixo.
Rows: 8
Columns: 9
$ site_ema <chr> "A803", "A803", "A803", "A803", "A803", "A803", "A803", "A803"
$ date <dttm> 2009-10-30, 2009-10-31, 2013-12-26, 2014-02-05, 2014-02-06, 2014-02-07, 2014-02-09, 2014-10-29
$ tmax <dbl> 35.80, 36.80, 38.35, 38.00, 38.30, 39.50, 38.30, 36.75
$ tmin <dbl> 20.40, 21.80, 21.20, 23.85, 24.35, 23.20, 22.90, 22.45
$ nobs <int> 24, 24, 24, 24, 24, 24, 24, 24
$ mes <dbl> 10, 10, 12, 2, 2, 2, 2, 10
$ site_emc <chr> "83936", "83936", "83936", "83936", "83936", "83936", "83936", "83936"
$ tmin_abs <dbl> 3.6, 3.6, 7.2, 10.4, 10.4, 10.4, 10.4, 3.6
$ tmax_abs <dbl> 35.5, 35.5, 38.3, 37.6, 37.6, 37.6, 37.6, 35.5