# Introducción Información obtenida del Automated Surface Observing System (ASOS) de los aeropuertos de todo el mundo.

Librerías

#install.packages("riem")
library(riem)
## Warning: package 'riem' was built under R version 4.3.3
library(tidyverse)
## ── Attaching core tidyverse packages ──────────────────────── tidyverse 2.0.0 ──
## ✔ dplyr     1.1.4     ✔ readr     2.1.5
## ✔ forcats   1.0.0     ✔ stringr   1.5.1
## ✔ ggplot2   3.5.1     ✔ tibble    3.2.1
## ✔ lubridate 1.9.3     ✔ tidyr     1.3.1
## ✔ purrr     1.0.2     
## ── 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
library(ggplot2)
#install.packages("lubridate")
library(lubridate)

Obtener y graficar información

Paso 1: Buscar la red o país

#view(riem_networks())

Paso 2: Buscar la estación (ciudad) - Mty

#view(riem_stations("MX__ASOS")) #ID: MMMY
monterrey <- riem_measures("MMMY")
#Análisis descriptivo
summary(monterrey)
##    station              valid                             lon        
##  Length:95893       Min.   :2014-01-01 00:16:00.00   Min.   :-100.1  
##  Class :character   1st Qu.:2016-09-03 19:50:00.00   1st Qu.:-100.1  
##  Mode  :character   Median :2019-05-03 01:41:00.00   Median :-100.1  
##                     Mean   :2019-05-12 00:07:10.50   Mean   :-100.1  
##                     3rd Qu.:2022-01-20 05:40:00.00   3rd Qu.:-100.1  
##                     Max.   :2024-09-10 23:40:00.00   Max.   :-100.1  
##                                                                      
##       lat             tmpf             dwpf            relh       
##  Min.   :25.78   Min.   : 23.00   Min.   :-5.80   Min.   :  2.32  
##  1st Qu.:25.78   1st Qu.: 64.40   1st Qu.:51.80   1st Qu.: 48.32  
##  Median :25.78   Median : 73.40   Median :62.60   Median : 69.14  
##  Mean   :25.78   Mean   : 72.66   Mean   :58.24   Mean   : 65.41  
##  3rd Qu.:25.78   3rd Qu.: 82.40   3rd Qu.:68.00   3rd Qu.: 83.44  
##  Max.   :25.78   Max.   :111.20   Max.   :86.00   Max.   :100.00  
##                  NA's   :137      NA's   :1734    NA's   :1779    
##       drct            sknt             p01i        alti            mslp       
##  Min.   :  0.0   Min.   : 0.000   Min.   :0   Min.   : 0.04   Min.   : 913.2  
##  1st Qu.: 70.0   1st Qu.: 4.000   1st Qu.:0   1st Qu.:29.87   1st Qu.:1011.4  
##  Median :110.0   Median : 5.000   Median :0   Median :29.97   Median :1014.4  
##  Mean   :131.1   Mean   : 5.844   Mean   :0   Mean   :29.97   Mean   :1015.2  
##  3rd Qu.:160.0   3rd Qu.: 8.000   3rd Qu.:0   3rd Qu.:30.07   3rd Qu.:1018.1  
##  Max.   :360.0   Max.   :98.000   Max.   :0   Max.   :30.81   Max.   :1103.4  
##  NA's   :73      NA's   :73                   NA's   :28      NA's   :84045   
##       vsby             gust           skyc1              skyc2          
##  Min.   : 0.000   Min.   : 13.00   Length:95893       Length:95893      
##  1st Qu.: 6.000   1st Qu.: 20.00   Class :character   Class :character  
##  Median :10.000   Median : 24.00   Mode  :character   Mode  :character  
##  Mean   : 8.938   Mean   : 24.31                                        
##  3rd Qu.:12.000   3rd Qu.: 27.00                                        
##  Max.   :40.000   Max.   :210.00                                        
##  NA's   :32       NA's   :92793                                         
##     skyc3              skyc4               skyl1           skyl2      
##  Length:95893       Length:95893       Min.   :    0   Min.   :    0  
##  Class :character   Class :character   1st Qu.: 1500   1st Qu.: 2000  
##  Mode  :character   Mode  :character   Median : 3000   Median : 7000  
##                                        Mean   : 5348   Mean   : 8034  
##                                        3rd Qu.: 7000   3rd Qu.:10000  
##                                        Max.   :37000   Max.   :30000  
##                                        NA's   :29104   NA's   :64555  
##      skyl3           skyl4         wxcodes          ice_accretion_1hr
##  Min.   :  400   Min.   : 3000   Length:95893       Mode:logical     
##  1st Qu.: 8000   1st Qu.:20000   Class :character   NA's:95893       
##  Median :20000   Median :20000   Mode  :character                    
##  Mean   :14721   Mean   :20646                                       
##  3rd Qu.:20000   3rd Qu.:25000                                       
##  Max.   :30000   Max.   :25000                                       
##  NA's   :90513   NA's   :95695                                       
##  ice_accretion_3hr ice_accretion_6hr peak_wind_gust peak_wind_drct
##  Mode:logical      Mode:logical      Mode:logical   Mode:logical  
##  NA's:95893        NA's:95893        NA's:95893     NA's:95893    
##                                                                   
##                                                                   
##                                                                   
##                                                                   
##                                                                   
##  peak_wind_time      feel           metar           snowdepth     
##  Mode:logical   Min.   :  9.11   Length:95893       Mode:logical  
##  NA's:95893     1st Qu.: 64.40   Class :character   NA's:95893    
##                 Median : 73.79   Mode  :character                 
##                 Mean   : 73.36                                    
##                 3rd Qu.: 83.90                                    
##                 Max.   :131.06                                    
##                 NA's   :1782
str(monterrey)
## tibble [95,893 × 32] (S3: tbl_df/tbl/data.frame)
##  $ station          : chr [1:95893] "MMMY" "MMMY" "MMMY" "MMMY" ...
##  $ valid            : POSIXct[1:95893], format: "2014-01-01 00:16:00" "2014-01-01 00:49:00" ...
##  $ lon              : num [1:95893] -100 -100 -100 -100 -100 ...
##  $ lat              : num [1:95893] 25.8 25.8 25.8 25.8 25.8 ...
##  $ tmpf             : num [1:95893] 48.2 48.2 48.2 46.4 46.4 46.4 46.4 46.4 46.4 46.4 ...
##  $ dwpf             : num [1:95893] 46.4 46.4 46.4 46.4 46.4 44.6 44.6 44.6 44.6 44.6 ...
##  $ relh             : num [1:95893] 93.5 93.5 93.5 100 100 ...
##  $ drct             : num [1:95893] 0 120 120 120 110 100 110 130 60 0 ...
##  $ sknt             : num [1:95893] 0 3 5 6 5 5 4 3 3 0 ...
##  $ p01i             : num [1:95893] 0 0 0 0 0 0 0 0 0 0 ...
##  $ alti             : num [1:95893] 30.3 30.3 30.3 30.3 30.3 ...
##  $ mslp             : num [1:95893] NA NA NA NA NA ...
##  $ vsby             : num [1:95893] 4 3 1 0.25 0.12 0.12 0.06 0.06 0.06 0.12 ...
##  $ gust             : num [1:95893] NA NA NA NA NA NA NA NA NA NA ...
##  $ skyc1            : chr [1:95893] "SCT" "SCT" "SCT" "VV " ...
##  $ skyc2            : chr [1:95893] "BKN" "BKN" "BKN" NA ...
##  $ skyc3            : chr [1:95893] "OVC" "OVC" "OVC" NA ...
##  $ skyc4            : chr [1:95893] NA NA NA NA ...
##  $ skyl1            : num [1:95893] 700 300 200 200 100 100 100 100 100 100 ...
##  $ skyl2            : num [1:95893] 1200 400 300 NA NA NA NA NA NA NA ...
##  $ skyl3            : num [1:95893] 4000 900 500 NA NA NA NA NA NA NA ...
##  $ skyl4            : num [1:95893] NA NA NA NA NA NA NA NA NA NA ...
##  $ wxcodes          : chr [1:95893] NA "BR" "BR" "FG" ...
##  $ ice_accretion_1hr: logi [1:95893] NA NA NA NA NA NA ...
##  $ ice_accretion_3hr: logi [1:95893] NA NA NA NA NA NA ...
##  $ ice_accretion_6hr: logi [1:95893] NA NA NA NA NA NA ...
##  $ peak_wind_gust   : logi [1:95893] NA NA NA NA NA NA ...
##  $ peak_wind_drct   : logi [1:95893] NA NA NA NA NA NA ...
##  $ peak_wind_time   : logi [1:95893] NA NA NA NA NA NA ...
##  $ feel             : num [1:95893] 48.2 47.2 45.6 42.9 43.5 ...
##  $ metar            : chr [1:95893] "MMMY 010016Z 00000KT 4SM SCT007 BKN012 OVC040 09/08 A3028 RMK 8/5// BR" "MMMY 010049Z 12003KT 3SM BR SCT003 BKN004 OVC009 09/08 A3028 RMK 8/5// -DZ OCNL" "MMMY 010116Z 12005KT 1SM BR SCT002 BKN003 OVC005 09/08 A3028 RMK 8/6// -DZ OCNL" "MMMY 010120Z 12006KT 1/4SM FG VV002 08/08 A3029 RMK 8//// BC FG MOV SE/NW" ...
##  $ snowdepth        : logi [1:95893] NA NA NA NA NA NA ...
#Filtrar información
mty_agosto24 <- subset(monterrey, valid >= as.POSIXct("2024-08-01 00:00") & valid <= as.POSIXct("2024-08-31 23:59"))

