La mappa che apre questo pezzo rappresenta l’esito delle elezioni regionali in Liguria. E questa è decisamente la parte meno interessante, dato che ormai è noto che ad aver vinto, seppur di misura, è stato il candidato del centrodestra Marco Bucci. Quella interessante è che per ottenerli abbiamo provato ad utilizzare Claude.ai, il LLM sviluppato da Anthropic, azienda nata da alcuni ex dipendenti di OpenAI. Un modello di AI che si sta specializzando nella raccolta e nell’analisi dei dati. Il risultato? Non è stato possibile ottenere tutti i dati, ma la colpa non è dell’intelligenza artificiale.
Il primo passo è stato quello di dare in pasto all’AI il codice html della pagina. Claude ci ha suggerito due tipi di approccio per estrarre i dati. Il primo quello di utilizzare le API del sito. Si tratta di un acronimo che significa Application Programming Interface e sta ad indicare un set di regole che si devono seguire per interfacciarsi con il sito. E, nel caso specifico, estrarre i dati relativi all’esito del voto su base comunale dei candidati alla presidenza della regione Liguria.
Ecco allora che ha fornito un codice scritto nel linguaggio di programmazione Python, che InfoData ha eseguito sulla propria macchina. Ma il tentativo è fallito perché, come ha spiegato l’AI dopo che abbiamo fornito il testo del messaggio di errore ottenuto, «il server sta attivamente rifiutando di darci l’autorizzazione ad accedere ai dati». Il server è quello di Eligendo, il portale del ministero dell’Interno dove vengono raccolti e pubblicati i risultati elettorali, a partire da quelli del referendum del 1946 che trasformò l’Italia in una Repubblica.
Spazio quindi al secondo tipo di approccio: «potremmo utilizzare Selenium o Playwright per simulare un browser reale e ottenere i dati dalla pagina web». In pratica, viene scritto un codice che apre un browser virtuale, che apre la pagina relativa a ciascuno dei 234 comuni liguri e trascrive su un foglio di calcolo i risultati delle elezioni. Un po’ come farebbe un essere umano, in altre parole, solo più in fretta. Una procedura che comunque richiede del tempo, anche perché tra il caricamento di una pagina e l’altro il codice prevede di lasciar passare alcuni secondi, per evitare di sovraccaricare il server (che è esattamente quello che succede quando hacker malevoli lanciano un attacco DDoS per rendere inaccessibile un sito).
Sono state necessarie quindici diverse versioni del codice prima che funzionasse effettivamente. Claude ha anche chiesto che gli venisse fornito il codice html di alcuni elementi specifici della pagina. In particolare, la difficoltà è stata quella di gestire i menù a tendina presenti sulla pagina: uno per la circoscrizione elettorale, uno per la provincia, uno per il comune. Una volta sistemato, però, il codice ha fatto il suo lavoro. O quasi, nel senso che ha estratto esclusivamente i dati di 203 comuni su 234.
Nel tentativo di risolvere il problema, InfoData ha fornito all’AI il link alla pagina con i dati del comune di Ventimiglia, rimasto escluso dall’estrazione, la macchina si è accorta di una cosa. Ovvero del fatto che selezionando un comune, l’url della pagina, ovvero l’indirizzo, cambiava. E la parte che si modificava era un numero che andava ad identificare il singolo comune. In questo caso, è stata l’intelligenza umana ad aiutare quella robotica a ricostruirlo. Tutti iniziavano con 07, il codice con il quale Istat identifica la regione Liguria.
Seguivano due coppie identiche di tre cifre, che indicavano circoscrizione elettorale e provincia, due entità che in Liguria coincidono. E qui sono iniziati i problemi. Perchè per Istat la provincia di Genova è 010, quella di La Spezia è 011, quella di Savona 009 e quella di Imperia 008. Per il ministero dell’Interno, invece, Genova è 034, Imperia 037, La Spezia 039 e Savona 074. L’impressione è che Istat le abbia numerate secondo un ordine che si potrebbe definire geografico, il ministero invece puramente alfabetico.
Il che già di per sé pone un problema di interoperabilità dei dati: come è possibile che due realtà della pubblica amministrazione usino codici differenti per identificare la stessa entità? «È corretto che il ministero possa avere qualche ragione per avere una propria codifica, che probabilmente è nata anche prima dell’istituto di statistica. Se però si deve fare analisi dei dati, ormai il codice Istat è lo standard», spiega Andrea Borruso, presidente di onData, un’associazione che si batte per diffondere la cultura degli open data. La soluzione? «Bisognerebbe che il sito del Viminale esponesse un dataset con la doppia colonna», ovvero con entrambi i valori, così che sia possibile passare da uno all’altro.
Ma non è finita. Perchè l’ultima parte del codice numerico che componeva l’url era rappresentata dagli ultimi tre numeri del codice Istat e dal numero 0, inserito come valore standard. Così che ad esempio il valore di Airole, comune della provincia di Imperia, era 070370370010. Anche in questo caso, però, il codice ha estratto i dati soltanto di 226 comuni su 234. Il motivo? Per alcuni comuni il codice idenfiticativo era diverso dallo standard degli altri 226. Valga, ad esempio, il caso di Montalto Carpasio, comune sparso di 508 abitanti in provincia di Imperia.
Essendo appunto in provincia di Imperia (037 per il ministero) e avendo come codice Istat 008068, l’aspettativa è che l’url della relativa pagina fosse 070370370680. In realtà, l’url della pagina che riporta i dati elettorali di Montalto Carpasio è 070370370325. Ora, è vero che questo comune è nato nel 2018 dalla fusione di quelli di Carpasio e Montalto Ligure. Ma non è chiaro perché il Viminale non identifichi il comune originato dalla fusione con una parte del codice Istat così come avviene con gli altri.
Così come non è chiaro perché il comune di Ventimiglia, che di fusioni non ne ha mai subite, veda terminare il proprio codice identificativo con 0610 invece che con 0650, ovvero le ultime cifre del suo codice Istat più il valore standard 0. Più in generale, non è chiaro perché il ministero dell’Interno non generi automaticamente un file .csv con i dati, costringendo così a scrapare i dati. Numeri che riguardano il voto popolare e che quindi dovrebbero essere agevolmente alla portata di ogni cittadino.
Guardando il codice, prosegue Borruso, «è evidente che alle spalle ci siano delle API, una modalità moderna e comoda per consentire il download dei dati. Ma in generale creare un .csv non è una cosa complessa». Il fatto quindi che non venga fatto «appare più una scelta che un caso». Se il punto è che si tratta di dati raccolti nella foga dello spoglio e suscettibili di qualche piccola modifica, basterebbe inserire un disclaimer sulla pagina di download. O magari anche solo trovare un modello standard per identificare i comuni, così che l’intelligenza artificiale possa supplire alla mancanza dei dati scaricabili. A meno che, certo, anche questa sia più una scelta che un caso.