Arquitectura lakehouse moderna para analítica climática en agroindustria peruana. Dataset sintético que replica patrones climáticos reales del corredor agroexportador del norte del Perú (Piura/Lambayeque) — incluye el Niño Costero 2023 (Yaku) y el Niño Global 2023-24.
Inspirado en un caso real de modernización: transformar un proceso legacy de archivos TXT diarios + macros de Excel en un pipeline ELT moderno (DuckDB + Parquet + arquitectura medallion + forecasting con ML).
| Capacidad | Implementación |
|---|---|
| Data Engineering | Pipeline ELT con arquitectura medallion (Bronze / Silver / Gold) |
| Stack moderno | DuckDB + Parquet + Python — sin costo de cloud, experiencia lakehouse completa |
| Modelado dimensional | Star schema Kimball (2 dimensiones, 4 facts) |
| DAX avanzado | 39 medidas con Time Intelligence, detección de anomalías, analítica prescriptiva |
| Dominio de herramientas | Tabular Editor 2 (despliegue de medidas vía script C#), DAX Studio, Bravo |
| Forecasting ML | Prophet (Meta) — pronóstico a 30 días con bandas de confianza al 80% |
| Storytelling de datos | 5 páginas de dashboard con narrativa progresiva |
| Conocimiento de dominio | Lenguaje agroindustrial: ETP, balance hídrico, recomendaciones de riego |
5 páginas que cuentan la historia climática del corredor agroexportador del norte peruano:
| Página | Historia | Visualizaciones clave |
|---|---|---|
| 1. Overview | Vista general del clima regional | KPIs, mapa coroplético, series de tiempo |
| 2. El Niño 2023-24 | Impacto del Yaku y anomalías del Niño Global | Lluvia YoY, heatmap mensual, top eventos |
| 3. Gestión Hídrica | Balance ETP vs precipitación — necesidades de riego | Heatmap balance hídrico, recomendación prescriptiva |
| 4. Alertas Climáticas | Eventos extremos detectados (calor, lluvia, viento, UV) | KPIs por tipo, treemap, distribución mensual |
| 5. Pronóstico | Forecast a 30 días (Prophet) para temperatura y ETP | Series de tiempo con bandas de confianza, tabla detallada |
Vista general del clima regional: KPIs, mapa coroplético y series de tiempo de las 4 estaciones del corredor agroexportador.
El Niño Costero 2023 multiplicó la lluvia por ~70x en algunas zonas (ej: marzo 2023 en zona Pre-Andina: 293mm vs ~4mm normal). La página documenta el impacto del Yaku y el Niño Global.
El balance hídrico es estructuralmente negativo en la costa norte: la ETP supera la precipitación en 92 de 96 meses-estación (~96% del tiempo). La página incluye recomendación prescriptiva de riego.
Sistema de detección automatizada de eventos extremos: calor, lluvia, viento y UV. Treemap por tipo y distribución mensual.
Forecast a 30 días con Prophet (Meta) para temperatura y ETP, incluyendo bandas de confianza al 80%. La predicción indica ETP > 7 mm/día sostenido en todas las estaciones, señalando requerimientos críticos de riego.
4 Estaciones Bronze Silver Gold (DuckDB)
(Davis V.Pro 2) (Parquet crudo) (Parquet limpio) (star schema)
TXT → particionado → tipado, validado → dim_*, fact_*
por estación/ deduplicado modelo relacional
año/mes
↓
Power BI (ODBC)
Prophet → fact_forecast
- Python 3.11+ — orquestación del pipeline
- DuckDB — motor analítico embebido (sin servidor)
- Apache Parquet — almacenamiento columnar con compresión Snappy
- Prophet — forecasting de series de tiempo (Meta)
- Power BI Desktop — dashboards (conexión ODBC a DuckDB)
- Tabular Editor 2 — despliegue programático de medidas DAX
- DAX Studio + Bravo — optimización de queries y análisis del modelo
climate-lakehouse-pe/
├── README.md ← Este documento
├── LICENSE ← MIT
├── requirements.txt ← Dependencias Python
├── .gitignore
│
├── src/
│ ├── 01_generate_synthetic.py ← Generador de datos sintéticos
│ ├── 02_ingest_to_bronze.py ← TXT → Parquet (Bronze)
│ ├── 03_bronze_to_silver.py ← Limpieza (Silver)
│ ├── 04_silver_to_gold.py ← Star schema (Gold)
│ ├── 05_forecasting.py ← Forecasting con Prophet
│ └── utils/
│ ├── stations.py ← Configuración de las 4 estaciones
│ ├── climate_patterns.py ← Estacionalidad, El Niño, ruido
│ └── meteorology.py ← Penman-Monteith, punto de rocío, etc.
│
├── data/
│ ├── raw/ ← 4 archivos TXT (esquema Davis Vantage Pro 2)
│ ├── bronze/ ← Parquet crudo, particionado
│ ├── silver/ ← Parquet limpio
│ └── gold/
│ └── climate.duckdb ← Base analítica final
│
├── powerbi/
│ ├── ClimateLakehousePE.pbix ← Dashboard (5 páginas)
│ ├── dax_measures.cs ← Script C# para Tabular Editor (39 medidas)
│ └── climate_theme.json ← Tema custom de Power BI
│
├── sql/ ← Queries SQL standalone (DuckDB)
│
└── docs/
├── architecture.svg
├── dashboard_spec.md ← Especificación visual de las 5 páginas
└── screenshots/
├── 01_overview.png
├── 02_el_nino.png
├── 03_water.png
├── 04_alerts.png
└── 05_forecast.png
- Python 3.11+
- Power BI Desktop (Windows)
- DuckDB ODBC Driver — descargar
git clone https://github.com/szkad/climate-lakehouse-pe.git
cd climate-lakehouse-pe
python -m venv venv
venv\Scripts\activate # Windows
# source venv/bin/activate # Linux/Mac
pip install -r requirements.txtpython src/01_generate_synthetic.py # ~7 seg, genera 140K registros
python src/02_ingest_to_bronze.py # TXT → Parquet
python src/03_bronze_to_silver.py # Limpieza
python src/04_silver_to_gold.py # Construye star schema
python src/05_forecasting.py # Entrena Prophet, escribe fact_forecastEsto genera data/gold/climate.duckdb (~25 MB) listo para consumo desde Power BI.
1. Abrir powerbi/ClimateLakehousePE.pbix en Power BI Desktop
2. Si pide refrescar datos: confirma y actualiza la conexión ODBC
apuntando a tu data/gold/climate.duckdb local
3. Listo.
El proyecto está inspirado en experiencia real con estaciones meteorológicas Davis Vantage Pro 2 en agroindustria del norte del Perú, pero toda la data es 100% sintética y publicable. No se expone ninguna información confidencial de ninguna empresa.
El generador implementa:
- Estacionalidad anual — ciclos de verano/invierno austral
- Ciclo diurno — temperatura pico a las 14:00, mínima a las 05:00
- Diferenciación entre estaciones — costa vs valles vs pre-andina
- Niño Costero 2023 (Yaku) — episodio de lluvias intensas marzo-mayo 2023
- Niño Global 2023-24 — anomalías de temperatura por 12 meses
- Episodios de tormenta — ráfagas torrenciales concentradas durante el Niño
- Eventos de viento — 5-7 episodios de ráfagas fuertes por año por estación
- Ruido AR(1) — variabilidad climática autocorrelacionada realista
- Datos faltantes — ~0.3% NaN simulando glitches reales de estaciones
Mediciones primarias:
temp_out_c, humidity_pct, wind_speed_kmh, wind_dir, pressure_hpa, precip_mm, solar_wm2, uv_index
Derivadas usando fórmulas meteorológicas reales:
dew_point_c— fórmula de Magnus-Tetensheat_index_c— regresión Rothfusz del NWSwind_chill_c— fórmula oficial del NWSthsw_index_c— temperatura aparente con componente solaretp_mm— Penman-Monteith FAO-56 (métrica clave de riego)air_density— ley de gas ideal con corrección de vapor
Esto es meteorología estándar de la industria, no números aleatorios.
DuckDB es el desarrollo más interesante en analítica moderna: poder OLAP completo de SQL sin necesidad de servidor. Lee y escribe Parquet nativamente, se integra con Python, y conecta a BI tools vía ODBC. Perfecto para proyectos donde desplegar un cloud warehouse sería overkill.
Dos razones:
- Diferenciación — cualquiera puede usar un dataset de Kaggle; pocos pueden diseñar uno realista para un dominio específico.
- Conocimiento de dominio — diseñar un generador que captura patrones del Niño, física de la ETP, y el esquema Davis Vantage Pro 2 demuestra entendimiento del dominio de la meteorología agrícola.
La mayoría de proyectos BI son descriptivos (¿qué pasó?). Los proyectos BI top son predictivos (¿qué pasará?) y prescriptivos (¿qué deberíamos hacer?). Este proyecto incluye los tres:
- Páginas 1, 2, 4 → Descriptivo
- Página 5 → Predictivo (forecast con Prophet)
- Página 3 → Prescriptivo (recomendación de riego)
En lugar de hacer click en cada medida manualmente en Power BI Desktop, las 39 medidas del modelo se despliegan vía un script C# en Tabular Editor:
M("Δ Temp vs AA",
"[Temp Promedio] - [Temp Promedio AA]",
"+0.0 °C;-0.0 °C;0",
"03 Time Intelligence",
"Diferencia vs mismo período del año anterior");Esta es práctica estándar de la industria para equipos BI que manejan muchas medidas.
La medida "Recomendación de Riego" va más allá de la analítica descriptiva:
Recomendación de Riego =
VAR Balance = [Balance Hídrico]
VAR Days = [Días con Datos]
VAR DailyBalance = DIVIDE(Balance, Days)
RETURN
SWITCH(
TRUE(),
DailyBalance > 0, "✅ Sin necesidad de riego",
DailyBalance > -3, "🟡 Riego ligero recomendado",
DailyBalance > -6, "🟠 Riego moderado necesario",
"🔴 Riego intensivo crítico"
)
MIT — ver LICENSE
Alexis Zapata — Analista de Datos | BI en Agroindustria | Sullana, Perú
- 6 campañas en agroindustria peruana (Virú Group, 2020-2025)
- Bachiller en Ingeniería Informática — Universidad Nacional de Piura
- Certificación: Google Advanced Data Analytics (2026)
- LinkedIn: alexiszapata19
- GitHub: @szkad
Stack: Power BI · DAX · Tabular Editor · SQL Server · Python · DuckDB · Parquet · Prophet · Power Query
Si te interesa BI aplicado a la cadena de valor completa de una agroexportadora peruana (cosecha → planta → exportación), revisa también:
piquillo-bi-platform-peru — Plataforma BI end-to-end con SQL Server DW, ETL con stored procedures y Power BI con Row-Level Security.
- Davis Instruments por el esquema de referencia del Vantage Pro 2
- Meta AI por liberar Prophet como open source
- DuckDB Labs por democratizar los motores analíticos
- La FAO por la documentación de la ecuación de Penman-Monteith