Corso
Gli istogrammi sono rappresentazioni grafiche molto usate, in cui i punti dati sono organizzati in intervalli specifici. Si vedono spesso in statistica per mostrare la quantità di un certo tipo di variabile che ricade entro un determinato intervallo. Ad esempio, il tuo vecchio prof di matematica potrebbe aver usato un istogramma per visualizzare il numero di voti ottenuti da tutte le persone della tua classe.

Figura 1: Un esempio di istogramma che mostra la distribuzione dei voti di una classe.
[Fonte: Esempio di istogramma con Matplotlib]
Le loro barre di altezze variabili ricordano i grafici a barre, con la differenza che gli istogrammi servono per visualizzare dati quantitativi invece che categoriali, come avviene nei grafici a barre.
In genere, i dati numerici visualizzati negli istogrammi sono continui, ovvero assumono infiniti valori. Provare a tracciare i valori di variabili continue è spesso poco pratico. Gli istogrammi risolvono il problema raggruppando più punti dati in intervalli logici (detti bin), rendendone possibile la visualizzazione.
In questo tutorial vedremo come implementare istogrammi in Python utilizzando la libreria di visualizzazione dati Plotly. Daremo anche un'occhiata a diversi modi per personalizzare il tuo istogramma Plotly e al perché la data visualization è importante fin dall'inizio.
Dai un'occhiata a questo workbook DataLab per seguire il codice del tutorial.
L'importanza della data visualization nell'analisi dei dati
Nessuna azienda può dire di non trarre beneficio da una migliore comprensione dei propri dati. Il ruolo dell'analisi dei dati è aiutare le aziende a ottimizzare le performance e migliorare i risultati; questa disciplina si estende a tutti i campi in cui esistono dati, poiché gli insight sono generalmente considerati un vantaggio competitivo.
Le visualizzazioni dei dati sono le rappresentazioni grafiche che gli analisti usano per rappresentare informazioni e dati. Il loro scopo è riassumere i dati in un formato di facile comprensione, mettendo in evidenza gli elementi chiave per chi legge.
In altre parole, le aziende usano la data visualization per identificare rapidamente trend nei dati che altrimenti sarebbero difficili da cogliere senza supporto visivo. Le rappresentazioni grafiche rendono la comunicazione delle informazioni semplice, universale, veloce ed efficace.
Introduzione a Plotly
Plotly è una libreria interattiva e open source per la visualizzazione dei dati in Python e R, scritta in JavaScript. In questo articolo ci concentreremo su Plotly per Python, talvolta indicato come “plotly.py”, per distinguerlo dalla controparte JavaScript.
Suggerimento: segui i corsi Introduzione alla data visualization con Plotly in Python o Data visualization interattiva con Plotly in R per prendere confidenza con Plotly.
Molti utenti di Plotly raccontano di essere rimasti inizialmente “colpiti” dall'estetica moderna che la libreria permette di ottenere con facilità. Plotly per Python consente di creare visualizzazioni web attraenti e interattive che possono essere:
- visualizzate nei notebook Jupyter,
- salvate in file HTML standalone,
- servite come parte di applicazioni web costruite interamente in Python usando Dash.
Un altro punto di forza di Plotly è l'ampia gamma di tipi di grafico disponibili. La libreria supporta oltre 40 grafici unici per diversi casi d'uso, tra cui statistica, finanza, geografia, scienza e grafici tridimensionali.
Esportare le visualizzazioni create con Plotly è semplice grazie alla profonda integrazione della libreria con Kaleido, un'utilità per l'esportazione di immagini. C'è anche un ampio supporto per contesti non web, inclusi editor desktop (ad es. Spyder, PyCharm, ecc.) e la pubblicazione di documenti statici (ad es. esportazione di notebook Jupyter in PDF).
Installare plotly.py è piuttosto semplice; si può installare con pip:
pip install plotly>=5.11.0, <5.12.0
Oppure con Conda:
conda install -c plotly plotly>=5.11.0, <5.12.0
Nota: È consigliabile installare le librerie in un ambiente virtuale per mantenere separate le dipendenze dei diversi progetti. Puoi anche iniziare con un workbook DataLab - un IDE per Data Science in Python e R nel cloud.
Usare DataLab
DataLab è un IDE (Integrated Development Environment) online che consente di scrivere codice, analizzare dati da soli o in gruppo e condividere insight. In altre parole, puoi pensare a DataLab come a una sorta di Google Docs concepito appositamente per la data science; scopri di più su come funziona nel nostro articolo Usare DataLab in classe.
Per questo compito, dobbiamo creare un workbook a partire da un dataset. Per fortuna, DataCamp mette a disposizione una raccolta ricca e in crescita di dataset interessanti da analizzare. Quando creiamo un workbook da un dataset, l'ambiente contiene tutti i dati preconfigurati e una breve descrizione, così puoi metterti subito all'opera.
I passaggi per creare un workbook usando un dataset di DataCamp sono i seguenti:
- Dall'app DataLab, seleziona "Datasets" nella sidebar.
- Seleziona un dataset che ti interessa. Viene visualizzata una finestra di dialogo che fornisce un preview del dataset selezionato, incluso un dizionario dei dati e un link alla fonte, un'eventuale scelta della lingua (Python o R) e una panoramica delle pubblicazioni create da altri utenti con quel dataset.
- Seleziona Create workbook.

