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  
monterrey <- riem_measures("MMMY", date_start = "2024-01-01")

# Análisis Descriptivo
summary(monterrey)
##    station              valid                          tmpf       
##  Length:19549       Min.   :2024-01-01 00:40:00   Min.   : 24.80  
##  Class :character   1st Qu.:2024-07-14 05:40:00   1st Qu.: 64.40  
##  Mode  :character   Median :2025-01-26 14:40:00   Median : 75.20  
##                     Mean   :2025-01-27 09:51:56   Mean   : 73.16  
##                     3rd Qu.:2025-08-12 00:40:00   3rd Qu.: 82.40  
##                     Max.   :2026-02-25 23:40:00   Max.   :111.20  
##                                                   NA's   :2       
##       dwpf            relh             drct            sknt             p01i  
##  Min.   :-0.40   Min.   :  3.92   Min.   :  0.0   Min.   : 0.000   Min.   :0  
##  1st Qu.:51.80   1st Qu.: 49.21   1st Qu.: 70.0   1st Qu.: 3.000   1st Qu.:0  
##  Median :62.60   Median : 69.77   Median :110.0   Median : 6.000   Median :0  
##  Mean   :59.04   Mean   : 66.60   Mean   :130.1   Mean   : 5.754   Mean   :0  
##  3rd Qu.:69.80   3rd Qu.: 88.00   3rd Qu.:160.0   3rd Qu.: 8.000   3rd Qu.:0  
##  Max.   :84.20   Max.   :100.00   Max.   :360.0   Max.   :33.000   Max.   :0  
##  NA's   :2       NA's   :2        NA's   :4                                   
##       alti            mslp             vsby             gust      
##  Min.   :29.44   Min.   : 929.8   Min.   : 0.000   Min.   :12.00  
##  1st Qu.:29.90   1st Qu.:1012.1   1st Qu.: 5.000   1st Qu.:18.00  
##  Median :30.00   Median :1015.0   Median : 8.000   Median :21.00  
##  Mean   :30.01   Mean   :1015.9   Mean   : 7.894   Mean   :22.22  
##  3rd Qu.:30.10   3rd Qu.:1018.8   3rd Qu.:10.000   3rd Qu.:25.00  
##  Max.   :30.73   Max.   :1101.0   Max.   :15.000   Max.   :48.00  
##  NA's   :2       NA's   :14445    NA's   :1        NA's   :18700  
##     skyc1              skyc2              skyc3              skyc4          
##  Length:19549       Length:19549       Length:19549       Length:19549      
##  Class :character   Class :character   Class :character   Class :character  
##  Mode  :character   Mode  :character   Mode  :character   Mode  :character  
##                                                                             
##                                                                             
##                                                                             
##                                                                             
##      skyl1           skyl2           skyl3           skyl4      
##  Min.   :    0   Min.   :  400   Min.   : 1000   Min.   : 7000  
##  1st Qu.: 1500   1st Qu.: 1500   1st Qu.: 7000   1st Qu.:16750  
##  Median : 2500   Median : 7000   Median :20000   Median :20000  
##  Mean   : 4869   Mean   : 7778   Mean   :15271   Mean   :16750  
##  3rd Qu.: 7000   3rd Qu.:10000   3rd Qu.:20000   3rd Qu.:20000  
##  Max.   :20000   Max.   :25000   Max.   :20000   Max.   :20000  
##  NA's   :6557    NA's   :13561   NA's   :18872   NA's   :19545  
##    wxcodes          ice_accretion_1hr ice_accretion_3hr ice_accretion_6hr
##  Length:19549       Mode:logical      Mode:logical      Mode:logical     
##  Class :character   NA's:19549        NA's:19549        NA's:19549       
##  Mode  :character                                                        
##                                                                          
##                                                                          
##                                                                          
##                                                                          
##  peak_wind_gust peak_wind_drct peak_wind_time      feel       
##  Mode:logical   Mode:logical   Mode:logical   Min.   : 15.36  
##  NA's:19549     NA's:19549     NA's:19549     1st Qu.: 64.40  
##                                               Median : 75.20  
##                                               Mean   : 73.95  
##                                               3rd Qu.: 84.58  
##                                               Max.   :117.24  
##                                               NA's   :2       
##     metar           snowdepth     
##  Length:19549       Mode:logical  
##  Class :character   NA's:19549    
##  Mode  :character                 
##                                   
##                                   
##                                   
## 
str(monterrey)
## tibble [19,549 × 30] (S3: tbl_df/tbl/data.frame)
##  $ station          : chr [1:19549] "MMMY" "MMMY" "MMMY" "MMMY" ...
##  $ valid            : POSIXct[1:19549], format: "2024-01-01 00:40:00" "2024-01-01 01:40:00" ...
##  $ tmpf             : num [1:19549] 68 66.2 62.6 60.8 59 57.2 55.4 55.4 55.4 53.6 ...
##  $ dwpf             : num [1:19549] 44.6 46.4 50 48.2 50 48.2 46.4 46.4 44.6 44.6 ...
##  $ relh             : num [1:19549] 42.9 48.8 63.4 63.1 72 ...
##  $ drct             : num [1:19549] 120 50 320 290 280 320 290 300 290 270 ...
##  $ sknt             : num [1:19549] 4 4 3 6 6 5 6 8 6 4 ...
##  $ p01i             : num [1:19549] 0 0 0 0 0 0 0 0 0 0 ...
##  $ alti             : num [1:19549] 30 30 30.1 30.1 30.1 ...
##  $ mslp             : num [1:19549] NA NA NA NA NA NA NA NA NA NA ...
##  $ vsby             : num [1:19549] 10 10 10 10 10 10 10 10 10 8 ...
##  $ gust             : num [1:19549] NA NA NA NA NA NA NA NA NA NA ...
##  $ skyc1            : chr [1:19549] "SCT" "FEW" "FEW" "FEW" ...
##  $ skyc2            : chr [1:19549] NA NA NA NA ...
##  $ skyc3            : chr [1:19549] NA NA NA NA ...
##  $ skyc4            : chr [1:19549] NA NA NA NA ...
##  $ skyl1            : num [1:19549] 20000 20000 20000 20000 20000 NA NA NA NA NA ...
##  $ skyl2            : num [1:19549] NA NA NA NA NA NA NA NA NA NA ...
##  $ skyl3            : num [1:19549] NA NA NA NA NA NA NA NA NA NA ...
##  $ skyl4            : num [1:19549] NA NA NA NA NA NA NA NA NA NA ...
##  $ wxcodes          : chr [1:19549] NA NA NA NA ...
##  $ ice_accretion_1hr: logi [1:19549] NA NA NA NA NA NA ...
##  $ ice_accretion_3hr: logi [1:19549] NA NA NA NA NA NA ...
##  $ ice_accretion_6hr: logi [1:19549] NA NA NA NA NA NA ...
##  $ peak_wind_gust   : logi [1:19549] NA NA NA NA NA NA ...
##  $ peak_wind_drct   : logi [1:19549] NA NA NA NA NA NA ...
##  $ peak_wind_time   : logi [1:19549] NA NA NA NA NA NA ...
##  $ feel             : num [1:19549] 68 66.2 62.6 60.8 59 57.2 55.4 55.4 55.4 53.6 ...
##  $ metar            : chr [1:19549] "MMMY 010040Z 12004KT 10SM SCT200 20/07 A3002 RMK 8/008" "MMMY 010140Z 05004KT 10SM FEW200 19/08 A3004 RMK 8/008" "MMMY 010240Z 32003KT 10SM FEW200 17/10 A3005 RMK SLP/// 5//// 9// 8/008" "MMMY 010340Z 29006KT 10SM FEW200 16/09 A3006 RMK 8/008" ...
##  $ snowdepth        : logi [1:19549] NA NA NA NA NA NA ...
# Filtrar información de enero 2024 
mty_ene_24 <- subset(monterrey, valid >= as.POSIXct("2024-01-01 00:00") & valid <= as.POSIXct("2024-01-31 23:59"))

