Saltar al contenido
← Sala de máquinas Proyecto gratis 1 semana

Proyecto de datos
de punta a punta.

Un proyecto para hacer en una semana y contar en una entrevista: traés datos de una API, los limpiás por capas con dbt y los mostrás en un dashboard.

Por Mauro Prystupa · Actualizado el

Qué vas a
construir.

Una tienda online quiere un tablero que responda tres preguntas. Vos traés los datos, los limpiás y armás el tablero. El objetivo no es aprender cada herramienta por separado: es mostrar que entendés cómo conviven dentro de un mismo flujo.

Para quién es: Juniors que buscan su primer trabajo como Data Engineer, Data Analyst o BI, y cualquiera que quiera ver un flujo de datos completo.

En corto

  • Es un proyecto de datos completo: API, ingesta en Python, dbt en cuatro capas (raw, stg, int y mart), tests y un dashboard.
  • Se hace en una semana, con una guía día por día y tres preguntas de control al final de cada día.
  • Corre en tu computadora con DuckDB, sin cuenta en la nube ni Docker. BigQuery es el paso siguiente, con el mismo código.
  • Los datos son sintéticos, con los mismos problemas que los reales: encontrarlos y resolverlos es parte del ejercicio.
  • Al final tenés un repo propio, un tablero y un story.md para contar el proyecto en una entrevista.
  1. Pregunta 1

    ¿Cómo evolucionan las ventas por mes y por canal?

  2. Pregunta 2

    ¿Qué categorías y productos dejan más margen?

  3. Pregunta 3

    ¿Qué clientes compran de nuevo y cuánto valen?

El
pedido.

Una tienda online vende en varios canales y quiere un tablero que responda tres preguntas. Los datos están en 4 tablas detrás de una API de solo lectura. Tu trabajo es traerlos, ordenarlos y limpiarlos por capas, y armar el tablero. El día 1 lo pasás a tus palabras: esto es el enunciado, no la solución.

Los datos

TablaQué esColumnasFilas
customersClientescustomer_id, first_name, last_name, email, city, country, created_at1.000
productsCatálogoproduct_id, name, category, price, cost, created_at80
ordersPedidosorder_id, customer_id, status, channel, order_date8.025
order_itemsLíneas de pedidoorder_item_id, order_id, product_id, quantity, unit_price, discount19.865

Los datos son sintéticos y traen los problemas típicos de los reales. Encontrarlos es parte del ejercicio: nadie te los va a listar.

Las cuatro capas

  • rawCopia fiel de lo que devuelve la API, más la columna _loaded_at. No se modifica.
  • stgLo mismo que raw, con nombres consistentes y tipos correctos. Sin joins ni lógica de negocio.
  • intAcá viven la limpieza y los joins entre tablas.
  • martTablas listas para el tablero. Es lo único que lee el dashboard.

Ventas netas

Suma de quantity × unit_price × (1 − discount) sobre los pedidos que no estén cancelados ni devueltos. El descuento es una proporción entre 0 y 1.

Qué entra

  • ✓Ingesta de las 4 tablas desde la API, con respaldo en CSV
  • ✓dbt con cuatro capas (raw, stg, int y mart), tests y documentación
  • ✓Un dashboard con una visual por pregunta y un filtro por fecha
  • ✓Un scheduler que corre todo el flujo una vez por día

Qué no entra

  • ✕Orquestadores pesados (Airflow, Dagster) ni streaming
  • ✕Docker como requisito
  • ✕Infraestructura como código

Cómo sabés que terminaste

  • ☐python run.py run corre de punta a punta, desde un clon limpio, sin tocar código
  • ☐Las capas raw, stg, int y mart existen con esos nombres exactos
  • ☐dbt build pasa con al menos 12 tests en verde
  • ☐Las ventas netas de los tres marts coinciden con las calculadas desde int
  • ☐El dashboard muestra las tres visuales y lee solo de los marts
  • ☐No hay ningún secreto (token, claves) en el repo

El camino
del dato.

Python trae el dato hasta raw. dbt lo transforma en tres capas. El dashboard lee solo la última.

  1. API Cloudflare Worker
  2. Ingesta Python
  3. raw copia fiel
  4. stg tipos y nombres
  5. int limpieza y joins
  6. mart listo para usar
  7. Dashboard Streamlit

Lo escribís en Python Lo construye dbt

La semana,
paso a paso.

