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

Obtener y graficar la información

# PASO 1. Buscar la red (país) - Ejemplo: México, y copiar CODE
#view(riem_networks())
# PASO 2. Buscar la estación (ciudad) - Ejemplo: taipei, y copiar ID
#view(riem_stations("TW__ASOS"))
# PASO 3. Obtener información de la estación
taipei <- riem_measures("RCSS", date_start = "2025-08-01")
# Análisis Descriptivo
summary(taipei)
##    station              valid                          tmpf       
##  Length:3337        Min.   :2025-08-01 00:00:00   Min.   : 46.40  
##  Class :character   1st Qu.:2025-08-17 11:00:00   1st Qu.: 78.80  
##  Mode  :character   Median :2025-09-04 05:31:00   Median : 84.20  
##                     Mean   :2025-09-27 11:25:23   Mean   : 82.39  
##                     3rd Qu.:2025-10-19 12:58:00   3rd Qu.: 89.60  
##                     Max.   :2026-02-25 23:30:00   Max.   :100.40  
##                                                                   
##       dwpf           relh             drct            sknt             p01i  
##  Min.   :35.6   Min.   : 39.93   Min.   :  0.0   Min.   : 0.000   Min.   :0  
##  1st Qu.:73.4   1st Qu.: 66.44   1st Qu.: 90.0   1st Qu.: 4.000   1st Qu.:0  
##  Median :75.2   Median : 74.68   Median :100.0   Median : 7.000   Median :0  
##  Mean   :73.3   Mean   : 75.40   Mean   :148.4   Mean   : 7.737   Mean   :0  
##  3rd Qu.:78.8   3rd Qu.: 83.93   3rd Qu.:230.0   3rd Qu.:11.000   3rd Qu.:0  
##  Max.   :84.2   Max.   :100.00   Max.   :360.0   Max.   :32.000   Max.   :0  
##                                  NA's   :526                                 
##       alti         mslp              vsby            gust      
##  Min.   :29.50   Mode:logical   Min.   :0.310   Min.   :13.00  
##  1st Qu.:29.77   NA's:3337      1st Qu.:6.210   1st Qu.:22.00  
##  Median :29.83                  Median :6.210   Median :25.00  
##  Mean   :29.85                  Mean   :5.769   Mean   :26.46  
##  3rd Qu.:29.88                  3rd Qu.:6.210   3rd Qu.:30.00  
##  Max.   :30.42                  Max.   :6.210   Max.   :46.00  
##                                                 NA's   :3213   
##     skyc1              skyc2              skyc3              skyc4          
##  Length:3337        Length:3337        Length:3337        Length:3337       
##  Class :character   Class :character   Class :character   Class :character  
##  Mode  :character   Mode  :character   Mode  :character   Mode  :character  
##                                                                             
##                                                                             
##                                                                             
##                                                                             
##      skyl1          skyl2           skyl3           skyl4      
##  Min.   : 300   Min.   :  500   Min.   : 1500   Min.   : 2000  
##  1st Qu.:1500   1st Qu.: 2000   1st Qu.: 3200   1st Qu.: 4000  
##  Median :2000   Median : 3750   Median : 5000   Median : 5500  
##  Mean   :1792   Mean   : 6740   Mean   : 7886   Mean   : 7175  
##  3rd Qu.:2000   3rd Qu.: 8000   3rd Qu.:12000   3rd Qu.: 8000  
##  Max.   :4000   Max.   :30000   Max.   :25000   Max.   :25000  
##  NA's   :21     NA's   :761     NA's   :1647    NA's   :3010   
##    wxcodes          ice_accretion_1hr ice_accretion_3hr ice_accretion_6hr
##  Length:3337        Mode:logical      Mode:logical      Mode:logical     
##  Class :character   NA's:3337         NA's:3337         NA's:3337        
##  Mode  :character                                                        
##                                                                          
##                                                                          
##                                                                          
##                                                                          
##  peak_wind_gust peak_wind_drct peak_wind_time      feel       
##  Mode:logical   Mode:logical   Mode:logical   Min.   : 46.40  
##  NA's:3337      NA's:3337      NA's:3337      1st Qu.: 78.80  
##                                               Median : 92.47  
##                                               Mean   : 90.81  
##                                               3rd Qu.:102.72  
##                                               Max.   :124.91  
##                                                               
##     metar           snowdepth     
##  Length:3337        Mode:logical  
##  Class :character   NA's:3337     
##  Mode  :character                 
##                                   
##                                   
##                                   
## 
str(taipei)
## tibble [3,337 × 30] (S3: tbl_df/tbl/data.frame)
##  $ station          : chr [1:3337] "RCSS" "RCSS" "RCSS" "RCSS" ...
##  $ valid            : POSIXct[1:3337], format: "2025-08-01 00:00:00" "2025-08-01 00:30:00" ...
##  $ tmpf             : num [1:3337] 91.4 91.4 91.4 91.4 91.4 91.4 89.6 91.4 93.2 93.2 ...
##  $ dwpf             : num [1:3337] 80.6 78.8 78.8 78.8 78.8 80.6 80.6 80.6 80.6 80.6 ...
##  $ relh             : num [1:3337] 70.9 66.8 66.8 66.8 66.8 ...
##  $ drct             : num [1:3337] 290 320 330 30 NA 60 80 70 60 80 ...
##  $ sknt             : num [1:3337] 3 5 5 5 4 4 8 6 8 8 ...
##  $ p01i             : num [1:3337] 0 0 0 0 0 0 0 0 0 0 ...
##  $ alti             : num [1:3337] 29.6 29.6 29.6 29.6 29.6 ...
##  $ mslp             : logi [1:3337] NA NA NA NA NA NA ...
##  $ vsby             : num [1:3337] 6.21 6.21 6.21 6.21 6.21 6.21 6.21 6.21 6.21 6.21 ...
##  $ gust             : num [1:3337] NA NA NA NA NA NA NA NA NA NA ...
##  $ skyc1            : chr [1:3337] "FEW" "FEW" "FEW" "FEW" ...
##  $ skyc2            : chr [1:3337] "SCT" "BKN" "SCT" "BKN" ...
##  $ skyc3            : chr [1:3337] NA NA "BKN" "BKN" ...
##  $ skyc4            : chr [1:3337] NA NA NA NA ...
##  $ skyl1            : num [1:3337] 2000 1500 1500 1500 1500 1500 1500 1500 1500 1500 ...
##  $ skyl2            : num [1:3337] 10000 10000 6000 6000 6000 3000 1800 3000 3000 1600 ...
##  $ skyl3            : num [1:3337] NA NA 10000 10000 10000 7000 3000 7000 NA 3000 ...
##  $ skyl4            : num [1:3337] NA NA NA NA NA NA 7000 NA NA 15000 ...
##  $ wxcodes          : chr [1:3337] NA NA NA NA ...
##  $ ice_accretion_1hr: logi [1:3337] NA NA NA NA NA NA ...
##  $ ice_accretion_3hr: logi [1:3337] NA NA NA NA NA NA ...
##  $ ice_accretion_6hr: logi [1:3337] NA NA NA NA NA NA ...
##  $ peak_wind_gust   : logi [1:3337] NA NA NA NA NA NA ...
##  $ peak_wind_drct   : logi [1:3337] NA NA NA NA NA NA ...
##  $ peak_wind_time   : logi [1:3337] NA NA NA NA NA NA ...
##  $ feel             : num [1:3337] 111 108 108 108 108 ...
##  $ metar            : chr [1:3337] "RCSS 010000Z 29003KT 270V340 9999 FEW020 SCT100 33/27 Q1001 NOSIG RMK A2956" "RCSS 010030Z 32005KT 270V360 9999 FEW015 BKN100 33/26 Q1001 NOSIG RMK A2956" "RCSS 010100Z 33005KT 260V030 9999 FEW015 SCT060 BKN100 33/26 Q1001 NOSIG RMK A2956" "RCSS 010130Z 03005KT 9999 FEW015 BKN060 BKN100 33/26 Q1001 NOSIG RMK A2956" ...
##  $ snowdepth        : logi [1:3337] NA NA NA NA NA NA ...
# Filtrar información del último mes
taipei_aug_25 <- subset(taipei, 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 taipei en °C.
temp_daily <- taipei_aug_25 %>%
  mutate(date = as.Date(valid)) %>%
  group_by(date) %>%
  summarise(avg_temp_c = mean((tmpf - 32) * 5/9, na.rm = TRUE))
ggplot(temp_daily, aes(x = date, y = avg_temp_c)) +
  geom_col(fill = "orange") +
  labs(
    title = "Temperatura Promedio Diaria en Agosto - Taipei",
    x = "Fecha",
    y = "Temperatura Promedio (C)"
  ) +
  theme_minimal()

LS0tDQp0aXRsZTogIkFTT1MiDQphdXRob3I6ICJEaWVnbyBRdWV2ZWRvIFNhcmFiaWEiDQpkYXRlOiAiMjAyNi0wMi0yNiINCm91dHB1dDogDQogIGh0bWxfZG9jdW1lbnQ6DQogICAgdG9jOiBUUlVFDQogICAgdG9jX2Zsb2F0OiBUUlVFDQogICAgY29kZV9kb3dubG9hZDogVFJVRQ0KICAgIHRoZW1lOiBkYXJrbHkNCi0tLQ0KDQpbXShodHRwczovL2kucGluaW1nLmNvbS9vcmlnaW5hbHMvNDgvOTEvYTAvNDg5MWEwOTJiOWE5NmMyMTcxYzQ2ZGZlMTJmYTZhODIuZ2lmKQ0KDQoNCiMgPHNwYW4gc3R5bGU9ImNvbG9yOiB5ZWxsb3c7Ij5JbnRyb2R1Y2Npw7NuPC9zcGFuPg0KSW5mb3JtYWNpw7NuIG9idGVuaWRhIGRlbCAqQXV0b21hdGVkIFN1cmZhY2UgT2JzZXJ2aW5nIFN5c3RlbSAoQVNPUykqIGRlDQpsb3MgYWVyb3B1ZXJ0b3MgZGUgdG9kbyBlbCBtdW5kby4NCg0KIyA8c3BhbiBzdHlsZT0iY29sb3I6IHllbGxvdzsiPkluc3RhbGFyIHBhcXVldGVzIHkgbGxhbWFyIGxpYnJlcsOtYXM8L3NwYW4+DQpgYGB7cn0NCiNpbnN0YWxsLnBhY2thZ2VzKCJyaWVtIikNCmxpYnJhcnkocmllbSkNCiMgaW5zdGFsbC5wYWNrYWdlcygidGlkeXZlcnNlIikNCmxpYnJhcnkodGlkeXZlcnNlKQ0KIyBpbnN0YWxsLnBhY2thZ2VzKCJnZ3Bsb3QyIikNCmxpYnJhcnkoZ2dwbG90MikNCiMgaW5zdGFsbC5wYWNrYWdlcygibHVicmlkYXRlIikNCmxpYnJhcnkobHVicmlkYXRlKQ0KbGlicmFyeShkcGx5cikNCmBgYA0KIyA8c3BhbiBzdHlsZT0iY29sb3I6IHllbGxvdzsiPk9idGVuZXIgeSBncmFmaWNhciBsYSBpbmZvcm1hY2nDs248L3NwYW4+DQpgYGB7cn0NCiMgUEFTTyAxLiBCdXNjYXIgbGEgcmVkIChwYcOtcykgLSBFamVtcGxvOiBNw6l4aWNvLCB5IGNvcGlhciBDT0RFDQojdmlldyhyaWVtX25ldHdvcmtzKCkpDQojIFBBU08gMi4gQnVzY2FyIGxhIGVzdGFjacOzbiAoY2l1ZGFkKSAtIEVqZW1wbG86IHRhaXBlaSwgeSBjb3BpYXIgSUQNCiN2aWV3KHJpZW1fc3RhdGlvbnMoIlRXX19BU09TIikpDQojIFBBU08gMy4gT2J0ZW5lciBpbmZvcm1hY2nDs24gZGUgbGEgZXN0YWNpw7NuDQp0YWlwZWkgPC0gcmllbV9tZWFzdXJlcygiUkNTUyIsIGRhdGVfc3RhcnQgPSAiMjAyNS0wOC0wMSIpDQojIEFuw6FsaXNpcyBEZXNjcmlwdGl2bw0Kc3VtbWFyeSh0YWlwZWkpDQpzdHIodGFpcGVpKQ0KIyBGaWx0cmFyIGluZm9ybWFjacOzbiBkZWwgw7psdGltbyBtZXMNCnRhaXBlaV9hdWdfMjUgPC0gc3Vic2V0KHRhaXBlaSwgdmFsaWQgPj0gYXMuUE9TSVhjdCgiMjAyNS0wOC0wMSAwMDowMCIpICYNCnZhbGlkIDw9IGFzLlBPU0lYY3QoIjIwMjUtMDgtMzEgMjM6NTkiKSkNCiMgRWplcmNpY2lvIDE6IFJlYWxpemFyIHVuYSBncsOhZmljYSBkZSBiYXJyYXMgZGUgbGEgdGVtcGVyYXR1cmEgcHJvbWVkaW8gZGlhcmlvIGVuIGFnb3N0byBlbiB0YWlwZWkgZW4gwrBDLg0KDQpgYGANCg0KYGBge3J9DQp0ZW1wX2RhaWx5IDwtIHRhaXBlaV9hdWdfMjUgJT4lDQogIG11dGF0ZShkYXRlID0gYXMuRGF0ZSh2YWxpZCkpICU+JQ0KICBncm91cF9ieShkYXRlKSAlPiUNCiAgc3VtbWFyaXNlKGF2Z190ZW1wX2MgPSBtZWFuKCh0bXBmIC0gMzIpICogNS85LCBuYS5ybSA9IFRSVUUpKQ0KYGBgDQoNCmBgYHtyfQ0KZ2dwbG90KHRlbXBfZGFpbHksIGFlcyh4ID0gZGF0ZSwgeSA9IGF2Z190ZW1wX2MpKSArDQogIGdlb21fY29sKGZpbGwgPSAib3JhbmdlIikgKw0KICBsYWJzKA0KICAgIHRpdGxlID0gIlRlbXBlcmF0dXJhIFByb21lZGlvIERpYXJpYSBlbiBBZ29zdG8gLSBUYWlwZWkiLA0KICAgIHggPSAiRmVjaGEiLA0KICAgIHkgPSAiVGVtcGVyYXR1cmEgUHJvbWVkaW8gKEMpIg0KICApICsNCiAgdGhlbWVfbWluaW1hbCgpDQpgYGANCg0K