# 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)
# 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-12-01", date_end = "2025-12-31")
# Análisis Descriptivo
summary(monterrey)
## station valid tmpf
## Length:747 Min. :2025-12-01 00:40:00 Min. :44.60
## Class :character 1st Qu.:2025-12-08 18:10:30 1st Qu.:55.40
## Mode :character Median :2025-12-16 07:41:00 Median :60.80
## Mean :2025-12-16 05:01:45 Mean :62.97
## 3rd Qu.:2025-12-23 15:10:00 3rd Qu.:69.80
## Max. :2025-12-30 23:40:00 Max. :91.40
##
## dwpf relh drct sknt p01i
## Min. :17.60 Min. : 13.84 Min. : 0.0 Min. : 0.000 Min. :0
## 1st Qu.:46.40 1st Qu.: 54.37 1st Qu.: 60.0 1st Qu.: 2.000 1st Qu.:0
## Median :51.80 Median : 73.30 Median :130.0 Median : 5.000 Median :0
## Mean :51.14 Mean : 70.00 Mean :165.7 Mean : 5.009 Mean :0
## 3rd Qu.:59.00 3rd Qu.: 88.23 3rd Qu.:290.0 3rd Qu.: 7.000 3rd Qu.:0
## Max. :66.20 Max. :100.00 Max. :360.0 Max. :25.000 Max. :0
## NA's :2
## alti mslp vsby gust
## Min. :29.84 Min. :1009 Min. : 0.250 Min. :13.00
## 1st Qu.:30.00 1st Qu.:1016 1st Qu.: 5.000 1st Qu.:18.25
## Median :30.09 Median :1019 Median : 8.000 Median :23.00
## Mean :30.12 Mean :1020 Mean : 7.596 Mean :23.46
## 3rd Qu.:30.21 3rd Qu.:1023 3rd Qu.:10.000 3rd Qu.:26.00
## Max. :30.59 Max. :1036 Max. :15.000 Max. :48.00
## NA's :507 NA's :701
## skyc1 skyc2 skyc3 skyc4
## Length:747 Length:747 Length:747 Mode:logical
## Class :character Class :character Class :character NA's:747
## Mode :character Mode :character Mode :character
##
##
##
##
## skyl1 skyl2 skyl3 skyl4
## Min. : 100 Min. : 500 Min. : 1600 Mode:logical
## 1st Qu.: 1000 1st Qu.: 1200 1st Qu.:20000 NA's:747
## Median : 2000 Median : 3500 Median :20000
## Mean : 3499 Mean : 5225 Mean :17815
## 3rd Qu.: 3000 3rd Qu.: 7000 3rd Qu.:20000
## Max. :20000 Max. :20000 Max. :20000
## NA's :288 NA's :512 NA's :734
## wxcodes ice_accretion_1hr ice_accretion_3hr ice_accretion_6hr
## Length:747 Mode:logical Mode:logical Mode:logical
## Class :character NA's:747 NA's:747 NA's:747
## Mode :character
##
##
##
##
## peak_wind_gust peak_wind_drct peak_wind_time feel
## Mode:logical Mode:logical Mode:logical Min. :40.71
## NA's:747 NA's:747 NA's:747 1st Qu.:55.40
## Median :60.80
## Mean :62.72
## 3rd Qu.:69.80
## Max. :87.17
##
## metar snowdepth
## Length:747 Mode:logical
## Class :character NA's:747
## Mode :character
##
##
##
##
str(monterrey)
## tibble [747 × 30] (S3: tbl_df/tbl/data.frame)
## $ station : chr [1:747] "MMMY" "MMMY" "MMMY" "MMMY" ...
## $ valid : POSIXct[1:747], format: "2025-12-01 00:40:00" "2025-12-01 01:40:00" ...
## $ tmpf : num [1:747] 53.6 53.6 53.6 53.6 51.8 51.8 50 50 48.2 48.2 ...
## $ dwpf : num [1:747] 51.8 51.8 51.8 51.8 50 50 50 50 48.2 46.4 ...
## $ relh : num [1:747] 93.6 93.6 93.6 93.6 93.5 ...
## $ drct : num [1:747] 340 280 240 240 280 270 270 260 290 290 ...
## $ sknt : num [1:747] 3 5 5 6 8 6 6 4 6 6 ...
## $ p01i : num [1:747] 0 0 0 0 0 0 0 0 0 0 ...
## $ alti : num [1:747] 30.2 30.2 30.2 30.2 30.2 ...
## $ mslp : num [1:747] NA NA 1024 NA NA ...
## $ vsby : num [1:747] 2 3 3 3 3 3 3 3 3 2 ...
## $ gust : num [1:747] NA NA NA NA NA NA NA NA NA NA ...
## $ skyc1 : chr [1:747] "BKN" "BKN" "OVC" "BKN" ...
## $ skyc2 : chr [1:747] "OVC" "OVC" NA "OVC" ...
## $ skyc3 : chr [1:747] NA NA NA NA ...
## $ skyc4 : logi [1:747] NA NA NA NA NA NA ...
## $ skyl1 : num [1:747] 800 800 1000 500 500 500 500 500 500 500 ...
## $ skyl2 : num [1:747] 1200 1200 NA 800 800 800 800 800 800 800 ...
## $ skyl3 : num [1:747] NA NA NA NA NA NA NA NA NA NA ...
## $ skyl4 : logi [1:747] NA NA NA NA NA NA ...
## $ wxcodes : chr [1:747] "DZ BR" "-DZ BR" "-DZ BR" "-DZ BR" ...
## $ ice_accretion_1hr: logi [1:747] NA NA NA NA NA NA ...
## $ ice_accretion_3hr: logi [1:747] NA NA NA NA NA NA ...
## $ ice_accretion_6hr: logi [1:747] NA NA NA NA NA NA ...
## $ peak_wind_gust : logi [1:747] NA NA NA NA NA NA ...
## $ peak_wind_drct : logi [1:747] NA NA NA NA NA NA ...
## $ peak_wind_time : logi [1:747] NA NA NA NA NA NA ...
## $ feel : num [1:747] 53.6 53.6 53.6 53.6 51.8 ...
## $ metar : chr [1:747] "MMMY 010040Z 34003KT 2SM DZ BR BKN008 OVC012 12/11 A3017 RMK 60025 8/7//" "MMMY 010140Z 28005KT 3SM -DZ BR BKN008 OVC012 12/11 A3020 RMK 60015 8/7//" "MMMY 010240Z 24005KT 3SM -DZ BR OVC010 12/11 A3022 RMK SLP235 52019 942 60005 8/7// DZ INTMT" "MMMY 010342Z 24006KT 3SM -DZ BR BKN005 OVC008 12/11 A3022 RMK 60005 8/6// -DZ INTMT" ...
## $ snowdepth : logi [1:747] NA NA NA NA NA NA ...
nrow(monterrey)
## [1] 747
# Filtrar información del último mes
mty_dic_25 <- subset(monterrey, valid >= as.POSIXct("2025-12-01 00:00") &
valid <= as.POSIXct("2025-12-31 23:59"))
view(mty_dic_25)
# Ejercicio 1: Realizar una gráfica de barras de la temperatura promedio diario en agosto en Monterrey en °C.
temp_diaria <- monterrey %>%
mutate(
fecha = as.Date(valid),
temp_c = (tmpf - 32) * 5/9
) %>%
group_by(fecha) %>%
summarise(temp_prom_c = mean(temp_c, na.rm = TRUE), .groups = "drop")
ggplot(temp_diaria, aes(x = fecha, y = temp_prom_c)) +
geom_col() +
labs(
title = "Temperatura promedio diaria en Monterrey (Diciembre 2025)",
x = "Día",
y = "Temperatura promedio (°C)"
) +
theme(axis.text.x = element_text(angle = 45, hjust = 1))