Obtener y graficar la información

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

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

# 2. Calcular promedio diario 
prom <- aggregate(temp_c ~ as.Date(valid), data = mty_ene_24, mean)
colnames(prom) <- c("fecha", "temp_prom")

# 3. Graficar usando los nuevos nombres de columna
barplot(prom$temp_prom,
        names.arg = prom$fecha,
        las = 2,
        col = "yellow",
        main = "Temperatura promedio diaria (°C) - Enero 2024",
        cex.names = 0.6)

LS0tDQp0aXRsZTogIkFTT1MiDQphdXRob3I6ICJKb3NlIE1pZ3VlbCBPcnRpeiAtIEEwMTU2OTExMCINCmRhdGU6ICIyNi0wMi0yMDI2Ig0Kb3V0cHV0OiANCiAgaHRtbF9kb2N1bWVudDoNCiAgICB0b2M6IFRSVUUNCiAgICB0b2NfZmxvYXQ6IFRSVUUNCiAgICBjb2RlX2Rvd25sb2FkOiBUUlVFDQogICAgdGhlbWU6IGRhcmtseQ0KLS0tDQoNCiFbXShodHRwczovL21lZGlhMC5naXBoeS5jb20vbWVkaWEvdjEuWTJsa1BUYzVNR0kzTmpFeE5HTjBkakkxZDI0MVpITTVkM3BvWVhOeVp6bGhkV2gxT0c1cVkyZHVlbkYyYkRaNGJHd3lPQ1psY0QxMk1WOXBiblJsY201aGJGOW5hV1pmWW5sZmFXUW1ZM1E5WncvNFpnTFBha3FUYWpqVkZPVnF3L2dpcGh5LmdpZikNCg0KIyBbSW50cm9kdWNjacOzbl17c3R5bGU9ImNvbG9yOiB5ZWxsb3c7In0NCg0KSW5mb3JtYWNpw7NuIG9idGVuaWRhIGRlbCAqQXV0b21hdGVkIFN1cmZhY2UgT2JzZXJ2aW5nIFN5c3RlbSAoQVNPUykqIGRlIGxvcyBhZXJvcHVlcnRvcyBkZSB0b2RvIGVsIG11bmRvLg0KDQojIFtJbnN0YWxhciBwYXF1ZXRlcyB5IGxsYW1hciBsaWJyZXLDrWFzXXtzdHlsZT0iY29sb3I6IHllbGxvdzsifQ0KDQpgYGB7cn0NCiNpbnN0YWxsLnBhY2thZ2VzKCJyaWVtIikNCmxpYnJhcnkocmllbSkNCiNpbnN0YWxsLnBhY2thZ2VzKCJ0aWR5dmVyc2UiKQ0KbGlicmFyeSh0aWR5dmVyc2UpDQojaW5zdGFsbC5wYWNrYWdlcygiZ2dwbG90MiIpDQpsaWJyYXJ5KGdncGxvdDIpDQojaW5zdGFsbC5wYWNrYWdlcygibHVicmlkYXRlIikNCmxpYnJhcnkobHVicmlkYXRlKQ0KYGBgDQoNCiMgW09idGVuZXIgeSBncmFmaWNhciBsYSBpbmZvcm1hY2nDs25de3N0eWxlPSJjb2xvcjogeWVsbG93OyJ9DQoNCmBgYHtyfQ0KIyBQQVNPIDEuIEJ1c2NhciBsYSByZWQgKHBhw61zKSAtIEVqZW1wbG86IE3DqXhpY28sIHkgY29waWFyIENPREUNCiMgdmlldyhyaWVtX25ldHdvcmtzKCkpIA0KDQojIFBBU08gMi4gQnVzY2FyIGxhIGVzdGFjacOzbiAoY2l1ZGFkKSAtIEVqZW1wbG86IE1vbnRlcnJleSwgeSBjb3BpYXIgSUQNCiMgdmlldyhyaWVtX3N0YXRpb25zKCJNWF9fQVNPUyIpKQ0KDQojIFBBU08gMy4gT2J0ZW5lciBpbmZvcm1hY2nDs24gZGUgbGEgZXN0YWNpw7NuICANCm1vbnRlcnJleSA8LSByaWVtX21lYXN1cmVzKCJNTU1ZIiwgZGF0ZV9zdGFydCA9ICIyMDI0LTAxLTAxIikNCg0KIyBBbsOhbGlzaXMgRGVzY3JpcHRpdm8NCnN1bW1hcnkobW9udGVycmV5KQ0Kc3RyKG1vbnRlcnJleSkNCg0KIyBGaWx0cmFyIGluZm9ybWFjacOzbiBkZSBlbmVybyAyMDI0IA0KbXR5X2VuZV8yNCA8LSBzdWJzZXQobW9udGVycmV5LCB2YWxpZCA+PSBhcy5QT1NJWGN0KCIyMDI0LTAxLTAxIDAwOjAwIikgJiB2YWxpZCA8PSBhcy5QT1NJWGN0KCIyMDI0LTAxLTMxIDIzOjU5IikpDQoNCmBgYA0KDQojIFtPYnRlbmVyIHkgZ3JhZmljYXIgbGEgaW5mb3JtYWNpw7NuXXtzdHlsZT0iY29sb3I6IHllbGxvdzsifQ0KYGBge3J9DQojIEVqZXJjaWNpbyAxOiBSZWFsaXphciB1bmEgZ3LDoWZpY2EgZGUgYmFycmFzIGRlIGxhIHRlbXBlcmF0dXJhIHByb21lZGlvIGRpYXJpbyBlbiBlbmVybyBlbiBNb250ZXJyZXkgZW4gwrBDLg0KDQojIDEuIENvbnZlcnRpciBhIMKwQw0KbXR5X2VuZV8yNCR0ZW1wX2MgPC0gKG10eV9lbmVfMjQkdG1wZiAtIDMyKSAqIDUvOQ0KDQojIDIuIENhbGN1bGFyIHByb21lZGlvIGRpYXJpbyANCnByb20gPC0gYWdncmVnYXRlKHRlbXBfYyB+IGFzLkRhdGUodmFsaWQpLCBkYXRhID0gbXR5X2VuZV8yNCwgbWVhbikNCmNvbG5hbWVzKHByb20pIDwtIGMoImZlY2hhIiwgInRlbXBfcHJvbSIpDQoNCiMgMy4gR3JhZmljYXIgdXNhbmRvIGxvcyBudWV2b3Mgbm9tYnJlcyBkZSBjb2x1bW5hDQpiYXJwbG90KHByb20kdGVtcF9wcm9tLA0KICAgICAgICBuYW1lcy5hcmcgPSBwcm9tJGZlY2hhLA0KICAgICAgICBsYXMgPSAyLA0KICAgICAgICBjb2wgPSAieWVsbG93IiwNCiAgICAgICAgbWFpbiA9ICJUZW1wZXJhdHVyYSBwcm9tZWRpbyBkaWFyaWEgKMKwQykgLSBFbmVybyAyMDI0IiwNCiAgICAgICAgY2V4Lm5hbWVzID0gMC42KQ0KYGBgDQo=