Introducción

Información obtenida del Automated Surface Observing System (ASOS) de los aeropuertos de todo el mundo.

Introducción

#install.packages("riem")
library(riem)
# install.packages("tidyverse")
library(tidyverse)
## ── Attaching core tidyverse packages ──────────────────────── tidyverse 2.0.0 ──
## ✔ dplyr     1.2.0     ✔ readr     2.1.6
## ✔ forcats   1.0.1     ✔ stringr   1.6.0
## ✔ ggplot2   4.0.2     ✔ tibble    3.3.1
## ✔ lubridate 1.9.5     ✔ tidyr     1.3.2
## ✔ purrr     1.2.1     
## ── 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 = "2025-08-01")

# Análisis Descriptivo
summary(monterrey)
##    station              valid                          tmpf       
##  Length:5156        Min.   :2025-08-01 00:43:00   Min.   : 28.40  
##  Class :character   1st Qu.:2025-09-21 08:25:00   1st Qu.: 62.60  
##  Mode  :character   Median :2025-11-13 10:10:00   Median : 71.60  
##                     Mean   :2025-11-13 06:59:36   Mean   : 71.23  
##                     3rd Qu.:2026-01-04 11:55:00   3rd Qu.: 80.60  
##                     Max.   :2026-02-25 23:40:00   Max.   :104.00  
##                                                   NA's   :2       
##       dwpf            relh             drct            sknt             p01i  
##  Min.   :12.20   Min.   :  7.26   Min.   :  0.0   Min.   : 0.000   Min.   :0  
##  1st Qu.:48.20   1st Qu.: 48.85   1st Qu.: 60.0   1st Qu.: 3.000   1st Qu.:0  
##  Median :60.80   Median : 68.38   Median :110.0   Median : 5.000   Median :0  
##  Mean   :57.21   Mean   : 65.98   Mean   :132.1   Mean   : 5.044   Mean   :0  
##  3rd Qu.:68.00   3rd Qu.: 87.65   3rd Qu.:240.0   3rd Qu.: 7.000   3rd Qu.:0  
##  Max.   :84.20   Max.   :100.00   Max.   :360.0   Max.   :27.210   Max.   :0  
##  NA's   :2       NA's   :2        NA's   :4                                   
##       alti            mslp           vsby             gust      
##  Min.   :29.62   Min.   :1002   Min.   : 0.120   Min.   :12.00  
##  1st Qu.:29.96   1st Qu.:1013   1st Qu.: 6.000   1st Qu.:18.00  
##  Median :30.04   Median :1016   Median : 8.000   Median :21.00  
##  Mean   :30.08   Mean   :1018   Mean   : 8.415   Mean   :22.06  
##  3rd Qu.:30.15   3rd Qu.:1021   3rd Qu.:10.000   3rd Qu.:25.00  
##  Max.   :30.69   Max.   :1101   Max.   :15.000   Max.   :48.00  
##  NA's   :2       NA's   :3487   NA's   :1        NA's   :4909   
##     skyc1              skyc2              skyc3              skyc4          
##  Length:5156        Length:5156        Length:5156        Length:5156       
##  Class :character   Class :character   Class :character   Class :character  
##  Mode  :character   Mode  :character   Mode  :character   Mode  :character  
##                                                                             
##                                                                             
##                                                                             
##                                                                             
##      skyl1           skyl2           skyl3           skyl4     
##  Min.   :  100   Min.   :  500   Min.   : 1600   Min.   :7000  
##  1st Qu.: 1500   1st Qu.: 1500   1st Qu.:12500   1st Qu.:7000  
##  Median : 2500   Median : 7000   Median :20000   Median :7000  
##  Mean   : 4618   Mean   : 7667   Mean   :16465   Mean   :7000  
##  3rd Qu.: 5000   3rd Qu.: 8000   3rd Qu.:20000   3rd Qu.:7000  
##  Max.   :20000   Max.   :25000   Max.   :20000   Max.   :7000  
##  NA's   :2009    NA's   :3910    NA's   :5046    NA's   :5155  
##    wxcodes          ice_accretion_1hr ice_accretion_3hr ice_accretion_6hr
##  Length:5156        Mode:logical      Mode:logical      Mode:logical     
##  Class :character   NA's:5156         NA's:5156         NA's:5156        
##  Mode  :character                                                        
##                                                                          
##                                                                          
##                                                                          
##                                                                          
##  peak_wind_gust peak_wind_drct peak_wind_time      feel       
##  Mode:logical   Mode:logical   Mode:logical   Min.   : 27.99  
##  NA's:5156      NA's:5156      NA's:5156      1st Qu.: 62.60  
##                                               Median : 71.60  
##                                               Mean   : 71.70  
##                                               3rd Qu.: 81.46  
##                                               Max.   :115.24  
##                                               NA's   :2       
##     metar           snowdepth     
##  Length:5156        Mode:logical  
##  Class :character   NA's:5156     
##  Mode  :character                 
##                                   
##                                   
##                                   
## 
str(monterrey)
## tibble [5,156 × 30] (S3: tbl_df/tbl/data.frame)
##  $ station          : chr [1:5156] "MMMY" "MMMY" "MMMY" "MMMY" ...
##  $ valid            : POSIXct[1:5156], format: "2025-08-01 00:43:00" "2025-08-01 01:40:00" ...
##  $ tmpf             : num [1:5156] 95 91.4 89.6 86 84.2 82.4 80.6 78.8 77 75.2 ...
##  $ dwpf             : num [1:5156] 60.8 60.8 60.8 66.2 69.8 69.8 69.8 68 68 68 ...
##  $ relh             : num [1:5156] 32.4 36.2 38.3 51.8 62.1 ...
##  $ drct             : num [1:5156] 100 80 100 110 90 80 90 80 80 120 ...
##  $ sknt             : num [1:5156] 6 5 10 12 10 6 7 6 5 5 ...
##  $ p01i             : num [1:5156] 0 0 0 0 0 0 0 0 0 0 ...
##  $ alti             : num [1:5156] 30 30 30 30.1 30.1 ...
##  $ mslp             : num [1:5156] NA NA 1015 NA NA ...
##  $ vsby             : num [1:5156] 15 15 10 8 8 8 8 8 8 8 ...
##  $ gust             : num [1:5156] NA NA NA NA NA NA NA NA NA NA ...
##  $ skyc1            : chr [1:5156] "CLR" "CLR" "CLR" "CLR" ...
##  $ skyc2            : chr [1:5156] NA NA NA NA ...
##  $ skyc3            : chr [1:5156] NA NA NA NA ...
##  $ skyc4            : chr [1:5156] NA NA NA NA ...
##  $ skyl1            : num [1:5156] NA NA NA NA NA NA NA NA NA NA ...
##  $ skyl2            : num [1:5156] NA NA NA NA NA NA NA NA NA NA ...
##  $ skyl3            : num [1:5156] NA NA NA NA NA NA NA NA NA NA ...
##  $ skyl4            : num [1:5156] NA NA NA NA NA NA NA NA NA NA ...
##  $ wxcodes          : chr [1:5156] NA NA NA NA ...
##  $ ice_accretion_1hr: logi [1:5156] NA NA NA NA NA NA ...
##  $ ice_accretion_3hr: logi [1:5156] NA NA NA NA NA NA ...
##  $ ice_accretion_6hr: logi [1:5156] NA NA NA NA NA NA ...
##  $ peak_wind_gust   : logi [1:5156] NA NA NA NA NA NA ...
##  $ peak_wind_drct   : logi [1:5156] NA NA NA NA NA NA ...
##  $ peak_wind_time   : logi [1:5156] NA NA NA NA NA NA ...
##  $ feel             : num [1:5156] 95.3 91.4 89.6 88.4 88.5 ...
##  $ metar            : chr [1:5156] "MMMY 010043Z 10006KT 15SM SKC 35/16 A2999 RMK ISOL CU CI" "MMMY 010140Z 08005KT 15SM SKC 33/16 A3000 RMK ISOL CI" "COR MMMY 010240Z 10010KT 10SM SKC 32/16 A3002 RMK SLP146 52009 906" "MMMY 010340Z 11012KT 8SM SKC 30/19 A3005 RMK HZY ISOL SC" ...
##  $ snowdepth        : logi [1:5156] NA NA NA NA NA NA ...
# Filtrar información del último mes
mty_ago_25 <- subset(monterrey, valid >= as.POSIXct("2025-08-01 00:00") & valid <= as.POSIXct("2025-08-31 23:59"))

