NASA POWER

El proyecto POWER (Predicción de Recursos Energéticos Mundiales) de la NASA es una iniciativa que busca enriquecer y expandir nuestra comprensión y uso de las energías renovables. Este proyecto se basa en la tecnología de los satélites para generar nuevos conjuntos de datos que pueden ayudar a mejorar los existentes.

El corazón de este proyecto es su enfoque en tres comunidades clave: la energía renovable, los edificios sostenibles y la agroclimatología. A través de la recopilación y distribución de datos solares y meteorológicos, el proyecto POWER busca apoyar y fomentar el uso de energías renovables, la eficiencia energética en los edificios y la agricultura sostenible.

data_huancavelica <- read.csv("POWER_Point_Monthly_Timeseries_1990_2020_012d7931S_074d5839W_LST.csv", skip = 15)
head(data_huancavelica)
Nombres_filas <- data_huancavelica[1,3:14]
Nombres_filas <- t(Nombres_filas)
library(agricolae)
rownames(Nombres_filas)
##  [1] "JAN" "FEB" "MAR" "APR" "MAY" "JUN" "JUL" "AUG" "SEP" "OCT" "NOV" "DEC"
plot.ts(Nombres_filas, type = "b", col = "blue", axes = F)
axis(1,1:12, rownames(Nombres_filas), cex = 0.7)
axis(2, cex=0.7)
grid(col= "red")

SENAMHI

El Servicio Nacional de Meteorología e Hidrología del Perú, conocido como SENAMHI, es como un guardián del clima y el agua en Perú. Su propósito es entender el pulso de la naturaleza, recogiendo y compartiendo información sobre el clima, el agua y las condiciones atmosféricas de manera confiable y oportuna para todos los peruanos.

Como parte del Ministerio del Ambiente, SENAMHI es como el latido del corazón en una red de más de 900 estaciones meteorológicas e hidrológicas repartidas por todo el país. Los expertos de SENAMHI, como detectives del clima, estudian y pronostican eventos extremos, desde lluvias torrenciales y vientos fuertes hasta heladas, y exploran cómo el cambio climático podría afectar nuestros preciados recursos hídricos.

Acobamba - Huancavelica

Acobamba: Acobamba es la capital del distrito y provincia homónimos, ubicada en el departamento de Huancavelica, Perú1. El pueblo de Acobamba está situado a una altitud de 3423 m.s.n.m1. La distancia desde Huancavelica, para llegar hasta Acobamba, es de aproximadamente 106 kilómetros2.

Acobamba conserva la belleza de los pueblos andinos del Perú. Su nombre en quechua, Aqupampa, significa “llanura de arena”, probablemente debido a su tradición agrícola1. Los cerros que rodean todo el distrito le dan el típico aspecto interandino. La agricultura y la ganadería son las principales actividades económicas de la región, lo que, junto con su clima frío y moderadamente lluvioso3, hacen de Acobamba un lugar ideal para el turismo nacional e internacional.

Los Datos Hidrometeorológicos a nivel nacional de Acobamba, proporcionados por el Servicio Nacional de Meteorología e Hidrología del Perú (SENAMHI), incluyen información sobre las condiciones meteorológicas e hidrológicas en la región. Esto abarca temperaturas máximas y mínimas del aire, precipitaciones pluviales, humedad relativa y niveles de los principales ríos45. Estos datos se reportan horaria y diariamente. Acobamba es una de las estaciones donde se recopilan estos valiosos registros4

Lectura de Datos

library(readr)
data_huancavelica_sanamhi<-read.table("qc00000659.txt",F)
str(data_huancavelica_sanamhi)
## 'data.frame':    18077 obs. of  6 variables:
##  $ V1: int  1964 1964 1964 1964 1964 1964 1964 1964 1964 1964 ...
##  $ V2: int  12 12 12 12 12 12 12 12 12 12 ...
##  $ V3: int  3 4 5 6 7 8 9 10 11 12 ...
##  $ V4: num  0 0 0 0 0 0 0 0.7 5 9 ...
##  $ V5: num  -99.9 15.8 18.4 20.4 17.8 20 18.2 17.6 20 20.2 ...
##  $ V6: num  -99.9 7 7.8 7 6.4 7.5 7 6 8.2 6.4 ...

