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 = "2026-01-01")
# Análisis Descriptivo
summary(monterrey)
## station valid tmpf
## Length:1374 Min. :2026-01-01 00:40:00 Min. :28.40
## Class :character 1st Qu.:2026-01-15 03:56:00 1st Qu.:55.40
## Mode :character Median :2026-01-28 14:10:30 Median :62.60
## Mean :2026-01-28 21:43:45 Mean :62.37
## 3rd Qu.:2026-02-11 19:03:15 3rd Qu.:69.80
## Max. :2026-02-25 23:40:00 Max. :98.60
##
## dwpf relh drct sknt p01i
## Min. :12.2 Min. : 9.76 Min. : 0.0 Min. : 0.000 Min. :0
## 1st Qu.:33.8 1st Qu.: 37.05 1st Qu.: 70.0 1st Qu.: 3.000 1st Qu.:0
## Median :46.4 Median : 56.42 Median :130.0 Median : 5.000 Median :0
## Mean :44.0 Mean : 56.37 Mean :158.2 Mean : 5.389 Mean :0
## 3rd Qu.:55.4 3rd Qu.: 75.84 3rd Qu.:290.0 3rd Qu.: 7.000 3rd Qu.:0
## Max. :64.4 Max. :100.00 Max. :360.0 Max. :23.000 Max. :0
## NA's :1
## alti mslp vsby gust
## Min. :29.62 Min. :1002 Min. : 0.120 Min. :12.00
## 1st Qu.:29.98 1st Qu.:1015 1st Qu.: 6.000 1st Qu.:18.00
## Median :30.14 Median :1021 Median :10.000 Median :22.00
## Mean :30.14 Mean :1021 Mean : 8.777 Mean :22.35
## 3rd Qu.:30.31 3rd Qu.:1027 3rd Qu.:10.000 3rd Qu.:25.00
## Max. :30.69 Max. :1040 Max. :15.000 Max. :42.00
## NA's :926 NA's :1290
## skyc1 skyc2 skyc3 skyc4
## Length:1374 Length:1374 Length:1374 Mode:logical
## Class :character Class :character Class :character NA's:1374
## Mode :character Mode :character Mode :character
##
##
##
##
## skyl1 skyl2 skyl3 skyl4
## Min. : 200 Min. : 500 Min. : 4000 Mode:logical
## 1st Qu.: 2000 1st Qu.: 2000 1st Qu.:20000 NA's:1374
## Median : 7000 Median : 7000 Median :20000
## Mean : 8290 Mean : 9608 Mean :17333
## 3rd Qu.:20000 3rd Qu.:20000 3rd Qu.:20000
## Max. :20000 Max. :20000 Max. :20000
## NA's :585 NA's :1091 NA's :1362
## wxcodes ice_accretion_1hr ice_accretion_3hr ice_accretion_6hr
## Length:1374 Mode:logical Mode:logical Mode:logical
## Class :character NA's:1374 NA's:1374 NA's:1374
## Mode :character
##
##
##
##
## peak_wind_gust peak_wind_drct peak_wind_time feel
## Mode:logical Mode:logical Mode:logical Min. :27.99
## NA's:1374 NA's:1374 NA's:1374 1st Qu.:55.40
## Median :62.60
## Mean :61.69
## 3rd Qu.:69.80
## Max. :94.14
##
## metar snowdepth
## Length:1374 Mode:logical
## Class :character NA's:1374
## Mode :character
##
##
##
##
str(monterrey)
## tibble [1,374 × 30] (S3: tbl_df/tbl/data.frame)
## $ station : chr [1:1374] "MMMY" "MMMY" "MMMY" "MMMY" ...
## $ valid : POSIXct[1:1374], format: "2026-01-01 00:40:00" "2026-01-01 01:40:00" ...
## $ tmpf : num [1:1374] 57.2 55.4 53.6 51.8 51.8 50 46.4 42.8 44.6 44.6 ...
## $ dwpf : num [1:1374] 37.4 35.6 35.6 35.6 33.8 33.8 33.8 33.8 33.8 33.8 ...
## $ relh : num [1:1374] 47.4 47.1 50.4 53.8 50.1 ...
## $ drct : num [1:1374] 80 0 120 60 70 70 0 0 340 300 ...
## $ sknt : num [1:1374] 4 0 3 4 3 5 0 0 3 6 ...
## $ p01i : num [1:1374] 0 0 0 0 0 0 0 0 0 0 ...
## $ alti : num [1:1374] 30.2 30.2 30.2 30.2 30.2 ...
## $ mslp : num [1:1374] NA NA 1024 NA NA ...
## $ vsby : num [1:1374] 10 10 10 10 10 10 10 10 10 10 ...
## $ gust : num [1:1374] NA NA NA NA NA NA NA NA NA NA ...
## $ skyc1 : chr [1:1374] "CLR" "CLR" "CLR" "CLR" ...
## $ skyc2 : chr [1:1374] NA NA NA NA ...
## $ skyc3 : chr [1:1374] NA NA NA NA ...
## $ skyc4 : logi [1:1374] NA NA NA NA NA NA ...
## $ skyl1 : num [1:1374] NA NA NA NA NA NA NA NA NA NA ...
## $ skyl2 : num [1:1374] NA NA NA NA NA NA NA NA NA NA ...
## $ skyl3 : num [1:1374] NA NA NA NA NA NA NA NA NA NA ...
## $ skyl4 : logi [1:1374] NA NA NA NA NA NA ...
## $ wxcodes : chr [1:1374] NA NA NA NA ...
## $ ice_accretion_1hr: logi [1:1374] NA NA NA NA NA NA ...
## $ ice_accretion_3hr: logi [1:1374] NA NA NA NA NA NA ...
## $ ice_accretion_6hr: logi [1:1374] NA NA NA NA NA NA ...
## $ peak_wind_gust : logi [1:1374] NA NA NA NA NA NA ...
## $ peak_wind_drct : logi [1:1374] NA NA NA NA NA NA ...
## $ peak_wind_time : logi [1:1374] NA NA NA NA NA NA ...
## $ feel : num [1:1374] 57.2 55.4 53.6 51.8 51.8 ...
## $ metar : chr [1:1374] "MMMY 010040Z 08004KT 10SM SKC 14/03 A3022 RMK ISOL CI" "MMMY 010140Z 00000KT 10SM SKC 13/02 A3022" "MMMY 010240Z 12003KT 10SM SKC 12/02 A3022 RMK SLP245 52004 993" "MMMY 010340Z 06004KT 10SM SKC 11/02 A3022" ...
## $ snowdepth : logi [1:1374] NA NA NA NA NA NA ...
#View(monterrey)
# Filtrar información del último mes
mty_ene_26 <- subset(monterrey, valid >= as.POSIXct("2026-01-01 00:40:00") & valid <= as.POSIXct("2026-02-01 23:41:00"))
head(mty_ene_26)
## # A tibble: 6 × 30
## station valid tmpf dwpf relh drct sknt p01i alti mslp
## <chr> <dttm> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl>
## 1 MMMY 2026-01-01 06:43:00 46.4 33.8 61.3 0 0 0 30.2 NA
## 2 MMMY 2026-01-01 07:52:00 42.8 33.8 70.3 0 0 0 30.2 NA
## 3 MMMY 2026-01-01 08:44:00 44.6 33.8 65.6 340 3 0 30.2 1022.
## 4 MMMY 2026-01-01 09:40:00 44.6 33.8 65.6 300 6 0 30.2 NA
## 5 MMMY 2026-01-01 10:40:00 42.8 33.8 70.3 280 8 0 30.2 NA
## 6 MMMY 2026-01-01 11:43:00 42.8 33.8 70.3 280 9 0 30.2 1022.
## # ℹ 20 more variables: vsby <dbl>, gust <dbl>, skyc1 <chr>, skyc2 <chr>,
## # skyc3 <chr>, skyc4 <lgl>, skyl1 <dbl>, skyl2 <dbl>, skyl3 <dbl>,
## # skyl4 <lgl>, wxcodes <chr>, ice_accretion_1hr <lgl>,
## # ice_accretion_3hr <lgl>, ice_accretion_6hr <lgl>, peak_wind_gust <lgl>,
## # peak_wind_drct <lgl>, peak_wind_time <lgl>, feel <dbl>, metar <chr>,
## # snowdepth <lgl>
# Ejercicio 1: Realizar una gráfica de barras de la temperatura promedio diario en agosto en Monterrey en °C.
#Promediar temperatura por día
library(dplyr)
temp_prom_diaria <- mty_ene_26 %>%
mutate(fecha = as.Date(valid)) %>%
group_by(fecha) %>%
summarise(tmpf = mean(tmpf, na.rm = TRUE))
#Transformar temperatura a grados Celsius
temp_prom_diaria <- temp_prom_diaria %>%
mutate(tmpc = (tmpf - 32) * 5/9)
head(temp_prom_diaria)
## # A tibble: 6 × 3
## fecha tmpf tmpc
## <date> <dbl> <dbl>
## 1 2026-01-01 59.3 15.2
## 2 2026-01-02 69.5 20.8
## 3 2026-01-03 72.9 22.7
## 4 2026-01-04 66.0 18.9
## 5 2026-01-05 68 20
## 6 2026-01-06 68.6 20.3
#Gráfico
ggplot(data = temp_prom_diaria, aes(fecha, tmpc)) + geom_col() +
labs(title = "Temperatura promedio diaria en Monterrey (enero 2026)", x = "Fecha",y = "Temperatura promedio (°C)")