Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- # Librerías
- library(dplyr)
- library(lubridate)
- library(ggplot2)
- library(readr)
- library(tidyr)
- # Establecer directorio de trabajo y cargar datos
- getwd()
- wdirectory <- "C:/Users/Flavio/Documents/Programación aplicada"
- setwd(wdirectory)
- # Cargar datos
- df <- read_csv(file.choose(), col_names = TRUE)
- n <- 43181
- # Pedimos al usuario que ingrese el código de la estación pluviométrica de interés
- estacionID <- readline(prompt = "Ingrese el código de identificación de la estación pluviométrica: ")
- estacionID <- as.character(estacionID) # convertir a cadena de caracteres
- # Verificamos que el código ingresado corresponda a una columna existente en df
- if (!(estacionID %in% colnames(df))) {
- stop("El código ingresado no corresponde a una columna existente en df.")
- }
- # Eliminar los valores -9999 del dataframe y reemplazarlos por NA
- df <- df %>% mutate_all(~ replace(., . == -9999, NA))
- # Remover las filas que contengan valores NA en la columna de precipitación
- df <- df %>% drop_na(!!sym(estacionID))
- #Valores no reconidos en el formato fecha
- # verificar los valores que no se pudieron convertir
- #failed_dates <- parse_date_time(df_acotado$fecha, orders = c("ymd", "dmy", "mdy"))
- #failed_dates <- df_acotado$fecha[is.na(failed_dates)]
- #print(failed_dates)
- #failed_dates <- as.character(df[,1][is.na(ymd(df[,1]))])
- #failed_rows <- df %>% filter(df[,1] %in% failed_dates)
- #print(failed_rows)
- ##############################################################################################
- # Definimos dataframe acotado y agregamos la columna de temporada
- df_limpio <- df[-(1:14), ] %>% #se restan 14 filas del dataframe
- select(fecha = 1, !!sym(estacionID)) %>%
- mutate(fecha = ymd(fecha),
- year = year(fecha),
- month = month(fecha),
- season = case_when(
- month %in% 3:5 ~ "Autumn",
- month %in% 6:8 ~ "Winter",
- month %in% 9:11 ~ "Spring",
- TRUE ~ "Summer")) %>%
- mutate(!!sym(estacionID) := as.numeric(!!sym(estacionID)))
- #### E D A #####
- # Agrupar los datos por fecha y calcular la precipitación diaria
- df_diario <- df_limpio %>%
- group_by(fecha) %>%
- summarize(precipitation = sum(!!sym(estacionID), na.rm = TRUE),
- n = n(), #entrega uno
- n_missing = sum(is.na(!!sym(estacionID))),
- mean = mean(!!sym(estacionID), na.rm = TRUE),
- sd = sd(!!sym(estacionID), na.rm = TRUE),
- quantiles = quantile(!!sym(estacionID), probs = c(0.25, 0.5, 0.75), na.rm = TRUE),
- iqr = IQR(!!sym(estacionID), na.rm = TRUE), #rango intercuartil IQR = Q3 - Q1
- min = min(!!sym(estacionID), na.rm = TRUE),
- max = max(!!sym(estacionID), na.rm = TRUE))
- # Imprimir resumen
- summary(df_diario)
- # Graficar la secuencia temporal diaria
- ggplot(df_diario, aes(x = fecha, y = precipitation)) +
- geom_line() +
- labs(x = "Fecha", y = "Precipitación diaria", title = "Secuencia temporal de precipitación diaria")
- # Exportar a PNG
- ggsave("secuencia_temporal_diaria.png", plot = last_plot(), width = 4, height = 6, dpi = 300)
- # Exportar a PDF
- ggsave("secuencia_temporal_diaria.pdf", plot = last_plot(), width = 8.5, height = 11, units = "in", dpi = 300)
- # Agrupar los datos por año y mes, y calcular la precipitación mensual
- df_mensual <- df_limpio %>%
- group_by(year, month) %>%
- summarize(precipitation = sum(!!sym(estacionID), na.rm = TRUE),
- n = n(),
- n_missing = sum(is.na(!!sym(estacionID))),
- mean = mean(!!sym(estacionID), na.rm = TRUE),
- sd = sd(!!sym(estacionID), na.rm = TRUE),
- quantiles = quantile(!!sym(estacionID), probs = c(0.25, 0.5, 0.75), na.rm = TRUE),
- iqr = IQR(!!sym(estacionID), na.rm = TRUE),
- min = min(!!sym(estacionID), na.rm = TRUE),
- max = max(!!sym(estacionID), na.rm = TRUE))
- #imprimir resumen
- summary(df_mensual)
- # Graficar la secuencia temporal mensual
- ggplot(df_mensual, aes(x = ymd(paste(year, month, "01", sep = "-")), y = precipitation)) +
- geom_line() +
- labs(x = "Fecha", y = "Precipitación", title = "Secuencia temporal de precipitación mensual")
- # Exportar a PNG
- ggsave("precipitacion_mensual.png", plot = last_plot(), width = 4, height = 6, dpi = 300)
- # Exportar a PDF
- ggsave("precipitacion_mensual.pdf", plot = last_plot(), width = 8.5, height = 11, units = "in", dpi = 300)
- # Agrupar los datos por temporada y año, y calcular la precipitación estacional
- df_estacional <- df_limpio %>%
- mutate(date = ymd(fecha),
- year = year(date),
- quarter = quarter(date)) %>%
- mutate(season = case_when(
- quarter %in% c(1, 2, 3) ~ "Summer",
- quarter %in% c(4, 5, 6) ~ "Autumn",
- quarter %in% c(7, 8, 9) ~ "Winter",
- quarter %in% c(10, 11, 12) ~ "Spring"
- )) %>%
- group_by(year, quarter, season) %>%
- summarize(precipitation = sum(!!sym(estacionID), na.rm = TRUE),
- n = n(),
- n_missing = sum(is.na(!!sym(estacionID))),
- mean = mean(!!sym(estacionID), na.rm = TRUE),
- sd = sd(!!sym(estacionID), na.rm = TRUE),
- quantiles = quantile(!!sym(estacionID), probs = c(0.25, 0.5, 0.75), na.rm = TRUE),
- iqr = IQR(!!sym(estacionID), na.rm = TRUE),
- min = min(!!sym(estacionID), na.rm = TRUE),
- max = max(!!sym(estacionID), na.rm = TRUE))
- #grafica por estación
- ggplot(df_estacional, aes(x = year, y = precipitation, color = season)) +
- geom_line() +
- labs(x = "Año", y = "Precipitación", title = "Secuencia temporal de precipitación estacional") +
- scale_color_manual(values = c("Autumn" = "#FFA500", "Winter" = "#0000FF", "Spring" = "#00FF00", "Summer" = "#FF0000"))
- # Exportar a PNG
- ggsave("precipitacion_estacional.png", plot = last_plot(), width = 4, height = 6, dpi = 300)
- # Exportar a PDF
- ggsave("precipitacion_estacional.pdf", plot = last_plot(), width = 8.5, height = 11, units = "in", dpi = 300)
- # Agrupar los datos por año y calcular la precipitación anual
- df_anual <- df_limpio %>%
- mutate(year = year(fecha)) %>%
- group_by(year) %>%
- summarize(precipitation = sum(!!sym(estacionID), na.rm = TRUE),
- n = n(),
- n_missing = sum(is.na(!!sym(estacionID))),
- mean = mean(!!sym(estacionID), na.rm = TRUE),
- sd = sd(!!sym(estacionID), na.rm = TRUE),
- quantiles = quantile(!!sym(estacionID), probs = c(0.25, 0.5, 0.75), na.rm = TRUE),
- iqr = IQR(!!sym(estacionID), na.rm = TRUE),
- min = min(!!sym(estacionID), na.rm = TRUE),
- max = max(!!sym(estacionID), na.rm = TRUE))
- # Graficar la secuencia temporal anual
- ggplot(df_anual, aes(x = year, y = precipitation)) +
- geom_line() +
- labs(x = "Año", y = "Precipitación", title = "Secuencia temporal de precipitación anual")
- #Exportar cada una de las figuras anteriores a formato PNG y PDF.
- # Exportar a PNG
- ggsave("precipitacion_anual.png", plot = last_plot(), width = 4, height = 6, dpi = 300)
- # Exportar a PDF
- ggsave("precipitacion_anual.pdf", plot = last_plot(), width = 8.5, height = 11, units = "in", dpi = 300)
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement