rOpenSpain / climaemet

R Climate AEMET Tools
https://ropenspain.github.io/climaemet/
GNU General Public License v3.0
41 stars 2 forks source link

Unnest json data #27

Closed dominicroye closed 1 year ago

dominicroye commented 1 year ago

I have a new proposal for unnesting the JSON. But there is still another issue. For instance, the forecast is always for 7 days, but in the way, you now apply unnest() lead to only two days. The thing is, you have, on a daily scale, a short-term forecast (3 days) with sub-daily temperatures and for the rest of days empty sub-daily data.

4000bb71.txt

library(tidyverse)

urls <- jsonlite::fromJSON("4000bb71.txt")

res <-  jsonlite::flatten(urls, recursive = FALSE)

out <- unnest(res, col = prediccion.dia) %>% 
          unnest(col = where(is.list), names_sep = "_") %>%
          unnest(col = where(is.list), names_sep = ".")

select(out, fecha, contains("temperatura")) %>% 
  distinct(.keep_all = TRUE) %>%
  pivot_wider(names_from = temperatura_dato.hora, values_from = temperatura_dato.value,
              names_prefix = "temperatura_hora") 
dieghernan commented 1 year ago

MODIFIED

Now I see the issue, would let you know when it is solved

dieghernan commented 1 year ago

It turns out that when unnesting these data we need to add the option keep_empty = TRUE, otherwise rows that does not contain nested data (like the days 3 to 7 on temperature) are excluded on the unnested data frame. See an example on your reprex:

library(tidyverse)

urls <- jsonlite::fromJSON("https://github.com/rOpenSpain/climaemet/files/10331691/4000bb71.txt")

res <-  jsonlite::flatten(urls, recursive = FALSE)

out <- unnest(res, col = prediccion.dia, keep_empty = TRUE) %>% 
  unnest(col = where(is.list), names_sep = "_", keep_empty = TRUE) %>%
  unnest(col = where(is.list), names_sep = ".", keep_empty = TRUE)

final <- select(out, fecha, contains("temperatura")) %>% 
  distinct(.keep_all = TRUE) %>%
  pivot_wider(names_from = temperatura_dato.hora, values_from = temperatura_dato.value,
              names_prefix = "temperatura_hora") 

final
#> # A tibble: 7 × 8
#>   fecha               temperat…¹ tempe…² tempe…³ tempe…⁴ tempe…⁵ tempe…⁶ tempe…⁷
#>   <chr>                    <int>   <int>   <int>   <int>   <int>   <int>   <int>
#> 1 2023-01-02T00:00:00         19       8       8      18      14      12      NA
#> 2 2023-01-03T00:00:00         19      10      10      16      13      11      NA
#> 3 2023-01-04T00:00:00         18       8      NA      NA      NA      NA      NA
#> 4 2023-01-05T00:00:00         18       7      NA      NA      NA      NA      NA
#> 5 2023-01-06T00:00:00         18       6      NA      NA      NA      NA      NA
#> 6 2023-01-07T00:00:00         18       7      NA      NA      NA      NA      NA
#> 7 2023-01-08T00:00:00         19      10      NA      NA      NA      NA      NA
#> # … with abbreviated variable names ¹​temperatura_maxima, ²​temperatura_minima,
#> #   ³​temperatura_hora6, ⁴​temperatura_hora12, ⁵​temperatura_hora18,
#> #   ⁶​temperatura_hora24, ⁷​temperatura_horaNA

Created on 2023-01-02 with reprex v2.0.2

Now after 26324f1843f78ef236e4505869aeb3bc88bdd3cc this is implemented on climaemet, althought at this stage the extracted data is still in "long" format instead on "wide" format. My understanding is that you had an additional proposal on this, right?

See how this is fixed

library(climaemet)
library(tidyverse)
pred <- aemet_forecast_daily("46250") 

ext <- aemet_forecast_extract(pred, "temperatura")

glimpse(ext)
#> Rows: 13
#> Columns: 12
#> $ elaborado              <dttm> 2023-01-02 17:43:48, 2023-01-02 17:43:48, 2023…
#> $ municipio              <chr> "46250", "46250", "46250", "46250", "46250", "4…
#> $ nombre                 <chr> "València", "València", "València", "València",…
#> $ provincia              <chr> "València/Valencia", "València/Valencia", "Valè…
#> $ id                     <chr> "-19286", "-19286", "-19286", "-19286", "-19286…
#> $ version                <dbl> 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1
#> $ uvMax                  <int> 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, NA, NA
#> $ fecha                  <date> 2023-01-02, 2023-01-02, 2023-01-02, 2023-01-02,…
#> $ temperatura_maxima     <int> 19, 19, 19, 19, 18, 18, 18, 18, 18, 18, 18, 18,…
#> $ temperatura_minima     <int> 8, 8, 8, 8, 9, 9, 9, 9, 8, 7, 6, 7, 10
#> $ temperatura_dato_value <int> 8, 18, 14, 12, 10, 16, 13, 11, NA, NA, NA, NA,…
#> $ temperatura_dato_hora  <int> 6, 12, 18, 24, 6, 12, 18, 24, NA, NA, NA, NA, NA

ext %>%
  select(municipio, fecha, temperatura_minima, temperatura_maxima) %>%
  distinct()
#> # A tibble: 7 × 4
#>   municipio fecha      temperatura_minima temperatura_maxima
#>   <chr>     <date>                  <int>              <int>
#> 1 46250     2023-01-02                  8                 19
#> 2 46250     2023-01-03                  9                 18
#> 3 46250     2023-01-04                  8                 18
#> 4 46250     2023-01-05                  7                 18
#> 5 46250     2023-01-06                  6                 18
#> 6 46250     2023-01-07                  7                 18
#> 7 46250     2023-01-08                 10                 19

Created on 2023-01-02 with reprex v2.0.2

dieghernan commented 1 year ago

Hi @dominicroye

Please also note that I included an improvement on 33c2b16fba13817ed8911a8a3d1c69b1f0b6e102

