library(tidyverse)
library(aweek)
library(lubridate)
base_dengue <- read.csv(file = "data_cruda/TablaCasosSE_Datos_completos_data.csv",
encoding = "UTF-8")
# Cambiamos de nombre a las variables
colnames(base_dengue)<-c("departamento","provincia","distrito","ano","evento","semana","semana.actualizacion", "sexo", "dx", "DIS ")
glimpse(base_dengue)
## Rows: 309,406
## Columns: 10
## $ departamento <chr> "PIURA", "PIURA", "PIURA", "PIURA", "PIURA", "PIU~
## $ provincia <chr> "SULLANA", "TALARA", "SULLANA", "SULLANA", "TALAR~
## $ distrito <chr> "SULLANA", "PARIÑAS", "SULLANA", "MIGUEL CHECA", ~
## $ ano <int> 2014, 2014, 2014, 2016, 2016, 2016, 2016, 2015, 2~
## $ evento <chr> "Dengue", "Dengue", "Dengue", "Dengue", "Dengue",~
## $ semana <int> 14, 17, 18, 2, 2, 4, 4, 21, 21, 21, 25, 28, 36, 3~
## $ semana.actualizacion <int> 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 5~
## $ sexo <chr> "Masculino", "Masculino", "Masculino", "Femenino"~
## $ dx <chr> "Confirmados", "Confirmados", "Confirmados", "Con~
## $ `DIS ` <int> 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1~
Primero calculamos los casos totales para cada fecha y lugar, para eso usamos el comando
count()para crear una columna con los acumulados por fecha y lugar.
base_dengue_acum<-base_dengue %>%
count(departamento,provincia,distrito,ano,semana)
A la tabla que obtuvimos le agregaremos una columna que contenga las fechas: La fecha epidemiológica en formato character la calculamos con el comando
get_week()y la fecha en formato date se calcula con el comandoweek2date(), ambas funciones pertenecen al paquete aweeek
base_dengue_acum<-base_dengue_acum %>%
mutate(fechaepi =get_aweek(week=semana,year=ano,week_start = 7))%>%
mutate(fecha=week2date(fechaepi,week_start = 7))
Ahora que tenemos las fechas en columnas podemos hacer series de tiempo de los casos para identificar la incidencia por departamentos
ggplot(base_dengue_acum, mapping = aes(x=fecha, y=n)) +
geom_line() +
scale_x_date(date_labels = "%m-%y",date_breaks = "18 month") +
facet_wrap(~departamento, nrow=6, scales = 'free_y')+
labs(x= 'Semanas epidemiológicas', y= 'N° de casos')+
theme_bw(base_size = 6)
Del gráfico podemos ver la distribucion espacial de los casos por departamentos, para este caso vamos a trabajar con los datos de Lambayeque pues se observan casos constantes en el tiempo.
Filtramos solo el departamento de LAMBAYEQUE (Notese que esta en mayuscula ya que asi esta en la base)
base_dengue_lamb <- base_dengue %>%
filter(departamento == 'LAMBAYEQUE')
base_dengue_lamb
A partir de aqui vamos a generar 2 bases, la 1era va a contener casos por provincias, semanas, sexo y tipo de diagnostico, y la 2da va a contener solo casos por provincia y semanas
Casos por provincia con información de sexo y tipo de diagniostico: Con la primera base vamos a obtener las caracteristicas basicas de casos reportados de dengue en el periodo 2010-2020
base_dengue_lamb_caracte <- base_dengue_lamb %>%
count(departamento, provincia, ano, semana, sexo, dx)
Procedemos a calcular el número de casos por provincia
n_casos <- base_dengue_lamb_caracte %>%
group_by(provincia) %>% #La base de datos de Lambayeque lo agrupamos por provincia
summarise(casos = sum(n)) %>% #creamos la columna casos y sumamos los casos totales
mutate(porc = round(casos/sum(casos)*100, 1), # creamos una columna que se llame porc que tenga el porcentaje de casos
casos = paste0(casos, ' (', porc, ')') ) %>% #' y reescibimos la columna de casos
select(-porc) #como ya tenemos el porcentaje en casos, deselecionamos esa columna
Procedemos a calcular el número de casos según el tipo de diagnostico por provincia
n_casos_dx <- base_dengue_lamb_caracte %>%
group_by(provincia, dx) %>% #agrupamos por provincia y por DX
summarise(casos = sum(n)) %>% #sumamos los casos totales por provincias y DX
spread(key = dx, value = casos) #pasamos de tener DX en filas a columnas
Procedemos a calcular el número de casos según el sexo por provincia
n_casos_sexo <- base_dengue_lamb_caracte %>%
group_by(provincia, sexo) %>% #agrupamos por provincias y sexo
summarise(casos = sum(n)) %>% #sumamos los casos totales para provincias y DX
spread(key = sexo, value = casos) #pasamos de tener sexo en filas a columnas
Procedemos a calcular el número de casos según el año por provincia
n_casos_ano <- base_dengue_lamb_caracte %>%
group_by(provincia, ano) %>% #agrupamos por provincias y Año
summarise(casos = sum(n)) %>% #sumamos los casos totales para provincias y DX
spread(key = ano, value = casos) #pasamos de tener Año en filas a columnas
Finalmente unimos todas las tablas con el comando
left_join()
tab_dengue <- n_casos %>% #unimos todas las tablas por la columna de provincia
left_join(n_casos_dx) %>%
left_join(n_casos_sexo) %>%
left_join(n_casos_ano)
En este punto obtendremos la data procesada de salud, que usaremos de aqui en adelante para analizarla con data climatica
base_dengue_lamb_prov <- base_dengue_lamb %>%
filter(departamento=="LAMBAYEQUE") %>%
count(departamento, provincia, ano, semana,name="casos")
Para tener lista nuestra base, vamos a completar con ceros las semanas que no tienen datos
- Primero, creamos un dataframe con las mismas variables con todas las filas de semanas
# Aqui calcularemos el vector con todas las semanas epidemiológicas del periodo de estudio
vec_se <- data.frame(fechaepi = seq(as.Date("2010-01-03"), as.Date("2020-12-31"), by = "7 day")) %>%
mutate(SE = date2week(fechaepi, floor_day = T,week_start = 7)) %>%
pull()
# Aqui es donde creamos una replica de nuestra base de datos, pero ya con las semanas completas
df_relleno <- data.frame(
departamento = rep('LAMBAYEQUE', length(vec_se)*3),
provincia = rep(c('CHICLAYO','FERREÑAFE','LAMBAYEQUE'), each=length(vec_se)),
fechaepi = rep(vec_se, 3)) %>%
mutate(ano = as.numeric(substring(fechaepi, 1, 4)),
semana = as.numeric(substring(fechaepi, 7, 8)))
- Seguido, unimos nuestra base con el df_relleno y reemplazamos los NA con ceros
base_dengue_lamb_final <- base_dengue_lamb_prov %>%
right_join(df_relleno, by=c('departamento', 'provincia', 'ano', 'semana')) %>%
replace(is.na(.), 0)
Convertimos nuestra fecha por semana epidemiológica que se encuentra en formato character a formato Date con la función
week2date()
base_dengue_lamb_final<-base_dengue_lamb_final %>%
mutate(fecha=week2date(fechaepi,week_start = 7))
Ahora que tenemos las fechas en columnas podemos hacer gráficas de series de tiempo