ETL de vendes i meteorologia
Mou el temps les vendes? La resposta és a la unió de dues fonts que ningú no va dissenyar per ajuntar-se.
Dades i BI · Python · Demo navegable

El problema
La dada que decideix alguna cosa gairebé mai no és en una taula: és a la unió. I unir bé dues fonts alienes —amb formats, ciutats i calendaris propis— és la meitat de la feina real d’enginyeria de dades, la que no es veu al gràfic final.
Què fa
- Extreu dos conjunts públics independents: transaccions de venda al detall i temperatura diària de grans ciutats.
- Els normalitza i els uneix per ciutat i data, que és on es trenquen aquesta mena d’unions.
- Arquitectura modular d’extracció, transformació i càrrega, amb registre i traçabilitat de cada pas.
- Deixa sis conjunts preagregats a punt per al panell, sense backend a mantenir.
El que es va decidir en construir-lo
- Es dedupliquen les dades abans de creuar
- Dues estacions a la mateixa ciutat i el mateix dia no fan fallar la unió: dupliquen cada venda d’aquella ciutat i la facturació surt al doble sense ni un avís. Les dades es tanquen a ciutat i dia abans de tocar les vendes, i dues proves comproven que la facturació total no canvia en creuar.
- La clau d’unió es normalitza als dos costats
- Ciutat i data, amb el nom de la ciutat portat a la mateixa forma a les dues taules. És exactament on es trenquen aquestes unions: no falla, simplement deixa de creuar la meitat i el gràfic surt igual de bonic sobre una fracció del negoci.
- El sentinella de l’origen es neteja en extreure
- El conjunt meteorològic d’origen marca la dada absent amb un noranta-nou negatiu, que és una temperatura perfectament vàlida per a una mitjana aritmètica. Es descarta en l’extracció, no en l’anàlisi: un valor impossible que arriba fins al gràfic ja ha contaminat tot el que hi ha pel camí.
- Es treballa sobre còpies
- La columna auxiliar de la unió s’escrivia sobre les taules de qui cridava la funció: sobrevivia a la crida i acabava viatjant fins al fitxer final. Ara cada pas copia el que rep, que és el que permet encadenar transformacions sense que cap embruti la següent.
Fins on arriba
- Les dades d’origen són dos conjunts públics de Kaggle i no es versionen aquí. El que es publica és el procés i les seves quaranta-una proves; per reproduir els volums cal descarregar-los.
- El projecte no mesura correlació entre clima i vendes: agrupa la venda mitjana per tram de temperatura. Comparar aquests trams barreja temperatura amb estació de l’any, amb geografia i amb calendari comercial. No s’ha de llegir com a causa.
- La taxa d’encreuament es registra però no s’exigeix un mínim. Les vendes sense part meteorològic s’exclouen de l’agregat, així que un encreuament baix donaria un gràfic igual de convincent sobre menys negoci.
- El gràfic de dispersió és una mostra de cinc-cents punts, no el núvol complet.
- 2 conjunts públics creuats
- 41 proves sobre l’encreuament
- 6 conjunts preagregats
Construït amb
- Python
- Pandas
- Firebase
D’on surten les dades
Dos conjunts de dades públics de Kaggle: Superstore Sales i Daily Temperature of Major Cities.