Now the subscales are also formatted as hours with hms class (see https://hms.tidyverse.org/). That means that e.g. daily data (and also hourly data) can be further manipulated on a more consistent way. Still the output is leveraging on the current unnesting method:

library(climaemet)
library(tidyverse)
pred <- aemet_forecast_daily("46250") 

ext <- aemet_forecast_extract(pred, "temperatura")

ext %>%
  select(municipio, contains("temperatura"))
#> # A tibble: 13 × 6
#>    municipio temperatura_maxima temperatura_minima temperatura…¹ tempe…² tempe…³
#>    <chr>                  <int>              <int>         <int>   <int> <time> 
#>  1 46250                     17                  8             8       6 06:00  
#>  2 46250                     17                  8            16      12 12:00  
#>  3 46250                     17                  8            13      18 18:00  
#>  4 46250                     17                  8             9      24 23:59  
#>  5 46250                     17                  6             7       6 06:00  
#>  6 46250                     17                  6            16      12 12:00  
#>  7 46250                     17                  6            12      18 18:00  
#>  8 46250                     17                  6             8      24 23:59  
#>  9 46250                     16                  6            NA      NA    NA  
#> 10 46250                     19                  7            NA      NA    NA  
#> 11 46250                     20                 13            NA      NA    NA  
#> 12 46250                     22                 14            NA      NA    NA  
#> 13 46250                     24                 12            NA      NA    NA  
#> # … with abbreviated variable names ¹​temperatura_dato_value,
#> #   ²​temperatura_dato_hora, ³​temperatura_dato_hora_parsed

probprec <- aemet_forecast_extract(pred, "probPrecipitacion")

probprec %>%
  select(municipio, contains("preci"))
#> # A tibble: 23 × 5
#>    municipio probPrecipitacion_value probPrecipitacion_periodo probPr…¹ probPr…²
#>    <chr>                       <int> <chr>                     <time>   <time>  
#>  1 46250                           0 00-24                     00:00    23:59:59
#>  2 46250                           0 00-12                     00:00    11:59:59
#>  3 46250                           0 12-24                     12:00    23:59:59
#>  4 46250                           0 00-06                     00:00    05:59:59
#>  5 46250                           0 06-12                     06:00    11:59:59
#>  6 46250                           0 12-18                     12:00    17:59:59
#>  7 46250                           0 18-24                     18:00    23:59:59
#>  8 46250                           0 00-24                     00:00    23:59:59
#>  9 46250                           0 00-12                     00:00    11:59:59
#> 10 46250                           0 12-24                     12:00    23:59:59
#> # … with 13 more rows, and abbreviated variable names
#> #   ¹​probPrecipitacion_periodo_inicio, ²​probPrecipitacion_periodo_final

Created on 2023-01-04 with reprex v2.0.2

This, in conjunction with lubridate can be used to do things like this:

library(climaemet)
library(tidyverse)

# Hourly values
hourly <- aemet_forecast_hourly(c("15030", "28080"))

# Vars available
aemet_forecast_vars_available(hourly)
#>  [1] "estadoCielo"       "precipitacion"     "probPrecipitacion"
#>  [4] "probTormenta"      "nieve"             "probNieve"        
#>  [7] "temperatura"       "sensTermica"       "humedadRelativa"  
#> [10] "vientoAndRachaMax"

# Get temperature
temp <- aemet_forecast_extract(hourly, "temperatura")

library(dplyr)
# Make hour - Need lubridate to adjust timezones
temp_end <- temp %>%
  mutate(
    forecast_time = lubridate::force_tz(
      as.POSIXct(fecha) + temperatura_periodo_parsed,
      tz = "Europe/Madrid"
    )
  )

# Add also sunset and sunrise
suns <- temp_end %>%
  select(nombre, fecha, orto, ocaso) %>%
  distinct_all() %>%
  group_by(nombre) %>%
  mutate(
    ocaso_end = lubridate::force_tz(
      as.POSIXct(fecha) + ocaso,
      tz = "Europe/Madrid"
    ),
    orto_end = lubridate::force_tz(
      as.POSIXct(fecha) + orto,
      tz = "Europe/Madrid"
    ),
    orto_lead = lead(orto_end)
  ) %>%
  drop_na()

# Plot

library(ggplot2)

ggplot(temp_end) +
  geom_rect(data = suns, aes(
    xmin = ocaso_end, xmax = orto_lead,
    ymin = min(temp_end$temperatura_value),
    ymax = max(temp_end$temperatura_value)
  ), alpha = .4) +
  geom_line(aes(forecast_time, temperatura_value), color = "blue4") +
  facet_wrap(~nombre, nrow = 2) +
  scale_x_datetime(labels = scales::label_date_short()) +
  scale_y_continuous(labels = scales::label_number(suffix = "º")) +
  labs(
    x = "", y = "",
    title = "Forecast: Temperature",
    subtitle = paste("Forecast produced on", format(temp_end$elaborado[1],
      usetz = TRUE
    ))
  )

Created on 2023-01-04 with reprex v2.0.2

dieghernan commented 1 year ago

Hi @dominicroye

On #30 I rename the function aemet_forecast_extract() to aemet_forecast_tidy() to make explicit that the function would create a "tidy" table. On the very same request I followed your suggestions, so now daily data is in "tidy wide" format (i.e. each municipality daily forecast present 7 rows, one per day).

There are other improvements (more consisten naming, etc.) that may break some code that you have already produced, but I tend to consider the new approach as the right one for this kind of data.

See in action with a full-fledged example:

library(climaemet)
library(tidyverse)

# Daily vars
daily <- aemet_forecast_daily(c("15030", "28080"))

# Print each var
dailyvars <-  aemet_forecast_vars_available(daily)

for (i in dailyvars){

  message("\nTesting daily var ", i, "----\n")

  print(aemet_forecast_tidy(daily, i))

}
#> 
#> Testing daily var probPrecipitacion----
#> # A tibble: 14 × 15
#>    elaborado           municipio nombre   provi…¹ id    version uvMax fecha     
#>    <dttm>              <chr>     <chr>    <chr>   <chr>   <dbl> <int> <date>    
#>  1 2023-01-05 13:05:47 15030     Coruña,… A Coru… 15030       1     1 2023-01-05
#>  2 2023-01-05 13:05:47 15030     Coruña,… A Coru… 15030       1     1 2023-01-06
#>  3 2023-01-05 13:05:47 15030     Coruña,… A Coru… 15030       1     1 2023-01-07
#>  4 2023-01-05 13:05:47 15030     Coruña,… A Coru… 15030       1     1 2023-01-08
#>  5 2023-01-05 13:05:47 15030     Coruña,… A Coru… 15030       1     1 2023-01-09
#>  6 2023-01-05 13:05:47 15030     Coruña,… A Coru… 15030       1    NA 2023-01-10
#>  7 2023-01-05 13:05:47 15030     Coruña,… A Coru… 15030       1    NA 2023-01-11
#>  8 2023-01-05 13:05:59 28080     Majadah… Madrid  28080       1     1 2023-01-05
#>  9 2023-01-05 13:05:59 28080     Majadah… Madrid  28080       1     1 2023-01-06
#> 10 2023-01-05 13:05:59 28080     Majadah… Madrid  28080       1     1 2023-01-07
#> 11 2023-01-05 13:05:59 28080     Majadah… Madrid  28080       1     1 2023-01-08
#> 12 2023-01-05 13:05:59 28080     Majadah… Madrid  28080       1     1 2023-01-09
#> 13 2023-01-05 13:05:59 28080     Majadah… Madrid  28080       1    NA 2023-01-10
#> 14 2023-01-05 13:05:59 28080     Majadah… Madrid  28080       1    NA 2023-01-11
#> # … with 7 more variables: probPrecipitacion <int>,
#> #   probPrecipitacion_00_12 <int>, probPrecipitacion_12_24 <int>,
#> #   probPrecipitacion_00_06 <int>, probPrecipitacion_06_12 <int>,
#> #   probPrecipitacion_12_18 <int>, probPrecipitacion_18_24 <int>, and
#> #   abbreviated variable name ¹​provincia
#> 
#> Testing daily var cotaNieveProv----
#> # A tibble: 14 × 15
#>    elaborado           municipio nombre   provi…¹ id    version uvMax fecha     
#>    <dttm>              <chr>     <chr>    <chr>   <chr>   <dbl> <int> <date>    
#>  1 2023-01-05 13:05:47 15030     Coruña,… A Coru… 15030       1     1 2023-01-05
#>  2 2023-01-05 13:05:47 15030     Coruña,… A Coru… 15030       1     1 2023-01-06
#>  3 2023-01-05 13:05:47 15030     Coruña,… A Coru… 15030       1     1 2023-01-07
#>  4 2023-01-05 13:05:47 15030     Coruña,… A Coru… 15030       1     1 2023-01-08
#>  5 2023-01-05 13:05:47 15030     Coruña,… A Coru… 15030       1     1 2023-01-09
#>  6 2023-01-05 13:05:47 15030     Coruña,… A Coru… 15030       1    NA 2023-01-10
#>  7 2023-01-05 13:05:47 15030     Coruña,… A Coru… 15030       1    NA 2023-01-11
#>  8 2023-01-05 13:05:59 28080     Majadah… Madrid  28080       1     1 2023-01-05
#>  9 2023-01-05 13:05:59 28080     Majadah… Madrid  28080       1     1 2023-01-06
#> 10 2023-01-05 13:05:59 28080     Majadah… Madrid  28080       1     1 2023-01-07
#> 11 2023-01-05 13:05:59 28080     Majadah… Madrid  28080       1     1 2023-01-08
#> 12 2023-01-05 13:05:59 28080     Majadah… Madrid  28080       1     1 2023-01-09
#> 13 2023-01-05 13:05:59 28080     Majadah… Madrid  28080       1    NA 2023-01-10
#> 14 2023-01-05 13:05:59 28080     Majadah… Madrid  28080       1    NA 2023-01-11
#> # … with 7 more variables: cotaNieveProv <dbl>, cotaNieveProv_00_12 <dbl>,
#> #   cotaNieveProv_12_24 <dbl>, cotaNieveProv_00_06 <dbl>,
#> #   cotaNieveProv_06_12 <dbl>, cotaNieveProv_12_18 <dbl>,
#> #   cotaNieveProv_18_24 <dbl>, and abbreviated variable name ¹​provincia
#> 
#> Testing daily var estadoCielo----
#> # A tibble: 14 × 22
#>    elaborado           municipio nombre   provi…¹ id    version uvMax fecha     
#>    <dttm>              <chr>     <chr>    <chr>   <chr>   <dbl> <int> <date>    
#>  1 2023-01-05 13:05:47 15030     Coruña,… A Coru… 15030       1     1 2023-01-05
#>  2 2023-01-05 13:05:47 15030     Coruña,… A Coru… 15030       1     1 2023-01-06
#>  3 2023-01-05 13:05:47 15030     Coruña,… A Coru… 15030       1     1 2023-01-07
#>  4 2023-01-05 13:05:47 15030     Coruña,… A Coru… 15030       1     1 2023-01-08
#>  5 2023-01-05 13:05:47 15030     Coruña,… A Coru… 15030       1     1 2023-01-09
#>  6 2023-01-05 13:05:47 15030     Coruña,… A Coru… 15030       1    NA 2023-01-10
#>  7 2023-01-05 13:05:47 15030     Coruña,… A Coru… 15030       1    NA 2023-01-11
#>  8 2023-01-05 13:05:59 28080     Majadah… Madrid  28080       1     1 2023-01-05
#>  9 2023-01-05 13:05:59 28080     Majadah… Madrid  28080       1     1 2023-01-06
#> 10 2023-01-05 13:05:59 28080     Majadah… Madrid  28080       1     1 2023-01-07
#> 11 2023-01-05 13:05:59 28080     Majadah… Madrid  28080       1     1 2023-01-08
#> 12 2023-01-05 13:05:59 28080     Majadah… Madrid  28080       1     1 2023-01-09
#> 13 2023-01-05 13:05:59 28080     Majadah… Madrid  28080       1    NA 2023-01-10
#> 14 2023-01-05 13:05:59 28080     Majadah… Madrid  28080       1    NA 2023-01-11
#> # … with 14 more variables: estadoCielo <chr>, estadoCielo_descripcion <chr>,
#> #   estadoCielo_00_12 <chr>, estadoCielo_12_24 <chr>, estadoCielo_00_06 <chr>,
#> #   estadoCielo_06_12 <chr>, estadoCielo_12_18 <chr>, estadoCielo_18_24 <chr>,
#> #   estadoCielo_descripcion_00_12 <chr>, estadoCielo_descripcion_12_24 <chr>,
#> #   estadoCielo_descripcion_00_06 <chr>, estadoCielo_descripcion_06_12 <chr>,
#> #   estadoCielo_descripcion_12_18 <chr>, estadoCielo_descripcion_18_24 <chr>,
#> #   and abbreviated variable name ¹​provincia
#> 
#> Testing daily var viento----
#> # A tibble: 14 × 22
#>    elaborado           municipio nombre   provi…¹ id    version uvMax fecha     
#>    <dttm>              <chr>     <chr>    <chr>   <chr>   <dbl> <int> <date>    
#>  1 2023-01-05 13:05:47 15030     Coruña,… A Coru… 15030       1     1 2023-01-05
#>  2 2023-01-05 13:05:47 15030     Coruña,… A Coru… 15030       1     1 2023-01-06
#>  3 2023-01-05 13:05:47 15030     Coruña,… A Coru… 15030       1     1 2023-01-07
#>  4 2023-01-05 13:05:47 15030     Coruña,… A Coru… 15030       1     1 2023-01-08
#>  5 2023-01-05 13:05:47 15030     Coruña,… A Coru… 15030       1     1 2023-01-09
#>  6 2023-01-05 13:05:47 15030     Coruña,… A Coru… 15030       1    NA 2023-01-10
#>  7 2023-01-05 13:05:47 15030     Coruña,… A Coru… 15030       1    NA 2023-01-11
#>  8 2023-01-05 13:05:59 28080     Majadah… Madrid  28080       1     1 2023-01-05
#>  9 2023-01-05 13:05:59 28080     Majadah… Madrid  28080       1     1 2023-01-06
#> 10 2023-01-05 13:05:59 28080     Majadah… Madrid  28080       1     1 2023-01-07
#> 11 2023-01-05 13:05:59 28080     Majadah… Madrid  28080       1     1 2023-01-08
#> 12 2023-01-05 13:05:59 28080     Majadah… Madrid  28080       1     1 2023-01-09
#> 13 2023-01-05 13:05:59 28080     Majadah… Madrid  28080       1    NA 2023-01-10
#> 14 2023-01-05 13:05:59 28080     Majadah… Madrid  28080       1    NA 2023-01-11
#> # … with 14 more variables: viento_direccion <chr>, viento_velocidad <int>,
#> #   viento_direccion_00_12 <chr>, viento_direccion_12_24 <chr>,
#> #   viento_direccion_00_06 <chr>, viento_direccion_06_12 <chr>,
#> #   viento_direccion_12_18 <chr>, viento_direccion_18_24 <chr>,
#> #   viento_velocidad_00_12 <int>, viento_velocidad_12_24 <int>,
#> #   viento_velocidad_00_06 <int>, viento_velocidad_06_12 <int>,
#> #   viento_velocidad_12_18 <int>, viento_velocidad_18_24 <int>, and …
#> 
#> Testing daily var rachaMax----
#> # A tibble: 14 × 15
#>    elaborado           municipio nombre   provi…¹ id    version uvMax fecha     
#>    <dttm>              <chr>     <chr>    <chr>   <chr>   <dbl> <int> <date>    
#>  1 2023-01-05 13:05:47 15030     Coruña,… A Coru… 15030       1     1 2023-01-05
#>  2 2023-01-05 13:05:47 15030     Coruña,… A Coru… 15030       1     1 2023-01-06
#>  3 2023-01-05 13:05:47 15030     Coruña,… A Coru… 15030       1     1 2023-01-07
#>  4 2023-01-05 13:05:47 15030     Coruña,… A Coru… 15030       1     1 2023-01-08
#>  5 2023-01-05 13:05:47 15030     Coruña,… A Coru… 15030       1     1 2023-01-09
#>  6 2023-01-05 13:05:47 15030     Coruña,… A Coru… 15030       1    NA 2023-01-10
#>  7 2023-01-05 13:05:47 15030     Coruña,… A Coru… 15030       1    NA 2023-01-11
#>  8 2023-01-05 13:05:59 28080     Majadah… Madrid  28080       1     1 2023-01-05
#>  9 2023-01-05 13:05:59 28080     Majadah… Madrid  28080       1     1 2023-01-06
#> 10 2023-01-05 13:05:59 28080     Majadah… Madrid  28080       1     1 2023-01-07
#> 11 2023-01-05 13:05:59 28080     Majadah… Madrid  28080       1     1 2023-01-08
#> 12 2023-01-05 13:05:59 28080     Majadah… Madrid  28080       1     1 2023-01-09
#> 13 2023-01-05 13:05:59 28080     Majadah… Madrid  28080       1    NA 2023-01-10
#> 14 2023-01-05 13:05:59 28080     Majadah… Madrid  28080       1    NA 2023-01-11
#> # … with 7 more variables: rachaMax <dbl>, rachaMax_00_12 <dbl>,
#> #   rachaMax_12_24 <dbl>, rachaMax_00_06 <dbl>, rachaMax_06_12 <dbl>,
#> #   rachaMax_12_18 <dbl>, rachaMax_18_24 <dbl>, and abbreviated variable name
#> #   ¹​provincia
#> 
#> Testing daily var temperatura----
#> # A tibble: 14 × 14
#>    elaborado           municipio nombre   provi…¹ id    version uvMax fecha     
#>    <dttm>              <chr>     <chr>    <chr>   <chr>   <dbl> <int> <date>    
#>  1 2023-01-05 13:05:47 15030     Coruña,… A Coru… 15030       1     1 2023-01-05
#>  2 2023-01-05 13:05:47 15030     Coruña,… A Coru… 15030       1     1 2023-01-06
#>  3 2023-01-05 13:05:47 15030     Coruña,… A Coru… 15030       1     1 2023-01-07
#>  4 2023-01-05 13:05:47 15030     Coruña,… A Coru… 15030       1     1 2023-01-08
#>  5 2023-01-05 13:05:47 15030     Coruña,… A Coru… 15030       1     1 2023-01-09
#>  6 2023-01-05 13:05:47 15030     Coruña,… A Coru… 15030       1    NA 2023-01-10
#>  7 2023-01-05 13:05:47 15030     Coruña,… A Coru… 15030       1    NA 2023-01-11
#>  8 2023-01-05 13:05:59 28080     Majadah… Madrid  28080       1     1 2023-01-05
#>  9 2023-01-05 13:05:59 28080     Majadah… Madrid  28080       1     1 2023-01-06
#> 10 2023-01-05 13:05:59 28080     Majadah… Madrid  28080       1     1 2023-01-07
#> 11 2023-01-05 13:05:59 28080     Majadah… Madrid  28080       1     1 2023-01-08
#> 12 2023-01-05 13:05:59 28080     Majadah… Madrid  28080       1     1 2023-01-09
#> 13 2023-01-05 13:05:59 28080     Majadah… Madrid  28080       1    NA 2023-01-10
#> 14 2023-01-05 13:05:59 28080     Majadah… Madrid  28080       1    NA 2023-01-11
#> # … with 6 more variables: temperatura_maxima <int>, temperatura_minima <int>,
#> #   temperatura_6 <int>, temperatura_12 <int>, temperatura_18 <int>,
#> #   temperatura_24 <int>, and abbreviated variable name ¹​provincia
#> 
#> Testing daily var sensTermica----
#> # A tibble: 14 × 14
#>    elaborado           municipio nombre   provi…¹ id    version uvMax fecha     
#>    <dttm>              <chr>     <chr>    <chr>   <chr>   <dbl> <int> <date>    
#>  1 2023-01-05 13:05:47 15030     Coruña,… A Coru… 15030       1     1 2023-01-05
#>  2 2023-01-05 13:05:47 15030     Coruña,… A Coru… 15030       1     1 2023-01-06
#>  3 2023-01-05 13:05:47 15030     Coruña,… A Coru… 15030       1     1 2023-01-07
#>  4 2023-01-05 13:05:47 15030     Coruña,… A Coru… 15030       1     1 2023-01-08
#>  5 2023-01-05 13:05:47 15030     Coruña,… A Coru… 15030       1     1 2023-01-09
#>  6 2023-01-05 13:05:47 15030     Coruña,… A Coru… 15030       1    NA 2023-01-10
#>  7 2023-01-05 13:05:47 15030     Coruña,… A Coru… 15030       1    NA 2023-01-11
#>  8 2023-01-05 13:05:59 28080     Majadah… Madrid  28080       1     1 2023-01-05
#>  9 2023-01-05 13:05:59 28080     Majadah… Madrid  28080       1     1 2023-01-06
#> 10 2023-01-05 13:05:59 28080     Majadah… Madrid  28080       1     1 2023-01-07
#> 11 2023-01-05 13:05:59 28080     Majadah… Madrid  28080       1     1 2023-01-08
#> 12 2023-01-05 13:05:59 28080     Majadah… Madrid  28080       1     1 2023-01-09
#> 13 2023-01-05 13:05:59 28080     Majadah… Madrid  28080       1    NA 2023-01-10
#> 14 2023-01-05 13:05:59 28080     Majadah… Madrid  28080       1    NA 2023-01-11
#> # … with 6 more variables: sensTermica_maxima <int>, sensTermica_minima <int>,
#> #   sensTermica_6 <int>, sensTermica_12 <int>, sensTermica_18 <int>,
#> #   sensTermica_24 <int>, and abbreviated variable name ¹​provincia
#> 
#> Testing daily var humedadRelativa----
#> # A tibble: 14 × 14
#>    elaborado           municipio nombre   provi…¹ id    version uvMax fecha     
#>    <dttm>              <chr>     <chr>    <chr>   <chr>   <dbl> <int> <date>    
#>  1 2023-01-05 13:05:47 15030     Coruña,… A Coru… 15030       1     1 2023-01-05
#>  2 2023-01-05 13:05:47 15030     Coruña,… A Coru… 15030       1     1 2023-01-06
#>  3 2023-01-05 13:05:47 15030     Coruña,… A Coru… 15030       1     1 2023-01-07
#>  4 2023-01-05 13:05:47 15030     Coruña,… A Coru… 15030       1     1 2023-01-08
#>  5 2023-01-05 13:05:47 15030     Coruña,… A Coru… 15030       1     1 2023-01-09
#>  6 2023-01-05 13:05:47 15030     Coruña,… A Coru… 15030       1    NA 2023-01-10
#>  7 2023-01-05 13:05:47 15030     Coruña,… A Coru… 15030       1    NA 2023-01-11
#>  8 2023-01-05 13:05:59 28080     Majadah… Madrid  28080       1     1 2023-01-05
#>  9 2023-01-05 13:05:59 28080     Majadah… Madrid  28080       1     1 2023-01-06
#> 10 2023-01-05 13:05:59 28080     Majadah… Madrid  28080       1     1 2023-01-07
#> 11 2023-01-05 13:05:59 28080     Majadah… Madrid  28080       1     1 2023-01-08
#> 12 2023-01-05 13:05:59 28080     Majadah… Madrid  28080       1     1 2023-01-09
#> 13 2023-01-05 13:05:59 28080     Majadah… Madrid  28080       1    NA 2023-01-10
#> 14 2023-01-05 13:05:59 28080     Majadah… Madrid  28080       1    NA 2023-01-11
#> # … with 6 more variables: humedadRelativa_maxima <int>,
#> #   humedadRelativa_minima <int>, humedadRelativa_6 <int>,
#> #   humedadRelativa_12 <int>, humedadRelativa_18 <int>,
#> #   humedadRelativa_24 <int>, and abbreviated variable name ¹​provincia

# Hourly

hourly <- aemet_forecast_hourly(c("15030", "28080"))

# Print each var
hourlyvars <-  aemet_forecast_vars_available(hourly)

for (j in hourlyvars){

  message("\nTesting hourly var ", j, "----\n")

  print(aemet_forecast_tidy(hourly, j))

}
#> 
#> Testing hourly var estadoCielo----
#> # A tibble: 96 × 12
#>    elaborado           municipio nombre   provi…¹ id    version fecha      orto 
#>    <dttm>              <chr>     <chr>    <chr>   <chr> <chr>   <date>     <tim>
#>  1 2023-01-05 13:04:08 15030     Coruña,… A Coru… 15030 1.0     2023-01-05 09:05
#>  2 2023-01-05 13:04:08 15030     Coruña,… A Coru… 15030 1.0     2023-01-05 09:05
#>  3 2023-01-05 13:04:08 15030     Coruña,… A Coru… 15030 1.0     2023-01-05 09:05
#>  4 2023-01-05 13:04:08 15030     Coruña,… A Coru… 15030 1.0     2023-01-05 09:05
#>  5 2023-01-05 13:04:08 15030     Coruña,… A Coru… 15030 1.0     2023-01-05 09:05
#>  6 2023-01-05 13:04:08 15030     Coruña,… A Coru… 15030 1.0     2023-01-05 09:05
#>  7 2023-01-05 13:04:08 15030     Coruña,… A Coru… 15030 1.0     2023-01-05 09:05
#>  8 2023-01-05 13:04:08 15030     Coruña,… A Coru… 15030 1.0     2023-01-05 09:05
#>  9 2023-01-05 13:04:08 15030     Coruña,… A Coru… 15030 1.0     2023-01-05 09:05
#> 10 2023-01-05 13:04:08 15030     Coruña,… A Coru… 15030 1.0     2023-01-05 09:05
#> # … with 86 more rows, 4 more variables: ocaso <time>, estadoCielo <chr>,
#> #   hora <time>, estadoCielo_descripcion <chr>, and abbreviated variable name
#> #   ¹​provincia
#> 
#> Testing hourly var precipitacion----
#> # A tibble: 96 × 11
#>    elaborado           municipio nombre   provi…¹ id    version fecha      orto 
#>    <dttm>              <chr>     <chr>    <chr>   <chr> <chr>   <date>     <tim>
#>  1 2023-01-05 13:04:08 15030     Coruña,… A Coru… 15030 1.0     2023-01-05 09:05
#>  2 2023-01-05 13:04:08 15030     Coruña,… A Coru… 15030 1.0     2023-01-05 09:05
#>  3 2023-01-05 13:04:08 15030     Coruña,… A Coru… 15030 1.0     2023-01-05 09:05
#>  4 2023-01-05 13:04:08 15030     Coruña,… A Coru… 15030 1.0     2023-01-05 09:05
#>  5 2023-01-05 13:04:08 15030     Coruña,… A Coru… 15030 1.0     2023-01-05 09:05
#>  6 2023-01-05 13:04:08 15030     Coruña,… A Coru… 15030 1.0     2023-01-05 09:05
#>  7 2023-01-05 13:04:08 15030     Coruña,… A Coru… 15030 1.0     2023-01-05 09:05
#>  8 2023-01-05 13:04:08 15030     Coruña,… A Coru… 15030 1.0     2023-01-05 09:05
#>  9 2023-01-05 13:04:08 15030     Coruña,… A Coru… 15030 1.0     2023-01-05 09:05
#> 10 2023-01-05 13:04:08 15030     Coruña,… A Coru… 15030 1.0     2023-01-05 09:05
#> # … with 86 more rows, 3 more variables: ocaso <time>, precipitacion <chr>,
#> #   hora <time>, and abbreviated variable name ¹​provincia
#> 
#> Testing hourly var probPrecipitacion----
#> # A tibble: 16 × 11
#>    elaborado           municipio nombre   provi…¹ id    version fecha      orto 
#>    <dttm>              <chr>     <chr>    <chr>   <chr> <chr>   <date>     <tim>
#>  1 2023-01-05 13:04:08 15030     Coruña,… A Coru… 15030 1.0     2023-01-05 09:05
#>  2 2023-01-05 13:04:08 15030     Coruña,… A Coru… 15030 1.0     2023-01-05 09:05
#>  3 2023-01-05 13:04:08 15030     Coruña,… A Coru… 15030 1.0     2023-01-05 09:05
#>  4 2023-01-05 13:04:08 15030     Coruña,… A Coru… 15030 1.0     2023-01-06 09:05
#>  5 2023-01-05 13:04:08 15030     Coruña,… A Coru… 15030 1.0     2023-01-06 09:05
#>  6 2023-01-05 13:04:08 15030     Coruña,… A Coru… 15030 1.0     2023-01-06 09:05
#>  7 2023-01-05 13:04:08 15030     Coruña,… A Coru… 15030 1.0     2023-01-06 09:05
#>  8 2023-01-05 13:04:08 15030     Coruña,… A Coru… 15030 1.0     2023-01-07 09:05
#>  9 2023-01-05 13:04:20 28080     Majadah… Madrid  28080 1.0     2023-01-05 08:38
#> 10 2023-01-05 13:04:20 28080     Majadah… Madrid  28080 1.0     2023-01-05 08:38
#> 11 2023-01-05 13:04:20 28080     Majadah… Madrid  28080 1.0     2023-01-05 08:38
#> 12 2023-01-05 13:04:20 28080     Majadah… Madrid  28080 1.0     2023-01-06 08:38
#> 13 2023-01-05 13:04:20 28080     Majadah… Madrid  28080 1.0     2023-01-06 08:38
#> 14 2023-01-05 13:04:20 28080     Majadah… Madrid  28080 1.0     2023-01-06 08:38
#> 15 2023-01-05 13:04:20 28080     Majadah… Madrid  28080 1.0     2023-01-06 08:38
#> 16 2023-01-05 13:04:20 28080     Majadah… Madrid  28080 1.0     2023-01-07 08:38
#> # … with 3 more variables: ocaso <time>, probPrecipitacion <dbl>, hora <time>,
#> #   and abbreviated variable name ¹​provincia
#> 
#> Testing hourly var probTormenta----
#> # A tibble: 16 × 11
#>    elaborado           municipio nombre   provi…¹ id    version fecha      orto 
#>    <dttm>              <chr>     <chr>    <chr>   <chr> <chr>   <date>     <tim>
#>  1 2023-01-05 13:04:08 15030     Coruña,… A Coru… 15030 1.0     2023-01-05 09:05
#>  2 2023-01-05 13:04:08 15030     Coruña,… A Coru… 15030 1.0     2023-01-05 09:05
#>  3 2023-01-05 13:04:08 15030     Coruña,… A Coru… 15030 1.0     2023-01-05 09:05
#>  4 2023-01-05 13:04:08 15030     Coruña,… A Coru… 15030 1.0     2023-01-06 09:05
#>  5 2023-01-05 13:04:08 15030     Coruña,… A Coru… 15030 1.0     2023-01-06 09:05
#>  6 2023-01-05 13:04:08 15030     Coruña,… A Coru… 15030 1.0     2023-01-06 09:05
#>  7 2023-01-05 13:04:08 15030     Coruña,… A Coru… 15030 1.0     2023-01-06 09:05
#>  8 2023-01-05 13:04:08 15030     Coruña,… A Coru… 15030 1.0     2023-01-07 09:05
#>  9 2023-01-05 13:04:20 28080     Majadah… Madrid  28080 1.0     2023-01-05 08:38
#> 10 2023-01-05 13:04:20 28080     Majadah… Madrid  28080 1.0     2023-01-05 08:38
#> 11 2023-01-05 13:04:20 28080     Majadah… Madrid  28080 1.0     2023-01-05 08:38
#> 12 2023-01-05 13:04:20 28080     Majadah… Madrid  28080 1.0     2023-01-06 08:38
#> 13 2023-01-05 13:04:20 28080     Majadah… Madrid  28080 1.0     2023-01-06 08:38
#> 14 2023-01-05 13:04:20 28080     Majadah… Madrid  28080 1.0     2023-01-06 08:38
#> 15 2023-01-05 13:04:20 28080     Majadah… Madrid  28080 1.0     2023-01-06 08:38
#> 16 2023-01-05 13:04:20 28080     Majadah… Madrid  28080 1.0     2023-01-07 08:38
#> # … with 3 more variables: ocaso <time>, probTormenta <dbl>, hora <time>, and
#> #   abbreviated variable name ¹​provincia
#> 
#> Testing hourly var nieve----
#> # A tibble: 96 × 11
#>    elaborado           municipio nombre   provi…¹ id    version fecha      orto 
#>    <dttm>              <chr>     <chr>    <chr>   <chr> <chr>   <date>     <tim>
#>  1 2023-01-05 13:04:08 15030     Coruña,… A Coru… 15030 1.0     2023-01-05 09:05
#>  2 2023-01-05 13:04:08 15030     Coruña,… A Coru… 15030 1.0     2023-01-05 09:05
#>  3 2023-01-05 13:04:08 15030     Coruña,… A Coru… 15030 1.0     2023-01-05 09:05
#>  4 2023-01-05 13:04:08 15030     Coruña,… A Coru… 15030 1.0     2023-01-05 09:05
#>  5 2023-01-05 13:04:08 15030     Coruña,… A Coru… 15030 1.0     2023-01-05 09:05
#>  6 2023-01-05 13:04:08 15030     Coruña,… A Coru… 15030 1.0     2023-01-05 09:05
#>  7 2023-01-05 13:04:08 15030     Coruña,… A Coru… 15030 1.0     2023-01-05 09:05
#>  8 2023-01-05 13:04:08 15030     Coruña,… A Coru… 15030 1.0     2023-01-05 09:05
#>  9 2023-01-05 13:04:08 15030     Coruña,… A Coru… 15030 1.0     2023-01-05 09:05
#> 10 2023-01-05 13:04:08 15030     Coruña,… A Coru… 15030 1.0     2023-01-05 09:05
#> # … with 86 more rows, 3 more variables: ocaso <time>, nieve <dbl>,
#> #   hora <time>, and abbreviated variable name ¹​provincia
#> 
#> Testing hourly var probNieve----
#> # A tibble: 16 × 11
#>    elaborado           municipio nombre   provi…¹ id    version fecha      orto 
#>    <dttm>              <chr>     <chr>    <chr>   <chr> <chr>   <date>     <tim>
#>  1 2023-01-05 13:04:08 15030     Coruña,… A Coru… 15030 1.0     2023-01-05 09:05
#>  2 2023-01-05 13:04:08 15030     Coruña,… A Coru… 15030 1.0     2023-01-05 09:05
#>  3 2023-01-05 13:04:08 15030     Coruña,… A Coru… 15030 1.0     2023-01-05 09:05
#>  4 2023-01-05 13:04:08 15030     Coruña,… A Coru… 15030 1.0     2023-01-06 09:05
#>  5 2023-01-05 13:04:08 15030     Coruña,… A Coru… 15030 1.0     2023-01-06 09:05
#>  6 2023-01-05 13:04:08 15030     Coruña,… A Coru… 15030 1.0     2023-01-06 09:05
#>  7 2023-01-05 13:04:08 15030     Coruña,… A Coru… 15030 1.0     2023-01-06 09:05
#>  8 2023-01-05 13:04:08 15030     Coruña,… A Coru… 15030 1.0     2023-01-07 09:05
#>  9 2023-01-05 13:04:20 28080     Majadah… Madrid  28080 1.0     2023-01-05 08:38
#> 10 2023-01-05 13:04:20 28080     Majadah… Madrid  28080 1.0     2023-01-05 08:38
#> 11 2023-01-05 13:04:20 28080     Majadah… Madrid  28080 1.0     2023-01-05 08:38
#> 12 2023-01-05 13:04:20 28080     Majadah… Madrid  28080 1.0     2023-01-06 08:38
#> 13 2023-01-05 13:04:20 28080     Majadah… Madrid  28080 1.0     2023-01-06 08:38
#> 14 2023-01-05 13:04:20 28080     Majadah… Madrid  28080 1.0     2023-01-06 08:38
#> 15 2023-01-05 13:04:20 28080     Majadah… Madrid  28080 1.0     2023-01-06 08:38
#> 16 2023-01-05 13:04:20 28080     Majadah… Madrid  28080 1.0     2023-01-07 08:38
#> # … with 3 more variables: ocaso <time>, probNieve <dbl>, hora <time>, and
#> #   abbreviated variable name ¹​provincia
#> 
#> Testing hourly var temperatura----
#> # A tibble: 94 × 11
#>    elaborado           municipio nombre   provi…¹ id    version fecha      orto 
#>    <dttm>              <chr>     <chr>    <chr>   <chr> <chr>   <date>     <tim>
#>  1 2023-01-05 13:04:08 15030     Coruña,… A Coru… 15030 1.0     2023-01-05 09:05
#>  2 2023-01-05 13:04:08 15030     Coruña,… A Coru… 15030 1.0     2023-01-05 09:05
#>  3 2023-01-05 13:04:08 15030     Coruña,… A Coru… 15030 1.0     2023-01-05 09:05
#>  4 2023-01-05 13:04:08 15030     Coruña,… A Coru… 15030 1.0     2023-01-05 09:05
#>  5 2023-01-05 13:04:08 15030     Coruña,… A Coru… 15030 1.0     2023-01-05 09:05
#>  6 2023-01-05 13:04:08 15030     Coruña,… A Coru… 15030 1.0     2023-01-05 09:05
#>  7 2023-01-05 13:04:08 15030     Coruña,… A Coru… 15030 1.0     2023-01-05 09:05
#>  8 2023-01-05 13:04:08 15030     Coruña,… A Coru… 15030 1.0     2023-01-05 09:05
#>  9 2023-01-05 13:04:08 15030     Coruña,… A Coru… 15030 1.0     2023-01-05 09:05
#> 10 2023-01-05 13:04:08 15030     Coruña,… A Coru… 15030 1.0     2023-01-05 09:05
#> # … with 84 more rows, 3 more variables: ocaso <time>, temperatura <dbl>,
#> #   hora <time>, and abbreviated variable name ¹​provincia
#> 
#> Testing hourly var sensTermica----
#> # A tibble: 94 × 11
#>    elaborado           municipio nombre   provi…¹ id    version fecha      orto 
#>    <dttm>              <chr>     <chr>    <chr>   <chr> <chr>   <date>     <tim>
#>  1 2023-01-05 13:04:08 15030     Coruña,… A Coru… 15030 1.0     2023-01-05 09:05
#>  2 2023-01-05 13:04:08 15030     Coruña,… A Coru… 15030 1.0     2023-01-05 09:05
#>  3 2023-01-05 13:04:08 15030     Coruña,… A Coru… 15030 1.0     2023-01-05 09:05
#>  4 2023-01-05 13:04:08 15030     Coruña,… A Coru… 15030 1.0     2023-01-05 09:05
#>  5 2023-01-05 13:04:08 15030     Coruña,… A Coru… 15030 1.0     2023-01-05 09:05
#>  6 2023-01-05 13:04:08 15030     Coruña,… A Coru… 15030 1.0     2023-01-05 09:05
#>  7 2023-01-05 13:04:08 15030     Coruña,… A Coru… 15030 1.0     2023-01-05 09:05
#>  8 2023-01-05 13:04:08 15030     Coruña,… A Coru… 15030 1.0     2023-01-05 09:05
#>  9 2023-01-05 13:04:08 15030     Coruña,… A Coru… 15030 1.0     2023-01-05 09:05
#> 10 2023-01-05 13:04:08 15030     Coruña,… A Coru… 15030 1.0     2023-01-05 09:05
#> # … with 84 more rows, 3 more variables: ocaso <time>, sensTermica <dbl>,
#> #   hora <time>, and abbreviated variable name ¹​provincia
#> 
#> Testing hourly var humedadRelativa----
#> # A tibble: 94 × 11
#>    elaborado           municipio nombre   provi…¹ id    version fecha      orto 
#>    <dttm>              <chr>     <chr>    <chr>   <chr> <chr>   <date>     <tim>
#>  1 2023-01-05 13:04:08 15030     Coruña,… A Coru… 15030 1.0     2023-01-05 09:05
#>  2 2023-01-05 13:04:08 15030     Coruña,… A Coru… 15030 1.0     2023-01-05 09:05
#>  3 2023-01-05 13:04:08 15030     Coruña,… A Coru… 15030 1.0     2023-01-05 09:05
#>  4 2023-01-05 13:04:08 15030     Coruña,… A Coru… 15030 1.0     2023-01-05 09:05
#>  5 2023-01-05 13:04:08 15030     Coruña,… A Coru… 15030 1.0     2023-01-05 09:05
#>  6 2023-01-05 13:04:08 15030     Coruña,… A Coru… 15030 1.0     2023-01-05 09:05
#>  7 2023-01-05 13:04:08 15030     Coruña,… A Coru… 15030 1.0     2023-01-05 09:05
#>  8 2023-01-05 13:04:08 15030     Coruña,… A Coru… 15030 1.0     2023-01-05 09:05
#>  9 2023-01-05 13:04:08 15030     Coruña,… A Coru… 15030 1.0     2023-01-05 09:05
#> 10 2023-01-05 13:04:08 15030     Coruña,… A Coru… 15030 1.0     2023-01-05 09:05
#> # … with 84 more rows, 3 more variables: ocaso <time>, humedadRelativa <dbl>,
#> #   hora <time>, and abbreviated variable name ¹​provincia
#> 
#> Testing hourly var vientoAndRachaMax----
#> # A tibble: 94 × 13
#>    elaborado           municipio nombre   provi…¹ id    version fecha      orto 
#>    <dttm>              <chr>     <chr>    <chr>   <chr> <chr>   <date>     <tim>
#>  1 2023-01-05 13:04:08 15030     Coruña,… A Coru… 15030 1.0     2023-01-05 09:05
#>  2 2023-01-05 13:04:08 15030     Coruña,… A Coru… 15030 1.0     2023-01-05 09:05
#>  3 2023-01-05 13:04:08 15030     Coruña,… A Coru… 15030 1.0     2023-01-05 09:05
#>  4 2023-01-05 13:04:08 15030     Coruña,… A Coru… 15030 1.0     2023-01-05 09:05
#>  5 2023-01-05 13:04:08 15030     Coruña,… A Coru… 15030 1.0     2023-01-05 09:05
#>  6 2023-01-05 13:04:08 15030     Coruña,… A Coru… 15030 1.0     2023-01-05 09:05
#>  7 2023-01-05 13:04:08 15030     Coruña,… A Coru… 15030 1.0     2023-01-05 09:05
#>  8 2023-01-05 13:04:08 15030     Coruña,… A Coru… 15030 1.0     2023-01-05 09:05
#>  9 2023-01-05 13:04:08 15030     Coruña,… A Coru… 15030 1.0     2023-01-05 09:05
#> 10 2023-01-05 13:04:08 15030     Coruña,… A Coru… 15030 1.0     2023-01-05 09:05
#> # … with 84 more rows, 5 more variables: ocaso <time>, hora <time>,
#> #   vientoAndRachaMax <dbl>, vientoAndRachaMax_direccion <chr>,
#> #   vientoAndRachaMax_velocidad <dbl>, and abbreviated variable name ¹​provincia

Created on 2023-01-05 with reprex v2.0.2