Vai al contenuto principale

Boxplot in Python: guida completa per principianti

Crea boxplot spettacolari in Python! Questo tutorial per principianti copre Matplotlib e Seaborn, aiutandoti a visualizzare e confrontare le distribuzioni dei dati.
· 15 min leggi

Scopri con l'IA

Ti sei mai chiesto come rappresentare al meglio le distribuzioni di dati numerici in Python? La scelta migliore è imparare a usare i boxplot! I boxplot sono un ottimo modo per visualizzare e confrontare le distribuzioni tra più gruppi.

In questo tutorial vedremo cosa sono i boxplot, i diversi modi per crearli in Python e alcuni errori comuni dei principianti.

Cosa sono i boxplot in Python?

I boxplot, noti anche come diagrammi a scatola e baffi, sono un modo standard di mostrare i dati basato su un riepilogo a cinque numeri: minimo, primo quartile (Q1), mediana, terzo quartile (Q3) e massimo.

I boxplot sono particolarmente utili per identificare gli outlier e comprendere la dispersione e l'asimmetria dei dati. Sono usati anche per confrontare più gruppi o visualizzare la distribuzione di una singola variabile.

Componenti di un boxplot

Un tipico boxplot include diversi componenti nella sua "anatomia":

  1. Mediana: il valore centrale dei dati, rappresentato da una linea all'interno della scatola.
  2. Scatole: rappresentano l'Interquartile Range (IQR), ossia l'intervallo tra Q1 e Q3. I bordi inferiore e superiore rappresentano rispettivamente Q1 e Q3.
  3. Baffi: linee verticali che si estendono da ciascuna estremità della scatola per rappresentare i valori minimo e massimo, escludendo eventuali outlier.
  4. Outlier: punti al di fuori dei baffi, considerati insoliti o estremi rispetto al resto dei dati.
  5. Cappucci: linee orizzontali alle estremità dei baffi che rappresentano i valori minimo e massimo, inclusi eventuali outlier.

Questi elementi conferiscono al boxplot significato statistico e consentono confronti visivi immediati tra diversi gruppi di dati.

Python è uno strumento avanzato che può aiutarci a creare boxplot. Nelle sezioni seguenti esamineremo diversi metodi per farlo.

Boxplot in Python: guida passo passo

Ora che abbiamo una comprensione di base dei boxplot, vediamo come crearli con Python. Diverse librerie in Python, come Matplotlib, Seaborn e Plotly, supportano la creazione di boxplot.

Per creare boxplot in Python, devi prima installare le librerie necessarie. Le librerie principali sono Matplotlib, Seaborn e Plotly.

Ecco il codice per installarle:

pip install matplotlib
pip install seaborn
pip install plotly==5.22.0

Dopo l'installazione, il passo successivo è importare queste librerie nel tuo ambiente Python.

Assicurati anche di caricare gli eventuali dataset necessari che userai per i tuoi boxplot.

#imports Matplotlib library and assigns shorthand 'plt'
import matplotlib.pyplot as plt
#imports Seaborn library and assigns shorthand 'sns'
import seaborn as sns
#imports Plotly library and assigns shorthand 'px'
import plotly.express as px

Grazie alla versatilità di Python, creare un boxplot semplice richiede pochissimo codice. Iniziamo con la libreria più comune, Matplotlib.

Per creare un boxplot usando Matplotlib, importa le librerie necessarie:

import matplotlib.pyplot as plt
import numpy as np

Poi, prepariamo un semplice dataset:

# Generates some random dataset
np.random.seed(10) 
data = np.random.normal(0, 1, 100)

Infine, creiamo il boxplot vero e proprio e stampiamolo:

# Creates a boxplot
plt.boxplot(data) plt.title('Basic Boxplot') plt.show()

Ecco i risultati:Grafico base Matplotlib

Se vuoi creare boxplot separati in sottografici diversi, puoi usare la funzione subplot. Questo ti permette di creare più boxplot affiancati in un'unica immagine. 

Ecco l'esempio di codice completo:

import matplotlib.pyplot as plt
import numpy as np
# Generates multiple datasets
data1 = np.random.normal(0, 1, 100)
data2 = np.random.normal(1, 2, 100)
data3 = np.random.normal(2, 1.5, 100)
# Creates subplots
fig, axs = plt.subplots(1, 3, figsize=(15, 5))
# Plots Boxplot for Data 1
axs[0].boxplot(data1)
axs[0].set_title('Data 1')
axs[0].set_xlabel('Sample')
axs[0].set_ylabel('Value')
# Plots Boxplot for Data 2
axs[1].boxplot(data2)
axs[1].set_title('Data 2')
axs[1].set_xlabel('Sample')
axs[1].set_ylabel('Value')
# Plots Boxplot for Data 3
axs[2].boxplot(data3)
axs[2].set_title('Data 3')
axs[2].set_xlabel('Sample')
axs[2].set_ylabel('Value')
# Adjusts layout
plt.tight_layout()
plt.show()

