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)
# install.packages("ggplot2")
library(ggplot2)
# install.packages("lubridate")
library(lubridate)

Obtener y graficar la información

# PASO 1. Buscar la red (país) - Ejemplo: México, y copiar CODE
head(riem_networks())
## # A tibble: 6 × 2
##   code     name                     
##   <chr>    <chr>                    
## 1 AE__ASOS United Arab Emirates ASOS
## 2 AF__ASOS Afghanistan ASOS         
## 3 AG__ASOS Antigua and Barbuda ASOS 
## 4 AI__ASOS Anguilla ASOS            
## 5 AK_ASOS  Alaska ASOS              
## 6 AL__ASOS Albania ASOS
# PASO 2. Buscar la estación (ciudad) - Ejemplo: Monterrey, y copiar ID
head(riem_stations("MX__ASOS"))
## # A tibble: 6 × 22
##   index id    synop name     country elevation network online plot_name modified
##   <int> <chr> <dbl> <chr>    <chr>       <dbl> <chr>   <lgl>  <chr>     <chr>   
## 1     0 MMAA  99999 Acapulco MX            5   MX__AS… TRUE   "ACAPULC… 2020-07…
## 2     1 MMAS  99999 Aguasca… MX         1863   MX__AS… TRUE   "AGUASCA… 2023-12…
## 3     2 MMSL  99999 Cabo Sa… MX          140   MX__AS… TRUE   "CABO SA… 2020-07…
## 4     3 MMCP  99999 Campeche MX            5   MX__AS… TRUE   "CAMPECH… 2023-12…
## 5     4 MMUN     NA Cancun   MX           10.1 MX__AS… TRUE   "Cancun"  2020-07…
## 6     5 MMCM     NA Chetumal MX           10.5 MX__AS… TRUE   "Chetuma… 2023-12…
## # ℹ 12 more variables: spri <int>, tzname <chr>, iemid <int>,
## #   archive_begin <chr>, metasite <lgl>, longitude <dbl>, latitude <dbl>,
## #   wigos <chr>, state <chr>, archive_end <chr>, lon <dbl>, lat <dbl>
# PASO 3. Obtener información de la estación
monterrey <- riem_measures("MMMY", date_start = "2024-08-01", date_end = "2024-08-31")

