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.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
SLP <- riem_measures("MMSP", date_start = "2026-01-01")

# Análisis Descriptivo
summary(SLP)
##    station              valid                          tmpf      
##  Length:1367        Min.   :2026-01-01 00:46:00   Min.   :30.20  
##  Class :character   1st Qu.:2026-01-15 03:18:00   1st Qu.:46.40  
##  Mode  :character   Median :2026-01-29 01:40:00   Median :55.40  
##                     Mean   :2026-01-29 01:49:02   Mean   :57.05  
##                     3rd Qu.:2026-02-12 03:16:00   3rd Qu.:66.20  
##                     Max.   :2026-02-25 23:46:00   Max.   :91.40  
##                                                                  
##       dwpf            relh             drct             sknt             p01i  
##  Min.   :-4.00   Min.   :  2.64   Min.   :  0.00   Min.   : 0.000   Min.   :0  
##  1st Qu.:30.20   1st Qu.: 31.32   1st Qu.:  0.00   1st Qu.: 0.000   1st Qu.:0  
##  Median :35.60   Median : 50.63   Median : 70.00   Median : 4.000   Median :0  
##  Mean   :35.03   Mean   : 51.01   Mean   : 98.82   Mean   : 4.436   Mean   :0  
##  3rd Qu.:41.00   3rd Qu.: 70.67   3rd Qu.:175.00   3rd Qu.: 7.000   3rd Qu.:0  
##  Max.   :59.00   Max.   :100.00   Max.   :360.00   Max.   :24.000   Max.   :0  
##                                                                                
##       alti            mslp           vsby             gust      
##  Min.   :30.00   Min.   :1001   Min.   : 0.000   Min.   :12.00  
##  1st Qu.:30.21   1st Qu.:1011   1st Qu.: 7.000   1st Qu.:15.00  
##  Median :30.28   Median :1015   Median : 8.000   Median :17.50  
##  Mean   :30.28   Mean   :1015   Mean   : 7.877   Mean   :18.38  
##  3rd Qu.:30.36   3rd Qu.:1020   3rd Qu.:10.000   3rd Qu.:21.00  
##  Max.   :30.56   Max.   :1031   Max.   :12.000   Max.   :30.00  
##                  NA's   :921                     NA's   :1341   
##     skyc1              skyc2              skyc3            skyc4        
##  Length:1367        Length:1367        Length:1367        Mode:logical  
##  Class :character   Class :character   Class :character   NA's:1367     
##  Mode  :character   Mode  :character   Mode  :character                 
##                                                                         
##                                                                         
##                                                                         
##                                                                         
##      skyl1           skyl2           skyl3        skyl4        
##  Min.   :    0   Min.   :  700   Min.   : 7000   Mode:logical  
##  1st Qu.: 2000   1st Qu.: 2000   1st Qu.:21000   NA's:1367     
##  Median : 6000   Median :10000   Median :21000                 
##  Mean   :11099   Mean   :13639   Mean   :20282                 
##  3rd Qu.:23000   3rd Qu.:23000   3rd Qu.:25000                 
##  Max.   :25000   Max.   :25000   Max.   :25000                 
##  NA's   :529     NA's   :1053    NA's   :1328                  
##    wxcodes          ice_accretion_1hr ice_accretion_3hr ice_accretion_6hr
##  Length:1367        Mode:logical      Mode:logical      Mode:logical     
##  Class :character   NA's:1367         NA's:1367         NA's:1367        
##  Mode  :character                                                        
##                                                                          
##                                                                          
##                                                                          
##                                                                          
##  peak_wind_gust peak_wind_drct peak_wind_time      feel      
##  Mode:logical   Mode:logical   Mode:logical   Min.   :24.26  
##  NA's:1367      NA's:1367      NA's:1367      1st Qu.:46.34  
##                                               Median :55.40  
##                                               Mean   :56.39  
##                                               3rd Qu.:66.20  
##                                               Max.   :85.28  
##                                                              
##     metar           snowdepth     
##  Length:1367        Mode:logical  
##  Class :character   NA's:1367     
##  Mode  :character                 
##                                   
##                                   
##                                   
## 
str(SLP)
## tibble [1,367 × 30] (S3: tbl_df/tbl/data.frame)
##  $ station          : chr [1:1367] "MMSP" "MMSP" "MMSP" "MMSP" ...
##  $ valid            : POSIXct[1:1367], format: "2026-01-01 00:46:00" "2026-01-01 01:52:00" ...
##  $ tmpf             : num [1:1367] 55.4 53.6 51.8 51.8 50 48.2 46.4 44.6 44.6 42.8 ...
##  $ dwpf             : num [1:1367] 42.8 42.8 42.8 42.8 42.8 41 41 41 41 37.4 ...
##  $ relh             : num [1:1367] 62.5 66.7 71.3 71.3 76.2 ...
##  $ drct             : num [1:1367] 30 0 0 0 0 0 0 0 0 0 ...
##  $ sknt             : num [1:1367] 3 0 0 0 0 0 0 0 0 0 ...
##  $ p01i             : num [1:1367] 0 0 0 0 0 0 0 0 0 0 ...
##  $ alti             : num [1:1367] 30.3 30.4 30.4 30.4 30.4 ...
##  $ mslp             : num [1:1367] NA NA 1022 NA NA ...
##  $ vsby             : num [1:1367] 8 8 8 8 7 7 6 4 4 3 ...
##  $ gust             : num [1:1367] NA NA NA NA NA NA NA NA NA NA ...
##  $ skyc1            : chr [1:1367] "BKN" "SCT" "SCT" "FEW" ...
##  $ skyc2            : chr [1:1367] NA NA NA NA ...
##  $ skyc3            : chr [1:1367] NA NA NA NA ...
##  $ skyc4            : logi [1:1367] NA NA NA NA NA NA ...
##  $ skyl1            : num [1:1367] 25000 25000 25000 25000 23000 23000 23000 23000 23000 NA ...
##  $ skyl2            : num [1:1367] NA NA NA NA NA NA NA NA NA NA ...
##  $ skyl3            : num [1:1367] NA NA NA NA NA NA NA NA NA NA ...
##  $ skyl4            : logi [1:1367] NA NA NA NA NA NA ...
##  $ wxcodes          : chr [1:1367] NA NA NA NA ...
##  $ ice_accretion_1hr: logi [1:1367] NA NA NA NA NA NA ...
##  $ ice_accretion_3hr: logi [1:1367] NA NA NA NA NA NA ...
##  $ ice_accretion_6hr: logi [1:1367] NA NA NA NA NA NA ...
##  $ peak_wind_gust   : logi [1:1367] NA NA NA NA NA NA ...
##  $ peak_wind_drct   : logi [1:1367] NA NA NA NA NA NA ...
##  $ peak_wind_time   : logi [1:1367] NA NA NA NA NA NA ...
##  $ feel             : num [1:1367] 55.4 53.6 51.8 51.8 50 48.2 46.4 44.6 44.6 42.8 ...
##  $ metar            : chr [1:1367] "MMSP 010046Z 03003KT 8SM BKN250 13/06 A3033 RMK 8/008" "MMSP 010152Z 00000KT 8SM SCT250 12/06 A3035 RMK 8/001" "MMSP 010240Z 00000KT 8SM SCT250 11/06 A3036 RMK SLP215 52010 976 8/001" "MMSP 010348Z 00000KT 8SM FEW250 11/06 A3037 RMK 8/001" ...
##  $ snowdepth        : logi [1:1367] NA NA NA NA NA NA ...
# Filtrar información del último mes
mty_ago_24 <- subset(SLP, valid >= as.POSIXct("2024-08-01 00:00") & valid <= as.POSIXct("2024-08-31 23:59"))