#Ejercicio 1: Realiza una gráfica de barras de la temperatura promedio diaria en agosto en Monterrey en °C.

Solución 1

#Transformar de °F a °C:

mty_agosto24$tmpc <- (mty_agosto24$tmpf - 32)*5/9
mty_agosto24_tmpc <- mty_agosto24$tmpc
mty_agosto24_tmpc <- as.integer(mty_agosto24_tmpc)

mty_agosto24_tmpc
##   [1] 25 25 25 24 24 24 24 24 25 25 26 26 28 29 30 32 33 33 33 32 31 28 26 26 26
##  [26] 26 25 25 24 23 23 21 23 25 26 26 29 30 31 33 32 33 33 32 28 29 26 26 25 24
##  [51] 24 23 23 23 21 23 26 26 29 32 32 32 33 34 34 35 34 34 32 28 29 28 26 26 25
##  [76] 24 24 23 23 21 24 26 28 30 32 32 33 34 35 34 34 34 32 29 28 29 26 26 26 25
## [101] 25 24 23 21 23 25 26 28 30 31 32 32 34 34 34 33 32 30 30 30 28 26 26 25 24
## [126] 24 23 23 23 26 28 29 30 32 33 34 34 34 34 34 32 30 30 28 28 26 26 25 24 24
## [151] 24 23 24 26 29 31 33 34 35 36 36 35 37 36 33 31 30 30 30 26 26 25 24 24 23
## [176] 21 24 26 30 33 35 37 38 38 38 38 37 36 35 31 31 30 29 29 26 26 25 25 25 25
## [201] 26 26 26 28 29 31 31 32 30 31 32 31 30 26 26 26 26 25 25 24 24 24 23 23 23
## [226] 23 25 26 29 30 31 32 33 34 34 34 34 32 29 28 26 26 26 26 25 25 24 23 23 23
## [251] 26 28 28 30 31 32 34 34 33 33 32 31 30 28 26 26 25 25 24 24 23 23 21 21 25
## [276] 26 28 30 31 32 34 32 34 34 33 32 31 29 29 26 26 26 25 24 24 23 21 21 25 25
## [301] 28 29 31 32 34 35 36 36 35 33 31 30 29 28 26 26 26 25 25 25 24 24 25 26 28
## [326] 29 30 32 32 33 35 34 34 32 30 30 29 28 26 26 26 25 24 23 23 23 25 26 26 29
## [351] 29 31 33 34 35 34 34 33 30 30 29 28 26 26 26 25 24 24 25 24 26 26 28 29 32
## [376] 33 33 34 34 35 34 32 30 29 29 26 26 26 25 25 25 25 25 25 25 26 26 29 30 32
## [401] 34 34 35 35 34 34 32 30 29 28 28 26 26 26 25 25 24 24 24 26 26 29 30 32 32
## [426] 34 34 34 34 33 32 30 30 28 28 26 26 26 25 24 24 24 24 25 26 30 32 32 33 34
## [451] 33 33 32 32 31 31 29 29 28 26 26 25 25 24 24 23 23 26 28 30 32 34 35 36 36
## [476] 36 36 36 34 31 29 28 28 26 26 25 25 24 23 24 24 26 29 31 33 35 36 37 38 38
## [501] 37 37 35 32 31 29 28 29 26 26 25 24 24 23 23 26 29 31 33 35 35 36 37 37 37
## [526] 36 34 31 31 30 29 28 26 26 25 24 24 23 23 26 26 30 31 33 34 35 36 36 36 36
## [551] 34 30 28 29 28 26 26 26 25 23 23 21 23 26 26 28 30 32 33 35 36 36 35 35 33
## [576] 31 31 29 26 26 26 26 25 24 24 24 24 25 26 26 29 30 32 33 34 34 35 33 33 30
## [601] 28 26 26 26 26 25 24 24 23 21 21 25 26 29 31 32 33 34 35 34 35 35 33 30 30
## [626] 28 26 26 26 26 26 26 25 25 24 26 28 29 31 32 34 33 33 33 31 28 30 26 26 25
## [651] 24 24 23 23 23 23 23 24 24 26 26 29 30 31 32 33 33 33 34 30 29 25 24 23 23
## [676] 23 23 23 23 23 23 24 24 25 26 26 29 29 30 32 33 34 34 33 33 32 30 29 28 26
## [701] 26 26 25 24 24 23 23 23 26 29 30 32 35 36 35 36 36 35 34 31 31 29 26 26 26
## [726] 26 26 25 25 25 25 25 25 26 29 29 31 33 32 29 26 24 24 23 25 26 28 26 26 25
## [751] 25 25 25 24
n <- length(mty_agosto24_tmpc) %/% 24
promedios <- sapply(1:n, function(i) {
  mean(mty_agosto24_tmpc[((i-1)*24 + 1):(i*24)])
})