Figura 2: Una GIF che mostra i passaggi per creare un workbook da un dataset.
Nota: Consulta Creare un istogramma Plotly con i dati delle Olimpiadi per seguire il codice.
Useremo il dataset Olympics Data della raccolta interna di DataCamp. Secondo la descrizione, si tratta di un dataset storico sui Giochi Olimpici moderni, da Atene 1896 a Rio 2016. Ogni riga rappresenta un singolo atleta (271116 istanze) che ha partecipato a un evento olimpico e l'eventuale medaglia vinta.
Le colonne sono le seguenti:
|
Colonna |
Spiegazione |
|
id |
Numero univoco per ogni atleta |
|
name |
Nome dell'atleta |
|
sex |
M o F |
|
age |
Età dell'atleta |
|
height |
In centimetri |
|
weight |
In chilogrammi |
|
team |
Nome della squadra |
|
noc |
National Olympic Committee 3 |
|
games |
Anno e stagione |
|
year |
Intero |
|
season |
Summer o Winter |
|
city |
Città ospitante |
|
sport |
Sport |
|
event |
Evento |
|
medal |
Gold, Silver, Bronze o NA |
In base a quanto visto, le colonne da cui possiamo aspettarci di costruire un istogramma sono: age, height, weight e year. Questo perché gli istogrammi si costruiscono con valori numerici continui: servono a rappresentare la distribuzione di dati numerici, in cui i dati vengono suddivisi in bin e si mostra il conteggio per ciascun bin.
Useremo la colonna age per creare il nostro istogramma.
Creare un istogramma Plotly
Creare un istogramma in Python con Plotly è piuttosto semplice; possiamo usare Plotly Express, un'interfaccia di alto livello e facile da usare…
import plotly.express as px
# Create a histogram
fig = px.histogram(olympic_data.age, x="age",
title="Distribution of Athletes age")
fig.show()
Figura 3: Un istogramma creato con Plotly Express
Abbiamo anche la possibilità di usare i Graph Objects.
import plotly.graph_objects as go
fig = go.Figure(data=[go.Histogram(x=olympic_data.age)])
# add the title
fig.update_layout(title=dict(text="Distribution of Athletes age"))
fig.show()
Figura 4: Un istogramma creato con Plotly Graph Objects.
Le funzioni di Plotly express internamente richiamano i graph_objects, che restituiscono un valore. Per questo le funzioni di Plotly Express sono utili: permettono di disegnare visualizzazioni che altrimenti richiederebbero più righe di codice se realizzate con graph_objects.
Il modulo plotly.express (solitamente importato come px) contiene funzioni che possono creare intere figure in un colpo solo ed è indicato come Plotly Express o PX. Plotly Express è parte integrante della libreria Plotly ed è il punto di partenza consigliato per creare la maggior parte delle figure comuni. Ogni funzione di Plotly Express usa internamente i graph objects e restituisce un'istanza di plotly.graph_objects.Figure.
Fonte: Plotly Express in Python.
Nonostante Plotly express sia il punto di ingresso consigliato alla libreria, useremo i graph_objects per personalizzare l'aspetto del nostro istogramma, perché offrono maggiore flessibilità.
Personalizzare l'aspetto dell'istogramma Plotly
Al momento il nostro istogramma è piuttosto anonimo. Rendiamolo più curato cambiando i font del titolo e aggiungendo le etichette agli assi.
# Create histogram
fig = go.Figure(data=[go.Histogram(x=olympic_data.age)])
fig.update_layout(
# Set the global font
font = {
"family":"Times new Roman",
"size":16
},
# Update title font
title = {
"text": "Distribution of Athletes age",
"y": 0.9, # Sets the y position with respect to `yref`
"x": 0.5, # Sets the x position of title with respect to `xref`
"xanchor":"center", # Sets the title's horizontal alignment with respect to its x position
"yanchor": "top", # Sets the title's vertical alignment with respect to its y position. "
"font": { # Only configures font for title
"family":"Arial",
"size":20,
"color": "red"
}
}
)
# Add X and Y labels
fig.update_xaxes(title_text="Age")
fig.update_yaxes(title_text="Number of Athletes")
# Display plot
fig.show()
Figura 5: Istogramma Plotly con titolo aggiornato ed etichette degli assi aggiunte.
Con queste aggiunte, il nostro istogramma è più informativo.
Ora cambiamo la dimensione di ciascun bin.
# Create histogram
fig = go.Figure(data = [
go.Histogram(
x = olympic_data.age,
xbins=go.histogram.XBins(size=5) # Change the bin size to 5
)
]
)
Figura 6: Istogramma Plotly con dimensione del bin pari a 5.
Nel codice sopra abbiamo impostato il parametro xbins nell'istanza go.Histogram a un'istanza di go.histogram.Xbins e definito la dimensione del bin desiderata come parametro di tale istanza. Nota che avremmo potuto eseguire questo passaggio anche usando un oggetto dict con proprietà compatibili.
Infine, cambiamo il colore dei bin in arancione per far risaltare un po' di più la visualizzazione.
# Create histogram
fig = go.Figure(data = [
go.Histogram(
x = olympic_data.age,
xbins=go.histogram.XBins(size=5), # Change the bin size
marker=go.histogram.Marker(color="orange") # Change the color
)
]
)
Figura 7: Istogramma Plotly con bin arancioni.
Decisamente meglio.
Nel codice sopra, abbiamo impostato il parametro marker nell'istanza go.Histogram a un'istanza di go.histogram.Marker e definito il colore desiderato come parametro di tale istanza.
Esistono però molte altre personalizzazioni possibili per il nostro istogramma Plotly, ad esempio l'aggiunta di testo al passaggio del mouse (hover).
Abilitare l'hover text
Attualmente, quando passi il mouse su una barra dell'istogramma, viene mostrato un testo che descrive cosa rappresenta ciascuna barra: vedi Figura 8.

