Esta práctica en R se realizó con el propósito de convertir nuestros registros JSON de una base de datos a un dataset formato CSV para su posterior uso, en este caso, limpieza de datos y gráfica de estos.
install.packages("httr")
install.packages("jsonlite")
library(httr)
library(jsonlite)
firebase_url <- "https://estacion-meteorologica-new.onrender.com/ver"
response <- GET(firebase_url)
if (http_status(response)$category == "Success") {
data_json <- content(response, "text")
data_list <- fromJSON(data_json, simplifyDataFrame = TRUE)
} else {
stop("Error al obtener datos de Firebase")
}
data_df <- as.data.frame(data_list)
head(data_df)
write.csv(data_df, "firebase_data_est_clima.csv", row.names = FALSE)
================================================================================
library(ggplot2)
library(dplyr)
data <- read.csv("firebase_data_est_clima.csv")
data$fecha <- as.Date(data$fecha)
head(data)
Este gráfico muestra la variación de la temperatura a lo largo del tiempo, lo que permite observar tendencias y patrones diarios. Es útil para identificar períodos de altas y bajas temperaturas.
temp_plot <- ggplot(data, aes(x = fecha, y = temperatura)) +
geom_line(color = "blue") +
labs(title = "Temperatura a lo largo del tiempo",
x = "Fecha",
y = "Temperatura (°C)") +
theme_minimal() +
scale_x_date(date_breaks = "1 day", date_labels = "%b %d") +
theme(axis.text.x = element_text(angle = 90, hjust = 1))
ggsave("temperatura_tiempo.png", plot = temp_plot, width = 8, height = 5)
print(temp_plot)
Este gráfico muestra cómo varía la humedad con el tiempo, lo que es crucial para entender las condiciones atmosféricas y su relación con la comodidad humana y otros factores climáticos.
humidity_plot <- ggplot(data, aes(x = fecha, y = humedad)) +
geom_line(color = "green") +
labs(title = "Humedad a lo largo del tiempo",
x = "Fecha",
y = "Humedad (%)") +
theme_minimal() +
scale_x_date(date_breaks = "1 day", date_labels = "%b %d") +
theme(axis.text.x = element_text(angle = 90, hjust = 1))
ggsave("humedad_tiempo.png", plot = humidity_plot, width = 8, height = 5)
print(humidity_plot)
Este gráfico es útil para observar los cambios en la presión atmosférica, lo cual puede ayudar a predecir el clima. Por ejemplo, una caída en la presión puede indicar la aproximación de una tormenta.
pressure_plot <- ggplot(data, aes(x = fecha, y = presion)) +
geom_line(color = "red") +
labs(title = "Presión Atmosférica a lo largo del tiempo",
x = "Fecha",
y = "Presión (hPa)") +
theme_minimal() +
scale_x_date(date_breaks = "1 day", date_labels = "%b %d") +
theme(axis.text.x = element_text(angle = 90, hjust = 1))
ggsave("presion_tiempo.png", plot = pressure_plot, width = 8, height = 5)
print(pressure_plot)
Este gráfico muestra cómo varía la velocidad del viento, lo que es importante para entender patrones de viento y su impacto en actividades al aire libre y operaciones aeronáuticas.
wind_speed_plot <- ggplot(data, aes(x = fecha, y = velocidad)) +
geom_line(color = "purple") +
labs(title = "Velocidad del Viento a lo largo del tiempo",
x = "Fecha",
y = "Velocidad del Viento (m/s)") +
theme_minimal() +
scale_x_date(date_breaks = "1 day", date_labels = "%b %d") +
theme(axis.text.x = element_text(angle = 90, hjust = 1))
ggsave("velocidad_viento_tiempo.png", plot = wind_speed_plot, width = 8, height = 5)
print(wind_speed_plot)
Este gráfico destaca la velocidad máxima del viento registrada cada día, proporcionando una visión clara de los picos de velocidad del viento, lo que puede ser útil para analizar eventos extremos.
data$fecha_sin_hora <- as.Date(data$fecha)
data_max_vel <- data %>%
group_by(fecha_sin_hora) %>%
summarise(velocidad_maxima = max(velocidad, na.rm = TRUE))
max_wind_speed_plot <- ggplot(data_max_vel, aes(x = fecha_sin_hora, y = velocidad_maxima)) +
geom_line(color = "orange") +
labs(title = "Velocidad Máxima del Viento por día",
x = "Fecha",
y = "Velocidad Máxima del Viento (m/s)") +
theme_minimal() +
scale_x_date(date_breaks = "1 day", date_labels = "%b %d") +
theme(axis.text.x = element_text(angle = 90, hjust = 1))
ggsave("velocidad_maxima_dia.png", plot = max_wind_speed_plot, width = 8, height = 5)
print(max_wind_speed_plot)
Este gráfico muestra el número de registros de datos recopilados cada día, lo que permite observar la frecuencia de recolección de datos y detectar posibles inconsistencias en la recolección diaria.
data$fecha_sin_hora <- as.Date(data$fecha)
data_count <- data %>%
group_by(fecha_sin_hora) %>%
summarise(count = n())
count_plot <- ggplot(data_count, aes(x = fecha_sin_hora, y = count)) +
geom_bar(stat = "identity", fill = "skyblue") +
labs(title = "Número de Registros por Día",
x = "Fecha",
y = "Número de Registros") +
theme_minimal()
ggsave("numero_registros_dia.png", plot = count_plot, width = 8, height = 5)
print(count_plot)
Normalizamos los datos para poder comparar la temperatura y la presión atmosférica en un solo gráfico, utilizando una escala común.
data$presion_norm <- (data$presion - min(data$presion, na.rm = TRUE)) / (max(data$presion, na.rm = TRUE) - min(data$presion, na.rm = TRUE)) * 100
data$temperatura_norm <- (data$temperatura - min(data$temperatura, na.rm = TRUE)) / (max(data$temperatura, na.rm = TRUE) - min
(data$temperatura, na.rm = TRUE)) * 100
Este gráfico muestra la relación entre la temperatura y la presión atmosférica, lo que puede proporcionar información sobre cómo se afectan mutuamente estas dos variables.
temp_pres_plot <- ggplot(data, aes(x = fecha)) +
geom_line(aes(y = temperatura_norm, colour = "Temperatura"), size = 1) +
geom_line(aes(y = presion_norm, colour = "Presión Atmosférica"), size = 1, linetype = "dashed") +
scale_color_manual(values = c("Temperatura" = "red", "Presión Atmosférica" = "green")) +
labs(title = "Temperatura y Presión Atmosférica a lo largo del tiempo",
x = "Fecha",
y = "Valores Normalizados (%)") +
scale_y_continuous(sec.axis = sec_axis(~ ., name = "Presión (hPa)")) +
theme_minimal() +
scale_x_date(date_breaks = "1 day", date_labels = "%b %d") +
theme(axis.text.x = element_text(angle = 90, hjust = 1),
axis.title.y.left = element_text(color = "red"),
axis.title.y.right = element_text(color = "green"),
legend.position = "bottom")
ggsave("temp_pres_tiempo.png", plot = temp_pres_plot, width = 10, height = 6)
print(temp_pres_plot)
Normalizamos los datos de temperatura y humedad para poder compararlos en un solo gráfico, lo que facilita la observación de cualquier relación entre estas dos variables.
data$humedad_norm <- (data$humedad - min(data$humedad, na.rm = TRUE)) / (max(data$humedad, na.rm = TRUE) - min(data$humedad, na.rm = TRUE)) * 100
Este gráfico ayuda a visualizar cómo la temperatura y la humedad varían juntas a lo largo del tiempo, proporcionando una vista comprensiva de su interacción.
temp_hum_plot <- ggplot(data, aes(x = fecha)) +
geom_line(aes(y = temperatura_norm, colour = "Temperatura"), size = 1) +
geom_line(aes(y = humedad_norm, colour = "Humedad"), size = 1, linetype = "dashed") +
scale_color_manual(values = c("Temperatura" = "red", "Humedad" = "blue")) +
labs(title = "Temperatura y Humedad a lo largo del tiempo",
x = "Fecha",
y = "Valores Normalizados (%)") +
scale_y_continuous(sec.axis = sec_axis(~ ., name = "Humedad (%)")) +
theme_minimal() +
scale_x_date(date_breaks = "1 day", date_labels = "%b %d") +
theme(axis.text.x = element_text(angle = 90, hjust = 1),
axis.title.y.left = element_text(color = "red"),
axis.title.y.right = element_text(color = "blue"),
legend.position = "bottom")
ggsave("temp_hum_tiempo.png", plot = temp_hum_plot, width = 10, height = 6)
print(temp_hum_plot)