dia <- c(1:31)
promedios <- as.integer(promedios)
df = data.frame(dia, promedios)
ggplot(df, aes(x=dia, y=promedios))+
        geom_col(fill="blue")

Solución 2

promedio <-  mty_agosto24 %>%
        mutate(date=ymd_hms(valid), date = as.Date(date)) %>%
        group_by(date) %>%
        summarize_if(is.numeric, ~ mean(., na.rm=TRUE))
promedio$cels <- (promedio$tmpf - 32 )*5/9

ggplot(promedio, aes(x = date, y = cels))+
        geom_col(fill = "black")+
        geom_path(color = "pink")+
        labs(title="Promedio de temperatura diaria en Monterrey", x = "Fecha", y = "Temperatura")

LS0tCnRpdGxlOiAiQVNPUyIKYXV0aG9yOiAiRGllZ28gU2FsYXphciBBMDA4MzU2MjgiCmRhdGU6ICIyMDI0LTA5LTExIgpvdXRwdXQ6CiAgICAgICAgaHRtbF9kb2N1bWVudDoKICAgICAgICAgICAgICAgIHRvYzogVFJVRSAjVGFibGEgZGUgY29udGVuaWRvcwogICAgICAgICAgICAgICAgdG9jX2Zsb2F0OiBUUlVFICNUYWJsYSBmbG90YW50ZQogICAgICAgICAgICAgICAgY29kZV9kb3dubG9hZDogVFJVRSAjRGlzcG9uaWJpbGlkYWQgZGUgZGVzY2FyZ2FyIGPDs2RpZ29zCiAgICAgICAgICAgICAgICB0aGVtZTogZGFya2x5CmVkaXRvcl9vcHRpb25zOiAKICBjaHVua19vdXRwdXRfdHlwZTogY29uc29sZQotLS0KIVtdKC9Vc2Vycy9kaWVnb3NhbGF6YXIvRG9jdW1lbnRzL0Jvb3RjYW1wX1IvQ2xpbWEuZ2lmKQojIDxzcGFuIHN0eWxlPSJjb2xvcjogeWVsbG93OyI+SW50cm9kdWNjacOzbjwvc3Bhbj4KSW5mb3JtYWNpw7NuIG9idGVuaWRhIGRlbCAqQXV0b21hdGVkIFN1cmZhY2UgT2JzZXJ2aW5nIFN5c3RlbSAoQVNPUykqIGRlIGxvcyBhZXJvcHVlcnRvcyBkZSB0b2RvIGVsIG11bmRvLiAgCgoKIyA8c3BhbiBzdHlsZT0iY29sb3I6IHllbGxvdzsiPkxpYnJlcsOtYXM8L3NwYW4+CgpgYGB7cn0KI2luc3RhbGwucGFja2FnZXMoInJpZW0iKQpsaWJyYXJ5KHJpZW0pCmxpYnJhcnkodGlkeXZlcnNlKQpsaWJyYXJ5KGdncGxvdDIpCiNpbnN0YWxsLnBhY2thZ2VzKCJsdWJyaWRhdGUiKQpsaWJyYXJ5KGx1YnJpZGF0ZSkKYGBgCgojIDxzcGFuIHN0eWxlPSJjb2xvcjogeWVsbG93OyI+T2J0ZW5lciB5IGdyYWZpY2FyIGluZm9ybWFjacOzbjwvc3Bhbj4KIyMjIDxzcGFuIHN0eWxlPSJjb2xvcjogeWVsbG93OyI+UGFzbyAxOiBCdXNjYXIgbGEgcmVkIG8gcGHDrXM8L3NwYW4+CmBgYHtyfQojdmlldyhyaWVtX25ldHdvcmtzKCkpCmBgYAojIyMgPHNwYW4gc3R5bGU9ImNvbG9yOiB5ZWxsb3c7Ij5QYXNvIDI6IEJ1c2NhciBsYSBlc3RhY2nDs24gKGNpdWRhZCkgLSBNdHk8L3NwYW4+CmBgYHtyfQojdmlldyhyaWVtX3N0YXRpb25zKCJNWF9fQVNPUyIpKSAjSUQ6IE1NTVkKbW9udGVycmV5IDwtIHJpZW1fbWVhc3VyZXMoIk1NTVkiKQojQW7DoWxpc2lzIGRlc2NyaXB0aXZvCnN1bW1hcnkobW9udGVycmV5KQpzdHIobW9udGVycmV5KQoKI0ZpbHRyYXIgaW5mb3JtYWNpw7NuCm10eV9hZ29zdG8yNCA8LSBzdWJzZXQobW9udGVycmV5LCB2YWxpZCA+PSBhcy5QT1NJWGN0KCIyMDI0LTA4LTAxIDAwOjAwIikgJiB2YWxpZCA8PSBhcy5QT1NJWGN0KCIyMDI0LTA4LTMxIDIzOjU5IikpCgojRWplcmNpY2lvIDE6IFJlYWxpemEgdW5hIGdyw6FmaWNhIGRlIGJhcnJhcyBkZSBsYSB0ZW1wZXJhdHVyYSBwcm9tZWRpbyBkaWFyaWEgZW4gYWdvc3RvIGVuIE1vbnRlcnJleSBlbiDCsEMuCgoKYGBgCgojIyBTb2x1Y2nDs24gMQoKYGBge3J9CiNUcmFuc2Zvcm1hciBkZSDCsEYgYSDCsEM6CgptdHlfYWdvc3RvMjQkdG1wYyA8LSAobXR5X2Fnb3N0bzI0JHRtcGYgLSAzMikqNS85Cm10eV9hZ29zdG8yNF90bXBjIDwtIG10eV9hZ29zdG8yNCR0bXBjCm10eV9hZ29zdG8yNF90bXBjIDwtIGFzLmludGVnZXIobXR5X2Fnb3N0bzI0X3RtcGMpCgptdHlfYWdvc3RvMjRfdG1wYwpgYGAKCmBgYHtyfQpuIDwtIGxlbmd0aChtdHlfYWdvc3RvMjRfdG1wYykgJS8lIDI0CnByb21lZGlvcyA8LSBzYXBwbHkoMTpuLCBmdW5jdGlvbihpKSB7CiAgbWVhbihtdHlfYWdvc3RvMjRfdG1wY1soKGktMSkqMjQgKyAxKTooaSoyNCldKQp9KQoKZGlhIDwtIGMoMTozMSkKcHJvbWVkaW9zIDwtIGFzLmludGVnZXIocHJvbWVkaW9zKQpkZiA9IGRhdGEuZnJhbWUoZGlhLCBwcm9tZWRpb3MpCgpgYGAKCmBgYHtyfQpnZ3Bsb3QoZGYsIGFlcyh4PWRpYSwgeT1wcm9tZWRpb3MpKSsKICAgICAgICBnZW9tX2NvbChmaWxsPSJibHVlIikKICAgICAgICAgICAgICAgCmBgYAoKIyMgU29sdWNpw7NuIDIKCmBgYHtyfQpwcm9tZWRpbyA8LSAgbXR5X2Fnb3N0bzI0ICU+JQogICAgICAgIG11dGF0ZShkYXRlPXltZF9obXModmFsaWQpLCBkYXRlID0gYXMuRGF0ZShkYXRlKSkgJT4lCiAgICAgICAgZ3JvdXBfYnkoZGF0ZSkgJT4lCiAgICAgICAgc3VtbWFyaXplX2lmKGlzLm51bWVyaWMsIH4gbWVhbiguLCBuYS5ybT1UUlVFKSkKYGBgCgpgYGB7cn0KcHJvbWVkaW8kY2VscyA8LSAocHJvbWVkaW8kdG1wZiAtIDMyICkqNS85CgpnZ3Bsb3QocHJvbWVkaW8sIGFlcyh4ID0gZGF0ZSwgeSA9IGNlbHMpKSsKICAgICAgICBnZW9tX2NvbChmaWxsID0gImJsYWNrIikrCiAgICAgICAgZ2VvbV9wYXRoKGNvbG9yID0gInBpbmsiKSsKICAgICAgICBsYWJzKHRpdGxlPSJQcm9tZWRpbyBkZSB0ZW1wZXJhdHVyYSBkaWFyaWEgZW4gTW9udGVycmV5IiwgeCA9ICJGZWNoYSIsIHkgPSAiVGVtcGVyYXR1cmEiKQpgYGAKCgo=