Figura 8: L'hover text attuale visualizzato passando il mouse sul nostro istogramma.
Non è molto intuitivo. Quando facciamo data visualization, vogliamo che i grafici siano autoesplicativi, persino nell'hover text. Aggiorniamo quindi le informazioni mostrate quando passiamo il mouse su un bin.
# Create histogram
fig = go.Figure(data = [
go.Histogram(
x = olympic_data.age,
xbins=go.histogram.XBins(size=5), # Change the bin size
marker=go.histogram.Marker(color="orange"), # Change the color
hovertemplate="<br>".join([
"Age Range: %{x}",
"Number of Athletes: %{y}"]) # Make hover text more informative
)
]
)
Figura 9: Le informazioni di hover text aggiornate.
Il testo mostrato quando passiamo il mouse su un bin è molto più informativo, il che rende la nostra visualizzazione più semplice da interpretare. Lo abbiamo fatto aggiornando il parametro hovertemplate nella nostra istanza go.Histogram.
Aggiungere opzioni di filtro
All'inizio del tutorial abbiamo detto che potevamo aspettarci di costruire un istogramma includendo le caratteristiche age, height, weight e year. Non c'è bisogno di creare un istogramma separato per ognuna.
Possiamo invece creare un singolo istogramma e aggiungere pulsanti di filtro che ti permettano di passare da una feature all'altra da visualizzare.
Ecco come appare in codice.
"""
Starter code provided by vestland on StackOverflow
Link: https://bit.ly/3ipqOMo
"""
# continuous features
continuous_vars = ["age", "height", "weight", "year"]
# plotly
fig = go.Figure()
# set up ONE trace
fig.add_trace(
go.Histogram(x = olympic_data.age,
xbins=go.histogram.XBins(size=5), # Change the bin size
marker=go.histogram.Marker(color="orange"), # Change the color
)
)
buttons = []
# button with one option for each dataframe
for col in continuous_vars:
buttons.append(dict(method='restyle',
label=col,
visible=True,
args=[{"x":[olympic_data[col]],
"type":'histogram', [0]],
)
)
# some adjustments to the updatemenus
updatemenu = []
your_menu = dict()
updatemenu.append(your_menu)
updatemenu[0]['buttons'] = buttons
updatemenu[0]['direction'] = 'down'
updatemenu[0]['showactive'] = True
# add dropdown menus to the figure
fig.update_layout(showlegend=False, updatemenus=updatemenu)
fig.show()
Figura 10: L'istogramma con filtri applicati che consente agli utenti di passare tra varie feature in un'unica visualizzazione.
Ed ecco fatto; assicurati di dare un'occhiata al workbook Creare un istogramma Plotly con i dati delle Olimpiadi e di sperimentare con quanto costruito in questo tutorial.
Conclusioni
Ora sai come creare un istogramma in Plotly per Python; in questo tutorial abbiamo visto:
- Che cos'è un istogramma e come funziona
- L'importanza della data visualization nell'analisi dei dati
- Come iniziare con DataLab
- Come creare un istogramma in Plotly
- Diverse modalità per personalizzare il tuo istogramma
- Come applicare filtri
Se cerchi altre risorse sulla creazione di istogrammi o sull'uso di Plotly, consulta i link qui sotto:

