statistics - Calcoli Statistici
Scopo: Implementazione di comuni calcoli statistici
Il modulo statistics implementa molte comuni formule statistiche per calcoli efficienti usando i vari tipi numerici di Python (int
, float
, Decimal
e Fraction
).
Medie
Sono supportate tre forme di medie: la media, la mediana e la moda. Con mean()
si calcola la media aritmetica.
# statistics_mean.py
from statistics import *
data = [1, 2, 2, 5, 10, 12]
print('{:0.2f}'.format(mean(data)))
Il valore ritornato per interi e numeri a virgola mobile è sempre di tipo float
. Per dati in input decimali o frazioni il risultato è rispettivamente Decimal
e Fraction
.
$ python3 statistics_mean.py 5.33
Si usa mode()
per calcolare i punti dato più comuni in un insieme di dati.
# statistics_mode.py
from statistics import *
data = [1, 2, 2, 5, 10, 12]
print(mode(data))
Il valore ritornato è sempre un membro dell'insieme di dati in input. Poichè mode()
tratta l'input come un insieme di valori discreti, e conta le ricorrenze, questi dati non devono essere necessariamente rappresentare valori numerici.
$ python3 statistics_mode.py 2
Ci sono quattro varianti per calcolare la mediana o valore medio. I primi tre sono versioni lineari del consueto algoritmo, con soluzioni differenti per gestire insiemi di dati con numero di elementi pari.
# statistics_median.py
from statistics import *
data = [1, 2, 2, 5, 10, 12]
print('mediana : {:0.2f}'.format(median(data)))
print('alto : {:0.2f}'.format(median_low(data)))
print('basso : {:0.2f}'.format(median_high(data)))
median()
trova il valore centrale, se l'insieme di dati ha un numero pari di valori ritorna la media dei due valori centrali. median_low()
ritorna sempre un valore dall'insieme di dati in input, usando il più basso dei due elementi centrali per insieme di dati a numero pari. median_high()
alla stessa stregua ritorna il valore più alto dei due elementi centrali.
$ python3 statistics_median.py mediana : 3.50 alto : 2.00 basso : 5.00
La quarta versione del calcolo della mediana, median_grouped()
tratta l'input come un insieme di dati continui e calcola la mediana del 50° percentile, trovando prima l'intervallo mediano usando la larghezza dell'intervallo fornita, quindi interpolando all'interno di quell'intervallo usando la posizione dei valori reali dall'insieme dei dati che si trovano in quell'intervallo.
# statistics_median_grouped.py
from statistics import *
data = [10, 20, 30, 40]
print('1: {:0.2f}'.format(median_grouped(data, interval=1)))
print('2: {:0.2f}'.format(median_grouped(data, interval=2)))
print('3: {:0.2f}'.format(median_grouped(data, interval=3)))
Mano a mano che la larghezza dell'intervallo aumenta, la mediana calcolata per lo stesso insieme cambia.
$ python3 statistics_median_grouped.py 1: 29.50 2: 29.00 3: 28.50
Varianza
La statistica usa due valori per indicare quanto distante sia un insieme di valori rispetto alla media. La varianza è la media della radice quadrata della differenza di ciascun valore e la media; mentre la deviazione standard è la radice quadrata della varianza (utile in quanto utilizzando la radice quadrata si consente alla deviazione standard di essere espressa nella stessa unità dei dati in input). Valori grandi per varianza o deviazione standard indicano che un insieme di dati è disperso in una vasta area, mentre piccoli valori indicano che i dati sono raggruppati più vicino alla media.
# statistics_variance.py
from statistics import *
import subprocess
def get_line_lengths():
cmd = 'wc -l ../[a-z]*/*.py'
out = subprocess.check_output(
cmd, shell=True).decode('utf-8')
for line in out.splitlines():
parts = line.split()
if parts[1].strip().lower() == 'totale':
break
nlines = int(parts[0].strip())
if not nlines:
continue # ignora file vuoti
yield (nlines, parts[1].strip())
data = list(get_line_lengths())
lengths = [d[0] for d in data]
sample = lengths[::2]
print('Statistiche base:')
print(' conteggio: {:3d}'.format(len(lengths)))
print(' minimo : {:6.2f}'.format(min(lengths)))
print(' massimo : {:6.2f}'.format(max(lengths)))
print(' media : {:6.2f}'.format(mean(lengths)))
print('\nVarianza nella popolazione:')
print(' deviazione standard: {:6.2f}'.format(pstdev(lengths)))
print(' varianza : {:6.2f}'.format(pvariance(lengths)))
print('\nVarianza stimata per campione:')
print(' conteggio : {:3d}'.format(len(sample)))
print(' deviazione standard: {:6.2f}'.format(stdev(sample)))
print(' varianza : {:6.2f}'.format(variance(sample)))
Python include due insiemi di funzioni per calcolare varianza e deviazione standard, a seconda che l'insieme di dati rappresenti l'intera popolazione oppure un campione della popolazione. Questo esempio usa il comando Unix wc
per contare il numero di righe di tutti gli esempi di programma per questo sito, quindi usa pvariance()
e pstdev
per calcolare varianza e deviazione standard per l'intera popolazione, quindi usa variance()
e stddev()
per calcolare varianza e deviazione standard per un sottoinsieme (campione) creato usando la lunghezza di ogni secondo file trovato.
$ python3 statistics_variance.py Statistiche base: conteggio: 936 minimo : 1.00 massimo : 418.00 media : 23.08 Varianza nella popolazione: deviazione standard: 30.82 varianza : 950.14 Varianza stimata per campione: conteggio : 468 deviazione standard: 24.37 varianza : 594.13
Vedere anche:
- statistics
- La documentazione della libreria standard per questo modulo
- mathtips.com: Median for Discrete and Continuous Frequancy Type Data (grouped data)
- Discussione della mediana per dati continui.
- PEP 450
- Aggiungere un modulo statistico alla libreria standard.