Guida al modulo statistics di Python

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
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
- 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)
- 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.
Materiali simili

Feedback aptico su tastiera iPhone (iOS 16)

Facebook desktop su Android — guida rapida

Bypass AdBlock su YouTube (2025) — Guida

Bloccare i tracker: Ghostery e Firefox Focus

Test di stress rete: AnDoSid e alternative etiche
