Guida alle tecnologie

Guida al modulo statistics di Python

9 min read Python, Statistica Aggiornato 20 Oct 2025
Modulo statistics in Python: guida pratica
Modulo statistics in Python: guida pratica

Una calcolatrice con numeri e alcuni loghi Python intorno.

Sommario

  • Cos’è il modulo statistics di Python?
  • Statistiche descrittive: funzioni principali e note pratiche
  • Regressione e correlazione: cosa fa e limiti
  • Distribuzione normale con NormalDist e un esempio pratico
  • Quando usare NumPy, SciPy, pandas o statsmodels
  • Mini-metodologia per scegliere lo strumento giusto
  • Esempi pratici, checklist per ruoli e cheat sheet delle funzioni
  • Rischi, privacy e consigli per la produzione
  • Riepilogo finale

Cos’è il modulo statistics di Python?

Il modulo statistics è una libreria inclusa nella standard library di Python per eseguire calcoli statistici di base. Non richiede installazioni aggiuntive: basta importarlo. Viene pensato come lo strumento di una calcolatrice scientifica o di un calcolatore grafico per verifiche rapide e per insegnamento.

Import minimale:

import statistics

Oppure, in sessioni interattive (REPL, IPython o Jupyter), puoi importare singole funzioni nel namespace corrente per evitare ripetizioni:

from statistics import mean, median, stdev

Nota importante: importare funzioni direttamente nel namespace globale è comodo in sessione interattiva ma può creare conflitti in script più grandi se il nome della funzione sovrascrive una funzione built-in o un nome presente nel progetto.

Statistiche descrittive: funzioni principali e note pratiche

Statistiche descrittive nell'interprete interattivo di Python usando il modulo statistics.

Descrittive rapide per esplorazione dati: medie, mediane, moda, dispersione e quantili. Di seguito una panoramica delle funzioni più usate con esempi, regole d’uso e controesempi.

Esempio di base:

a = [4, 4, 3, 6]
mean(a)
  • mean(data): media aritmetica. Restituisce la somma dei valori divisa per il numero di elementi.
  • fmean(data[, weights]): media in virgola mobile (più veloce e sempre float); accetta pesi per media pesata.

Esempi:

from statistics import mean, fmean

a = [4, 4, 3, 6]
print(mean(a))   # 4.25
print(fmean(a))  # 4.25
# con pesi
weights = [1, 2, 3, 4]
# Nota: fmean non prende i pesi come secondo argomento nella versione più vecchia

Nota sul comportamento: mean restituisce int o float a seconda dei dati; fmean converte sempre in float.

Altre medie disponibili:

  • geometric_mean(data): media geometrica, utile per tassi di crescita composti. Richiede valori positivi.
from statistics import geometric_mean
geometric_mean(a)
  • harmonic_mean(data): media armonica, adatta per medie di velocità o tassi. Richiede valori strettamente positivi.
from statistics import harmonic_mean
harmonic_mean(a)

Attenzione: geometric_mean e harmonic_mean sollevano eccezioni se i dati non rispettano i prerequisiti (es. valori non positivi). Sempre validare i dati prima dell’uso.

Mediana e moda:

  • median(data): valore centrale (o media dei due centrali se il numero di elementi è pari).
  • mode(data): valore più frequente; solleva eccezione se ci sono più modali (multimodalità) in alcune versioni.
from statistics import median, mode
median(a)   # 4
mode(a)     # 4

Se la tua serie è multimodale e vuoi tutte le modalità, usa multimode (presente nelle versioni più recenti di Python):

from statistics import multimode
multimode([1,1,2,2,3])  # [1, 2]

Dispersione e varianza:

  • stdev(data): deviazione standard campionaria (denominatore n-1).
  • pstdev(data): deviazione standard di popolazione (denominatore n).
  • variance(data): varianza campionaria.
  • pvariance(data): varianza di popolazione.
from statistics import stdev, pstdev, variance
stdev(a)    # approssimativamente 1.258
pstdev(a)   # deviazione di popolazione
variance(a) # varianza campionaria

Quando usare stdev vs pstdev: usa stdev quando lavori con un campione e vuoi una stima della deviazione nella popolazione; usa pstdev solo se il tuo dataset rappresenta l’intera popolazione.

Quantili:

  • quantiles(data, n=4, method=’exclusive’|’inclusive’): divide i dati in n parti (default quartili). Restituisce i punti di partizione.
from statistics import quantiles
quantiles(a)   # ad esempio [3.5, 4.0, 5.0]

Minimi e massimi: built-in min(data) e max(data) restano la via più semplice.

Errori comuni e controesempi:

  • Usare harmonic_mean su dati che contengono 0 o numeri negativi genera un errore.
  • Chiamare mode su una serie multimodale in alcune versioni solleva StatisticsError.
  • Non normalizzare o validare i dati (nan, None, stringhe) prima delle funzioni porta a eccezioni.

Mini-checklist di validazione dei dati (pre-statistiche)

  • Rimuovere o imputare NaN/None.
  • Convertire tipi (es. stringhe numeriche → float).
  • Verificare segni o limiti per geometric/harmonic mean.
  • Controllare la dimensione del campione (alcune stime non hanno senso per n < 2).