Questo è il grafico risultante:

Più boxplot in Matplotlib

Tuttavia, questi sottografici non condividono lo stesso asse e non sono adatti a confronti affiancati tra categorie. Per più boxplot con lo stesso asse, dovrai creare boxplot raggruppati.

I boxplot raggruppati sono particolarmente utili per confrontare le distribuzioni tra più categorie. Consentono una comprensione più sfumata dei dati. Questi confronti possono rivelare differenze non immediatamente evidenti in altri grafici.

Ogni gruppo è presentato affiancato nello stesso grafico, facilitando l'evidenziazione di variazioni, tendenze e outlier tra diverse sottocategorie.

Ecco come creare un sottografico raggruppato:

# Generates grouped data
data_group1 = [np.random.normal(0, 1, 100), np.random.normal(1, 2, 100), np.random.normal(2, 1.5, 100)]
data_group2 = [np.random.normal(0, 1, 100), np.random.normal(1, 2, 100), np.random.normal(2, 1.5, 100)]
# Combines two data groups into a dataset
data = data_group1 + data_group2
# Creates grouped boxplots
plt.boxplot(data, positions=[1, 2, 3, 5, 6, 7], labels=['G1-D1', 'G1-D2', 'G1-D3', 'G2-D1', 'G2-D2', 'G2-D3'])
plt.title('Grouped Boxplots')
plt.xlabel('Group-Dataset')
plt.ylabel('Value')
plt.show()

Questo è il boxplot raggruppato prodotto dal codice sopra:

Boxplot raggruppati in Matplotlib

Puoi usare personalizzazioni avanzate in Matplotlib per migliorare le tue visualizzazioni.

Tecniche come aggiungere le medie, aggiungere la deviazione standard, creare boxplot raggruppati e usare boxplot orizzontali possono offrire intuizioni migliori sulla distribuzione dei tuoi dati.

Personalizzare i boxplot in Python ti consente anche di adattare le visualizzazioni alle specifiche del tuo progetto.

Ecco alcuni modi per personalizzare i boxplot usando la libreria Matplotlib:

1. Aggiungere etichette e titoli

Titoli ed etichette rendono i grafici più comprensibili a chi li guarda, che può cogliere rapidamente il confronto tra i dati. Aggiungerli è semplice e si può fare con le funzioni di Matplotlib.

Per aggiungere etichette a un boxplot di Matplotlib:

plt.boxplot(data)
# Adds title
plt.title('Customized Boxplot Title')
# Adds x axis label
plt.xlabel('Customized X Label')
# Adds y axis label
plt.ylabel('Customized Y Label')
plt.show()

Questo creerà un boxplot etichettato come nell'immagine qui sotto:

Titolo e etichette personalizzate del boxplot in Matplotlib

2. Regolare i colori del boxplot

Personalizzare colori e stili dei boxplot in Python permette una presentazione dei dati più chiara e gradevole. Aiuterà anche a mettere in evidenza in modo efficace specifici punti o confronti per i tuoi stakeholder.

Puoi cambiare i colori di scatole, baffi, cappucci, mediane e outlier usando i parametri boxprops, whiskerprops, capprops, medianprops e flierprops.

Ecco l'esempio di codice:

plt.boxplot(data, boxprops=dict(color='blue'), whiskerprops=dict(color='red'), capprops=dict(color='green'), medianprops=dict(color='orange'), flierprops=dict(markerfacecolor='red', marker='o'))
plt.show()

Questo creerà colori diversi per i componenti del tuo boxplot in base ai parametri impostati:

Personalizzazione dei colori del boxplot in Matplotlib

3. Aggiungere media e deviazione standard

Aggiungi media e deviazione standard al boxplot per fornire maggiori informazioni statistiche.

# Creates dataset
data1 = np.random.normal(0, 1, 100)
data2 = np.random.normal(1, 2, 100)
data3 = np.random.normal(2, 1.5, 100)
# Calculates the mean and standard deviations
mean = [np.mean(d) for d in data]
std_devs = [np.std(d) for d in data]
# Creates a boxplot
plt.boxplot(data, labels=['Data 1', 'Data 2', 'Data 3'])
# Adds mean as red dots
for i in range(len(mean)):
   plt.plot(i + 1, mean[i], 'ro')
# Adds standard deviations as error bars
for i in range(len(std_devs)):
   plt.errorbar(i + 1, mean[i], yerr=std_devs[i], fmt='o', color='red')
# Plots graph
plt.title('Boxplot with Means and Standard Deviations')
plt.xlabel('Dataset')
plt.ylabel('Value')
plt.show()