# Ejercicio 1: Realizar una gráfica de barras de la temperatura promedio diario en agosto en Monterrey en °C.

promedio <- mty_ago_25 %>%
  mutate(fecha = as.Date(valid),
         tmpc = (tmpf - 32) * 5/9) %>%
  group_by(fecha) %>%
  summarize(temp_promedio = mean(tmpc, na.rm = TRUE))

ggplot(promedio, aes(x = fecha, y = temp_promedio)) +
  geom_bar(stat = "identity") +
  labs(title = "Temperatura Promedio Diaria - agosto 2025",
       x = "Fecha",
       y = "Temperatura (°C)") +
  theme_minimal()

LS0tDQp0aXRsZTogImFzb3MiDQphdXRob3I6ICJBbmEgVmljdG9yaWEgVmVuZWdhcyBBMDE1NjcyNDciDQpkYXRlOiAiMjAyNi0wMi0yNiINCm91dHB1dDogDQogIGh0bWxfZG9jdW1lbnQ6DQogICAgdG9jOiBUUlVFDQogICAgdG9jX2Zsb2F0OiBUUlVFDQogICAgY29kZV9kb3dubG9hZDogVFJVRQ0KICAgIHRoZW1lOiBkYXJrbHkNCi0tLQ0KIVtdKCkNCg0KIyA8c3BhbiBzdHlsZT0iY29sb3I6IHllbGxvdzsiPkludHJvZHVjY2nDs248L3NwYW4+DQpJbmZvcm1hY2nDs24gb2J0ZW5pZGEgZGVsICpBdXRvbWF0ZWQgU3VyZmFjZSBPYnNlcnZpbmcgU3lzdGVtIChBU09TKSogZGUgbG9zIGFlcm9wdWVydG9zIGRlIHRvZG8gZWwgbXVuZG8uDQoNCiMgPHNwYW4gc3R5bGU9ImNvbG9yOiB5ZWxsb3c7Ij5JbnRyb2R1Y2Npw7NuPC9zcGFuPg0KYGBge3J9DQojaW5zdGFsbC5wYWNrYWdlcygicmllbSIpDQpsaWJyYXJ5KHJpZW0pDQojIGluc3RhbGwucGFja2FnZXMoInRpZHl2ZXJzZSIpDQpsaWJyYXJ5KHRpZHl2ZXJzZSkNCiMgaW5zdGFsbC5wYWNrYWdlcygiZ2dwbG90MiIpDQpsaWJyYXJ5KGdncGxvdDIpDQojaW5zdGFsbC5wYWNrYWdlcygibHVicmlkYXRlIikNCmxpYnJhcnkobHVicmlkYXRlKQ0KYGBgDQoNCiMgPHNwYW4gc3R5bGU9ImNvbG9yOiB5ZWxsb3c7Ij5PYnRlbmVyIHkgZ3JhZmljYXIgbGEgaW5mb3JtYWNpw7NuPC9zcGFuPg0KYGBge3J9DQojIFBBU08gMS4gQnVzY2FyIGxhIHJlZCAocGHDrXMpIC0gRWplbXBsbzogTcOpeGljbywgeSBjb3BpYXIgQ09ERQ0KdmlldyhyaWVtX25ldHdvcmtzKCkpDQoNCg0KIyBQQVNPIDIuIEJ1c2NhciBsYSBlc3RhY2nDs24gKGNpdWRhZCkgLSBFamVtcGxvOiBNb250ZXJyZXksIHkgY29waWFyIElEDQp2aWV3KHJpZW1fc3RhdGlvbnMoIk1YX19BU09TIikpDQoNCiMgUEFTTyAzLiBPYnRlbmVyIGluZm9ybWFjacOzbiBkZSBsYSBlc3RhY2nDs24NCm1vbnRlcnJleSA8LSByaWVtX21lYXN1cmVzKCJNTU1ZIiwgZGF0ZV9zdGFydCA9ICIyMDI1LTA4LTAxIikNCg0KIyBBbsOhbGlzaXMgRGVzY3JpcHRpdm8NCnN1bW1hcnkobW9udGVycmV5KQ0Kc3RyKG1vbnRlcnJleSkNCg0KIyBGaWx0cmFyIGluZm9ybWFjacOzbiBkZWwgw7psdGltbyBtZXMNCm10eV9hZ29fMjUgPC0gc3Vic2V0KG1vbnRlcnJleSwgdmFsaWQgPj0gYXMuUE9TSVhjdCgiMjAyNS0wOC0wMSAwMDowMCIpICYgdmFsaWQgPD0gYXMuUE9TSVhjdCgiMjAyNS0wOC0zMSAyMzo1OSIpKQ0KDQojIEVqZXJjaWNpbyAxOiBSZWFsaXphciB1bmEgZ3LDoWZpY2EgZGUgYmFycmFzIGRlIGxhIHRlbXBlcmF0dXJhIHByb21lZGlvIGRpYXJpbyBlbiBhZ29zdG8gZW4gTW9udGVycmV5IGVuIMKwQy4NCg0KcHJvbWVkaW8gPC0gbXR5X2Fnb18yNSAlPiUNCiAgbXV0YXRlKGZlY2hhID0gYXMuRGF0ZSh2YWxpZCksDQogICAgICAgICB0bXBjID0gKHRtcGYgLSAzMikgKiA1LzkpICU+JQ0KICBncm91cF9ieShmZWNoYSkgJT4lDQogIHN1bW1hcml6ZSh0ZW1wX3Byb21lZGlvID0gbWVhbih0bXBjLCBuYS5ybSA9IFRSVUUpKQ0KDQpnZ3Bsb3QocHJvbWVkaW8sIGFlcyh4ID0gZmVjaGEsIHkgPSB0ZW1wX3Byb21lZGlvKSkgKw0KICBnZW9tX2JhcihzdGF0ID0gImlkZW50aXR5IikgKw0KICBsYWJzKHRpdGxlID0gIlRlbXBlcmF0dXJhIFByb21lZGlvIERpYXJpYSAtIGFnb3N0byAyMDI1IiwNCiAgICAgICB4ID0gIkZlY2hhIiwNCiAgICAgICB5ID0gIlRlbXBlcmF0dXJhICjCsEMpIikgKw0KICB0aGVtZV9taW5pbWFsKCkNCg0KYGBgDQoNCg==