Introducción

Información obtenida del Automated Surface Observing System (ASOS) de los aeropuertos de todo el mundo. # Instalar paquetes y llamar librerías

# install.packages("riem")
library(riem)
# install.packages("tidyverse")
library(tidyverse)
## ── Attaching core tidyverse packages ──────────────────────── tidyverse 2.0.0 ──
## ✔ dplyr     1.1.4     ✔ readr     2.1.5
## ✔ forcats   1.0.0     ✔ stringr   1.5.1
## ✔ ggplot2   3.5.1     ✔ tibble    3.2.1
## ✔ lubridate 1.9.4     ✔ tidyr     1.3.1
## ✔ purrr     1.0.4     
## ── Conflicts ────────────────────────────────────────── tidyverse_conflicts() ──
## ✖ dplyr::filter() masks stats::filter()
## ✖ dplyr::lag()    masks stats::lag()
## ℹ Use the conflicted package (<http://conflicted.r-lib.org/>) to force all conflicts to become errors
# install.packages("ggplot2")
library(ggplot2)
# install.packages("lubridate")
library(lubridate)

Obtener y graficar la información

# PASO 1. Buscar la red (país) - Ejemplo: México, y copiar CODE
#view(riem_networks())
# PASO 2. Buscar la estación (ciudad) - Ejemplo: Monterrey, y copiar ID
#view(riem_stations("MX__ASOS"))
# PASO 3. Obtener información de la estación
monterrey <- riem_measures("MMMY", date_start = "2026-01-01", date_end = "2026-01-31")
# Análisis Descriptivo
summary(monterrey)
##    station              valid                             tmpf      
##  Length:746         Min.   :2026-01-01 00:40:00.00   Min.   :28.40  
##  Class :character   1st Qu.:2026-01-08 16:55:00.00   1st Qu.:50.00  
##  Mode  :character   Median :2026-01-16 09:10:00.00   Median :59.00  
##                     Mean   :2026-01-16 04:34:14.72   Mean   :58.78  
##                     3rd Qu.:2026-01-23 17:27:15.00   3rd Qu.:66.20  
##                     Max.   :2026-01-30 23:40:00.00   Max.   :89.60  
##                                                                     
##       dwpf           relh             drct          sknt             p01i  
##  Min.   :15.8   Min.   : 14.60   Min.   :  0   Min.   : 0.000   Min.   :0  
##  1st Qu.:33.8   1st Qu.: 40.53   1st Qu.: 70   1st Qu.: 3.000   1st Qu.:0  
##  Median :41.0   Median : 60.01   Median :140   Median : 5.000   Median :0  
##  Mean   :42.8   Mean   : 60.23   Mean   :169   Mean   : 5.166   Mean   :0  
##  3rd Qu.:55.4   3rd Qu.: 77.77   3rd Qu.:290   3rd Qu.: 7.000   3rd Qu.:0  
##  Max.   :64.4   Max.   :100.00   Max.   :360   Max.   :20.000   Max.   :0  
##                                  NA's   :1                                 
##       alti            mslp           vsby             gust      
##  Min.   :29.72   Min.   :1006   Min.   : 0.120   Min.   :15.00  
##  1st Qu.:29.99   1st Qu.:1015   1st Qu.: 6.000   1st Qu.:20.00  
##  Median :30.15   Median :1021   Median :10.000   Median :23.50  
##  Mean   :30.16   Mean   :1022   Mean   : 8.708   Mean   :23.55  
##  3rd Qu.:30.32   3rd Qu.:1028   3rd Qu.:10.000   3rd Qu.:26.00  
##  Max.   :30.69   Max.   :1040   Max.   :15.000   Max.   :37.00  
##                  NA's   :506                     NA's   :706    
##     skyc1              skyc2              skyc3            skyc4        
##  Length:746         Length:746         Length:746         Mode:logical  
##  Class :character   Class :character   Class :character   NA's:746      
##  Mode  :character   Mode  :character   Mode  :character                 
##                                                                         
##                                                                         
##                                                                         
##                                                                         
##      skyl1           skyl2           skyl3        skyl4        
##  Min.   :  200   Min.   :  500   Min.   : 4000   Mode:logical  
##  1st Qu.: 2000   1st Qu.: 2000   1st Qu.:20000   NA's:746      
##  Median : 7000   Median : 7000   Median :20000                 
##  Mean   : 7905   Mean   : 9363   Mean   :16444                 
##  3rd Qu.:10000   3rd Qu.:20000   3rd Qu.:20000                 
##  Max.   :20000   Max.   :20000   Max.   :20000                 
##  NA's   :269     NA's   :560     NA's   :737                   
##    wxcodes          ice_accretion_1hr ice_accretion_3hr ice_accretion_6hr
##  Length:746         Mode:logical      Mode:logical      Mode:logical     
##  Class :character   NA's:746          NA's:746          NA's:746         
##  Mode  :character                                                        
##                                                                          
##                                                                          
##                                                                          
##                                                                          
##  peak_wind_gust peak_wind_drct peak_wind_time      feel      
##  Mode:logical   Mode:logical   Mode:logical   Min.   :27.99  
##  NA's:746       NA's:746       NA's:746       1st Qu.:50.00  
##                                               Median :59.00  
##                                               Mean   :57.87  
##                                               3rd Qu.:66.20  
##                                               Max.   :86.24  
##                                                              
##     metar           snowdepth     
##  Length:746         Mode:logical  
##  Class :character   NA's:746      
##  Mode  :character                 
##                                   
##                                   
##                                   
## 
str(monterrey)
## tibble [746 × 30] (S3: tbl_df/tbl/data.frame)
##  $ station          : chr [1:746] "MMMY" "MMMY" "MMMY" "MMMY" ...
##  $ valid            : POSIXct[1:746], format: "2026-01-01 00:40:00" "2026-01-01 01:40:00" ...
##  $ tmpf             : num [1:746] 57.2 55.4 53.6 51.8 51.8 50 46.4 42.8 44.6 44.6 ...
##  $ dwpf             : num [1:746] 37.4 35.6 35.6 35.6 33.8 33.8 33.8 33.8 33.8 33.8 ...
##  $ relh             : num [1:746] 47.4 47.1 50.4 53.8 50.1 ...
##  $ drct             : num [1:746] 80 0 120 60 70 70 0 0 340 300 ...
##  $ sknt             : num [1:746] 4 0 3 4 3 5 0 0 3 6 ...
##  $ p01i             : num [1:746] 0 0 0 0 0 0 0 0 0 0 ...
##  $ alti             : num [1:746] 30.2 30.2 30.2 30.2 30.2 ...
##  $ mslp             : num [1:746] NA NA 1024 NA NA ...
##  $ vsby             : num [1:746] 10 10 10 10 10 10 10 10 10 10 ...
##  $ gust             : num [1:746] NA NA NA NA NA NA NA NA NA NA ...
##  $ skyc1            : chr [1:746] "CLR" "CLR" "CLR" "CLR" ...
##  $ skyc2            : chr [1:746] NA NA NA NA ...
##  $ skyc3            : chr [1:746] NA NA NA NA ...
##  $ skyc4            : logi [1:746] NA NA NA NA NA NA ...
##  $ skyl1            : num [1:746] NA NA NA NA NA NA NA NA NA NA ...
##  $ skyl2            : num [1:746] NA NA NA NA NA NA NA NA NA NA ...
##  $ skyl3            : num [1:746] NA NA NA NA NA NA NA NA NA NA ...
##  $ skyl4            : logi [1:746] NA NA NA NA NA NA ...
##  $ wxcodes          : chr [1:746] NA NA NA NA ...
##  $ ice_accretion_1hr: logi [1:746] NA NA NA NA NA NA ...
##  $ ice_accretion_3hr: logi [1:746] NA NA NA NA NA NA ...
##  $ ice_accretion_6hr: logi [1:746] NA NA NA NA NA NA ...
##  $ peak_wind_gust   : logi [1:746] NA NA NA NA NA NA ...
##  $ peak_wind_drct   : logi [1:746] NA NA NA NA NA NA ...
##  $ peak_wind_time   : logi [1:746] NA NA NA NA NA NA ...
##  $ feel             : num [1:746] 57.2 55.4 53.6 51.8 51.8 ...
##  $ metar            : chr [1:746] "MMMY 010040Z 08004KT 10SM SKC 14/03 A3022 RMK ISOL CI" "MMMY 010140Z 00000KT 10SM SKC 13/02 A3022" "MMMY 010240Z 12003KT 10SM SKC 12/02 A3022 RMK SLP245 52004 993" "MMMY 010340Z 06004KT 10SM SKC 11/02 A3022" ...
##  $ snowdepth        : logi [1:746] NA NA NA NA NA NA ...
# Filtrar información del último mes
mty_ago_24 <- subset(monterrey, valid >= as.POSIXct("2026-01-01 00:00") &
valid <= as.POSIXct("2026-01-31 23:59"))
# Ejercicio 1: Realizar una gráfica de barras de la temperatura promedio diario en agosto en Monterrey en °C.

# Convertir a °C
monterrey$temp_c <- (monterrey$tmpf - 32) * 5/9

# Promedio diario
prom <- aggregate(temp_c ~ as.Date(valid), data = monterrey, mean)

# Gráfica
barplot(prom$temp_c,
        names.arg = prom$`as.Date(valid)`,
        las = 2,
        main = "Temp promedio diaria (°C)")