Los datos de las columnas corresponden a:

Columna A: Año

Columna B: Mes

Columna C: Día

Columna D: Precipitación acumulada

Columna E: Temperatura máxima

Columna F: Temperatura mínima

head(data_huancavelica_sanamhi)

Cambiando Nombres de Etiquetas

names(data_huancavelica_sanamhi) <- c("Año", "Mes", "Día","Precipitación", "Temp.máxima", "Temp.mínima")
head(data_huancavelica_sanamhi)

Limpieza de Datos - Omitiendo valores N.A

data_huancavelica_sanamhi$Precipitación[data_huancavelica_sanamhi$Precipitación == -99.9] <- NA
data_huancavelica_sanamhi$Temp.máxima[data_huancavelica_sanamhi$Temp.máxima == -99.9] <- NA
data_huancavelica_sanamhi$Temp.mínima[data_huancavelica_sanamhi$Temp.mínima == -99.9] <- NA
na.omit(data_huancavelica_sanamhi) -> data_huancavelica_sanamhi
sapply(data_huancavelica_sanamhi, function(x) sum(is.na(x)))
##           Año           Mes           Día Precipitación   Temp.máxima 
##             0             0             0             0             0 
##   Temp.mínima 
##             0
library(DataExplorer)
plot_missing(data_huancavelica_sanamhi) 

Grafico Senamhi

library(ggplot2)
library(lubridate)
## 
## Attaching package: 'lubridate'
## The following objects are masked from 'package:base':
## 
##     date, intersect, setdiff, union
data_huancavelica_sanamhi$Fecha <- make_date(data_huancavelica_sanamhi$Año, data_huancavelica_sanamhi$Mes, data_huancavelica_sanamhi$Día)

gg <- ggplot(data_huancavelica_sanamhi, aes(x = Fecha)) +
  geom_line(aes(y = data_huancavelica_sanamhi$Temp.máxima, color = "Temp. Máxima")) +
  geom_line(aes(y = data_huancavelica_sanamhi$Temp.mínima, color = "Temp. Mínima")) +
  geom_bar(aes(y = data_huancavelica_sanamhi$Precipitación * 10, fill = "Precipitación"), stat = "identity") +
  scale_color_manual(values = c("Temp. Máxima" = "red", "Temp. Mínima" = "blue")) +
  scale_fill_manual(values = c("Precipitación" = "skyblue")) +
  labs(title = "Estacion:ACOBAMBA Dep: HUANCAVELICA , Prov: ACOBAMBA" , "Dist: ACOBAMBA", x = "Fecha", y = "Temperatura (°C) / Precipitación (mm)") +
  theme_minimal() +
  theme(legend.position = "bottom") + 
  scale_y_continuous(limits = c(0, 200))
print(gg)
## Warning: Removed 143 rows containing missing values or values outside the scale range
## (`geom_bar()`).

La gráfica muestra datos climáticos de la estación Acobamba en Huancavelica, que incluyen la precipitación y las temperaturas máxima y mínima desde 1964 hasta aproximadamente 2014. Aquí tienes un resumen de lo que indica:

Precipitación (en azul): Representada en el eje Y derecho, muestra la cantidad de lluvia medida en milímetros.

Temperatura Máxima (en rojo): Indicada en el eje Y izquierdo, muestra las temperaturas más altas registradas en grados Celsius.

Temperatura Mínima (en rojo): También en el eje Y izquierdo, muestra las temperaturas más bajas registradas.