Ecco il grafico risultante:

Boxplot con media e DS in Matplotlib

4. Boxplot orizzontali

I boxplot orizzontali possono rendere la visualizzazione più leggibile, soprattutto quando si hanno nomi di categorie lunghi.

Questo si può fare semplicemente usando il parametro vert della funzione boxplot in Matplotlib.

# Creates horizontal boxplot
plt.boxplot(data,
            labels=['Data 1', 'Data 2', 'Data 3'], 
            vert=False)
# Plots graph
plt.title('Horizontal Boxplot')
plt.xlabel('Value')
plt.ylabel('Dataset')
plt.show()

Questo è il grafico risultante eseguendo il codice sopra:

Boxplot orizzontale in Matplotlib

Il nostro corso Introduzione alla Data Visualization con Matplotlib può aiutarti a capire meglio come creare visualizzazioni oltre i boxplot.

Se ti serve consultare queste informazioni in futuro, ecco un cheat sheet riassuntivo per il plotting in Matplotlib:

Cheatsheet Matplotlib

Seaborn, costruito su Matplotlib, semplifica la creazione di boxplot gradevoli con pochissimo codice. La sua sintassi intuitiva lo rende accessibile a tutti i livelli di esperienza e l'integrazione con altre librerie garantisce la massima flessibilità nell'analisi dei dati.

Ecco una guida passo passo per creare un boxplot di base con Seaborn. Come prima cosa, importa le librerie necessarie.

# Imports necessary libraries
import seaborn as sns
import matplotlib.pyplot as plt
import numpy as np

Poi, prepariamo un semplice dataset:

# Generates a random dataset
np.random.seed(10)
data = np.random.normal(0, 1, 100)

Infine, creiamo il boxplot e stampiamolo:

# Creates a basic boxplot
sns.boxplot(data=data)
# Adds title to the boxplot
plt.title('Basic Boxplot') 
plt.show()

Questo è il grafico risultante:

Boxplot base con seaborn

Puoi personalizzare il grafico Seaborn usando i parametri hue, orient e palette. 

Per aggiungere colori al boxplot in base alle categorie, usa il parametro hue:

# Generate multiple datasets
data = {
    'Group': ['A']*100 + ['B']*100 + ['C']*100,
    'Value': np.concatenate([np.random.normal(0, 1, 100), 
                             np.random.normal(1, 2, 100), 
                             np.random.normal(2, 1.5, 100)])
}
df = pd.DataFrame(data)
# Create additional grouping data
df['Subgroup'] = np.random.choice(['X', 'Y'], size=300)
# Plots graph
sns.boxplot(x='Group', y='Value', data=df, hue='Subgroup', palette='Set2')
plt.title('Colored Boxplot')
plt.show()

Ecco il boxplot modificato:

Boxplot colorato con seaborn

Per impostare una specifica orientazione del boxplot, usa il parametro orient. Per l'orientazione verticale, imposta orient su 'v'. Per quella orizzontale, impostalo su 'h'.

Ecco il codice per un boxplot orizzontale:

# Plots horizontal boxplot
sns.boxplot(data=df, orient='h', palette='Set2')
plt.title('Colored Boxplot')
plt.show()

Il codice sopra creerà un boxplot come questo:

Boxplot orizzontale con seaborn

Per aggiungere i punti dati individuali al boxplot, puoi usare uno swarm plot con la funzione swarmplot:

# Plots boxplot
sns.boxplot(x='Group', y='Value', data=df)
# Overlays swarm plot over boxplot
sns.swarmplot(x='Group', y='Value', data=df, color='black', alpha=0.5)
plt.title('Boxplot with Swarmplot')
plt.show()

Il codice sopra creerà un boxplot come questo:

Boxplot con swarmplot

Uno swarm plot come questo può aiutare a fornire maggiori informazioni sulla distribuzione dei tuoi dati. Completa le informazioni statistiche di un boxplot per dare a chi guarda una visione più completa dei dati.

Dai un'occhiata al nostro corso Introduzione alla Data Visualization con Seaborn per altri modi di realizzare visualizzazioni con Seaborn.

Se vuoi consultare queste informazioni in futuro, ecco un cheat sheet per il plotting in Seaborn:

Cheat sheet Seaborn

Interpretare i risultati di un boxplot in Python

L'interpretazione di un boxplot dipende dal contesto e dalla specifica domanda di ricerca a cui risponde.

