W3docs

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 numpy e il modulo statistics
  • 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:

MisuraDefinizioneIdeale per
MediaSomma di tutti i valori ÷ conteggioDati simmetrici e normalmente distribuiti
MedianaValore centrale quando i dati sono ordinatiDati asimmetrici o con valori anomali
ModaValore che ricorre più frequentementeDati 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

python— editable, runs on the server

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: 46500

Qui 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

python— editable, runs on the server

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

python— editable, runs on the server

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: 20

Quando 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: 25

La 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 NaN con la media della colonna. Veloce, ma sensibile ai valori anomali.
  • Imputazione con la mediana — sostituisce NaN con la mediana. Robusta ai valori anomali; preferita per caratteristiche asimmetriche.
  • Imputazione con la moda — sostituisce NaN con 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

ScenarioMisura raccomandata
Dati numerici normalmente distribuitiMedia
Dati numerici asimmetrici (reddito, prezzi)Mediana
Dati con valori anomali estremiMediana
Dati categorici (etichette, colori)Moda
Imputazione di colonne numeriche con valori anomaliMediana
Imputazione di colonne categoricheModa
Trovare il valore più popolareModa

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.

Was this page helpful?