here::here("code", "_common.R") |>
source()
# Load packages
if (!requireNamespace("pacman")) install.packages("pacman")
pacman::p_load(dslabs, ggrepel, stringr)
18 Principi della visualizzazione dei dati
18.1 Introduzione
In questo capitolo vengono presentati i principi fondamentali della visualizzazione dei dati, accompagnati da una breve descrizione esplicativa. Per approfondimenti, si raccomanda di consultare il capitolo Data Visualization del libro Introduction to Data Science.
Verranno inoltre analizzati errori, bias, imprecisioni sistematiche e altre problematiche che possono influenzare l’interpretazione dei dati. Poiché tali problematiche spesso sfuggono a una verifica diretta nel dataset, la visualizzazione diventa uno strumento indispensabile per identificarle e gestirle.
L’aumento della disponibilità di dataset informativi e di strumenti software ha elevato l’importanza della visualizzazione in numerosi ambiti. Essa non solo facilita la comunicazione dei risultati, ma stimola ulteriori analisi e consente di individuare errori e anomalie in modo immediato.
18.2 Un’Immagine Vale Più di Mille Parole
I numeri e le stringhe che compongono un dataset raramente offrono una visione chiara. Ad esempio, osservando la tabella dei dati relativi agli omicidi con armi da fuoco negli Stati Uniti:
head(murders)
#> state abb region population total
#> 1 Alabama AL South 4779736 135
#> 2 Alaska AK West 710231 19
#> 3 Arizona AZ West 6392017 232
#> 4 Arkansas AR South 2915918 93
#> 5 California CA West 37253956 1257
#> 6 Colorado CO West 5029196 65
diventa difficile rispondere a domande quali:
- Quali stati hanno le popolazioni maggiori o minori?
- Qual è la dimensione “tipica” di uno stato?
- Esiste una relazione tra popolazione e numero totale di omicidi?
- Come variano i tassi di omicidio nelle diverse regioni?
Al contrario, il grafico seguente rende evidenti tutte queste informazioni:
Il detto “un’immagine vale più di mille parole” si conferma: una buona visualizzazione comunica immediatamente il messaggio e spesso elimina la necessità di ulteriori analisi.
18.2.1 Domande Guidate dalla Visualizzazione
Osservando il grafico, possiamo rispondere rapidamente ad alcune domande:
Stati con popolazioni maggiori:
Gli stati con le popolazioni più numerose si trovano a destra sull’asse delle ascisse (scala logaritmica), evidenziando, ad esempio, California, Texas e New York.Stati con popolazioni minori:
Quelli con popolazioni ridotte si posizionano a sinistra, come Wyoming, Vermont e Alaska.Dimensione “tipica” di uno stato:
La densità delle osservazioni suggerisce che la maggior parte degli stati conta intorno a un milione di abitanti, mentre molti raggiungono i 5–10 milioni.Relazione tra popolazione e omicidi:
È evidente una relazione positiva: stati più popolosi tendono ad avere un numero maggiore di omicidi, pur mostrando alcune discrepanze dovute ad altri fattori.-
Variazione dei tassi di omicidio per regione:
Il grafico, attraverso la codifica cromatica, indica che:- Il Sud registra generalmente tassi più elevati.
- Il Nord-Est presenta tassi moderati e relativamente più bassi.
- L’Ovest mostra una grande variabilità, in parte dovuta a grandi popolazioni.
- Il Midwest evidenzia tassi bassi o moderati.
- Il Sud registra generalmente tassi più elevati.
18.3 Codificare i Dati Attraverso Segnali Visivi
Le visualizzazioni si basano su segnali visivi come posizione, lunghezza, angoli, area, luminosità e tonalità del colore. Tra questi, posizione e lunghezza risultano i più efficaci, in quanto il cervello umano è particolarmente sensibile alle variazioni spaziali. Al contrario, angoli e aree – tipici dei pie chart o bubble plot – possono indurre errori interpretativi, soprattutto in presenza di differenze minime.
Il colore, impiegato per rappresentare variabili qualitative o categoriali, è particolarmente utile in visualizzazioni multidimensionali, come le heatmap, ma va usato con attenzione per garantire l’accessibilità (ad es. evitare combinazioni rosso-verde per il daltonismo).
Mentre le tabelle garantiscono precisione numerica, i grafici (come i barplot) risultano più efficaci per dataset complessi, in quanto facilitano l’individuazione di pattern e tendenze.
18.4 Scelta della Visualizzazione Più Adeguata
La scelta del tipo di visualizzazione dipende dalla natura dei dati e dall’obiettivo comunicativo. Ad esempio:
- Barplot e dot plot: Ideali per confrontare valori quantitativi tra categorie.
- Istogrammi, boxplot e raincloud plots: Efficaci per descrivere la distribuzione di dati continui.
- Grafici di dispersione (scatter plot): Utili per esplorare relazioni tra due variabili continue.
La chiarezza e la leggibilità sono fondamentali: l’aggiunta di elementi superflui può distrarre e confondere, mentre una rappresentazione essenziale evidenzia il messaggio principale.
18.5 Aspetti Tecnici della Visualizzazione
18.5.1 Inclusione dello Zero
Quando la lunghezza è usata come segnale visivo (come nei barplot), è fondamentale far partire l’asse da zero per evitare distorsioni visive. In grafici basati sulla posizione (ad es. scatter plot), invece, l’inclusione dello zero non è sempre necessaria.
18.5.2 Prevenire le Distorsioni
L’utilizzo di aree, ad esempio nei bubble plot, può esagerare le differenze tra valori a causa della relazione quadratica tra raggio e area. Per confronti accurati, è preferibile utilizzare la posizione o la lunghezza.
18.5.3 Ordinamento delle Categorie
Disporre le categorie in base al valore della variabile di interesse, anziché in ordine alfabetico, facilita l’interpretazione visiva e mette in luce pattern significativi.
18.5.4 Evitare i Dynamite Plots
I dynamite plots, che rappresentano la media e l’errore standard, sono spesso fuorvianti in quanto enfatizzano differenze che potrebbero non essere statisticamente rilevanti. Una rappresentazione tramite dot plot, mostrando tutti i dati, offre una visione più completa della distribuzione (Weissgerber et al., 2015).
18.5.5 Confronti Coerenti
Quando si comparano distribuzioni (ad es. tramite istogrammi), è essenziale utilizzare gli stessi assi per evitare interpretazioni errate. L’allineamento dei grafici, sia in verticale che in orizzontale, facilita il confronto diretto.
18.5.6 Trasformazioni Logaritmiche
Le trasformazioni logaritmiche sono particolarmente utili per dati distribuiti su ampi ordini di grandezza o quando le variazioni sono di natura moltiplicativa. Esse riducono le distorsioni visive, rendendo più chiara l’interpretazione dei dati estremi.
18.5.7 Codifica di Variabili Aggiuntive
Per rappresentare una terza variabile in un grafico di dispersione, si possono utilizzare dimensioni, colori o forme differenti. È importante scegliere palette cromatiche accessibili e adatte anche a chi ha difficoltà visive.
18.5.8 Evitare Rappresentazioni Tridimensionali Inutili
Grafici 3D, come barre o pie chart tridimensionali, possono essere visivamente accattivanti, ma tendono a distorcere la percezione dei dati. Le visualizzazioni 2D rimangono generalmente più chiare e comprensibili.
18.5.9 Scelta delle Cifre Significative
Mostrare un numero eccessivo di decimali può confondere il lettore. Generalmente una o due cifre significative sono sufficienti per trasmettere il messaggio in modo accurato.
18.5.10 Conoscere il Pubblico
Infine, è essenziale adattare la visualizzazione al pubblico di riferimento. Grafici destinati a un’analisi interna possono includere dettagli tecnici, mentre per un pubblico non specializzato è preferibile semplificare e spiegare chiaramente i dati.
18.6 Introduzione a ggplot2
R offre strumenti potenti per creare grafici, e tra questi il pacchetto ggplot2 è uno dei più flessibili e facili da usare.
18.6.1 Perché usare ggplot2?
Immagina di voler analizzare il livello di ansia di un gruppo di studenti prima di un esame. Hai raccolto i dati, ma leggerli in una tabella può essere poco intuitivo. Con un grafico ben fatto, invece, puoi subito vedere chi ha livelli di ansia molto alti o come varia l’ansia in base all’“intolleranza all’incertezza” (IU), per esempio.
Simuliamo i dati:
# Imposta il seed per la riproducibilità
set.seed(123)
# Crea un campione di 200 partecipanti
n <- 200
# Genera il genere (0 = maschio, 1 = femmina)
gender <- sample(c(0, 1), n, replace = TRUE)
# Simula l'ansietà con livello più alto per le femmine
anxiety <- rnorm(n, mean = 50 + 10 * gender, sd = 10)
# Simula ore di studio con correlazione negativa con l'ansietà
study_hours <- rnorm(n, mean = 30 - 0.3 * anxiety, sd = 5)
# Simula IU (Intolerance of Uncertainty) con correlazione positiva
IU <- rnorm(n, mean = 50 + 0.5 * anxiety, sd = 10)
# Crea dataframe
df <- data.frame(
id = 1:n,
gender = factor(gender, levels = c(0, 1), labels = c("Male", "Female")),
anxiety = round(anxiety, 1),
study_hours = round(study_hours, 1),
IU = round(IU, 1)
)
df |>
head()
#> id gender anxiety study_hours IU
#> 1 1 Male 42.9 13.6 65.4
#> 2 2 Male 52.6 10.5 66.3
#> 3 3 Male 47.5 11.0 84.0
#> 4 4 Female 56.5 7.8 85.8
#> 5 5 Male 40.5 15.7 55.2
#> 6 6 Female 59.5 13.8 78.8
ggplot2 permette di creare grafici chiari e visivamente accattivanti, suddividendo ogni grafico in componenti:
-
Dati → Il dataset che vogliamo analizzare.
-
Geometrie → Il tipo di grafico (es. punti, barre, linee).
- Mappatura estetica → Il modo in cui i dati vengono rappresentati graficamente (es. colori, posizioni).
18.6.2 Creare un grafico con ggplot2
Per usare ggplot2, bisogna prima installarlo e attivarlo con:
Supponiamo di avere un dataset con il livello di ansia di studenti prima di un esame e vogliamo vedere se c’è una relazione con il numero di ore di studio. Creiamo un grafico a dispersione (scatterplot):
df |>
ggplot(
aes(x = study_hours, y = anxiety)
) +
geom_point()
Qui diciamo a ggplot2:
- Usa il dataset studenti
- Metti ore_studio sull’asse X e livello_ansia sull’asse Y
- Rappresenta i dati con punti
18.6.3 Personalizzare il grafico
Possiamo migliorare il grafico aggiungendo colore e titoli:
df |>
ggplot(
aes(x = study_hours, y = anxiety, color = gender)
) +
geom_point(size = 3) +
labs(
title = "Relazione tra ore di studio e ansia",
x = "Ore di studio",
y = "Livello di ansia",
color = "Genere"
)
Cosa cambia?
- i punti hanno colori diversi in base al genere;
- il grafico ha titoli chiari .
18.6.3.1 Altri tipi di grafici
-
Istogrammi → Per vedere la distribuzione dei punteggi di ansia
df |> ggplot( aes(x = anxiety) ) + geom_histogram(binwidth = 5)
-
Boxplot → Per confrontare l’ansia tra gruppi diversi
df |> ggplot( aes(x = gender, y = anxiety) ) + geom_boxplot()
In sintesi, ggplot2 è un ottimo strumento per visualizzare dati in psicologia. Anche con pochi comandi, possiamo creare grafici utili per interpretare i dati in modo intuitivo.
18.7 Riflessioni Conclusive
Una visualizzazione ben progettata trasforma informazioni complesse in messaggi immediati e facilmente interpretabili, riducendo il carico cognitivo e favorendo decisioni informate. Seguendo i principi illustrati, è possibile prevenire errori interpretativi e comunicare in modo responsabile i risultati di un’analisi.
Suggerimenti Chiave per Visualizzazioni Efficaci:
Chiarezza del Messaggio:
Definire l’obiettivo della visualizzazione e assicurarsi che il grafico trasmetta il messaggio principale in modo inequivocabile.Uso Appropriato del Colore:
Selezionare una palette limitata (circa cinque o sei colori) e accessibile per garantire coerenza e leggibilità.Guida dell’Attenzione:
Utilizzare dimensioni, posizionamento e contrasto per mettere in evidenza i dati rilevanti, eventualmente integrando annotazioni esplicative.Gestione del Sovraccarico Visivo:
Applicare la trasparenza per ridurre il sovrapposizionamento dei dati e, se necessario, ricorrere a tecniche di sottocampionamento.Coerenza degli Elementi Testuali:
Titoli, etichette e legende devono essere chiari e intuitivi, evitando abbreviazioni eccessive o termini troppo tecnici.
Ulteriori Accortezze:
Evitare distorsioni:
Prediligere grafici semplici (ad es. barplot con asse che parte da zero) per non alterare la percezione delle proporzioni.Ordinare le categorie:
Disporre le categorie in base ai valori, anziché in ordine alfabetico, per facilitare il confronto.Mostrare tutti i dati:
Preferire rappresentazioni che evidenziano anche i dati grezzi (come dot plot o strip chart) per non occultare informazioni rilevanti.Confronti coerenti:
Utilizzare assi comuni quando si confrontano distribuzioni diverse, garantendo una valutazione accurata.Trasformazioni logaritmiche:
Impiegare scale logaritmiche per dati distribuiti su ampi intervalli, migliorando la leggibilità dei valori estremi.Codifica di variabili aggiuntive:
Integrare informazioni supplementari tramite colore, dimensione o forma dei punti, soprattutto nei grafici a dispersione.Evitare rappresentazioni 3D:
Mantenere le visualizzazioni in 2D per evitare distorsioni nella percezione dei dati.Limitare le cifre decimali:
Mostrare solo il numero necessario di cifre significative per garantire chiarezza.Adattare la visualizzazione al pubblico:
Semplificare i grafici e spiegare chiaramente i dati quando il target è non specializzato.