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