Projecte 1 — El Rebost de Blanes
| Camp | Valor |
|---|---|
| Empresa | El Rebost de Blanes (supermercat online, fundat el 2019) |
| Sector | Alimentació / e-commerce local |
| Nivell | Júnior — la teva primera setmana com a becari/ària de dades |
| Durada estimada | 5-6 hores |
| Blocs relacionats | Bloc 1 (fonaments), Bloc 2 (relacional), Bloc 5 (ETL i qualitat), Bloc 7 (visualització) |
Context
El Rebost de Blanes és un supermercat online que porta la compra a domicili a Blanes, Lloret de Mar i Tossa de Mar. Té 5 anys d'història, un catàleg d'uns 3.000 productes i unes 40.000 comandes anuals. L'empresa mai ha tingut ningú dedicat a dades: totes les consultes es feien "a mà" obrint Excels exportats des del programa de gestió (ERP). Acabes de començar-hi com a becari/ària i el teu cap et diu: "Aquí tens accés a la base de dades i uns quants exports en CSV. Necessitem entendre millor els nostres clients i les nostres vendes."
Datasets
| Fitxer | Contingut | Files |
|---|---|---|
clients.csv |
Taula de clients: id_client, nom, email, data_alta, municipi |
8.000 |
comandes.csv |
Comandes: id_comanda, id_client, data_comanda, total_euros |
33.133 |
vendes_2025.csv |
Export brut de l'ERP amb els problemes de qualitat del Dia 3 | 431 |
Dia 1 — Primera exploració
Se't dona accés a la base de dades PostgreSQL de producció (només lectura) amb les taules clients i comandes, i un export vendes_2025.csv extret directament de l'ERP.
import pandas as pd
df = pd.read_csv("vendes_2025.csv")
print(df.info())
print(df.head())
print(df.isnull().sum())
Tasca: fes una primera exploració amb pandas del fitxer vendes_2025.csv i respon: quantes files té, quines columnes tenen valors nuls, i quin sembla ser el problema més greu de qualitat que detectes a simple vista?
Dia 2 — Segmentació de clients amb SQL
El teu cap vol saber quants clients registrats mai han fet cap comanda (per decidir si val la pena llançar-los una campanya de reactivació).
SELECT COUNT(*) AS clients_sense_comandes
FROM clients c
LEFT JOIN comandes co ON c.id_client = co.id_client
WHERE co.id_comanda IS NULL;
-- Resultat: 1.847 clients sense cap comanda registrada
Tasca: escriu la consulta que, a més del recompte, llisti aquests 1.847 clients ordenats per data d'alta (els més antics primer, ja que són els que fa més temps que "s'han perdut"). Després, escriu una segona consulta que calculi, per a cada client amb comandes, el nombre de dies transcorreguts des de la seva última compra, per identificar clients en risc d'abandonar (per exemple, més de 90 dies sense comprar).
Dia 3 — Neteja del CSV de vendes
El fitxer vendes_2025.csv ve directament de l'ERP i té els problemes típics d'un export fet sense pensar en anàlisi de dades posterior:
| id_venda | data | client | preu | quantitat |
|---|---|---|---|---|
| 10234 | 03/01/2025 | 4021 | 12,50 | 2 |
| 10235 | 2025-01-03 | 4022 | "8.90" | 1 |
| 10234 | 03/01/2025 | 4021 | 12,50 | 2 |
| 10236 | 03-01-2025 | 15,00 | 3 |
Problemes a resoldre:
- Dates en tres formats diferents (
03/01/2025,2025-01-03,03-01-2025) dins del mateix fitxer. - Preus com a text, alguns amb coma decimal (
"12,50") i altres amb punt i cometes ("8.90"). - Files duplicades (la comanda
10234apareix dues vegades exactes). - Client nul a la fila
10236: cal decidir si es descarta la fila o es marca com a "client desconegut".
Tasca: escriu un script Python amb pandas que llegeixi el CSV i apliqui les quatre correccions. Documenta amb un comentari, per a cada problema, quina decisió has pres i per què (per exemple: descartar files amb client nul, o no).
Dia 4 — Pipeline de raw a silver
Amb el codi de neteja del Dia 3 ja provat, cal convertir-lo en un pipeline reproduïble. El teu cap fa servir Airflow per a altres processos i vol que aquest hi encaixi.
Tasca:
- Dissenya un DAG d'Airflow amb com a mínim tres tasques:
extreu_csv(llegeix el fitxer en brut),neteja_dades(aplica les correccions del Dia 3) icarrega_silver(escriu el resultat net a una taulasilver.vendes). - Puja el codi a un repositori Git i redacta un missatge de commit clar.
- Simula una revisió de codi (code review): identifica tu mateix/a dos punts millorables del teu propi codi (per exemple, manca de gestió d'errors si el fitxer no existeix, o un nom de variable poc clar).
Dia 5 — Incident en producció i dashboard
Incident: el DAG que vas crear ahir ha fallat aquesta nit. Als logs d'Airflow hi ha aquest error:
Tasca (part 1 — diagnòstic): explica per què falla exactament aquesta data i proposa una modificació al codi de neteja perquè les dates invàlides (com un 31 de febrer, que no existeix) es marquin com a error en lloc d'aturar tot el pipeline.
Tasca (part 2 — mètriques i dashboard): un cop reparat el pipeline, construeix una taula agregada amb els KPI que el teu cap ha demanat: vendes totals per setmana, ticket mitjà, i les 10 categories de producte més venudes. Presenta aquestes dades en un dashboard senzill (Power BI o una llibreria Python de visualització, a triar).
Lliurament
- Script de neteja de dades (Dia 3) amb comentaris justificant cada decisió.
- Definició del DAG d'Airflow (Dia 4).
- Consultes SQL del Dia 2.
- Explicació de l'incident i la correcció (Dia 5).
- Captura o fitxer del dashboard final amb els KPI.
Mòdul M5074 Sistemes de Big Data | Institut Sa Palomera (Blanes) | Curs CEIABD 2026-2027