Prima di tutto, cosa si può usare
Le fonti più ovvie erano le pagine dei risultati dell’organizzatore delle gare. Abbiamo letto prima i loro termini d’uso. Vietano la raccolta automatica e la memorizzazione dei risultati in un database, quindi non l’abbiamo fatto. Abbiamo invece trovato un dataset di ricerca aperto con licenza CC BY 4.0: circa 2,7 milioni di risultati anonimizzati dal 2002 al 2026. Nessun nome di atleta, e al prodotto non ne servivano.
Questo passaggio costa un giorno e risparmia una lettera dell’avvocato. Lo facciamo in ogni progetto sui dati.
Cosa abbiamo fatto
Abbiamo caricato l’intero dataset in un solo passaggio. 2,58 milioni di risultati su 250 gare e circa 1.500 edizioni, caricati in blocco con COPY di PostgreSQL e ordinati in SQL. Il caricamento completo richiede circa 25 minuti e si può rifare da zero.
Abbiamo messo ordine nelle parti disordinate. La stessa gara compare con nomi diversi negli anni, alcuni eventi dividono le gare maschili e femminili su giorni diversi e le distanze variano. Un piccolo registro di regole riconduce tutto a un unico elenco coerente di gare e circuiti, documentato accanto al codice.
Abbiamo definito la statistica con precisione. Il “tempo del top 10%” è il tempo finale dell’atleta in posizione ceil(n x 0,10) tra gli arrivati di quella fascia d’età. È scritto una volta sola, così ogni pagina intende la stessa cosa.
L’abbiamo resa veloce. Calcolare i percentili in tempo reale su un intero circuito di gare richiedeva 25 secondi. Ora le soglie vengono precalcolate dopo ogni caricamento dei dati, e le pagine si aprono all’istante.
Cosa dimostra
Dati raccolti con la licenza verificata, una pipeline riproducibile, una statistica definita una volta e usata ovunque, e il lavoro sulle prestazioni per renderla usabile.