# Ejercicio 1: Realizar una gráfica de barras de la temperatura promedio diario en agosto en Monterrey en °C.
slp_enero_26 <- SLP %>%
  mutate(fecha = as.Date(valid)) %>%
  group_by(fecha) %>%
  summarize(temp_promedio = mean((tmpf - 32) * 5 / 9, na.rm = TRUE))

ggplot(slp_enero_26, aes(x = fecha, y = temp_promedio)) +
  geom_col(fill = "skyblue") +
  labs(
    title = "Temperatura Promedio Diario en SLP - Enero 2026",
    x = "Fecha",
    y = "Temperatura (°C)"
  )

LS0tCnRpdGxlOiAiQVNPUyIKYXV0aG9yOiAiTWF4aW1pbGlhbm8gR29tZXogIgpkYXRlOiAiMjYtRmViLTIwMjYiCm91dHB1dDogCiAgaHRtbF9kb2N1bWVudDoKICAgIHRvYzogVFJVRQogICAgdG9jX2Zsb2F0OiBUUlVFCiAgICBjb2RlX2Rvd25sb2FkOiBUUlVFCiAgICB0aGVtZTogZGFya2x5Ci0tLQoKIVtdKCkKCiMgPHNwYW4gc3R5bGU9ImNvbG9yOiB5ZWxsb3c7Ij5JbnRyb2R1Y2Npw7NuPC9zcGFuPgpJbmZvcm1hY2nDs24gb2J0ZW5pZGEgZGVsICpBdXRvbWF0ZWQgU3VyZmFjZSBPYnNlcnZpbmcgU3lzdGVtIChBU09TKSogZGUgbG9zIGFlcm9wdWVydG9zIGRlIHRvZG8gZWwgbXVuZG8uCgojIDxzcGFuIHN0eWxlPSJjb2xvcjogeWVsbG93OyI+SW5zdGFsYXIgcGFxdWV0ZXMgeSBsbGFtYXIgbGlicmVyw61hczwvc3Bhbj4KYGBge3J9CiMgaW5zdGFsbC5wYWNrYWdlcygicmllbSIpCmxpYnJhcnkocmllbSkKIyBpbnN0YWxsLnBhY2thZ2VzKCJ0aWR5dmVyc2UiKQpsaWJyYXJ5KHRpZHl2ZXJzZSkKIyBpbnN0YWxsLnBhY2thZ2VzKCJnZ3Bsb3QyIikKbGlicmFyeShnZ3Bsb3QyKQojIGluc3RhbGwucGFja2FnZXMoImx1YnJpZGF0ZSIpCmxpYnJhcnkobHVicmlkYXRlKQpgYGAKCiMgPHNwYW4gc3R5bGU9ImNvbG9yOiB5ZWxsb3c7Ij5PYnRlbmVyIHkgZ3JhZmljYXIgbGEgaW5mb3JtYWNpw7NuPC9zcGFuPgpgYGB7cn0KIyBQQVNPIDEuIEJ1c2NhciBsYSByZWQgKHBhw61zKSAtIEVqZW1wbG86IE3DqXhpY28sIHkgY29waWFyIENPREUKIyB2aWV3KHJpZW1fbmV0d29ya3MoKSkKCiMgUEFTTyAyLiBCdXNjYXIgbGEgZXN0YWNpw7NuIChjaXVkYWQpIC0gRWplbXBsbzogTW9udGVycmV5LCB5IGNvcGlhciBJRAojIHZpZXcocmllbV9zdGF0aW9ucygiTVhfX0FTT1MiKSkKCiMgUEFTTyAzLiBPYnRlbmVyIGluZm9ybWFjacOzbiBkZSBsYSBlc3RhY2nDs24KU0xQIDwtIHJpZW1fbWVhc3VyZXMoIk1NU1AiLCBkYXRlX3N0YXJ0ID0gIjIwMjYtMDEtMDEiKQoKIyBBbsOhbGlzaXMgRGVzY3JpcHRpdm8Kc3VtbWFyeShTTFApCnN0cihTTFApCgojIEZpbHRyYXIgaW5mb3JtYWNpw7NuIGRlbCDDumx0aW1vIG1lcwptdHlfYWdvXzI0IDwtIHN1YnNldChTTFAsIHZhbGlkID49IGFzLlBPU0lYY3QoIjIwMjQtMDgtMDEgMDA6MDAiKSAmIHZhbGlkIDw9IGFzLlBPU0lYY3QoIjIwMjQtMDgtMzEgMjM6NTkiKSkKCiMgRWplcmNpY2lvIDE6IFJlYWxpemFyIHVuYSBncsOhZmljYSBkZSBiYXJyYXMgZGUgbGEgdGVtcGVyYXR1cmEgcHJvbWVkaW8gZGlhcmlvIGVuIGFnb3N0byBlbiBNb250ZXJyZXkgZW4gwrBDLgpgYGAKCmBgYHtyfQpzbHBfZW5lcm9fMjYgPC0gU0xQICU+JQogIG11dGF0ZShmZWNoYSA9IGFzLkRhdGUodmFsaWQpKSAlPiUKICBncm91cF9ieShmZWNoYSkgJT4lCiAgc3VtbWFyaXplKHRlbXBfcHJvbWVkaW8gPSBtZWFuKCh0bXBmIC0gMzIpICogNSAvIDksIG5hLnJtID0gVFJVRSkpCgpnZ3Bsb3Qoc2xwX2VuZXJvXzI2LCBhZXMoeCA9IGZlY2hhLCB5ID0gdGVtcF9wcm9tZWRpbykpICsKICBnZW9tX2NvbChmaWxsID0gInNreWJsdWUiKSArCiAgbGFicygKICAgIHRpdGxlID0gIlRlbXBlcmF0dXJhIFByb21lZGlvIERpYXJpbyBlbiBTTFAgLSBFbmVybyAyMDI2IiwKICAgIHggPSAiRmVjaGEiLAogICAgeSA9ICJUZW1wZXJhdHVyYSAowrBDKSIKICApCmBgYAoKCgoKCg==