Advertisement
fvalderrama01

estaciones

Apr 24th, 2023 (edited)
177
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
R 7.18 KB | None | 0 0
  1. # Librerías
  2. library(dplyr)
  3. library(lubridate)
  4. library(ggplot2)
  5. library(readr)
  6. library(tidyr)
  7.  
  8. # Establecer directorio de trabajo y cargar datos
  9. getwd()
  10. wdirectory <- "C:/Users/Flavio/Documents/Programación aplicada"
  11. setwd(wdirectory)
  12.  
  13. # Cargar datos
  14. df <- read_csv(file.choose(), col_names = TRUE)
  15. n <- 43181
  16.  
  17. # Pedimos al usuario que ingrese el código de la estación pluviométrica de interés
  18. estacionID <- readline(prompt = "Ingrese el código de identificación de la estación pluviométrica: ")
  19. estacionID <- as.character(estacionID) # convertir a cadena de caracteres
  20.  
  21. # Verificamos que el código ingresado corresponda a una columna existente en df
  22. if (!(estacionID %in% colnames(df))) {
  23.   stop("El código ingresado no corresponde a una columna existente en df.")
  24. }
  25.  
  26. # Eliminar los valores -9999 del dataframe y reemplazarlos por NA
  27. df <- df %>% mutate_all(~ replace(., . == -9999, NA))
  28.  
  29. # Remover las filas que contengan valores NA en la columna de precipitación
  30. df <- df %>% drop_na(!!sym(estacionID))
  31.  
  32.  
  33. #Valores no reconidos en el formato fecha
  34. # verificar los valores que no se pudieron convertir
  35. #failed_dates <- parse_date_time(df_acotado$fecha, orders = c("ymd", "dmy", "mdy"))
  36. #failed_dates <- df_acotado$fecha[is.na(failed_dates)]
  37. #print(failed_dates)
  38.  
  39. #failed_dates <- as.character(df[,1][is.na(ymd(df[,1]))])
  40. #failed_rows <- df %>% filter(df[,1] %in% failed_dates)
  41. #print(failed_rows)
  42. ##############################################################################################
  43.  
  44.  
  45. # Definimos dataframe acotado y agregamos la columna de temporada
  46. df_limpio <- df[-(1:14), ] %>% #se restan 14 filas del dataframe
  47.   select(fecha = 1, !!sym(estacionID)) %>%
  48.   mutate(fecha = ymd(fecha),
  49.          year = year(fecha),
  50.          month = month(fecha),
  51.          season = case_when(
  52.            month %in% 3:5 ~ "Autumn",
  53.            month %in% 6:8 ~ "Winter",
  54.            month %in% 9:11 ~ "Spring",
  55.            TRUE ~ "Summer")) %>%
  56.   mutate(!!sym(estacionID) := as.numeric(!!sym(estacionID)))
  57.  
  58. #### E D A #####
  59.  
  60. # Agrupar los datos por fecha y calcular la precipitación diaria
  61. df_diario <- df_limpio %>%
  62.   group_by(fecha) %>%
  63.   summarize(precipitation = sum(!!sym(estacionID), na.rm = TRUE),
  64.             n = n(), #entrega uno
  65.             n_missing = sum(is.na(!!sym(estacionID))),
  66.             mean = mean(!!sym(estacionID), na.rm = TRUE),
  67.             sd = sd(!!sym(estacionID), na.rm = TRUE),
  68.             quantiles = quantile(!!sym(estacionID), probs = c(0.25, 0.5, 0.75), na.rm = TRUE),
  69.             iqr = IQR(!!sym(estacionID), na.rm = TRUE), #rango intercuartil IQR = Q3 - Q1
  70.             min = min(!!sym(estacionID), na.rm = TRUE),
  71.             max = max(!!sym(estacionID), na.rm = TRUE))
  72.  
  73. # Imprimir resumen
  74. summary(df_diario)
  75. # Graficar la secuencia temporal diaria
  76.   ggplot(df_diario, aes(x = fecha, y = precipitation)) +
  77.     geom_line() +
  78.     labs(x = "Fecha", y = "Precipitación diaria", title = "Secuencia temporal de precipitación diaria")
  79.  
  80. # Exportar a PNG
  81. ggsave("secuencia_temporal_diaria.png", plot = last_plot(), width = 4, height = 6, dpi = 300)
  82.  
  83. # Exportar a PDF
  84. ggsave("secuencia_temporal_diaria.pdf", plot = last_plot(), width = 8.5, height = 11, units = "in", dpi = 300)
  85.  
  86.  
  87.  
  88.  
  89.  
  90.  
  91.  
  92. # Agrupar los datos por año y mes, y calcular la precipitación mensual
  93.   df_mensual <- df_limpio %>%
  94.     group_by(year, month) %>%
  95.     summarize(precipitation = sum(!!sym(estacionID), na.rm = TRUE),
  96.               n = n(),
  97.               n_missing = sum(is.na(!!sym(estacionID))),
  98.               mean = mean(!!sym(estacionID), na.rm = TRUE),
  99.               sd = sd(!!sym(estacionID), na.rm = TRUE),
  100.               quantiles = quantile(!!sym(estacionID), probs = c(0.25, 0.5, 0.75), na.rm = TRUE),
  101.               iqr = IQR(!!sym(estacionID), na.rm = TRUE),
  102.               min = min(!!sym(estacionID), na.rm = TRUE),
  103.               max = max(!!sym(estacionID), na.rm = TRUE))
  104.  
  105. #imprimir resumen
  106. summary(df_mensual)
  107. # Graficar la secuencia temporal mensual
  108. ggplot(df_mensual, aes(x = ymd(paste(year, month, "01", sep = "-")), y = precipitation)) +
  109.   geom_line() +
  110.   labs(x = "Fecha", y = "Precipitación", title = "Secuencia temporal de precipitación mensual")
  111. # Exportar a PNG
  112. ggsave("precipitacion_mensual.png", plot = last_plot(), width = 4, height = 6, dpi = 300)
  113.  
  114. # Exportar a PDF
  115. ggsave("precipitacion_mensual.pdf", plot = last_plot(), width = 8.5, height = 11, units = "in", dpi = 300)
  116.  
  117.  
  118.  
  119.  
  120.  
  121.  
  122.  
  123.  
  124. # Agrupar los datos por temporada y año, y calcular la precipitación estacional
  125. df_estacional <- df_limpio %>%
  126.   mutate(date = ymd(fecha),
  127.          year = year(date),
  128.          quarter = quarter(date)) %>%
  129.   mutate(season = case_when(
  130.     quarter %in% c(1, 2, 3) ~ "Summer",
  131.     quarter %in% c(4, 5, 6) ~ "Autumn",
  132.     quarter %in% c(7, 8, 9) ~ "Winter",
  133.     quarter %in% c(10, 11, 12) ~ "Spring"
  134.   )) %>%
  135.   group_by(year, quarter, season) %>%
  136.   summarize(precipitation = sum(!!sym(estacionID), na.rm = TRUE),
  137.             n = n(),
  138.             n_missing = sum(is.na(!!sym(estacionID))),
  139.             mean = mean(!!sym(estacionID), na.rm = TRUE),
  140.             sd = sd(!!sym(estacionID), na.rm = TRUE),
  141.             quantiles = quantile(!!sym(estacionID), probs = c(0.25, 0.5, 0.75), na.rm = TRUE),
  142.             iqr = IQR(!!sym(estacionID), na.rm = TRUE),
  143.             min = min(!!sym(estacionID), na.rm = TRUE),
  144.             max = max(!!sym(estacionID), na.rm = TRUE))
  145.  
  146. #grafica por estación
  147. ggplot(df_estacional, aes(x = year, y = precipitation, color = season)) +
  148.   geom_line() +
  149.   labs(x = "Año", y = "Precipitación", title = "Secuencia temporal de precipitación estacional") +
  150.   scale_color_manual(values = c("Autumn" = "#FFA500", "Winter" = "#0000FF", "Spring" = "#00FF00", "Summer" = "#FF0000"))
  151.  
  152.  
  153.  
  154.  
  155. # Exportar a PNG
  156. ggsave("precipitacion_estacional.png", plot = last_plot(), width = 4, height = 6, dpi = 300)
  157.  
  158. # Exportar a PDF
  159. ggsave("precipitacion_estacional.pdf", plot = last_plot(), width = 8.5, height = 11, units = "in", dpi = 300)
  160.  
  161.  
  162.  
  163.  
  164.  
  165.  
  166.  
  167. # Agrupar los datos por año y calcular la precipitación anual
  168. df_anual <- df_limpio %>%
  169.   mutate(year = year(fecha)) %>%
  170.   group_by(year) %>%
  171.   summarize(precipitation = sum(!!sym(estacionID), na.rm = TRUE),
  172.             n = n(),
  173.             n_missing = sum(is.na(!!sym(estacionID))),
  174.             mean = mean(!!sym(estacionID), na.rm = TRUE),
  175.             sd = sd(!!sym(estacionID), na.rm = TRUE),
  176.             quantiles = quantile(!!sym(estacionID), probs = c(0.25, 0.5, 0.75), na.rm = TRUE),
  177.             iqr = IQR(!!sym(estacionID), na.rm = TRUE),
  178.             min = min(!!sym(estacionID), na.rm = TRUE),
  179.             max = max(!!sym(estacionID), na.rm = TRUE))
  180.  
  181. # Graficar la secuencia temporal anual
  182. ggplot(df_anual, aes(x = year, y = precipitation)) +
  183.   geom_line() +
  184.   labs(x = "Año", y = "Precipitación", title = "Secuencia temporal de precipitación anual")
  185.                      
  186.  
  187.  
  188. #Exportar cada una de las figuras anteriores a formato PNG y PDF.
  189. # Exportar a PNG
  190. ggsave("precipitacion_anual.png", plot = last_plot(), width = 4, height = 6, dpi = 300)
  191.  
  192. # Exportar a PDF
  193. ggsave("precipitacion_anual.pdf", plot = last_plot(), width = 8.5, height = 11, units = "in", dpi = 300)
  194.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement