Los datasets utilizados en este proyecto pueden descargarse desde el portal oficial de datos abiertos del gobierno de Argentina:
https://datos.gob.ar/dataset
Este portal proporciona información pública en formatos reutilizables, incluyendo datos relacionados con casos de dengue en Argentina.
Este tutorial guía al usuario a través de los pasos necesarios para desplegar una infraestructura ETL utilizando Docker, PostgreSQL, Apache Superset y pgAdmin. Se incluyen instrucciones detalladas para:
- Levantar los servicios con Docker.
- Configurar la conexión a la base de datos en Apache Superset.
- Ejecutar consultas SQL para analizar los datos de casos de dengue.
- Crear gráficos y tableros interactivos para la visualización de datos.
- Docker
- PostgreSQL
- Apache Superset
- pgAdmin
- ETL
- Visualización de Datos
PINDU
El código proporcionado se ofrece "tal cual", sin garantía de ningún tipo, expresa o implícita. En ningún caso los autores o titulares de derechos de autor serán responsables de cualquier reclamo, daño u otra responsabilidad.
Este proyecto implementa un proceso ETL (Extract, Transform, Load) para la carga y análisis de datos relacionados con casos de dengue en Argentina. Utiliza herramientas modernas como Docker, PostgreSQL, Apache Superset y pgAdmin para facilitar la gestión, análisis y visualización de datos.
El objetivo principal es proporcionar una solución escalable y reproducible para analizar datos de dengue por grupo etario, departamento y provincia, permitiendo la creación de tableros interactivos y gráficos personalizados.
Referencia:
- _ Clave Primaria
- # Clave Foranea
- Una provincia tiene muchos departamentos → relación 1:N
- Un departamento tiene muchos registros de dengue → también 1:N
Significado:
-
1 → un único registro en la tabla padre (ej. una provincia)
-
N → muchos registros relacionados en la tabla hija (ej. varios departamentos en esa provincia)
+-----------------+ | provincia | +-----------------+ | _id | | nombre | | nombre_completo | | centroide_lat | | centroide_lon | | categoria | +--------+--------+ | | 1 | | N +--------v--------+ | departamento | +-----------------+ | _id | | nombre | | nombre_completo | | centroide_lat | | centroide_lon | | categoria | | #provincia_id | +--------+--------+ | | 1 | | N +--------v--------+ | dengue | +-----------------+ | _id | | evento | | anio | | grupo_etario | | cantidad | | #departamento_id| +-----------------+
El modelo de datos está compuesto por tres entidades principales: dengue, departamento y provincia. Estas entidades están relacionadas para representar la estructura jerárquica de los datos geográficos y epidemiológicos.
-
dengue
- Atributos:
id: Identificador único del registro.evento: Tipo de evento relacionado con el caso de dengue.anio: Año en el que ocurrió el caso.grupo_etario: Grupo etario afectado.cantidad: Número de casos registrados.departamento_id: Clave foránea que referencia al departamento donde ocurrió el caso.
- Atributos:
-
departamento
- Atributos:
id: Identificador único del departamento.nombre: Nombre del departamento.nombre_completo: Nombre completo del departamento.centroide_lat: Latitud del centroide del departamento.centroide_lon: Longitud del centroide del departamento.categoria: Categoría administrativa del departamento.provincia_id: Clave foránea que referencia a la provincia a la que pertenece el departamento.
- Atributos:
-
provincia
- Atributos:
id: Identificador único de la provincia.nombre: Nombre de la provincia.nombre_completo: Nombre completo de la provincia.centroide_lat: Latitud del centroide de la provincia.centroide_lon: Longitud del centroide de la provincia.categoria: Categoría administrativa de la provincia.
- Atributos:
-
Relación entre
dengueydepartamento:
Cada registro en la tabladengueestá asociado a un único departamento mediante el atributodepartamento_id. Esto permite identificar el lugar específico donde ocurrieron los casos de dengue. -
Relación entre
departamentoyprovincia:
Cada departamento pertenece a una única provincia, lo cual se define mediante el atributoprovincia_id. Esto establece una jerarquía geográfica entre provincias y departamentos.
- Uno a Muchos (1:N):
- Una provincia puede contener múltiples departamentos.
- Un departamento puede registrar múltiples casos de dengue.
Este modelo permite realizar análisis detallados de los casos de dengue a nivel geográfico, facilitando la identificación de patrones y tendencias en diferentes regiones del país.
- Infraestructura Contenerizada: Uso de Docker para simplificar la configuración y despliegue.
- Base de Datos Relacional: PostgreSQL para almacenar y gestionar los datos.
- Visualización de Datos: Apache Superset para crear gráficos y tableros interactivos.
- Gestión de Base de Datos: pgAdmin para administrar y consultar la base de datos.
Antes de comenzar, asegúrate de tener instalados los siguientes componentes:
- Docker
- Docker Compose
- Navegador web para acceder a Apache Superset y pgAdmin.
El archivo docker-compose.yml define los siguientes servicios:
-
Base de Datos (PostgreSQL):
- Imagen:
postgres:alpine - Puertos:
5432:5432 - Volúmenes:
postgres-db:/var/lib/postgresql/data(almacenamiento persistente de datos)./scripts:/docker-entrypoint-initdb.d(scripts de inicialización)./datos:/datos(directorio para datos adicionales)
- Variables de entorno:
- Configuradas en el archivo
.env.db
- Configuradas en el archivo
- Healthcheck:
- Comando:
pg_isready - Intervalo: 10 segundos
- Retries: 5
- Comando:
- Imagen:
-
Apache Superset:
- Imagen:
apache/superset:4.0.0 - Puertos:
8088:8088 - Dependencias:
- Depende del servicio
dby espera a que esté saludable.
- Depende del servicio
- Variables de entorno:
- Configuradas en el archivo
.env.db
- Configuradas en el archivo
- Imagen:
-
pgAdmin:
- Imagen:
dpage/pgadmin4 - Puertos:
5050:80 - Dependencias:
- Depende del servicio
dby espera a que esté saludable.
- Depende del servicio
- Variables de entorno:
- Configuradas en el archivo
.env.db
- Configuradas en el archivo
- Imagen:
-
Clonar el repositorio:
git clone <URL_DEL_REPOSITORIO> cd postgres-etl
-
Configurar el archivo
.env.db: Crea un archivo.env.dben la raíz del proyecto con las siguientes variables de entorno:#Definimos cada variable DATABASE_HOST=db DATABASE_PORT=5432 DATABASE_NAME=postgres DATABASE_USER=postgres DATABASE_PASSWORD=postgres POSTGRES_INITDB_ARGS="--auth-host=scram-sha-256 --auth-local=trust" # Configuracion para inicializar postgres POSTGRES_PASSWORD=${DATABASE_PASSWORD} PGUSER=${DATABASE_USER} # Configuracion para inicializar pgadmin PGADMIN_DEFAULT_EMAIL=postgres@postgresql.com PGADMIN_DEFAULT_PASSWORD=${DATABASE_PASSWORD} # Configuracion para inicializar superset SUPERSET_SECRET_KEY=your_secret_key_here
-
Levantar los servicios: Ejecuta los siguientes comandos para iniciar los contenedores:
docker compose up -d . init.sh -
Acceso a las herramientas:
- Apache Superset: http://localhost:8088/
Credenciales predeterminadas:admin/admin - pgAdmin: http://localhost:5050/
Configura la conexión a PostgreSQL utilizando las credenciales definidas en el archivo.env.db.
- Apache Superset: http://localhost:8088/
Accede a Apache Superset y crea una conexión a la base de datos PostgreSQL en la sección Settings. Asegúrate de que la conexión sea exitosa antes de proceder.
Esta consulta permite analizar los casos de dengue agrupados por grupo etario, departamento y provincia.
SELECT provincia.nombre AS provincia,
departamento.nombre AS departamento,
grupo_etario,
cantidad
FROM dengue
INNER JOIN departamento ON dengue.departamento_id = departamento.id
INNER JOIN provincia ON departamento.provincia_id = provincia.id;Esta consulta filtra los grupos etarios con más de 20,000 casos y ordena los resultados de mayor a menor.
SELECT d.grupo_etario AS "Grupo Etario",
SUM(d.cantidad) AS "Cantidad de Casos"
FROM dengue AS d
GROUP BY grupo_etario
HAVING SUM(d.cantidad) > 20000
ORDER BY "Cantidad de Casos" DESC;- Ejecuta las consultas en
SQL Labde Apache Superset. - Haz clic en el botón
CREATE CHARTpara crear gráficos interactivos. - Configura el tipo de gráfico y las dimensiones necesarias.
- Guarda el gráfico en un tablero con el botón
SAVE.
postgres-etl/
├── datos/ # Carpeta para almacenar datasets
├── python/ # ETL con python
├── script/ # Scripts para la inicialización de la base de datos
├── sql/ # Consultas SQL predefinidas
├── .env.db # Variables de entorno
├── docker-compose.yml # Configuración de Docker Compose
├── init.sh # Script de inicialización
├── LICENSE # Licencia
└── README.md # Documentación del proyecto