Variabilidad Temporal: El eje X muestra los años desde 1964 hasta alrededor de 2014, destacando la variabilidad significativa en la precipitación y las temperaturas a lo largo del tiempo. Esta información es útil para entender las tendencias climáticas y posibles cambios en el clima de la región de Acobamba a lo largo de los años.

Haciendo comparativa de la data NASA POWER - SENAMHI para el año 1995

data_huancavelica <- read.csv("POWER_Point_Monthly_Timeseries_1990_2020_012d7931S_074d5839W_LST.csv", skip = 15)

Nombres_filas<-data_huancavelica[data_huancavelica$YEAR == 1995,]
Nombres_filas<-Nombres_filas[,1:14]

datos_comparados<-tidyr::pivot_longer(Nombres_filas, cols = -c(PARAMETER, YEAR),
                             names_to = "MONTH", values_to = "VALUE")
data_humedad <- datos_comparados[datos_comparados$PARAMETER=='RH2M',]
data_tempMax <- datos_comparados[datos_comparados$PARAMETER=='T2M_MAX',]
data_tempMin <- datos_comparados[datos_comparados$PARAMETER=='T2M_MIN',]
data_NB <- datos_comparados[datos_comparados$PARAMETER=='CLOUD_AMT',]
data_TempDiar <- datos_comparados[datos_comparados$PARAMETER=='T2M_RANGE',]
data_Suma_PrecipitacionTotal <- datos_comparados[datos_comparados$PARAMETER=='PRECTOTCORR_SUM',]
data_Precipitacion_Total <- datos_comparados[datos_comparados$PARAMETER=='PRECTOTCORR',]

Temperatura máxima

temperatura_maxima<- data_huancavelica_sanamhi[data_huancavelica_sanamhi$Año == 1995,]
temperatura_maxima[c(1,2,5)] -> temperatura_filtrada_sanmhi

library(dplyr)
## 
## Attaching package: 'dplyr'
## The following objects are masked from 'package:stats':
## 
##     filter, lag
## The following objects are masked from 'package:base':
## 
##     intersect, setdiff, setequal, union
 senamhi_temperatura_maxima <-temperatura_filtrada_sanmhi |>  dplyr::group_by(Mes) |>
   summarise(TEMPERATURA_MAXIMA_OBSERVADA = mean(temperatura_maxima))
## Warning: There were 12 warnings in `summarise()`.
## The first warning was:
## ℹ In argument: `TEMPERATURA_MAXIMA_OBSERVADA = mean(temperatura_maxima)`.
## ℹ In group 1: `Mes = 1`.
## Caused by warning in `mean.default()`:
## ! argument is not numeric or logical: returning NA
## ℹ Run `dplyr::last_dplyr_warnings()` to see the 11 remaining warnings.
data_tempMax <- data.frame(Mes = 1:12,MONTH  = data_tempMax)
data_tempMax_1 <- merge(data_tempMax, senamhi_temperatura_maxima, all.x = TRUE)
names(data_tempMax_1) <- c("idx", "PARAMETRO", "AÑO","MES", "TEMPERATURA_MAXIMA_ESPERADA", "TEMPERATURA_MAXIMA_OBSERVADA")
data_tempMax_1$ERROR.RELATIVO <- abs((data_tempMax_1$TEMPERATURA_MAXIMA_ESPERADA - data_tempMax_1$TEMPERATURA_MAXIMA_ESPERADA) /
                               data_tempMax_1$TEMPERATURA_MAXIMA_OBSERVADA)
data_tempMax_1

Temperatura mínima

temp_minina <- data_huancavelica_sanamhi[data_huancavelica_sanamhi$Año == 1995,]
temp_minina_filt<-temp_minina[c(1,2,6)] 
View(temp_minina)
library(dplyr)
temp_minina_filt |>  dplyr::group_by(Mes) |>
  summarise(TEMP.MINIMA.OBS = mean(temp_minina)) -> senamhi.temp.minima