# Análisis Descriptivo
summary(monterrey)
##    station              valid                          tmpf       
##  Length:725         Min.   :2024-08-01 00:40:00   Min.   : 71.60  
##  Class :character   1st Qu.:2024-08-08 11:40:00   1st Qu.: 77.00  
##  Mode  :character   Median :2024-08-15 23:44:00   Median : 82.40  
##                     Mean   :2024-08-15 23:33:43   Mean   : 83.75  
##                     3rd Qu.:2024-08-23 11:40:00   3rd Qu.: 89.60  
##                     Max.   :2024-08-30 23:40:00   Max.   :100.40  
##                                                                   
##       dwpf            relh             drct             sknt             p01i  
##  Min.   :53.60   Min.   : 24.89   Min.   :  0.00   Min.   : 0.000   Min.   :0  
##  1st Qu.:68.00   1st Qu.: 49.36   1st Qu.: 70.00   1st Qu.: 4.000   1st Qu.:0  
##  Median :69.80   Median : 65.95   Median :100.00   Median : 6.000   Median :0  
##  Mean   :69.66   Mean   : 65.99   Mean   : 94.58   Mean   : 5.811   Mean   :0  
##  3rd Qu.:71.60   3rd Qu.: 83.44   3rd Qu.:120.00   3rd Qu.: 8.000   3rd Qu.:0  
##  Max.   :75.20   Max.   :100.00   Max.   :340.00   Max.   :16.000   Max.   :0  
##                                                                                
##       alti            mslp             vsby             gust      
##  Min.   :29.80   Min.   : 987.8   Min.   : 3.000   Min.   :15.00  
##  1st Qu.:29.99   1st Qu.:1013.6   1st Qu.: 8.000   1st Qu.:17.00  
##  Median :30.03   Median :1014.9   Median :10.000   Median :18.00  
##  Mean   :30.02   Mean   :1014.6   Mean   : 9.611   Mean   :18.86  
##  3rd Qu.:30.07   3rd Qu.:1016.2   3rd Qu.:10.000   3rd Qu.:19.50  
##  Max.   :30.18   Max.   :1020.1   Max.   :15.000   Max.   :26.00  
##                  NA's   :485                       NA's   :718    
##     skyc1              skyc2              skyc3            skyc4        
##  Length:725         Length:725         Length:725         Mode:logical  
##  Class :character   Class :character   Class :character   NA's:725      
##  Mode  :character   Mode  :character   Mode  :character                 
##                                                                         
##                                                                         
##                                                                         
##                                                                         
##      skyl1           skyl2           skyl3        skyl4        
##  Min.   :  500   Min.   :  800   Min.   : 8000   Mode:logical  
##  1st Qu.: 2000   1st Qu.: 7000   1st Qu.:20000   NA's:725      
##  Median : 3000   Median :10000   Median :20000                 
##  Mean   : 5513   Mean   :12568   Mean   :19600                 
##  3rd Qu.: 4500   3rd Qu.:20000   3rd Qu.:20000                 
##  Max.   :20000   Max.   :20000   Max.   :20000                 
##  NA's   :254     NA's   :548     NA's   :695                   
##    wxcodes          ice_accretion_1hr ice_accretion_3hr ice_accretion_6hr
##  Length:725         Mode:logical      Mode:logical      Mode:logical     
##  Class :character   NA's:725          NA's:725          NA's:725         
##  Mode  :character                                                        
##                                                                          
##                                                                          
##                                                                          
##                                                                          
##  peak_wind_gust peak_wind_drct peak_wind_time      feel       
##  Mode:logical   Mode:logical   Mode:logical   Min.   : 71.60  
##  NA's:725       NA's:725       NA's:725       1st Qu.: 77.00  
##                                               Median : 87.18  
##                                               Mean   : 86.33  
##                                               3rd Qu.: 94.85  
##                                               Max.   :102.50  
##                                                               
##     metar           snowdepth     
##  Length:725         Mode:logical  
##  Class :character   NA's:725      
##  Mode  :character                 
##                                   
##                                   
##                                   
## 
str(monterrey)
## tibble [725 × 30] (S3: tbl_df/tbl/data.frame)
##  $ station          : chr [1:725] "MMMY" "MMMY" "MMMY" "MMMY" ...
##  $ valid            : POSIXct[1:725], format: "2024-08-01 00:40:00" "2024-08-01 01:40:00" ...
##  $ tmpf             : num [1:725] 87.8 86 82.4 80.6 78.8 77 77 77 77 75.2 ...
##  $ dwpf             : num [1:725] 66.2 64.4 68 73.4 73.4 73.4 73.4 73.4 73.4 73.4 ...
##  $ relh             : num [1:725] 48.8 48.6 61.8 78.8 83.5 ...
##  $ drct             : num [1:725] 150 130 130 90 100 90 90 90 100 80 ...
##  $ sknt             : num [1:725] 15 13 9 12 11 8 7 7 7 3 ...
##  $ p01i             : num [1:725] 0 0 0 0 0 0 0 0 0 0 ...
##  $ alti             : num [1:725] 30 30 30 30 30 ...
##  $ mslp             : num [1:725] NA NA 1014 NA NA ...
##  $ vsby             : num [1:725] 6 7 7 6 6 6 6 6 6 6 ...
##  $ gust             : num [1:725] NA NA NA NA NA NA NA NA NA NA ...
##  $ skyc1            : chr [1:725] "CLR" "CLR" "CLR" "CLR" ...
##  $ skyc2            : chr [1:725] NA NA NA NA ...
##  $ skyc3            : chr [1:725] NA NA NA NA ...
##  $ skyc4            : logi [1:725] NA NA NA NA NA NA ...
##  $ skyl1            : num [1:725] NA NA NA NA NA NA 2000 1500 2000 2000 ...
##  $ skyl2            : num [1:725] NA NA NA NA NA NA NA NA NA NA ...
##  $ skyl3            : num [1:725] NA NA NA NA NA NA NA NA NA NA ...
##  $ skyl4            : logi [1:725] NA NA NA NA NA NA ...
##  $ wxcodes          : chr [1:725] NA NA NA NA ...
##  $ ice_accretion_1hr: logi [1:725] NA NA NA NA NA NA ...
##  $ ice_accretion_3hr: logi [1:725] NA NA NA NA NA NA ...
##  $ ice_accretion_6hr: logi [1:725] NA NA NA NA NA NA ...
##  $ peak_wind_gust   : logi [1:725] NA NA NA NA NA NA ...
##  $ peak_wind_drct   : logi [1:725] NA NA NA NA NA NA ...
##  $ peak_wind_time   : logi [1:725] NA NA NA NA NA NA ...
##  $ feel             : num [1:725] 90.3 87.5 85.4 85.3 78.8 ...
##  $ metar            : chr [1:725] "MMMY 010040Z 15015KT 6SM SKC 31/19 A2996 RMK HZY" "MMMY 010140Z 13013KT 7SM SKC 30/18 A2997 RMK HZY" "MMMY 010240Z 13009KT 7SM SKC 28/20 A3000 RMK SLP139 52013 914 HZY" "MMMY 010340Z 09012KT 6SM SKC 27/23 A3002 RMK HZY" ...
##  $ snowdepth        : logi [1:725] NA NA NA NA NA NA ...
# Filtrar información del último mes
mty_ago_24 <- subset(monterrey, valid >= as.POSIXct("2024-08-01 00:00") & valid <= as.POSIXct("2024-08-31 23:59"))

