Información obtenida del Automated Surface Observing System (ASOS) de los aeropuertos de todo el mundo.
#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)
# 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-11-01")
# Análisis Descriptivo
summary(monterrey)
## station valid tmpf
## Length:2875 Min. :2025-11-01 00:41:00 Min. :28.40
## Class :character 1st Qu.:2025-11-30 13:10:00 1st Qu.:57.20
## Mode :character Median :2025-12-29 13:12:00 Median :64.40
## Mean :2025-12-29 14:17:30 Mean :64.18
## 3rd Qu.:2026-01-27 06:10:00 3rd Qu.:71.60
## Max. :2026-02-25 23:40:00 Max. :98.60
##
## dwpf relh drct sknt p01i
## Min. :12.20 Min. : 7.26 Min. : 0.0 Min. : 0.000 Min. :0
## 1st Qu.:39.20 1st Qu.: 43.30 1st Qu.: 60.0 1st Qu.: 3.000 1st Qu.:0
## Median :51.80 Median : 64.96 Median :120.0 Median : 5.000 Median :0
## Mean :48.91 Mean : 62.94 Mean :152.3 Mean : 5.051 Mean :0
## 3rd Qu.:59.00 3rd Qu.: 82.63 3rd Qu.:290.0 3rd Qu.: 7.000 3rd Qu.:0
## Max. :69.80 Max. :100.00 Max. :360.0 Max. :25.000 Max. :0
## NA's :3
## alti mslp vsby gust
## Min. :29.62 Min. :1002 Min. : 0.12 Min. :12.00
## 1st Qu.:29.98 1st Qu.:1015 1st Qu.: 6.00 1st Qu.:18.00
## Median :30.11 Median :1019 Median : 8.00 Median :23.00
## Mean :30.13 Mean :1020 Mean : 8.30 Mean :23.01
## 3rd Qu.:30.25 3rd Qu.:1024 3rd Qu.:10.00 3rd Qu.:26.00
## Max. :30.69 Max. :1101 Max. :15.00 Max. :48.00
## NA's :1939 NA's :2720
## skyc1 skyc2 skyc3 skyc4
## Length:2875 Length:2875 Length:2875 Mode:logical
## Class :character Class :character Class :character NA's:2875
## Mode :character Mode :character Mode :character
##
##
##
##
## skyl1 skyl2 skyl3 skyl4
## Min. : 100 Min. : 500 Min. : 1600 Mode:logical
## 1st Qu.: 1500 1st Qu.: 1500 1st Qu.:20000 NA's:2875
## Median : 3000 Median : 4500 Median :20000
## Mean : 5878 Mean : 6978 Mean :17215
## 3rd Qu.: 8000 3rd Qu.: 8000 3rd Qu.:20000
## Max. :20000 Max. :20000 Max. :20000
## NA's :1255 NA's :2214 NA's :2849
## wxcodes ice_accretion_1hr ice_accretion_3hr ice_accretion_6hr
## Length:2875 Mode:logical Mode:logical Mode:logical
## Class :character NA's:2875 NA's:2875 NA's:2875
## Mode :character
##
##
##
##
## peak_wind_gust peak_wind_drct peak_wind_time feel
## Mode:logical Mode:logical Mode:logical Min. :27.99
## NA's:2875 NA's:2875 NA's:2875 1st Qu.:57.20
## Median :64.40
## Mean :63.78
## 3rd Qu.:71.60
## Max. :94.14
##
## metar snowdepth
## Length:2875 Mode:logical
## Class :character NA's:2875
## Mode :character
##
##
##
##
str(monterrey)
## tibble [2,875 × 30] (S3: tbl_df/tbl/data.frame)
## $ station : chr [1:2875] "MMMY" "MMMY" "MMMY" "MMMY" ...
## $ valid : POSIXct[1:2875], format: "2025-11-01 00:41:00" "2025-11-01 01:40:00" ...
## $ tmpf : num [1:2875] 66.2 64.4 62.6 60.8 59 57.2 57.2 57.2 59 57.2 ...
## $ dwpf : num [1:2875] 50 50 50 50 51.8 51.8 53.6 53.6 53.6 55.4 ...
## $ relh : num [1:2875] 55.9 59.5 63.4 67.5 77 ...
## $ drct : num [1:2875] 100 120 0 100 90 0 0 0 0 0 ...
## $ sknt : num [1:2875] 5 5 0 4 3 0 0 0 0 0 ...
## $ p01i : num [1:2875] 0 0 0 0 0 0 0 0 0 0 ...
## $ alti : num [1:2875] 30 30 30 30 30 ...
## $ mslp : num [1:2875] NA NA 1017 NA NA ...
## $ vsby : num [1:2875] 12 10 10 10 10 10 10 10 10 10 ...
## $ gust : num [1:2875] NA NA NA NA NA NA NA NA NA NA ...
## $ skyc1 : chr [1:2875] "CLR" "CLR" "CLR" "CLR" ...
## $ skyc2 : chr [1:2875] NA NA NA NA ...
## $ skyc3 : chr [1:2875] NA NA NA NA ...
## $ skyc4 : logi [1:2875] NA NA NA NA NA NA ...
## $ skyl1 : num [1:2875] NA NA NA NA NA NA 3000 3000 3000 3000 ...
## $ skyl2 : num [1:2875] NA NA NA NA NA NA 7000 NA NA NA ...
## $ skyl3 : num [1:2875] NA NA NA NA NA NA NA NA NA NA ...
## $ skyl4 : logi [1:2875] NA NA NA NA NA NA ...
## $ wxcodes : chr [1:2875] NA NA NA NA ...
## $ ice_accretion_1hr: logi [1:2875] NA NA NA NA NA NA ...
## $ ice_accretion_3hr: logi [1:2875] NA NA NA NA NA NA ...
## $ ice_accretion_6hr: logi [1:2875] NA NA NA NA NA NA ...
## $ peak_wind_gust : logi [1:2875] NA NA NA NA NA NA ...
## $ peak_wind_drct : logi [1:2875] NA NA NA NA NA NA ...
## $ peak_wind_time : logi [1:2875] NA NA NA NA NA NA ...
## $ feel : num [1:2875] 66.2 64.4 62.6 60.8 59 57.2 57.2 57.2 59 57.2 ...
## $ metar : chr [1:2875] "MMMY 010041Z 10005KT 12SM SKC 19/10 A3003" "MMMY 010140Z 12005KT 10SM SKC 18/10 A3004" "MMMY 010240Z 00000KT 10SM SKC 17/10 A3004 RMK SLP171 52004 976" "MMMY 010340Z 10004KT 10SM SKC 16/10 A3003" ...
## $ snowdepth : logi [1:2875] NA NA NA NA NA NA ...
# Filtrar información del último mes
mty_nov_25 <- subset(monterrey, valid >= as.POSIXct("2025-11-01 00:00") & valid <= as.POSIXct("2025-11-30 23:59"))
# Ejercicio 1: Realizar una gráfica de barras de la temperatura promedio diario en agosto en Monterrey en °C.
monterrey2 <- riem_measures("MMMY", date_start = "2025-08-01")
mty_aug_25 <- subset(monterrey2, valid >= as.POSIXct("2025-08-01 00:00") & valid <= as.POSIXct("2025-09-01 00:00"))
mty_aug_25$dia <- as.Date(mty_aug_25$valid)
mty_aug_25$tmpc <- (mty_aug_25$tmpf - 32) * 5/9
promedio_diario <- aggregate(
tmpc ~ dia,
data = mty_aug_25,
FUN = mean,
na.rm = TRUE
)
ggplot(promedio_diario, aes(x = dia, y = tmpc)) +
geom_col(fill = "cyan") +
geom_point(color = "blue") +
labs(
title = "Temperatura Promedio Diaria en Agosto 2025",
subtitle = "Monterrey, México",
x = "Día",
y = "Temperatura Promedio (°C)"
) +
theme_minimal()