Vigilancia epidemiológica

Cada mes, cientos de establecimientos de salud en Bolivia envían información sobre la prevalencia de enfermedades que el Estado considera de relevancia epidemiológica. Esta información es consolidada y presentada en tableros que creo podrían ser mucho más amigables de usar. Hay tantos usos como visualizaciones, modelos de proyección o simples índices de incidencia, que en el estado actual serían demasiado tediosos de producir. Por eso, en este trabajo produzco una forma reproducible y escalable de descargar todos estos datos a nivel municipal y mensual para cada condición registrada y año entre 2001 y 2021.

Antes que nada, los datos. En este tablero puedes explorar algunas vistas interesantes:

Esta tabla muestra los datos para casos clasificados en una variable y año, con enlaces a documentos csv:

Y esta tabla muestra los datos para casos en una variable entre múltiples periodos, donde era posible agruparlos:

A continuación detallo el proceso de construcción de estos datos, que consiste en 3 pasos:

  1. Construir un inventario de variables
  2. Descargar cada datos disponible
  3. Preparar los datos para que sean utilizados fácilmente

Un inventario de variables

Qué información está disponible?

El ministerio construye una página diferente para mostrar los datos de cada año. Es necesario consultar cada página y navegar los menús que ofrece para listar las variables y grupos de variables que exhibe. Algo interesante de estos tableros es que para entregar información, además de los parámetros que describen la consulta e identidad del usuario, requieren valores que describen el estado de navegación del usuario en el tablero durante la consulta anterior. Es decir que para mostrar una tabla en particular es necesario no sólo ejecutar la consulta correcta, sino la secuencia previa de consultas correctas que el servicio espera. Por suerte, estas limitaciones son fáciles de resolver.

Encuentro más de 1500 variables que podría consultar entre 2001 y 2021. El inventario se ve así:

En esta tabla, los valores grvar y subvar son códigos que describen un grupo de variables y variables en el tablero de un año year. Estos códigos serán útiles para solicitar datos al servidor en la próxima sección. Las condiciones, códigos y forma de los datos varían demasiado entre distintos años. Por eso, para tener un proceso que funcione a través de todas estas condiciones y años es importante sostener la menor cantidad de supuestos sobre cómo realizar consultas correctas o cómo se ve una tabla específica.

Datos

Descargar todos los datos disponibles a nivel mensual y municipal.

Con el inventario en mano, el próximo paso es la descarga. Realizo consultas para cada variable, año y mes, que almaceno en documentos csv, uno para cada variable y año. Como no puedo predecir la forma que tendrá la tabla que produce el sistema, y éste tiende a nombrar columnas de maneras idiosincráticas, por ejemplo desagregando valores entre distintos rangos de edad, usando ocasionalmente sexo, etc., simplemente tomo todo lo que ofrece. Las únicas columnas sobre las que tengo control son las que creo, que describen las variables, años y municipios. Las variables y años están bien armonizadas gracias al índice. Y respecto al municipio, para tener datos que puedo cruzar fácilmente con otros sets de datos en la próxima sección construyo un diccionario que me permite armonizar códigos para municipios a través de todos los años.

Además de seguir las reglas mínimas que el servicio demanda para acceder a datos, no hago nada fancy en estas consultas. Son consultas secuenciales, en parte porque no quiero arriesgar degradar la disponibilidad del sitio y también porque es el proceso más sencillo de programar y evaluar. En total debe haber tomado alrededor de 9 horas de consultas y, si bien el proceso es reproducible, espero que no sea algo que deba hacerse de manera rutinaria.

Limpieza

Que cada tabla tenga una forma predecible y municipios armonizados.

Finalmente, pongo los datos en una estructura simple y extensible. Las primeras columnas de todos los sets de datos describen el código INE del municipio, el nombre del municipio que ofrece el tablero, el grupo de variable, el nombre de la variable y el mes de los valores. Para tener los códigos INE, construyo un diccionario que mapea cada nombre de municipio con su código, utilizando las tablas que publica el ministerio de salud sobre la estructura de establecimientos entre 2005 y 2021. Por suerte, los nombres en estas tablas y la base de datos de vigilancia epidemiológica son las mismas, debido a que el reporte se suele realizar mediante un sistema que consume listas similares publicadas periódicamente. El resto de las columnas consisten en todos los datos que ofrece el sistema, a veces desagregados por rangos de edad, sexo, si la atención fue prestada en el establecimiento o fuera, etc. No hago más que la limpieza más simple sobre estas columnas, suficiente como para que sean utilizadas rápidamente en el futuro y sin muchos juicios sobre cómo deberían verse. Con esta información es fácil agregar valores de condiciones a través de varios años y cruzarlos con información a nivel municipal, como por ejemplo indicadores de los Objetivos de Desarrollo Sostenible.

Para terminar, así es como se ve uno de los más 1500 sets de datos escogido aleatoriamente:

Agrupamiento

Cada set de datos representa el número de casos clasificados en una variable para un año, desagregado por meses y municipios. Si bien una misma variable es monitoreada en múltiples periodos, sus nombres y las formas de la tabla que produce el sistema suelen cambiar. No quiero hacer juicios de valor sobre qué nombres representan la misma variable o cómo debería armonizar tablas muy diferentes. Sin embargo, sería muy útil tener información que represente periodos más largos que 1 sólo año. Para ésto, agrupo datos para una misma variable cuya tabla tenga la misma forma a través de múltiples años. Este agrupamiento reduce el número de sets de datos de 1570 series anuales a 469 documentos.

Columnas con descripciones más significativas

Un problema con el proceso hasta este momento es cómo las columnas en cada set de datos tienen nombres difíciles de interpretar, resultado de aplanar las tablas que produce el sistema del snis en una forma uniforme. Para tener columnas más fáciles de interpretar infiero los atributos que representan y construyo un mejor nombre. Cada columna puede describir casos que ocurren dentro o fuera de establecimientos de salud, hacer referencia a hombres o mujeres, representar distintos rangos de edad y referirse a poblaciones o eventos particulares. Identifico estos atributos y construyo mejores nombres de columna que aplico a todos los documentos producidos.

Comparaciones de género

En la mayoría de sets de datos existen cortes de género que podrían usarse para realizar comparaciones. Utilizo la clasificación de columnas del anterior paso para encontrar en cada documento los pares de columnas donde existen datos para cada género en una misma población.