Liberiamoli tutti è un'iniziativa della campagna #DatiBeneComune per individuare, ottenere, riformattare, pulire, documentare, pubblicare e diffondere dati di interesse pubblico.
Tanti di questi dati sono inaccessibili alle persone e alle comunità che ne hanno più bisogno: non sono mai stati resi pubblici, sono pubblicati in formati di difficile utilizzo, o senza la documentazione necessaria per interpretarli correttamente.
Vogliamo pubblicare quei dati utili alle tante organizzazioni che hanno aderito alla campagna e che vorranno segnalarci un vuoto informativo che, se colmato, renderebbe le loro azioni più utili, efficaci e interessanti.
I dati saranno "liberati" tramite questa newsletter (le altre qui).
Liberiamoli tutti è aperta ad ogni contributo, se vuoi segnalarci o proporci dei dati da liberare, scrivici a 📧 info@datibenecomune.it.
Liberiamoli tutti! è ispirata al Data Liberation Project, un meraviglioso progetto di Jeremy Singer-Vine (👏).
🧮 I dati sui sondaggi politici nazionali
In questo numero liberiamo i dati sui sondaggi politici nazionali. Esiste infatti una banca dati nazionale sui sondaggi elettorali, a cura del Dipartimento per l'informazione e l'editoria presso la Presidenza del Consiglio dei ministri, consultabile in questo sito: https://www.sondaggipoliticoelettorali.it.
L’esistenza di questa banca dati, è una conseguenza diretta dell’articolo 8 della legge 28 del 22 febbraio 2000: chi realizza sondaggi elettorali ha l’obbligo di alimentarla, inserendo le domande proposte, le risposte raccolte, i criteri seguiti per la formazione del campione e altre informazioni.
La banca dati però al momento è leggibile soltanto come sito web di centinaia di pagine da sfogliare a schermo: è (quasi) impossibile usare questi dati per fare conteggi, aggregare, filtrare, correlarli con altri.
➡️ Grazie al lavoro fatto da Ruggero Marino Lazzaroni sono stati liberati e resi disponibili in un formato che ne rende diretta e semplice l’elaborazione.
Elementi utili:
ogni giorno verrà verificato automaticamente se ci sono nuovi sondaggi e i dati verranno aggiornati;
si tratta soltanto dei sondaggi nazionali del tipo “quale partito voteresti?”;
sono rilasciati con licenza CC BY 4.0, li puoi usare a qualsiasi scopo, con il solo obbligo di citare la fonte;
il sito di origine nel tempo ha avuto diverse versioni. Qui facciamo riferimento alla più recente, che contiene sondaggi a partire dall’anno 2012;
si tratta - a settembre 2024 - di circa 1300 sondaggi.
📝 Alcune note sui dati sorgente
Il requisito 2 delle Linee Guida Open Data italiane (“Linee Guida recanti regole tecniche per l’apertura dei dati e il riutilizzo dell’informazione del settore pubblico”) prevede che le pubbliche amministrazioni debbano rendere disponibili i dati in formato aperto e leggibile meccanicamente, e almeno in formato CSV. Questo per renderne possibile un utilizzo efficace e adatto ai software di analisi dati.
Tuttavia, sul sito di riferimento, questo obbligo non viene rispettato, violando uno dei diritti digitali della cittadinanza (per farli valere, è utile questa guida).
Inoltre per dati come questi, oltre al formato leggibile meccanicamente, sarebbe essenziale disporre di una modalità di download complessiva in un click (o via API), poiché l'elemento di maggior valore non è il dato puntuale in un determinato momento, ma le sue variazioni nel tempo.
🗣️ Il valore di questi dati
Anche stavolta per noi è importante fare venire in superficie non tanto una nuova tabella, quanto il valore che hanno i dati liberati.
Stavolta a raccontarcelo è Ruggero Marino Lazzaroni (su X), che ha una laurea in filosofia e una magistrale in sistemi sociali computazionali. Alterna la ricerca sull'AI a un lavoro di AI policy e al freelancing come data-journalist e ingegnere AI.
Questo è un numero di “Liberiamoli tutti!” davvero speciale. Perché di solito abbiamo liberato noi i dati, a partire da esigenze/idee/desideri di altre persone (che è la parte più importante).
Qui è stato Ruggero a liberarli. Una volta fatto ci ha contattato, per fare causa comune, perché oltre a leggerci “avidamente”, è un compagno di viaggio. E sono episodi come questo, che ci fanno pensare per 5 minuti: “missione compiuta”.
Qui sotto il suo ricco e interessante “spiegone”.
⬇️⬇️⬇️
Questa è una storia che è iniziata anni fa
di Ruggero Marino Lazzaroni
Da qualche anno ormai, mi piace giocare con i dati elettorali perché risultano per me l’intersezione di due argomenti di ricerca a me graditi: la politica e metodologie quantitative. In più, ci si possono realizzare anche mappe gradevoli e informative.
Tuttavia, avere interessi del genere in Italia non è facile: i dati spesso non sono disponibili, oppure lo sono ma in formati poco fruibili, oppure magari sono perfetti e utilizzabili ma nascosti in pagine mal segnalate su terribili siti con funzioni di ricerca ancora più terribili. Per questo, sarò sempre grato a onData per l’enorme lavoro da loro svolto per rendere dati aperti i risultati delle principali elezioni nazionali, spesso ancor prima dell’annuncio ufficiale degli eletti (Liberiamoli Tutti ne ha già parlato qui).
C’è, tuttavia, una tipologia di dato politico a cui neanche OnData 😜 era ancora riuscito ad arrivare: i sondaggi politici nazionali. Quelli, per intenderci, che i telegiornali mostrano ogni settimana con le loro variazioni partito per partito e che, a volte, vengono presi come vaticini da certi politici. In Germania li chiamano “domande della domenica”, perché sono quei sondaggi le cui domande presentano una variazione della frase “Se si votasse domenica, per che partito voteresti?”. Essenziali per gli addetti al lavoro, giornalisti, ricercatori e in ogni caso di interesse generale per il pubblico, mancava ancora un modo per fruirne in un formato aperto. Il mese scorso, ho pensato che forse finalmente c’era un modo per rimediare.
Lo stato delle cose
Nella realtà italiana esistono già vari progetti che aggregano vari sondaggi nazionali di intenzione di voto, sia per visualizzarne i trend o per calcolare la percentuale delle intenzioni di voto per i vari partiti. Fra questi, sono a conoscenza di Youtrend, la redazione europea di Politico, la pagina wikipedia (in inglese) in vista delle future elezioni italiane, Bidimedia e i ragazzi di EuropeElects. Il problema è che nessuna di queste rilascia dataset scaricabili con i dati che utilizzano.
Di fronte a questa realtà, qualche anno fa ero andato alla ricerca di una fonte ufficiale da cui poter carpire una risorsa del genere. Scoprii che esiste una legge del 2000 che dice che tutti i sondaggi diffusi vanno pubblicati con tanto di metadati su un “apposito sito informatico, istituito e tenuto a cura del Dipartimento per l'informazione e l'editoria presso la Presidenza del Consiglio dei ministri”. Effettivamente, questo sito esiste e contiene tutti i sondaggi con i loro risultati, ma purtroppo sono inutilizzabili. Sorvolando sui commenti sulla interfaccia grafica alquanto retrò del sito, i risultati dei sondaggi sono salvati in maniera non strutturata: in pratica ogni quesito riporta le risposte con le varie percentuali in “raw text”. In realtà, il sito supporta l’inserimento dei risultati in una tabella, ma il tutto è sostanzialmente anarchico. Alcune agenzie di sondaggi riportano i risultati in una tabella, altre in una casella di testo libera inserendo un partito per riga, altre tutti su di una riga. Ho visto anche sondaggi in cui la percentuale di astensione era inserita nella casella della domanda.
La cosa che rende l’estrazione via macchina di questi dati un incubo è l’assoluta non standardizzazione di come chiamare i vari partiti italiani: finché si tratta di PD e Partito Democratico è un problema risolvibile, ma con così tanti sondaggisti e così tanti partiti (in continuo mutamento nel tempo) il compito di supportare tutte le possibili variazioni risulta erculeo. Per questo, poco dopo aver scoperto questo sito conclusi che trarne dati in maniera automatica fosse impossibile e che, probabilmente, chi usa dati di questo genere fa una cosa che mi sono sempre rifiutato di fare: li inserisce a mano.
La svolta
La mia pigrizia quindi mi aveva impedito di fare qualsiasi cosa con dati sondaggistici, visto che avrebbe voluto dire spendere svariato tempo a copincollare, colonna per colonna, risultati di vari sondaggi in un foglio di calcolo. Finché, il mese scorso, non mi è venuta un'idea. Non da poco faccio ricerca e lavoro con l’”AI”. Le “AI” che piacciono a me sono i Grandi Modelli di Linguaggio (LLM, come Chatgpt per capirci) e si dà al caso che tali modelli siano molto efficaci, fra le altre cose, nel trasformare testi liberi, ovvero dati non strutturati, in json ben fatti, ovvero dati strutturati.
Mi sono messo al lavoro: devo ammettere che la parte più complicata alla fine è risultata essere non l’intelligenza artificiale ma bensì la struttura un po’ farraginosa del sito. In ogni caso, vediamo come funziona il tutto.
Come si automatizza la raccolta dei sondaggi
Il primo step è quello che in gergo viene chiamato uno “scraper”: va sul sito e raccoglie i testi che poi l’AI trasformerà in dati. A volte, ad esempio per i siti statici, basta chiedere al sito in maniera programmatica l’html della pagina che si vuole “raschiare” e il gioco è fatto. Ma il Dipartimento per l'informazione e l'editoria presso la Presidenza del Consiglio dei ministri ha reso la cosa un po’ più interessante: il sito è dinamico e l’unico modo per accedere ai risultati dei sondaggi è cliccando bottoni. Ho quindi dovuto scrivere del codice che simuli un vero browser che “fisicamente” (si fa per dire) clicchi sopra ogni sondaggio e ne estragga il risultato.
La parte successiva è la cernita, distinguere la farina dalla crusca. Non tutti i sondaggi sono sondaggi nazionali del tipo “quale partito voteresti” e quindi non tutti vanno raccolti. Al momento, il programma usa delle parole particolari tipo “intenzioni di voto” per capire quale sondaggio (e quale domanda di un sondaggio, perché molti sondaggi sul sito presentano i risultati di varie domande) ci interessano.
Poi entra in gioco l’AI: per fare un prototipo veloce e che funzioni, al momento l’AI in questione è un modello di OpenAi usato tramite API. Preferisco di gran lunga l’AI open source e utilizzo quasi esclusivamente modelli aperti sia per lavoro che, ad esempio, nella mia tesi magistrale. Ma predisporre un server adhoc per far girare un modello aperto tramite magari Ollama era al di fuori della portata di questo progetto, dato che volevo garantire che il tutto girasse ogni giorno praticamente senza supervisione, una volta completato. Il testo del sondaggio (domanda + risultati) viene quindi mandato a questo modello insieme a un prompt che gli dice di fare una cosa del tipo “hey, tu trasformi i risultati dei sondaggi in json. Ecco un sondaggio, ecco che partiti devi includere nel json, buona fortuna”.
In realtà, al modello viene anche chiesto di assicurarsi che il sondaggio in questione sia veramente uno di quelli che ci interessa e non, che so, un sondaggio sulle comunali di San Giovanni in Tuscia. Questo dovrebbe tappare alcuni buchi lasciati dal filtraggio abbastanza naive che lo scraper fa attraverso i filtri basati su parole.
Una volta realizzata questa pipeline, l’ho eseguita sull’intero sito e ho poi caricato il codice e i dati risultanti (in jsonline, cioè tanti json riga per riga in un solo file di testo, e in csv, che è un formato più comune) in una repo su github, predisponendo poi un workflow automatico di github che lancia lo script per aggiornare i dati automaticamente ogni giorno.
A quanto pare, alla fine questo prototipo si è dimostrato essere un valido estrattore di dati che riesce a produrre un dataset di tutti i sondaggi italiani nazionali presenti sul sito (ovvero da metà 2012 ad ora, quelli precedenti sono su un sito ancora più vetusto che non voglio aprire). I dati risultanti sono quasi tutti completi e puliti. Il problema, però, è quel “quasi”.
I problemi
Il controllo semplicistico tramite LLM ha lasciato passare un numero di sondaggi che sembravano all'apparenza appropriati ma che invece riguardavano, ad esempio, elezioni regionali.
Per ovviare a ciò, ho pensato di implementare una tecnica che ho imparato dalla letteratura accademica: la catena di ragionamento. Praticamente, vuol dire che si dice al modello di scrivere per esteso il ragionamento che lo ha portato a darmi una certa risposta, in questo caso la classificazione dei sondaggi come appropriati o no. A quanto pare, generalmente migliora l'accuratezza delle risposte (molto alla larga, è anche la base dei nuovi modelli o1
di ChatGPT): conducendo di nuovo la raccolta dei dati, questa volta i sondaggi sembrano filtrati bene.
Alcuni sondaggi, poi, presentavano una domanda corretta ma nessuna risposta: dopo un'attenta investigazione ho scoperto che, raramente ma succede, alcune case sondaggistiche mettono i risultati in tabella ancora più complicate di quanto avevo previsto. Ho aggiustato il codice per trattare anche questi casi e a quanto mi risulta ora dovrebbe funzionare.
In futuro, prevedo di aggiungere altre funzionalità, come lo scraping di ulteriori metadata dei vari sondaggi, informazioni che potrebbero rivelarsi molto utili all’utilizzo di questi dati: cose come la dimensione del campione, la metodologia di rilevazione e l’intervallo di tempo in cui il sondaggio è stato condotto.
Riflessioni finali
Questi dati sono pubblici e, a mio avviso, dovrebbero poter essere liberamente fruibili. Mi sembra un grande peccato che, mentre le agenzie sondaggistiche sono obbligate a fornire questi dati, essi non siano facilmente utilizzabili. La potenzialità di uso di questi dati non è da sottovalutare: avere un sistema centralizzato con dati sempre aggiornati automaticamente potrebbe velocizzare il flusso di lavoro di media generalisti e specializzati, ovvero qualsiasi media che si occupi, anche saltuariamente, di diffondere i risultati dei sondaggi. Per chi si occupa principalmente di questo, come i vari portali che calcolano le medie dei sondaggi, posso ipotizzare che questo servizio possa rendere il tutto molto più facile (o meno costoso, qualora al momento si appoggino a fonti private).
Dati del genere possono essere anche utilizzati anche per studi accademici, sia per fare retrospettive su trend elettorali storici ma anche per fare stime sull’accuratezza dei vari istituti sondaggistici.
Credo che incoraggiare e aiutare le medie dei sondaggi sia molto importante anche solo dal punto di vista civico: il grande valore dei sondaggi è, appunto, vederli nel loro insieme e non singolarmente. Infatti, mentre concentrarsi su un singolo sondaggio può essere fuorviante (dato che la letteratura accademica suggerisce che i margini di errore dei sondaggi potrebbero potenzialmente essere il doppio di quelli riportati), sul lungo termine l’aggregazione potrebbe dare un’idea più accurata della realtà.
A questo scopo, al momento, la repository presenta una media ponderata esponenziale (di quelle che danno più valore ai sondaggi vicini nel tempo ma considerano anche quelli passati), per mostrare le percentuali aggiornate ai sondaggi odierni, e un grafico per vedere i trend storici dei principali partiti negli ultimi 10 anni.
Infine, una cosa che vorrei costruire, ma che fino a qualche anno fa risultava fantascienza per me, risulta adesso più vicino ad essere possibile: un modello automatico e sempre disponibile online che possa, giorno per giorno, modellare e simulare le future elezioni nazionali in base ai cambiamenti nei sondaggi.
🤓 I primi a usare questi dati siamo stati noi
Quando ci sono la farina e l’acqua, in ogni cucina saranno usati diversamente per fare ricette di tutti tipi. Quando c’è la materia prima, si possono fare cose.
Avendo avuto l’accesso in anteprima, noi di #datiBeneComune ne abbiamo fatto un primo utilizzo essenzialmente di “trasformazione”.
Ruggero pubblica un solo dataset, in due formati: JSON Lines
e CSV
. Ha scelto una rappresentazione wide dei dati, in cui per ogni sondaggio ci sono i relativi metadati e una colonna per ogni partito politico, con il relativo risultato.
Noi abbiamo scelto di suddividere la tabella originale in due - una per i metadati e una per i risultati - e di passare da una rappresentazione wide (larga, perché c’è una colonna per ogni partito) a una long (lunga perché c’è una sola colonna per i partiti, ma una riga per ogni partito).
Queste scelte sono in linea con i preziosi principi dei Tidy Data di Hadley Wickman, e sono anche una delle raccomandazioni delle linee guida open data italiane (grazie a Dennis Angemi per il suggerimento).
Inoltre abbiamo modificato le date da giorno/mese/anno a anno-mese-giorno, abbiamo applicato lo snake_case a tutti i nomi dei campi/colonne (sono scritti in minuscolo e separati da un trattino basso), abbiamo aggiunto un campo/colonna con il numero di partiti per ogni sondaggio, e normalizzato il nome dell’azienda che ha realizzato il sondaggio (nome della stessa azienda, scritto in modi diversi).
➡️ I “nostri” dati li trovi qui: https://github.com/ondata/liberiamoli-tutti/tree/main/italian_polls
Chi ha usato questi dati
Gianni, nel suo “Previsione sondaggi politici in Italia”
Chi siamo
"Liberiamoli tutti" di datiBeneComune è promossa da ActionAid Italia, OnData e Transparency International Italia.
#DatiBeneComune è una campagna lanciata il 9 novembre 2020 per chiedere al Governo italiano di pubblicare in formato aperto e accessibile i dati sulla gestione della pandemia di COVID-19. La campagna è stata accolta sin dall’inizio con entusiasmo da parte di esperti, organizzazioni, testate giornalistiche, che hanno aderito immediatamente all’iniziativa. Oggi la campagna è impegnata della richiesta di dati aperti sul Piano Nazionale di Ripresa e Resilienza e su tutte le politiche e questioni di pubblico interesse.
Con “Liberiamoli tutti” vogliamo fare un altro passo per costruire una comunità di persone, organizzazioni e altre realtà attorno ai dati liberati ed al loro utilizzo e per contribuire a promuovere la cultura dei dati aperti.