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
TOLUCA <- riem_measures("MMTO", date_start="2025-01-01")
# Análisis Descriptivo
summary(TOLUCA)
## station valid tmpf
## Length:11545 Min. :2025-01-01 00:43:00 Min. :28.40
## Class :character 1st Qu.:2025-04-20 01:41:00 1st Qu.:50.00
## Mode :character Median :2025-08-03 04:45:00 Median :55.40
## Mean :2025-08-02 19:04:05 Mean :56.16
## 3rd Qu.:2025-11-18 13:26:00 3rd Qu.:64.40
## Max. :2026-02-25 23:53:00 Max. :82.40
##
## dwpf relh drct sknt p01i
## Min. :-4.00 Min. : 4.76 Min. : 0.0 Min. : 0.000 Min. :0
## 1st Qu.:37.40 1st Qu.: 49.12 1st Qu.: 0.0 1st Qu.: 0.000 1st Qu.:0
## Median :44.60 Median : 71.45 Median :120.0 Median : 3.000 Median :0
## Mean :42.98 Mean : 67.39 Mean :129.8 Mean : 4.238 Mean :0
## 3rd Qu.:50.00 3rd Qu.: 87.65 3rd Qu.:230.0 3rd Qu.: 6.000 3rd Qu.:0
## Max. :62.60 Max. :100.00 Max. :360.0 Max. :69.000 Max. :0
## NA's :381 NA's :381
## alti mslp vsby gust
## Min. :30.11 Min. : 999.9 Min. : 0.120 Mode:logical
## 1st Qu.:30.35 1st Qu.:1008.9 1st Qu.: 5.000 NA's:11545
## Median :30.40 Median :1011.3 Median : 6.000
## Mean :30.39 Mean :1012.0 Mean : 6.129
## 3rd Qu.:30.44 3rd Qu.:1014.0 3rd Qu.: 8.000
## Max. :30.60 Max. :1107.7 Max. :12.000
## NA's :8201
## skyc1 skyc2 skyc3 skyc4
## Length:11545 Length:11545 Length:11545 Length:11545
## Class :character Class :character Class :character Class :character
## Mode :character Mode :character Mode :character Mode :character
##
##
##
##
## skyl1 skyl2 skyl3 skyl4
## Min. : 100 Min. : 800 Min. : 7000 Min. :20000
## 1st Qu.: 2000 1st Qu.: 7000 1st Qu.:20000 1st Qu.:22000
## Median : 2000 Median : 8000 Median :20000 Median :23500
## Mean : 4211 Mean :10330 Mean :18783 Mean :23200
## 3rd Qu.: 3000 3rd Qu.:10000 3rd Qu.:20000 3rd Qu.:25000
## Max. :25000 Max. :25000 Max. :40000 Max. :25000
## NA's :3352 NA's :7446 NA's :10470 NA's :11535
## wxcodes ice_accretion_1hr ice_accretion_3hr ice_accretion_6hr
## Length:11545 Mode:logical Mode:logical Mode:logical
## Class :character NA's:11545 NA's:11545 NA's:11545
## Mode :character
##
##
##
##
## peak_wind_gust peak_wind_drct peak_wind_time feel
## Mode:logical Mode:logical Mode:logical Min. :26.40
## NA's:11545 NA's:11545 NA's:11545 1st Qu.:50.00
## Median :55.40
## Mean :56.09
## 3rd Qu.:64.40
## Max. :80.29
## NA's :105
## metar snowdepth
## Length:11545 Mode:logical
## Class :character NA's:11545
## Mode :character
##
##
##
##
str(TOLUCA)
## tibble [11,545 × 30] (S3: tbl_df/tbl/data.frame)
## $ station : chr [1:11545] "MMTO" "MMTO" "MMTO" "MMTO" ...
## $ valid : POSIXct[1:11545], format: "2025-01-01 00:43:00" "2025-01-01 01:40:00" ...
## $ tmpf : num [1:11545] 59 55.4 48.2 51.8 48.2 48.2 42.8 41 41 37.4 ...
## $ dwpf : num [1:11545] 37.4 35.6 28.4 24.8 24.8 23 26.6 28.4 32 28.4 ...
## $ relh : num [1:11545] 44.5 47.2 46 34.7 39.7 ...
## $ drct : num [1:11545] 130 0 80 60 0 90 0 0 0 0 ...
## $ sknt : num [1:11545] 5 0 4 5 0 3 0 0 0 0 ...
## $ p01i : num [1:11545] 0 0 0 0 0 0 0 0 0 0 ...
## $ alti : num [1:11545] 30.3 30.4 30.4 30.4 30.4 ...
## $ mslp : num [1:11545] NA NA 1019 NA NA ...
## $ vsby : num [1:11545] 8 8 8 8 8 8 6 7 2 2 ...
## $ gust : logi [1:11545] NA NA NA NA NA NA ...
## $ skyc1 : chr [1:11545] "SCT" "SCT" "SCT" "BKN" ...
## $ skyc2 : chr [1:11545] NA NA NA NA ...
## $ skyc3 : chr [1:11545] NA NA NA NA ...
## $ skyc4 : chr [1:11545] NA NA NA NA ...
## $ skyl1 : num [1:11545] 20000 20000 20000 20000 20000 NA NA NA NA NA ...
## $ skyl2 : num [1:11545] NA NA NA NA NA NA NA NA NA NA ...
## $ skyl3 : num [1:11545] NA NA NA NA NA NA NA NA NA NA ...
## $ skyl4 : num [1:11545] NA NA NA NA NA NA NA NA NA NA ...
## $ wxcodes : chr [1:11545] NA NA NA NA ...
## $ ice_accretion_1hr: logi [1:11545] NA NA NA NA NA NA ...
## $ ice_accretion_3hr: logi [1:11545] NA NA NA NA NA NA ...
## $ ice_accretion_6hr: logi [1:11545] NA NA NA NA NA NA ...
## $ peak_wind_gust : logi [1:11545] NA NA NA NA NA NA ...
## $ peak_wind_drct : logi [1:11545] NA NA NA NA NA NA ...
## $ peak_wind_time : logi [1:11545] NA NA NA NA NA NA ...
## $ feel : num [1:11545] 59 55.4 46.3 51.8 48.2 ...
## $ metar : chr [1:11545] "MMTO 010043Z 13005KT 8SM SCT200 15/03 A3034 RMK 8/008" "MMTO 010140Z 00000KT 8SM SCT200 13/02 A3036 RMK 8/008" "MMTO 010243Z 08004KT 8SM SCT200 09/M02 A3038 RMK SLP191 52024 927 8/008" "MMTO 010348Z 06005KT 8SM BKN200 11/M04 A3040 RMK 8/008" ...
## $ snowdepth : logi [1:11545] NA NA NA NA NA NA ...
# Filtrar información del último mes
tol_ene_26 <- subset(TOLUCA, valid >= as.POSIXct("2025-01-01 00:00") & valid <= as.POSIXct("2025-01-31 23:59"))
# Convertir a Celsius
tol_ene_26 <- tol_ene_26 %>%
mutate(
tmpc = (tmpf - 32) * 5/9,
fecha = as.Date(valid)
)
# Calcular promedio diario
promedio_diario <- tol_ene_26 %>%
group_by(fecha) %>%
summarise(temp_promedio = mean(tmpc, na.rm = TRUE))
# Gráfica de barras en rosa
ggplot(promedio_diario, aes(x = fecha, y = temp_promedio)) +
geom_col(fill = "pink") +
labs(
title = "Temperatura Promedio Diaria en Toluca - Enero 2025",
x = "Fecha",
y = "Temperatura Promedio (°C)"
) +
theme_minimal()