montera34 / escovid19data

Recopilación de datos de COVID19 por provincias en España
Other
81 stars 23 forks source link

Cómo automatizar el procesado de datos de vacunaciones por CCAA #40

Closed numeroteca closed 3 years ago

numeroteca commented 3 years ago

Actualmente para actualizar las vacunaciones por CCAA se sigue este proceso, como se describe en la wiki:

vas a los últimos commits de escovid19data del día https://github.com/montera34/escovid19data/commits/master y busca sel último de las vacunas. Por ejemplo: este: https://github.com/montera34/escovid19data/commit/73a62031dcc3b0fbe2f860d42973943a42c62a1d. Copia las filas en verde (las añadidas al final del archivo data/original/vacunas/estadovacunacion.csv) y pégalas en el archivo al final del archivo data/original/spain/vacunaciones.csv

Pues bien, ha habido un cambio en el archivo estado_vacunacion_.csv pues se ha añadido la columna "Total 1 vacuna".

Os cuento por qué falla el script que hace las gráficas. Para asignar el dato a la fecha uso la columna "Última fecha de actualización de datos", porque si usara la fecha de publicación "date_pub" creo que no sería correcto.

El problema es que los dato nos simpre se actualizan y un día la fecha de "Última fecha de actualización de datos" puede ser la misma que la siguiente, y eso da problemas a la hora de insertar los datos en la tabla con todos los datos de las CCAA (porque al hacer los merges solamente debe haber un dato por fecha).

Por eso cada día añado manualmente los nuevos datos de vacunaciones Y elimino la "Última fecha de actualización de datos" que esté repetida y me quedo con la última.

Para detectar duplicados se usa este script de R (al final de este archivo que procesa todos los datos):

spain_ccaa <- spain_ccaa %>% mutate(
  dunique = paste0(date, ccaa)
)
n_occur <- data.frame(table(spain_ccaa$dunique))
print("qué CCAA y que fecha están duplicadas: ")
n_occur[n_occur$Freq > 1,]

Al añadir una nueva columna al dataset de vacunas hay que hacer ese proceso de nuevo (seguro que se puede automatizar), esto es, ver que filas comparten "Última fecha de actualización de datos" para una misma CCAA y quedarse con la última.

¿Se os ocurre cómo automatizar este proceso?

numeroteca commented 3 years ago

Una posible solución:

  1. usar el archivo /data/original/vacunas/estadovacunacion.csv
  2. Agrupar group_by por CCAA
  3. Ordenar cronológicamente de forma inversa (de más nuevo a más antiguo)
  4. Mirar si la siguiente ("Última fecha de actualización de datos" lead()) fila es igual que la que se verifica, si es así cambiar el valor a NA.
  5. Eliminar las filas con "Última fecha de actualización de datos" con valor a NA.
numeroteca commented 3 years ago

Solucionado en este commit: https://code.montera34.com/numeroteca/covid19/-/commit/05646a0516fc264ca077fb5d85b311c4471be0b1

vacunas <- read.delim("data/original/spain/vacunaciones.csv",sep = ",") %>%  
  (...) %>% filter ( !ccaa == "Totales") %>% 
  # solución explicada en https://github.com/montera34/escovid19data/issues/40#issuecomment-815544224
  # agrupa por CCAA
  group_by(ccaa) %>% 
  # orden cronoogico inverso
  arrange(desc(vac_date_last)) %>% 
  # si el valor es igual que la siguiente, ponlo en NA y luego bórralo
  mutate(
    vac_date_last = as.character(vac_date_last),
    vac_date_last = ifelse( vac_date_last == lead(vac_date_last), NA, vac_date_last),
    vac_date_last = as.Date(vac_date_last)
  ) %>% filter ( !is.na(vac_date_last)) %>% arrange(vac_date_last)