Premessa (perché ho trovato questo problema)
Nel 2015 ho sviluppato un altro comparatore di pompe di benzina italiane durante un hackaton di 24H promosso da una nota compagnia assicurativa italiana. Ecco il progetto: https://fuel.reyboz.it/. È fatto con colla e spaghetti e con poche ore di sonno ma ha funzionato bene e abbiamo vinto. Ma questo non è il punto.
Quel progetto è stato basato su un dataset fornito dal MiSE - Ministero dello Sviluppo Economico. Bene, quel dataset era corrotto dal 2015 ma ora (2021 2022) è in qualche modo ancora più corrotto.
In breve, sono sicuro che in un mondo migliore il MiSE dovrebbe sistemare il suo dataset. Il problema è che non sono stato in grado di contattare il MISE in nessun modo. Ho provato dal sito ufficiale e ho provato via social, e ho provato via telefono, ma i bug nel loro dataset sono ancora lì.
Altre FAQ:
- No, non ho violato nessun sistema di sicurezza
- No, non ho manipolato un settore di memoria protetto
- No, non ho distrutto o danneggiato alcun sistema
- È solo un dataset corrotto e chiunque nel mondo può vedere che NON è colpa mia se è così
- Chi ha la capacità di riparare? Il MISE.
Passi per riprodurre il problema
- Scaricare il file anagrafica_impianti_attivi.csv da https://www.mise.gov.it/index.php/it/open-data/elenco-dataset/2032336-carburanti-prezzi-praticati-e-anagrafica-degli-impianti
- Aprire con LibreOffice (impostare il separatore sul punto e virgola - Sì, lo so, CSV significa letteralmente valori separati da comma (virgola) e invece loro usano usano il punto e virgola. Per favore non litigate per questo. Questo non è il nostro problema principale.
- Notate che il dataset è corrotto almeno sull'ID 46593 (linea 29) su una riga relativa a MEGA SERVICE S.A.S.
Panoramica rapida (scorrere fino alla riga 29):
Problema n. 1
Il MiSE chiaramente non sta usando una libreria adatta per generare un CSV e questo causa un dataset malformato.
Soluzione:
Si prega di adottare un vero standard CSV. Per esempio, non usare un punto e virgola come collante per i tuoi dati grezzi.
Riferimento:
- https://en.wikipedia.org/wiki/Comma-separated_values su Wikipedia
- https://www.php.net/manual/en/function.fputcsv.php per PHP
- https://pythonspot.com/files-spreadsheets-csv/ per Python
- http://commons.apache.org/proper/commons-csv/ per Java
- ...
Problema n. 2
Il MiSE non sta ripulendo correttamente l'input dell'utente.
Per favore ripulite i valori dell'utente rimuovendo i doppi spazi. Rimuovendo le tabulazioni. Rimuovendo i newline. Rimuovendo tutto lo schifo dell'utente.
Esempio: evitate qualcuno chiamato "Mario Rossi " (notare gli spazi all'inizio e alla fine e nel mezzo). Di questi esempi il dataset è intasato. E non possiamo correggerlo noi perché viene sovrascritto ogni mattino e non si capisce come contribuire.
Problema n. 3 - entità HTML che non dovrebbero essere presenti
Ogni tanto sono presenti entità HTML. Questo è un doppio problema, intanto perchè cose come ' non dovrebbero esserci (cosa meno grave), in secondo luogo perchè queste entità terminano con punto e virgola e si rompe il formato di quella riga (problema più grave). Esempio:
50833;IP;Api-Ip;Stradale;IP;STRADA STAT. SS 16 KM 283+630, LOCALITA' MARINA SNC 60018, MONTEMARCIANO (AN) 60018;MONTEMARCIANO;AN;43.65660808741167;13.332945954167167
Notare ' che dovrebbe rappresentare un apice ma è stata scritta come un'entità HTML e questo non dovrebbe capitare in un dataset.
Problema n. 4
"CSV" significa "comma-separated values" ma MiSE genera semicolon-separated values.
Soluzione proposta: wontfix. È troppo tardi per cambiarlo ora.
Anche se è troppo tardi per risolvere la cosa, non è troppo tardi per informare la gente: per favore ricordate che la C in CSV significa COMMA e non SEMICOLON.
Soluzione proposta per tutti questi 4 problemi
Innanzitutto si propone di chiarire quali sono le fonti dei dati, affinchè sia possibile proporre una soluzione a monte (cosa altrimenti impossibile).
In generale, è necessario adottare una qualsiasi libreria CSV, invece di usare semplicemente ";" come collante tra qualsiasi valore grezzo.
Questo risolverà un approccio di programmazione non ideale che sta effettivamente compromettendo il dataset del MiSE ogni giorno da almeno il 2015.
Nel frattempo
Qualcuno dovrebbe contattare la pompa di benzina MEGA SERVICE S.A.S. DI TERMINI MICHELE &C 123 di Licata, Km. 15+500, LICATA 92023 AG chiedendo loro di togliere gentilmente il " dal loro nome, dato che il reparto tecnico del MiSE al momento non può gestire quel caso.