Ejercicio 1: Realizar una gráfica de barras de la temperatura promedio diario en agosto en Monterrey en °C.

# Procesar datos para obtener promedio diario en Celsius
mty_daily <- mty_ago_24 %>%
  mutate(date = as.Date(valid)) %>%
  group_by(date) %>%
  summarize(temp_c = mean((tmpf - 32) * 5/9, na.rm = TRUE))

# Inspección de datos
summary(mty_daily)
##       date                temp_c     
##  Min.   :2024-08-01   Min.   :27.00  
##  1st Qu.:2024-08-08   1st Qu.:28.35  
##  Median :2024-08-15   Median :28.79  
##  Mean   :2024-08-15   Mean   :28.75  
##  3rd Qu.:2024-08-22   3rd Qu.:29.03  
##  Max.   :2024-08-30   Max.   :30.67
head(mty_daily)
## # A tibble: 6 × 2
##   date       temp_c
##   <date>      <dbl>
## 1 2024-08-01   27.4
## 2 2024-08-02   27.3
## 3 2024-08-03   28.4
## 4 2024-08-04   28.7
## 5 2024-08-05   28.3
## 6 2024-08-06   28.9
tail(mty_daily)
## # A tibble: 6 × 2
##   date       temp_c
##   <date>      <dbl>
## 1 2024-08-25   28.8
## 2 2024-08-26   28.6
## 3 2024-08-27   28.8
## 4 2024-08-28   27.4
## 5 2024-08-29   27  
## 6 2024-08-30   29.3
# Gráficas
ggplot(mty_daily, aes(x = date, y = temp_c)) +
  geom_point()

ggplot(mty_daily, aes(x = date, y = temp_c)) +
  geom_col()

ggplot(mty_daily, aes(x = date, y = temp_c)) +
  geom_col(fill = "cyan") +
  geom_point(color = "blue") +
  labs(title = "Temperatura Promedio Diario en Monterrey (Agosto 2024)", 
       x = "Día", 
       y = "Temperatura (°C)")

