Grupo de Investigación en Servicios para la Sociedad de la Información (GSSI)
Centro de Investigación en Tecnologías de Telecomunicación – atlanTTic
Este proyecto pretende recopilar toda la información disponible públicamente sobre la evolución de la pandemia del COVID-19 en España, con el fin de poder analizarla y mostrar los resultados al público, de manera objetiva, sencilla y visualmente atractiva.
La descarga y extracción de los datos está implementada con Apache Airflow, los cuales se almacenan para su posterior análisis y visualización en una base de datos MongoDB. Posteriormente, usando también Apache Airflow, se procede al análisis de los datos almacenados, cuyos resultados se almacenan en otra base de datos, también dentro del mismo servidor MongoDB. Estos datos analizados pueden ser consultados a través de una API REST o de un dashboard elaborado con Redash.
El despliegue de ambas herramientas se lleva a cabo con Docker, automatizando la orquestación de los contenedores con Docker Compose.
Para conocer en detalle el funcionamiento de la aplicación, leer este documento (en inglés).
docker-compose build
docker-compose -f docker-compose.yml -f docker/docker-compose.admin.yml run --rm airflow-initializer
docker-compose stop
docker-compose --profile redash --profile airflow up
Una vez que todos los contenedores estén encendidos, se puede programar la ejecución diaria del workflow de descarga, extracción y análisis de los datos con el comando docker-compose exec airflow-scheduler dags unpause COVIDWorkflow
. Para monitorizar y configurar la ejecución del workflow, entrar en http://localhost:8080 con el usuario admin
y la contraseña nonecesitocontrasenha
.
Para evitar sobrecargar el sistema, es recomendable ejecutar por separado los contenedores de Airflow para descargar, extraer y analizar la información, y posteriormente los de Redash para visualizarla. A partir de la versión 1.28 de Docker Compose, se incluye la opción de crear perfiles, lo que permite diferenciar entre los contenedores necesarios para la descarga, extracción y análisis y los necesarios para el dashboard.
- Despliegue básico (base de datos y API REST):
docker-compose up -d
- Despliegue básico + Airflow (descarga, extracción y análisis de los datos):
docker-compose --profile airflow up -d
- Despliegue básico + Redash (visualización de los datos):
docker-compose --profile redash up -d
- Despliegue total: Redash + Airflow:
docker-compose --profile redash --profile airflow up -d
La información analizada almacenada en la base de datos es accesible a través de una API REST, desplegada mediante un servidor en el puerto 11223. Para más información sobre esta API, consultar la documentación en el fichero covid-api.yaml
. Para acceder directamente a la base de datos MongoDB, conectarse al puerto 12345 con el usuario data_read
y la contraseña givemesomedata
.
Para visualizar los datos de una forma sencilla y visual, puedes usar el dashboard desplegado con Redash, disponible en http://localhost/public/dashboards/3JJKFpOF7Fx5ES73vnFFRbTx5VoiqEx4ZP2rL895 . Para realizar modificaciones en el dashboard, entrar en http://localhost/dashboard/covid-19-espa-a e iniciar sesión con el usuario [email protected]
y la contraseña nonecesitocontrasenha
.
docker-compose.yml
: define los contenedores Docker que conforman este proyecto.covid_data
: carpeta en la que se descargarán todos los datos. Mapeada con los contenedores de Airflow.dags
: contiene los ficheros Python que componen el workflow de descarga, extracción y análisis. Mapeada con los contenedores de Airflow.docker
: archivos de configuración varios del despliegue del proyecto con Docker Compose.
- Ministerio de Sanidad:
- Informe PDF de evolución de la pandemia, publicado diariamente de lunes a viernes. Ejemplo del día 13 de enero de 2021.
- Origen de los brotes: número de brotes y casos acumulados por ámbito. Disponible de forma esporádica en algunos informes: 230, 235, 240...
- Presión hospitalaria: datos diarios por Comunidad Autónoma del número de pacientes COVID hospitalizados, porcentaje de ocupación de camas UCI y totales por casos COVID, número de ingresos y número de altas. Datos disponibles a partir del informe 189 (20/08/2020).
- Informes diarios de vacunación en formato ODS. Ejemplo del día 10 de febrero de 2021.
- CSVs diarios sobre pruebas diagnósticas por provincia. Ejemplo del día 14 de julio de 2021.
- Informe PDF de evolución de la pandemia, publicado diariamente de lunes a viernes. Ejemplo del día 13 de enero de 2021.
- RENAVE:
- casos_hosp_uci_def_sexo_edad_provres.csv: CSV actualizado diariamente con el número de casos, hospitalizaciones, ingresos en UCI y fallecimientos diarios, agrupados por sexo, rango de edad y provincia.
- Informe PDF de evolución epidemiológica, publicado semanalmente. Ejemplo del día 29 de diciembre de 2020:
- Descripción clínica de los casos: enfermedades previas y síntomas presentados. Tabla 2, disponible desde el informe 12 (20/03/2020) hasta el 33 (29/05/2020).
- Indicadores de transmisión: porcentaje de casos asintomáticos, días hasta diagnóstico (mediana y rango intercuartil), contactos estrechos identificados por caso (mediana y rango intercuartil) y casos sin contacto estrecho conocido (número y porcentaje) por Comunidad Autónoma. Tabla 6, disponible a partir del informe 34 (15/07/2020).
- INE (Instituto Nacional de Estadística):
- Causas de muerte en España en 2018: descargar en CSV
- Población por Comunidad Autónoma, desglosada en sexo y rango de edad: descargar en CSV
- Creación propia:
- Provincias españolas agrupadas por Comunidad Autónoma: descargar en CSV
-
covid_extracted_data:
- Datos COVID:
daily_data
: Casos, hospitalizaciones y fallecimientos diarios y totales por día, sexo, Comunidad Autónoma y rango de edad.hospitals_pressure
: Presión hospitalaria por día y Comunidad Autónoma: número de pacientes ingresados, porcentaje de ocupación de camas, número de ingresos y número de altas. Datos disponibles a partir del 19 de agosto de 2020.diagnostic_tests
: Número de pruebas diagnósticas realizadas por día, tasa por cada 100000 y positividad. Datos diarios por Comunidad Autónoma.symptoms
: síntomas más habituales de los enfermos sintomáticos de COVID.transmission_indicators
: Porcentaje de casos asintomáticos, días hasta diagnóstico (mediana y rango intercuartil), contactos estrechos identificados por caso (mediana y rango intercuartil) y casos sin contacto estrecho conocido (número y porcentaje) por Comunidad Autónoma.outbreaks_description
: Número de brotes y casos acumulados por ámbito.
- Datos adicionales:
population_ar
: Población española por Comunidad Autónoma, sexo y rango de edad.
- Datos COVID:
-
covid_analyzed_data:
cases
: Casos nuevos y totales, por 100 000 habitantes, incidencia acumulada, media móvil, incremento diario, semanal y mensual... Datos clasificados por Comunidad Autónoma, sexo y rango de edad.deaths
: Fallecimientos nuevos y totales, por 100 000 habitantes, media móvil, incremento diario, semanal y mensual y tasa de mortalidad (últimas 2 semanas y total). Datos clasificados por Comunidad Autónoma, sexo y rango de edad.hospitalizations
: Hospitalizaciones nuevas y totales, por 100 000 habitantes, media móvil, incremento diario, semanal y mensual y tasa de hospitalización (últimas 2 semanas y total). Datos para UCI y total. Datos clasificados por Comunidad Autónoma, sexo y rango de edad.top_death_causes
: Número de personas fallecidas en España en 2018 por cada una de las 10 causas de muerte más letales en España, junto con el número de personas fallecidas de COVID-19 en un año (aproximación anual).covid_vs_all_deaths
: Porcentaje de personas que fallecieron por COVID en un año natural por rango de edad y sexo.population_pyramid_variation
: Variación de la pirámide poblacional tras los fallecimientos por COVID.diagnostic_tests
: Número de pruebas diagnósticas realizadas, tasa por cada 100000 y positividad diarias, así como tests totales, positividad media y número de tests totales por cada 100 000 habitantes acumulados hasta la fecha. Datos diarios por Comunidad Autónoma.vaccination_general
: Datos diarios de vacunación por Comunidad Autónoma: número de dosis recibidas, número y porcentaje de dosis aplicadas y número de personas completamente vacunadas.vaccination_ages_single
: Porcentaje de población por rango de edad y Comunidad Autónoma que ha recibido, al menos, una dosis.vaccination_ages_complete
: Porcentaje de población por rango de edad y Comunidad Autónoma que ha sido completamente vacunada.symptoms
: Síntomas más habituales y porcentaje entre las personas sintomáticas.hospitals_pressure
: Presión hospitalaria por día y Comunidad Autónoma: número de pacientes ingresados y porcentaje de ocupación de camas, tanto en total como en UCI. Datos disponibles a partir del 19 de agosto de 2020.outbreaks_description
: Número de brotes y casos acumulados por ámbito.transmission_indicators
: Porcentaje de casos asintomáticos, mediana de contactos estrechos identificados por caso y mediana de casos sin contacto estrecho conocido. Datos por Comunidad Autónoma y fecha (frecuencia aproximadamente semanal).
- Guillermo Barreiro Fernández [email protected]
- Martín López Nores [email protected]