Regressione e correlazione

Il modulo statistics include funzionalità basilari per correlazione e regressione lineare semplice (due variabili). È pensato per calcoli rapidi, non per analisi inferenziali complete.

Esempio semplice:

x = [1, 2, 3, 4, 5]
y = [5, 7, 9, 11, 13]
  • linear_regression(x, y): restituisce (slope, intercept) usando Ordinary Least Squares per una singola variabile indipendente.
from statistics import linear_regression
slope, intercept = linear_regression(x, y)
# slope == 2, intercept == 3  => y = 2*x + 3
  • correlation(x, y): coefficiente di correlazione di Pearson (r).
from statistics import correlation
correlation(x, y)  # 1.0 per dati perfettamente lineari

Limitazioni da conoscere:

  • linear_regression non fornisce errori standard, p-value, intervalli di confidenza o R² direttamente.
  • È limitato alla regressione lineare semplice (una variabile indipendente). Per regressione multipla o diagnostica statistica serve passare ad altri strumenti.

Alternative per esigenze più avanzate:

  • NumPy: calcolo numerico e polinomial fitting (numpy.polyfit).
  • pandas + statsmodels: regressioni con dettagli statistici, p-valori e summary.
  • scikit-learn: modelli predittivi e pipeline di machine learning.

Esempio rapido con numpy.polyfit (per regressione semplice ma con più controllo numerico):

import numpy as np
m, b = np.polyfit(x, y, 1)

La distribuzione normale

La distribuzione normale (curva a campana) è un modello fondamentale. statistics offre la classe NormalDist per lavorare con media e deviazione standard in modo diretto.

Esempio reale (dati CDC come punto di partenza): il dato citato indica una media di 175.1 cm per uomini sopra i 20 anni. Supponiamo che l’errore standard stimato sia 0.3 e il numero di campioni sia 2690. La deviazione standard della popolazione può essere stimata moltiplicando l’errore standard per la radice quadrata del numero di campioni:

import math
math.sqrt(2690) * 0.3  # circa 15.56

Quindi possiamo costruire la distribuzione normale stimata:

from statistics import NormalDist
men_height = NormalDist(mu=175.1, sigma=15.56)

Per trovare la percentuale di uomini compresa tra 160 cm e 180 cm usiamo la funzione di ripartizione cumulativa (CDF):

prob = men_height.cdf(180) - men_height.cdf(160)
# prob ~ 0.46 => circa il 46%

Note pratiche:

  • NormalDist funziona bene per valutazioni veloci e per apprendimento. Per stime più robuste (bootstrapping, fitting dei parametri) considera SciPy o statsmodels.
  • Assicurati che l’approssimazione normale sia giustificata: molte variabili reali non sono esattamente normali.

Quando usare NumPy, SciPy, pandas o statsmodels

Il modulo statistics è ottimo per calcoli veloci e didattici. Però, per dati grandi, matrici o analisi statistica completa, queste librerie sono più adatte:

  • NumPy: array multidimensionali, operazioni vettoriali ad alte prestazioni.
  • pandas: manipolazione di dataset tabulari, gruppi, aggregazioni e time series.
  • SciPy: distribuzioni, fitting e metodi statistici avanzati.
  • statsmodels: regressione statistica completa con output inferenziale.

Scegli secondo questi criteri:

  • Volume dei dati: se > qualche centinaio di migliaia, orientati a NumPy/pandas.
  • Complessità dell’analisi: test statistici avanzati o modelli multipli → statsmodels/SciPy.
  • Necessità di velocità vettoriale: NumPy.

Mini-metodologia per scegliere lo strumento giusto

Mermaid decisione rapida:

flowchart TD
  A[Hai un piccolo set di dati o vuoi calcoli veloci?] -->|Sì| B[Usa statistics]
  A -->|No| C[Hai bisogno di manipolazione tabellare o grandi dataset?]
  C -->|Sì| D[Usa pandas + NumPy]
  C -->|No| E[Hai bisogno di inferenza statistica?]
  E -->|Sì| F[Usa statsmodels o SciPy]
  E -->|No| D

Cheat sheet: funzioni rapide del modulo statistics

  • mean(data), fmean(data[, weights]) — medie
  • geometric_mean(data) — media geometrica
  • harmonic_mean(data) — media armonica
  • median(data), multimode(data) — mediana e modalità multiple
  • mode(data) — moda singola
  • variance(data), pvariance(data) — varianza
  • stdev(data), pstdev(data) — deviazione standard
  • quantiles(data, n=4) — quantili
  • linear_regression(x, y) — slope e intercept
  • correlation(x, y) — coefficiente di Pearson
  • NormalDist(mu, sigma) — oggetto per distribuzioni normali

Role-based checklist

Per sviluppatori:

  • Verifica input e tipi (None, NaN)
  • Evita import * in script di produzione
  • Scrivi test unitari per funzioni statistiche

