Media, Mediana e Moda in Python
Calcola media, mediana e moda in Python con numpy e statistics. Esempi pratici, quando usare ciascuna misura e come gestire i valori mancanti.
Media, mediana e moda sono le tre fondamentali misure di tendenza centrale nella statistica. Ciascuna descrive il "centro" di un insieme di dati in modo diverso, e sapere quale usare — e quando — è una delle prime abilità pratiche necessarie per la preparazione dei dati nel machine learning.
Questo capitolo tratta:
- Cosa significa ciascuna misura e come viene calcolata
- Come calcolarle in Python con
numpye il modulostatistics - Quando preferire una misura rispetto a un'altra
- Come usarle per riempire i valori mancanti (imputazione)
Cosa Sono Media, Mediana e Moda?
Tutte e tre le misure riassumono un insieme di dati con un singolo valore rappresentativo, ma catturano aspetti diversi della distribuzione:
| Misura | Definizione | Ideale per |
|---|---|---|
| Media | Somma di tutti i valori ÷ conteggio | Dati simmetrici e normalmente distribuiti |
| Mediana | Valore centrale quando i dati sono ordinati | Dati asimmetrici o con valori anomali |
| Moda | Valore che ricorre più frequentemente | Dati categorici o conteggi discreti |
Comprendere la distribuzione dei dati aiuta a decidere quale misura sia più appropriata per il proprio insieme di dati.
Media
La media (media aritmetica) somma tutti i valori e divide per il numero di valori.
Formula: mean = (x₁ + x₂ + … + xₙ) / n
Usa numpy.mean() per calcolarla in Python:
Calcola la media di una lista con numpy
Quando usare la media
La media funziona bene quando i dati non presentano valori anomali estremi e seguono una distribuzione approssimativamente simmetrica. In presenza di valori anomali, essi attraggono la media verso di sé rendendola un rappresentante poco efficace del valore "tipico".
Media vs. mediana in presenza di un valore anomalo
import numpy as np
salaries = [40000, 42000, 45000, 48000, 50000, 300000]
print(f"Mean: {np.mean(salaries):.0f}") # Output: 87500
print(f"Median: {np.median(salaries):.0f}") # Output: 46500Qui la media è 87 500 — molto più alta di cinque dei sei stipendi — perché un valore estremo (300 000) la sposta verso l'alto. La mediana (46 500) rappresenta meglio ciò che guadagna un dipendente tipico.
Mediana
La mediana è il valore centrale di un insieme di dati ordinato.
- Numero dispari di valori: l'elemento centrale.
- Numero pari di valori: la media dei due elementi centrali.
Usa numpy.median():
Calcola la mediana di una lista con numpy
Insieme di dati con numero pari di elementi — la mediana è la media dei due valori centrali
import numpy as np
data_even = [1, 3, 5, 7]
print(np.median(data_even)) # Output: 4.0 (average of 3 and 5)Quando usare la mediana
La mediana è la misura di tendenza centrale preferita quando i dati sono asimmetrici o contengono valori anomali, poiché non è influenzata dai valori estremi. Reddito, prezzi delle case e distribuzioni di età sono esempi classici in cui la mediana è più informativa della media.
Moda
La moda è il valore che compare più spesso in un insieme di dati. Un insieme di dati può avere:
- Nessuna moda — se tutti i valori compaiono lo stesso numero di volte.
- Una sola moda (unimodale) — il caso più comune.
- Più mode (multimodale) — due o più valori con la stessa frequenza massima.
Usa statistics.mode() dalla libreria standard:
Calcola la moda di una lista con il modulo statistics
Gestire i dati multimodali
statistics.mode() genera un StatisticsError in Python 3.7 e versioni precedenti quando c'è un pareggio. In Python 3.8+ restituisce la prima moda incontrata. Per recuperare in modo sicuro tutte le mode, usa statistics.multimode():
Trova tutte le mode quando i dati hanno più picchi
import statistics
votes = [1, 1, 2, 2, 3]
print(statistics.multimode(votes)) # Output: [1, 2]Moda per dati numerici
La moda è più naturale per dati categorici o interi discreti, ma funziona anche per dati numerici continui:
import statistics
scores = [10, 20, 20, 30, 40]
print(statistics.mode(scores)) # Output: 20Quando usare la moda
Usa la moda quando si lavora con caratteristiche categoriche (colori, etichette, categorie di prodotti) o quando è necessario conoscere l'elemento più popolare — ad esempio, il tipo di difetto più comune in un insieme di dati per il controllo qualità.
Confronto tra le Tre Misure
L'esempio seguente mostra come media, mediana e moda divergano su un insieme di dati asimmetrico. Alcuni dipendenti più anziani alzano la media, mentre la mediana e la moda rimangono vicine a dove si trovano effettivamente la maggior parte dei dati:
Confronta media, mediana e moda su dati asimmetrici
import numpy as np
import statistics
ages = [22, 23, 24, 24, 25, 25, 25, 26, 60]
print(f"Mean: {np.mean(ages):.1f}") # Output: 28.2
print(f"Median: {np.median(ages):.1f}") # Output: 25.0
print(f"Mode: {statistics.mode(ages)}") # Output: 25La media (28.2) viene alzata dall'unico dipendente di 60 anni. La mediana e la moda (entrambe 25) rappresentano accuratamente il dipendente tipico.
Usare Media e Mediana per Imputare i Valori Mancanti
Un passaggio comune di pre-elaborazione prima di addestrare un modello è sostituire i valori mancanti (NaN) con una statistica rappresentativa. Questo processo si chiama imputazione.
- Imputazione con la media — sostituisce
NaNcon la media della colonna. Veloce, ma sensibile ai valori anomali. - Imputazione con la mediana — sostituisce
NaNcon la mediana. Robusta ai valori anomali; preferita per caratteristiche asimmetriche. - Imputazione con la moda — sostituisce
NaNcon il valore più frequente. Appropriata per le colonne categoriche.
Imputazione con la media usando numpy
import numpy as np
data = [10.0, 20.0, float('nan'), 40.0, 50.0]
mean_val = np.nanmean(data) # ignores NaN: (10+20+40+50)/4 = 30.0
imputed = [mean_val if np.isnan(x) else x for x in data]
print(imputed)
# Output: [10.0, 20.0, 30.0, 40.0, 50.0]Nel codice di produzione si utilizzerebbe tipicamente sklearn.impute.SimpleImputer, che si integra perfettamente nelle pipeline di scikit-learn e applica le stesse statistiche calcolate sia al set di addestramento che a quello di test.
Riferimento Rapido: Quale Misura Scegliere
| Scenario | Misura raccomandata |
|---|---|
| Dati numerici normalmente distribuiti | Media |
| Dati numerici asimmetrici (reddito, prezzi) | Mediana |
| Dati con valori anomali estremi | Mediana |
| Dati categorici (etichette, colori) | Moda |
| Imputazione di colonne numeriche con valori anomali | Mediana |
| Imputazione di colonne categoriche | Moda |
| Trovare il valore più popolare | Moda |
Argomenti Correlati
- Distribuzione dei Dati — comprendi le distribuzioni normali, asimmetriche e uniformi prima di scegliere una misura.
- Deviazione Standard — misura quanto sono dispersi i dati intorno alla media.
- Percentile — classifica i valori rispetto al resto dell'insieme di dati.
- Scala — tecniche di ridimensionamento delle caratteristiche che si basano su queste statistiche.
Conclusione
Media, mediana e moda catturano ciascuna un aspetto diverso del centro dei dati. La media è il default più comune ma è fragile in presenza di valori anomali. La mediana è robusta e dovrebbe essere la prima scelta per le distribuzioni asimmetriche. La moda è indispensabile per i dati categorici e per le query rapide sul "valore più comune". Nel machine learning, tutte e tre compaiono regolarmente nell'analisi esplorativa dei dati e nell'imputazione dei valori mancanti — scegliere quella giusta per ogni colonna porta a caratteristiche più pulite e a migliori prestazioni del modello.