## Warning: There were 12 warnings in `summarise()`.
## The first warning was:
## ℹ In argument: `TEMP.MINIMA.OBS = mean(temp_minina)`.
## ℹ In group 1: `Mes = 1`.
## Caused by warning in `mean.default()`:
## ! argument is not numeric or logical: returning NA
## ℹ Run `dplyr::last_dplyr_warnings()` to see the 11 remaining warnings.
data_tempMin <- data.frame(V1 = 1:12,MONTH  = data_tempMin)
data_tempMin1 <- merge(data_tempMin, senamhi.temp.minima, all.x = TRUE)
names(data_tempMin1) <- c("idx", "PARAMETRO", "AÑO","MES", "TEMP.MINIMA.ESP", "TEMP.MINIMA.OBS")

data_tempMin1$ERROR.RELATIVO <- abs((data_tempMin1$TEMP.MINIMA.OBS - abs(data_tempMin1$TEMP.MINIMA.ESP) )/
                               data_tempMin1$TEMP.MINIMA.OBS)
data_tempMin1

Precipitación

precipitacion <- data_huancavelica_sanamhi[data_huancavelica_sanamhi$Año == 1995,]
precipitacion_filtrada<-precipitacion[c(1,2,4)]

library(dplyr)
precipitacion_Senamhi<-precipitacion_filtrada |>  dplyr::group_by(Mes) |>
  summarise(PRECIPITACION_OBSERVADA = sum(Precipitación))

data_Precipitacion_Total <- data.frame(Mes = 1:12,MONTH  = data_Precipitacion_Total)
data_Precipitacion_Total_1 <- merge(data_Precipitacion_Total, precipitacion_Senamhi, all.x = TRUE)
names(data_Precipitacion_Total_1) <- c("idx", "PARAMETRO", "AÑO","MES", "PRECIPITACION_ESPERADA", "PRECIPITACION_OBSERVADA")

data_Precipitacion_Total_1$PRECIPITACION_OBSERVADA <- as.numeric(data_Precipitacion_Total_1$PRECIPITACION_OBSERVADA)
data_Precipitacion_Total_1$PRECIPITACION_ESPERADA <- as.numeric(data_Precipitacion_Total_1$PRECIPITACION_ESPERADA)


data_Precipitacion_Total_1

Graficos filtrados del año 1995

# Cargamos las bibliotecas necesarias
library(plotly)
## 
## Attaching package: 'plotly'
## The following object is masked from 'package:ggplot2':
## 
##     last_plot
## The following object is masked from 'package:stats':
## 
##     filter
## The following object is masked from 'package:graphics':
## 
##     layout
# Suponiendo que tienes un dataframe llamado data_huancavelica_sanamhi con las columnas Fecha, Precipitación, Temp.máxima y Temp.mínima
# Aquí hay un ejemplo de cómo podrían ser tus datos
data_huancavelica_sanamhi <- data.frame(
  Fecha = seq(as.Date("1995-01-01"), as.Date("1995-12-31"), by="day"),
  Precipitación = runif(365, 0, 20), # Datos aleatorios para el ejemplo
  Temp.máxima = runif(365, 10, 25), # Datos aleatorios para el ejemplo
  Temp.mínima = runif(365, 0, 15) # Datos aleatorios para el ejemplo
)

# Creamos el gráfico
p <- plot_ly(data = data_huancavelica_sanamhi, x = ~Fecha) %>%
  add_trace(y = ~Precipitación, name = 'Precipitación', type = 'scatter', mode = 'lines', line = list(color = 'blue')) %>%
  add_trace(y = ~Temp.máxima, name = 'Temp. Máxima', type = 'scatter', mode = 'lines', line = list(color = 'red')) %>%
  add_trace(y = ~Temp.mínima, name = 'Temp. Mínima', type = 'scatter', mode = 'lines', line = list(color = 'red')) %>%
  layout(title = "Datos Climáticos de Acobamba",
         xaxis = list(title = "Fecha"),
         yaxis = list(title = "Valor"))

# Mostramos el gráfico
p

Integracion de Datos