LS0tCnRpdGxlOiAiQVNPUyIKYXV0aG9yOiAiTWFyY2VsbyBSZXllcyBBMDE3MjMzMjEiCmRhdGU6ICIyMDI2LTAyLTI2IgpvdXRwdXQ6IAogIGh0bWxfZG9jdW1lbnQ6CiAgICB0b2M6IFRSVUUKICAgIHRvY19mbG9hdDogVFJVRQogICAgY29kZV9kb3dubG9hZDogVFJVRQogICAgdGhlbWU6IGRhcmtseQotLS0KCiFbXShodHRwczovL3VwbG9hZC53aWtpbWVkaWEub3JnL3dpa2lwZWRpYS9jb21tb25zLzAvMDgvR2xvYmFsX1RlbXBlcmF0dXJlX0Fub21hbHlfS2VsdmluLmdpZikKCiMgPHNwYW4gc3R5bGU9ImNvbG9yOiB5ZWxsb3c7Ij5JbnRyb2R1Y2Npw7NuPC9zcGFuPgpJbmZvcm1hY2nDs24gb2J0ZW5pZGEgZGVsICpBdXRvbWF0ZWQgU3VyZmFjZSBPYnNlcnZpbmcgU3lzdGVtIChBU09TKSogZGUgbG9zIGFlcm9wdWVydG9zIGRlIHRvZG8gZWwgbXVuZG8uCgojIDxzcGFuIHN0eWxlPSJjb2xvcjogeWVsbG93OyI+SW5zdGFsYXIgcGFxdWV0ZXMgeSBsbGFtYXIgbGlicmVyw61hczwvc3Bhbj4KYGBge3IgbWVzc2FnZT1GQUxTRSwgd2FybmluZz1GQUxTRX0KIyBpbnN0YWxsLnBhY2thZ2VzKCJyaWVtIikKbGlicmFyeShyaWVtKQojIGluc3RhbGwucGFja2FnZXMoInRpZHl2ZXJzZSIpCmxpYnJhcnkodGlkeXZlcnNlKQojIGluc3RhbGwucGFja2FnZXMoImdncGxvdDIiKQpsaWJyYXJ5KGdncGxvdDIpCiMgaW5zdGFsbC5wYWNrYWdlcygibHVicmlkYXRlIikKbGlicmFyeShsdWJyaWRhdGUpCmBgYAoKIyA8c3BhbiBzdHlsZT0iY29sb3I6IHllbGxvdzsiPk9idGVuZXIgeSBncmFmaWNhciBsYSBpbmZvcm1hY2nDs248L3NwYW4+CmBgYHtyfQojIFBBU08gMS4gQnVzY2FyIGxhIHJlZCAocGHDrXMpIC0gRWplbXBsbzogTcOpeGljbywgeSBjb3BpYXIgQ09ERQpoZWFkKHJpZW1fbmV0d29ya3MoKSkKCiMgUEFTTyAyLiBCdXNjYXIgbGEgZXN0YWNpw7NuIChjaXVkYWQpIC0gRWplbXBsbzogTW9udGVycmV5LCB5IGNvcGlhciBJRApoZWFkKHJpZW1fc3RhdGlvbnMoIk1YX19BU09TIikpCgojIFBBU08gMy4gT2J0ZW5lciBpbmZvcm1hY2nDs24gZGUgbGEgZXN0YWNpw7NuCm1vbnRlcnJleSA8LSByaWVtX21lYXN1cmVzKCJNTU1ZIiwgZGF0ZV9zdGFydCA9ICIyMDI0LTA4LTAxIiwgZGF0ZV9lbmQgPSAiMjAyNC0wOC0zMSIpCgojIEFuw6FsaXNpcyBEZXNjcmlwdGl2bwpzdW1tYXJ5KG1vbnRlcnJleSkKc3RyKG1vbnRlcnJleSkKCiMgRmlsdHJhciBpbmZvcm1hY2nDs24gZGVsIMO6bHRpbW8gbWVzCmBgYHtyfQptdHlfYWdvXzI0IDwtIHN1YnNldChtb250ZXJyZXksIHZhbGlkID49IGFzLlBPU0lYY3QoIjIwMjQtMDgtMDEgMDA6MDAiKSAmIHZhbGlkIDw9IGFzLlBPU0lYY3QoIjIwMjQtMDgtMzEgMjM6NTkiKSkKYGBgCgojIEVqZXJjaWNpbyAxOiBSZWFsaXphciB1bmEgZ3LDoWZpY2EgZGUgYmFycmFzIGRlIGxhIHRlbXBlcmF0dXJhIHByb21lZGlvIGRpYXJpbyBlbiBhZ29zdG8gZW4gTW9udGVycmV5IGVuIMKwQy4KCmBgYHtyfQojIFByb2Nlc2FyIGRhdG9zIHBhcmEgb2J0ZW5lciBwcm9tZWRpbyBkaWFyaW8gZW4gQ2Vsc2l1cwptdHlfZGFpbHkgPC0gbXR5X2Fnb18yNCAlPiUKICBtdXRhdGUoZGF0ZSA9IGFzLkRhdGUodmFsaWQpKSAlPiUKICBncm91cF9ieShkYXRlKSAlPiUKICBzdW1tYXJpemUodGVtcF9jID0gbWVhbigodG1wZiAtIDMyKSAqIDUvOSwgbmEucm0gPSBUUlVFKSkKCiMgSW5zcGVjY2nDs24gZGUgZGF0b3MKc3VtbWFyeShtdHlfZGFpbHkpCmhlYWQobXR5X2RhaWx5KQp0YWlsKG10eV9kYWlseSkKCiMgR3LDoWZpY2FzCmdncGxvdChtdHlfZGFpbHksIGFlcyh4ID0gZGF0ZSwgeSA9IHRlbXBfYykpICsKICBnZW9tX3BvaW50KCkKCmdncGxvdChtdHlfZGFpbHksIGFlcyh4ID0gZGF0ZSwgeSA9IHRlbXBfYykpICsKICBnZW9tX2NvbCgpCgpnZ3Bsb3QobXR5X2RhaWx5LCBhZXMoeCA9IGRhdGUsIHkgPSB0ZW1wX2MpKSArCiAgZ2VvbV9jb2woZmlsbCA9ICJjeWFuIikgKwogIGdlb21fcG9pbnQoY29sb3IgPSAiYmx1ZSIpICsKICBsYWJzKHRpdGxlID0gIlRlbXBlcmF0dXJhIFByb21lZGlvIERpYXJpbyBlbiBNb250ZXJyZXkgKEFnb3N0byAyMDI0KSIsIAogICAgICAgeCA9ICJEw61hIiwgCiAgICAgICB5ID0gIlRlbXBlcmF0dXJhICjCsEMpIikKYGBgCg==