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)

# Source - https://stackoverflow.com/a/59797619
# Posted by Ronak Shah
# Retrieved 2026-02-26, License - CC BY-SA 4.0

library(dplyr)

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("AR__ASOS"))

# PASO 3. Obtener información de la estación
buenos_aires <- riem_measures("SAEZ", date_start = "2026-01-01")

# Análisis Descriptivo
summary(buenos_aires)
##    station              valid                          tmpf       
##  Length:1398        Min.   :2026-01-01 00:00:00   Min.   : 46.40  
##  Class :character   1st Qu.:2026-01-15 08:15:00   1st Qu.: 69.80  
##  Mode  :character   Median :2026-01-29 08:30:00   Median : 75.20  
##                     Mean   :2026-01-29 06:16:17   Mean   : 76.05  
##                     3rd Qu.:2026-02-12 09:45:00   3rd Qu.: 84.20  
##                     Max.   :2026-02-25 23:00:00   Max.   :102.20  
##                                                   NA's   :1       
##       dwpf            relh             drct            sknt              p01i  
##  Min.   :32.00   Min.   : 15.50   Min.   :  0.0   Min.   :  0.000   Min.   :0  
##  1st Qu.:53.60   1st Qu.: 39.36   1st Qu.: 70.0   1st Qu.:  5.000   1st Qu.:0  
##  Median :60.80   Median : 58.16   Median :130.0   Median :  7.000   Median :0  
##  Mean   :58.18   Mean   : 58.63   Mean   :143.7   Mean   :  7.431   Mean   :0  
##  3rd Qu.:64.40   3rd Qu.: 77.15   3rd Qu.:200.0   3rd Qu.:  9.000   3rd Qu.:0  
##  Max.   :75.20   Max.   :100.00   Max.   :360.0   Max.   :608.000   Max.   :0  
##  NA's   :1       NA's   :1        NA's   :28                                   
##       alti         mslp              vsby           gust      
##  Min.   :29.59   Mode:logical   Min.   :0.06   Min.   :18.00  
##  1st Qu.:29.83   NA's:1398      1st Qu.:6.21   1st Qu.:20.50  
##  Median :29.91                  Median :6.21   Median :22.00  
##  Mean   :29.90                  Mean   :5.97   Mean   :23.52  
##  3rd Qu.:29.97                  3rd Qu.:6.21   3rd Qu.:24.00  
##  Max.   :30.21                  Max.   :6.21   Max.   :37.00  
##  NA's   :1                                     NA's   :1371   
##     skyc1              skyc2              skyc3              skyc4          
##  Length:1398        Length:1398        Length:1398        Length:1398       
##  Class :character   Class :character   Class :character   Class :character  
##  Mode  :character   Mode  :character   Mode  :character   Mode  :character  
##                                                                             
##                                                                             
##                                                                             
##                                                                             
##      skyl1          skyl2           skyl3           skyl4     
##  Min.   : 100   Min.   :  800   Min.   : 3000   Min.   :6000  
##  1st Qu.:1000   1st Qu.: 4700   1st Qu.: 5000   1st Qu.:6000  
##  Median :2400   Median : 7000   Median : 7000   Median :6000  
##  Mean   :2453   Mean   : 8509   Mean   : 9619   Mean   :6000  
##  3rd Qu.:4000   3rd Qu.:10000   3rd Qu.:17500   3rd Qu.:6000  
##  Max.   :5000   Max.   :20000   Max.   :20000   Max.   :6000  
##  NA's   :1120   NA's   :1264    NA's   :1356    NA's   :1395  
##    wxcodes          ice_accretion_1hr ice_accretion_3hr ice_accretion_6hr
##  Length:1398        Mode:logical      Mode:logical      Mode:logical     
##  Class :character   NA's:1398         NA's:1398         NA's:1398        
##  Mode  :character                                                        
##                                                                          
##                                                                          
##                                                                          
##                                                                          
##  peak_wind_gust peak_wind_drct peak_wind_time      feel       
##  Mode:logical   Mode:logical   Mode:logical   Min.   : 46.40  
##  NA's:1398      NA's:1398      NA's:1398      1st Qu.: 69.80  
##                                               Median : 75.20  
##                                               Mean   : 76.01  
##                                               3rd Qu.: 83.62  
##                                               Max.   :101.09  
##                                               NA's   :1       
##     metar           snowdepth     
##  Length:1398        Mode:logical  
##  Class :character   NA's:1398     
##  Mode  :character                 
##                                   
##                                   
##                                   
## 
str(buenos_aires)
## tibble [1,398 × 30] (S3: tbl_df/tbl/data.frame)
##  $ station          : chr [1:1398] "SAEZ" "SAEZ" "SAEZ" "SAEZ" ...
##  $ valid            : POSIXct[1:1398], format: "2026-01-01 00:00:00" "2026-01-01 01:00:00" ...
##  $ tmpf             : num [1:1398] 84.2 86 84.2 80.6 75.2 71.6 71.6 71.6 68 66.2 ...
##  $ dwpf             : num [1:1398] 62.6 59 64.4 59 60.8 59 57.2 60.8 60.8 53.6 ...
##  $ relh             : num [1:1398] 48.4 40.2 51.5 47.9 61 ...
##  $ drct             : num [1:1398] 330 310 180 200 210 150 190 180 170 150 ...
##  $ sknt             : num [1:1398] 5 4 11 13 11 10 5 10 11 6 ...
##  $ p01i             : num [1:1398] 0 0 0 0 0 0 0 0 0 0 ...
##  $ alti             : num [1:1398] 29.7 29.7 29.7 29.8 29.8 ...
##  $ mslp             : logi [1:1398] NA NA NA NA NA NA ...
##  $ vsby             : num [1:1398] 6.21 6.21 6.21 6.21 3.11 4.35 6.21 6.21 6.21 6.21 ...
##  $ gust             : num [1:1398] NA NA NA 29 NA NA NA 20 NA NA ...
##  $ skyc1            : chr [1:1398] NA "FEW" "FEW" "FEW" ...
##  $ skyc2            : chr [1:1398] NA "FEW" "FEW" "BKN" ...
##  $ skyc3            : chr [1:1398] NA "BKN" "BKN" NA ...
##  $ skyc4            : chr [1:1398] NA NA NA NA ...
##  $ skyl1            : num [1:1398] NA 300 300 5000 5000 700 NA NA NA NA ...
##  $ skyl2            : num [1:1398] NA 5000 5000 6000 6000 5000 NA NA NA NA ...
##  $ skyl3            : num [1:1398] NA 6000 6000 NA NA 3000 NA NA NA NA ...
##  $ skyl4            : num [1:1398] NA NA NA NA NA 6000 NA NA NA NA ...
##  $ wxcodes          : chr [1:1398] NA NA NA NA ...
##  $ ice_accretion_1hr: logi [1:1398] NA NA NA NA NA NA ...
##  $ ice_accretion_3hr: logi [1:1398] NA NA NA NA NA NA ...
##  $ ice_accretion_6hr: logi [1:1398] NA NA NA NA NA NA ...
##  $ peak_wind_gust   : logi [1:1398] NA NA NA NA NA NA ...
##  $ peak_wind_drct   : logi [1:1398] NA NA NA NA NA NA ...
##  $ peak_wind_time   : logi [1:1398] NA NA NA NA NA NA ...
##  $ feel             : num [1:1398] 85 85.5 85.7 81.1 75.2 ...
##  $ metar            : chr [1:1398] "SAEZ 010000Z 33005KT CAVOK 29/17 Q1005 NOSIG" "SAEZ 010100Z 31004KT 9999 FEW003 FEW050CB BKN060 30/15 Q1006 NOSIG" "SAEZ 010139Z 18011KT 150V210 9999 FEW003 FEW050CB BKN060 29/18 Q1007 TEMPO 5000 TSRA FEW050CB" "SAEZ 010200Z 20013G29KT 9999 FEW050CB BKN060 27/15 Q1009 TEMPO 5000 TSRA FEW050CB" ...
##  $ snowdepth        : logi [1:1398] NA NA NA NA NA NA ...
# Filtrar información del último mes
buenos_aires_ene_26 <- subset(buenos_aires, 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 Enero en Buenos Aires en °C.
  
ggplot(buenos_aires_ene_26, aes(x = valid, y = tmpf)) +
  geom_col(fill = "cyan") +
  geom_point(color = "blue") +
  labs(title = "Temperatura Promedio Diaria en Buenos Aires (Enero 2026)",
       x = "Día",
       y = "Temperaura (F)")

LS0tDQp0aXRsZTogIkFTT1MiDQphdXRob3I6ICJPc2NhciBSZXRlcyAtIEEwMTM4MzY1MyINCmRhdGU6ICIyNi0wMi0yMDI2Ig0Kb3V0cHV0OiANCiAgaHRtbF9kb2N1bWVudDoNCiAgICB0b2M6IFRSVUUNCiAgICB0b2NfZmxvYXQ6IFRSVUUNCiAgICBjb2RlX2Rvd25sb2FkOiBUUlVFDQogICAgdGhlbWU6IGRhcmtseQ0KLS0tDQoNCiFbXShDOlxcVXNlcnNcXG1lXFxEZXNrdG9wXFxDb25jZW50cmFjaW9uXFxSXFxpbWFnZXMuamZpZikNCg0KIyA8c3BhbiBzdHlsZT0iY29sb3I6IHllbGxvdzsiPkludHJvZHVjY2nDs248L3NwYW4+DQpJbmZvcm1hY2nDs24gb2J0ZW5pZGEgZGVsICpBdXRvbWF0ZWQgU3VyZmFjZSBPYnNlcnZpbmcgU3lzdGVtIChBU09TKSogZGUgbG9zIGFlcm9wdWVydG9zIGRlIHRvZG8gZWwgbXVuZG8uDQoNCiMgPHNwYW4gc3R5bGU9ImNvbG9yOiB5ZWxsb3c7Ij5JbnN0YWxhciBwYXF1ZXRlcyB5IGxsYW1hciBsaWJyZXLDrWFzPC9zcGFuPg0KYGBge3J9DQojIGluc3RhbGwucGFja2FnZXMoInJpZW0iKQ0KbGlicmFyeShyaWVtKQ0KIyBpbnN0YWxsLnBhY2thZ2VzKCJ0aWR5dmVyc2UiKQ0KbGlicmFyeSh0aWR5dmVyc2UpDQojIGluc3RhbGwucGFja2FnZXMoImdncGxvdDIiKQ0KbGlicmFyeShnZ3Bsb3QyKQ0KIyBpbnN0YWxsLnBhY2thZ2VzKCJsdWJyaWRhdGUiKQ0KbGlicmFyeShsdWJyaWRhdGUpDQoNCiMgU291cmNlIC0gaHR0cHM6Ly9zdGFja292ZXJmbG93LmNvbS9hLzU5Nzk3NjE5DQojIFBvc3RlZCBieSBSb25hayBTaGFoDQojIFJldHJpZXZlZCAyMDI2LTAyLTI2LCBMaWNlbnNlIC0gQ0MgQlktU0EgNC4wDQoNCmxpYnJhcnkoZHBseXIpDQoNCmBgYA0KDQojIDxzcGFuIHN0eWxlPSJjb2xvcjogeWVsbG93OyI+T2J0ZW5lciB5IGdyYWZpY2FyIGxhIGluZm9ybWFjacOzbjwvc3Bhbj4NCmBgYHtyfQ0KIyBQQVNPIDEuIEJ1c2NhciBsYSByZWQgKHBhw61zKSAtIEVqZW1wbG86IE3DqXhpY28sIHkgY29waWFyIENPREUNCnZpZXcocmllbV9uZXR3b3JrcygpKQ0KDQojIFBBU08gMi4gQnVzY2FyIGxhIGVzdGFjacOzbiAoY2l1ZGFkKSAtIEVqZW1wbG86IE1vbnRlcnJleSwgeSBjb3BpYXIgSUQNCnZpZXcocmllbV9zdGF0aW9ucygiQVJfX0FTT1MiKSkNCg0KIyBQQVNPIDMuIE9idGVuZXIgaW5mb3JtYWNpw7NuIGRlIGxhIGVzdGFjacOzbg0KYnVlbm9zX2FpcmVzIDwtIHJpZW1fbWVhc3VyZXMoIlNBRVoiLCBkYXRlX3N0YXJ0ID0gIjIwMjYtMDEtMDEiKQ0KDQojIEFuw6FsaXNpcyBEZXNjcmlwdGl2bw0Kc3VtbWFyeShidWVub3NfYWlyZXMpDQpzdHIoYnVlbm9zX2FpcmVzKQ0KDQojIEZpbHRyYXIgaW5mb3JtYWNpw7NuIGRlbCDDumx0aW1vIG1lcw0KYnVlbm9zX2FpcmVzX2VuZV8yNiA8LSBzdWJzZXQoYnVlbm9zX2FpcmVzLCB2YWxpZCA+PSBhcy5QT1NJWGN0KCIyMDI2LTAxLTAxIDAwOjAwIikgJiB2YWxpZCA8PSBhcy5QT1NJWGN0KCIyMDI2LTAxLTMxIDIzOjU5IikpDQoNCiMgRWplcmNpY2lvIDE6IFJlYWxpemFyIHVuYSBncsOhZmljYSBkZSBiYXJyYXMgZGUgbGEgdGVtcGVyYXR1cmEgcHJvbWVkaW8gZGlhcmlvIGVuIEVuZXJvIGVuIEJ1ZW5vcyBBaXJlcyBlbiDCsEMuDQogIA0KZ2dwbG90KGJ1ZW5vc19haXJlc19lbmVfMjYsIGFlcyh4ID0gdmFsaWQsIHkgPSB0bXBmKSkgKw0KICBnZW9tX2NvbChmaWxsID0gImN5YW4iKSArDQogIGdlb21fcG9pbnQoY29sb3IgPSAiYmx1ZSIpICsNCiAgbGFicyh0aXRsZSA9ICJUZW1wZXJhdHVyYSBQcm9tZWRpbyBEaWFyaWEgZW4gQnVlbm9zIEFpcmVzIChFbmVybyAyMDI2KSIsDQogICAgICAgeCA9ICJEw61hIiwNCiAgICAgICB5ID0gIlRlbXBlcmF1cmEgKEYpIikNCg0KYGBg