Per data scientist/analisti:

  • Validazione e pulizia dei dati prima del calcolo
  • Confronta risultati con NumPy/pandas quando lavori su grandi dataset
  • Documenta ipotesi (campionamento, normalità)

Per insegnanti/educatori:

  • Usa statistics per dimostrare concetti base
  • Mostra differenze tra stime campionarie e di popolazione
  • Esegui esempi interattivi in Jupyter

Esempi di test e criteri di accettazione

  • Test che median([1, 2, 3]) == 2
  • Test che stdev di una popolazione costante è 0
  • Test che linear_regression su punti perfettamente lineari ritorni slope e intercept attesi

Migrare da statistics a NumPy/pandas: suggerimenti pratici

  • Sostituisci liste con numpy.array per operazioni vettoriali.
  • Usa pandas.Series per funzioni come mean, median e quantiles su colonne.
  • Se hai pesi, usa numpy.average con l’argomento weights.
  • Per regressione multipla, passa a statsmodels.api.OLS o scikit-learn.

Esempio di migrazione semplice:

# statistics
from statistics import mean
m = mean(my_list)

# numpy
import numpy as np
arr = np.array(my_list)
m = arr.mean()

Rischi, sicurezza e privacy

  • Evita di calcolare statistiche direttamente su dati personali sensibili in ambienti non sicuri.
  • Se condividi output aggregati, valuta il rischio di re-identificazione (piccoli gruppi possono esporre individui).
  • Considera tecniche di anonimizzazione/aggregazione quando necessario.

Quando il modulo statistics fallisce: galleria di casi limite

  • Dataset troppo grandi (performance e memoria). Usa NumPy/pandas.
  • Regressione multipla o diagnostica statistica approfondita. Usa statsmodels.
  • Necessità di test statistici complessi (es. test non parametrici estesi). Usa SciPy.
  • Manipolazioni complesse di date/serie temporali. Usa pandas.

Esempi pratici avanzati

  1. Media pesata manuale:
from statistics import fmean
values = [10, 20, 30]
weights = [1, 1, 2]
# se la versione di fmean non supporta weights, calcola manualmente
weighted_mean = sum(v * w for v, w in zip(values, weights)) / sum(weights)
  1. Intervallo di confidenza approssimato (bootstrap semplice):
import random
from statistics import mean
data = [random.gauss(0, 1) for _ in range(100)]
boot_means = [mean([random.choice(data) for _ in range(len(data))]) for _ in range(1000)]
# poi calcola quantili su boot_means

Nota importante

Il modulo statistics è progettato per semplicità e chiarezza didattica. In produzione, per pipeline ripetibili e performanti, prediligi strumenti progettati per grandi dataset e per il testing riproducibile.

Riepilogo

  • Il modulo statistics è utile per calcoli statistici rapidi e per apprendimento.
  • Contiene funzioni per medie, mediana, moda, varianza, deviazione standard, quantili, regressione lineare semplice e oggetti per la distribuzione normale.
  • Per dataset grandi, regressione multipla o analisi inferenziale completa scegli NumPy, pandas, SciPy o statsmodels.

Punti chiave:

  • Valida sempre i dati prima dell’analisi.
  • Usa statistics per prototipazione e didattica.
  • Migra a librerie più robuste per volumi elevati o esigenze avanzate.

Annuncio breve (per condivisione):

Vuoi calcoli statistici rapidi in Python senza dipendenze esterne? Il modulo statistics della standard library offre funzioni per medie, dispersione, regressione semplice e distribuzioni normali — perfetto per prototipi e sessioni interattive.

Social preview (suggerimento):

Titolo social: Guida rapida al modulo statistics di Python Descrizione social: Scopri come usare le funzioni statistiche integrate in Python per medie, deviazione standard, regressione semplice e distribuzioni normali.

Glossario veloce (1 riga per termine)

  • media: somma dei valori divisa per il numero di elementi.
  • mediana: valore centrale di un dataset ordinato.
  • moda: valore più frequente.
  • varianza: media dei quadrati delle deviazioni dalla media.
  • deviazione standard: radice quadrata della varianza.

Sommario finale

Il modulo statistics è uno strumento pragmatico per attività leggere, insegnamento e prototipazione. Conoscere i suoi limiti e saper migrare alle librerie giuste è fondamentale per analisi solide e scalabili.

Autore
Redazione

Materiali simili

Feedback aptico su tastiera iPhone (iOS 16)
Guide iPhone

Feedback aptico su tastiera iPhone (iOS 16)

Facebook desktop su Android — guida rapida
Social Media

Facebook desktop su Android — guida rapida

Bypass AdBlock su YouTube (2025) — Guida
Guide Tech

Bypass AdBlock su YouTube (2025) — Guida

Bloccare i tracker: Ghostery e Firefox Focus
Privacy web

Bloccare i tracker: Ghostery e Firefox Focus

Test di stress rete: AnDoSid e alternative etiche
Sicurezza

Test di stress rete: AnDoSid e alternative etiche

Visualizzare documenti online: strumenti essenziali
Documenti

Visualizzare documenti online: strumenti essenziali