Cargamos las librerias

library(tidyverse)
library(aweek)
library(lubridate)

Cargamos la base de datos

Cargaremos 3 bases de datos, la primera que contiene los datos climáticos a nivel diario, una base de datos con los ubigeos con su respectivo distrito y la data de salud creada en la clase anterior

base_clima<-readRDS(file = "data_cruda/clima_LAMBAYEQUE.rds")

ubigeo<-readRDS("data_cruda/ubigeo.rds")

dengue_provincia_lamb<-readRDS(file="data_cruda/dengue_provincia_lamb.rds")

Procedimiento

1) Exploramos la data de clima

glimpse(base_clima)
## Rows: 166,554
## Columns: 6
## $ fecha  <date> 2009-01-01, 2009-01-02, 2009-01-03, 2009-01-04, 2009-01-05, 20~
## $ tmax   <dbl> 28.06553, 28.63317, 27.19461, 28.43742, 27.83677, 27.73350, 29.~
## $ tmin   <dbl> 20.48385, 21.00019, 20.88745, 20.74758, 21.59562, 20.96686, 21.~
## $ tmean  <dbl> 23.19459, 23.64539, 23.12889, 23.66436, 23.70907, 23.59359, 24.~
## $ pp     <dbl> 0.0000000000, 0.0007689828, 0.1818108777, 0.0283333037, 0.01312~
## $ ubigeo <chr> "140101", "140101", "140101", "140101", "140101", "140101", "14~

Vemos que es data diaria, y para la ubicacion solo contamos con el valor de ubigeo,por eso, vamos a unir los valores de departamento, provincia y distrito de la base de ubigeo



2) Uniendo valores de departamento, provincia y distrito a data de clima

base_clima<-base_clima %>%
  left_join(ubigeo,by="ubigeo")
Esta tabla solo contiene las 500 primeras filas

Al hacer la union con el comando left_join nos damos cuenta que las columnas de departamento, provincia y distrito se encuentran en minuscula y en la data de salud estos estan en mayuscula, por lo que usamos el comando toupper para covertir todo a mayusculas.

base_clima<-base_clima %>%  
  mutate(departamento=toupper(departamento),
         provincia=toupper(provincia),
         distrito=toupper(distrito))  %>%
  select(-poblacion,-superficie)
Esta tabla solo contiene las 500 primeras filas



3) Calculo de promedios semanales

Tenemos que igualar en espacio y tiempo de la data de clima a la data de dengue que esta a nivel de provincias y semanas epidemeologias. Primero calcularemos promedios a nivel de semana epimedemeologica, para lo cual usaremos la funcion date2week de la libreria aweek para obtener la semana epidemeologia, con ese valor agruparemos los dias de la semana y calcularemos los promedios de las variables .

base_clima_sem<-base_clima %>%
  mutate(fechaepi=date2week(fecha,week_start = 7,floor_day = T))
  
base_clima_sem<-base_clima_sem %>%
  group_by(fechaepi,departamento,provincia,distrito) %>%
  summarise(tmax_sem=mean(tmax,na.rm = T),
            tmin_sem=mean(tmin,na.rm = T),
            tmean_sem=mean(tmean,na.rm = T),
            pp_sem=sum(pp,na.rm = T)) %>% 
  ungroup()
Esta tabla solo contiene las 500 primeras filas



4) Calculo de promedios por provincia

Ahora agrupamos segun provincias y calculamos promedios de las variables.

base_clima_sem_prov<-base_clima_sem %>%
  group_by(fechaepi,departamento,provincia) %>%
  summarise(tmax_sem_prov=mean(tmax_sem,na.rm = T),
            tmin_sem_prov=mean(tmin_sem,na.rm = T),
            tmean_sem_prov=mean(tmean_sem,na.rm = T),
            pp_sem_prov=mean(pp_sem,na.rm = T)) %>%
  ungroup()
Esta tabla solo contiene las 500 primeras filas



5) Unir las bases de datos de salud y clima


Tenemos que unir los datos de dengue de ‘dengue_provincia_lamb’ con los datos climaticos de ‘base_clima_sem_prov’, para lo cual usaremos el comando left_join.

salud_clima_lamb<-dengue_provincia_lamb %>%
  left_join(base_clima_sem_prov,by=c("fechaepi","provincia","departamento")) 

Finalmente, ordenamos la base de datos y agregamos una columna con la fecha en formato date.

salud_clima_lamb<-salud_clima_lamb  %>%
  mutate(fecha=week2date(fechaepi)) %>%
  relocate(fechaepi,fecha,ano,semana,departamento,provincia,casos,
          tmax_sem_prov,tmin_sem_prov,tmean_sem_prov,pp_sem_prov)





Elaboración:

SENAMHI - Ministerio del Ambiente / CDC - Ministerio de Salud