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.

Crear DataSet desde API

Paso 1: Configurar tu entorno de R

Instala las librerías necesarias:

install.packages("httr")
install.packages("jsonlite")

Carga las librerías:

library(httr)
library(jsonlite)

Paso 2: Obtener datos de Firebase

Añade tu URL de Firebase:

firebase_url <- "https://estacion-meteorologica-new.onrender.com/ver"

Realiza una solicitud GET a Firebase:

response <- GET(firebase_url)

Verifica el estado de la respuesta:

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")
}

Paso 3: Convertir los datos en un DataFrame

Convertir los datos JSON a un DataFrame de R:

data_df <- as.data.frame(data_list)

Visualiza los primeros registros para asegurarte de que todo esté correcto:

head(data_df)

Guardar el DataFrame como un archivo CSV (opcional):

write.csv(data_df, "firebase_data_est_clima.csv", row.names = FALSE)

================================================================================

Crear gráficos de estación climatológica

Paso 1: Cargar y revisar el archivo CSV

Cargar librerías necesarias:

library(ggplot2)
library(dplyr)

Leer el archivo CSV:

data <- read.csv("firebase_data_est_clima.csv")

Convertir la columna ‘fecha’ a formato de fecha:

data$fecha <- as.Date(data$fecha)

Verificar los primeros registros del DataFrame:

head(data)

Paso 2: Crear gráficos con fecha específica en el eje X

Gráfico de la Temperatura a lo largo del tiempo

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)
Temperatura a lo largo del tiempo
Temperatura a lo largo del tiempo

Gráfico de la Humedad a lo largo del tiempo

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)
Humedad a lo largo del tiempo
Humedad a lo largo del tiempo

Gráfico de la Presión Atmosférica a lo largo del tiempo

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)
Presión Atmosférica a lo largo del tiempo
Presión Atmosférica a lo largo del tiempo

Gráfico de la Velocidad del Viento a lo largo del tiempo

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)
Velocidad del Viento a lo largo del tiempo
Velocidad del Viento a lo largo del tiempo

Gráfico de la Velocidad Máxima del Viento por día

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.

Primero, necesitamos agregar una columna de fecha sin hora para agrupar por día:

data$fecha_sin_hora <- as.Date(data$fecha)

Calcular la velocidad máxima por día:

data_max_vel <- data %>%
  group_by(fecha_sin_hora) %>%
  summarise(velocidad_maxima = max(velocidad, na.rm = TRUE))

Crear el gráfico:

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)
Velocidad Máxima del Viento por día
Velocidad Máxima del Viento por día

Gráfico del número de registros por día

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.

Primero, necesitamos agregar una columna de fecha sin hora para agrupar por día:

data$fecha_sin_hora <- as.Date(data$fecha)

Calcular el número de registros por día:

data_count <- data %>%
  group_by(fecha_sin_hora) %>%
  summarise(count = n())

Crear el gráfico:

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)
Número de Registros por Día
Número de Registros por Día

Ajuste del Gráfico de Temperatura y Presión Atmosférica

Normalización de los datos para una mejor visualización

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

Gráfico de Temperatura y Presión Atmosférica en el mismo gráfico con dos ejes Y

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)
Temperatura y Presión Atmosférica a lo largo del tiempo
Temperatura y Presión Atmosférica a lo largo del tiempo

Ajuste del Gráfico de Temperatura y Humedad

Normalización de los datos para una mejor visualización

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

Gráfico de Temperatura y Humedad en el mismo gráfico con dos ejes Y

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)
Temperatura y Humedad a lo largo del tiempo
Temperatura y Humedad a lo largo del tiempo