Lo que hacés cada día. El detalle, los errores típicos y las tres preguntas de control de cada día están en la guía del repo.

  1. Día 1

    Entender el problema

    Escribís el requerimiento con tus palabras, lo partís en tickets y dibujás el flujo. Todavía sin código.

    1. Instalá el proyecto y corré python run.py setup
    2. Escribí el requerimiento con tus palabras
    3. Partilo en tickets con criterios verificables
    4. Dibujá el flujo, de la API al dashboard
    5. Mirá los CSV y anotá lo que te llame la atención
    Leer la guía del día ↗
  2. Día 2

    Traer los datos

    Un script de Python que pagina la API, respeta el límite de pedidos y carga raw. Con respaldo en CSV.

    1. Sacá tu token y probá la API a mano
    2. Paginá cada tabla hasta juntar el total
    3. Esperá y reintentá cuando la API diga 429
    4. Escribí las 4 tablas en raw, con _loaded_at
    5. Comprobá que la API y el CSV den exactamente lo mismo
    Leer la guía del día ↗
  3. Día 3

    Ordenar y limpiar

    stg con tipos correctos e int con una regla por cada problema que encuentres en los datos, con sus tests.

    1. Declarás raw como source, con test de frescura
    2. Armás los 4 modelos stg: tipos y nombres, nada más
    3. Explorás los datos y anotás cada problema que encontrás
    4. Escribís una regla de limpieza por problema, en int
    5. Agregás tests que prueben que la limpieza funcionó
    Leer la guía del día ↗
  4. Día 4

    Responder las preguntas

    Tres marts, un test que reconcilia las ventas entre capas y la documentación de dbt.

    1. Un mart por pregunta: decidí qué es una fila
    2. Escribí las definiciones en el schema.yml
    3. Usá macros que corran en DuckDB y en BigQuery
    4. Test de reconciliación: los marts cierran contra int
    5. Generá la documentación y revisá el linaje
    Leer la guía del día ↗
  5. Día 5

    Mostrar y automatizar

    Un dashboard en Streamlit que lee solo de los marts y un workflow de GitHub Actions que corre todo cada día.

    1. Una visual por pregunta, con la pregunta como título
    2. Un filtro por fecha
    3. Verificá que nada lea fuera de mart
    4. Cargá los secretos en GitHub y activá el workflow diario
    Leer la guía del día ↗
  6. Fin de semana

    Contarlo

    Tu README y el story.md: el guion para contar el proyecto en una entrevista.

    1. Reescribí el README para que otro llegue al dashboard solo
    2. Completá story.md: contexto, decisiones, qué se rompió, cómo lo resolviste y qué harías distinto
    Leer la guía del día ↗

Arrancá en
tres pasos.

  1. 1

    Creá tu copia del repo

    Es un template de GitHub: trae la estructura, la instalación y la guía. Lo que es ejercicio viene vacío.

    Usar el template ↗
  2. 2

    Sacá tu token de acceso a los datos

    Es personal y te da acceso a la API de solo lectura. Con tu email te sumamos también a la Sala de máquinas.

    Usamos tu email para darte el token y avisarte de la comunidad. Privacidad.

  3. 3

    Seguí la guía, día por día

    Empezá por el día 1, en docs/guia/ de tu copia. Si la API no responde, el proyecto trae los mismos datos en CSV dentro de data/seed/.

Cómo responde la API
GET {API_URL}/tables/{tabla}?limit=1000&offset=0
Authorization: Bearer {tu token}

tablas: customers, products, orders, order_items
limit: de 1 a 1000 · offset: desde 0

200 → { "table", "total", "limit", "offset", "rows": [ ... ] }
401 → falta el token o no es válido
429 → pediste demasiado rápido: esperá lo que dice Retry-After

Dos carriles,
un solo proyecto.

Los modelos de dbt son los mismos en los dos. Cambia solo la conexión.

  • Camino oficial

    Local

    • DatosUn archivo DuckDB dentro del proyecto
    • TableroStreamlit
    • ParaPara todos, sin cuenta en la nube
  • Paso siguiente

    Nube

    • DatosBigQuery, en el sandbox gratis
    • TableroLooker Studio
    • ParaPara quien terminó el carril local

Lo que te
llevás.

Un proyecto que podés mostrar y, sobre todo, contar.

  • ✓Un repo tuyo, con un README que cualquiera puede seguir
  • ✓Los tickets que escribiste antes de empezar
  • ✓El diagrama del flujo, de la API al dashboard
  • ✓Un dashboard que responde las tres preguntas
  • ✓Tests que prueban que los números cierran
  • ✓Un story.md para contarlo en una entrevista

Preguntas
frecuentes.

¿Cuánto tiempo lleva el proyecto de datos de punta a punta?

Una semana: cinco días de trabajo, de 4 a 6 horas cada uno, y el fin de semana para escribir el README y el story.md. La guía marca qué hacer cada día.

¿Necesito saber dbt para hacerlo?

No hace falta haberlo usado. Sí conviene saber SQL básico (select, join, group by) y algo de Python. La guía explica cada concepto de dbt cuando lo necesitás.

¿Necesito tarjeta de crédito o una cuenta en la nube?

No. El camino oficial corre en tu computadora con DuckDB, que es un archivo dentro del proyecto. El carril de BigQuery es opcional y usa el sandbox gratis de Google, que no pide tarjeta.

¿Los datos son de clientes reales?

No. Son datos sintéticos de un e-commerce (clientes, productos, pedidos y líneas de pedido), armados para tener los problemas típicos de los datos reales: duplicados, valores mal escritos, vacíos y referencias rotas.

¿Qué le muestro a un reclutador cuando termino?

Tu repo con el README, los tickets que escribiste antes de empezar, el diagrama del flujo, el dashboard funcionando y el story.md: contexto, decisiones, qué se rompió, cómo lo resolviste y qué harías distinto.

Sala de máquinas · gratis

Aprendamos juntos para dónde
va la tecnología.

Una comunidad para ayudarnos entre todos: ver lo que está saliendo, charlar una vez por semana y armar proyectos de verdad. Gratis, y muy conectada con lo que publico en TikTok e Instagram.

  • Lo que está saliendo

    Las herramientas y novedades que importan, probadas y contadas sin humo.

  • Charla semanal

    Una vez por semana nos juntamos en vivo a charlar de tecnología. Los temas los proponen ustedes.

  • Proyectos de punta a punta

    Proyectos con datos que traen los mismos problemas que los reales, para mostrar en una entrevista. No ejercicios de juguete.

  • Cómo lo hago yo

    Cómo configuro mis agentes, mis skills y mi stack. Todo abierto, para que lo copies y lo mejores.

Entrá a la Sala de máquinas →