Tuttavia, alcune linee guida generali possono aiutare a comprendere la distribuzione dei dati mostrata dal boxplot. Tra queste:

  • La linea della mediana indica il valore centrale del dataset.
  • L'intervallo interquartile (IQR), ovvero il 50% centrale dei valori, è compreso tra il primo quartile (Q1) e il terzo quartile (Q3).
  • I baffi si estendono rispettivamente 1,5 volte sopra Q3 e sotto Q1.
  • Gli outlier sono tracciati singolarmente con un punto o un asterisco.
  • La lunghezza della scatola e dei baffi dà un'idea di quanto siano dispersi i dati.
  • Distribuzioni asimmetriche mostreranno un'irregolarità nelle dimensioni e nella posizione della scatola rispetto alla linea della mediana.
  • Outlier oltre 1,5 volte sopra o sotto Q3 e Q1 possono indicare valori estremi o potenziali errori di misurazione.

Errori comuni da evitare quando crei boxplot in Python

Sebbene Python renda semplice creare boxplot visivamente gradevoli a partire dai tuoi dataset, ci sono alcuni aspetti da considerare per evitare visualizzazioni fuorvianti o errate.

1. Non gestire i valori mancanti

Quando si crea un boxplot in Python, spesso si sottovaluta l'importanza del preprocessing dei dati, con risultati fuorvianti. 

Tutte le visualizzazioni richiedono una certa pulizia prima del plotting. I boxplot non fanno eccezione e possono mostrare i valori mancanti come outlier, alterando i risultati.

2. Scalare i dati in modo improprio

Inoltre, talvolta non si scala correttamente i dati, con il rischio di produrre un boxplot distorto che non rappresenta fedelmente le caratteristiche del dataset. La scalatura garantisce che le variabili contribuiscano in modo equo all'analisi.

3. Non affrontare gli outlier

Infine, può capitare di trascurare l'analisi e la gestione accurata degli outlier prima del plotting. Una gestione impropria degli outlier può alterare l'interpretazione: è fondamentale distinguere gli outlier genuini da errori o anomalie nella raccolta dati.

Prova a usare questo cheat sheet quando costruisci visualizzazioni:

Cheat sheet data visualization

Considerazioni finali

I boxplot sono uno strumento prezioso per visualizzare le distribuzioni dei dati e confrontarle tra categorie. 

In Python, puoi usare Matplotlib, Seaborn o Plotly per creare boxplot rapidamente con poco codice. DataCamp offre corsi completi per ciascuno di questi strumenti:

Ti va di approfondire la data visualization con Python? Allora il percorso Data Visualization with Python ti sarà di grande aiuto!

FAQs

I boxplot possono essere usati per dati non numerici?

No, i boxplot sono progettati esplicitamente per dati numerici. Rappresentano la distribuzione di un dataset basandosi su un riepilogo a cinque numeri (minimo, primo quartile, mediana, terzo quartile e massimo), che richiede valori numerici. Per dati non numerici, sono più adatte altre tecniche di visualizzazione come i grafici a barre o a torta.

Come posso interpretare la presenza di più outlier in un boxplot?

La presenza di più outlier in un boxplot indica diversi punti dati significativamente diversi dal resto del dataset. Ciò potrebbe suggerire variabilità o osservazioni insolite che richiedono ulteriori indagini. Gli outlier possono essere dovuti a errori di raccolta dati, variazioni naturali o differenze significative tra sottogruppi nei dati.

Posso usare i boxplot per confrontare la distribuzione dei dati tra più categorie?

Sì, i boxplot sono eccellenti per confrontare le distribuzioni tra varie categorie. Puoi affiancare i boxplot di diverse categorie per confrontarne mediane, intervalli interquartili e presenza di outlier. Questo può aiutare a individuare differenze e somiglianze nelle distribuzioni dei vari gruppi.

Quali sono alcuni errori comuni da evitare quando si interpretano i boxplot?

Quando interpreti i boxplot, evita i seguenti errori:

  • Ignorare il contesto degli outlier: gli outlier non indicano sempre errori, ma possono essere variazioni significative.
  • Confondere la mediana con la media: la mediana è il valore centrale, non la media, ed è meno influenzata dagli outlier.
  • Trascurare l'importanza della dimensione del campione: campioni piccoli possono portare a boxplot fuorvianti. Assicurati che la dimensione dei dati sia sufficiente per un'interpretazione affidabile.
Come posso creare boxplot interattivi in Python?

Per creare boxplot interattivi in Python, puoi usare librerie come Plotly o Bokeh. Queste librerie ti permettono di aggiungere interattività alle tue visualizzazioni, come tooltip, zoom e pan.

Austin Chia

Autore

Austin Chia

Sono Austin, blogger e autore tech con anni di esperienza come data scientist e data analyst nel settore sanitario. Partito dalla biologia, oggi aiuto altri a fare lo stesso passaggio attraverso il mio blog tecnologico. La mia passione per la tecnologia mi ha portato a collaborare come autore con decine di aziende SaaS, ispirando altre persone e condividendo le mie esperienze.

Argomenti

Correlato