Le sei facce di un dado sono equiprobabili
Sia X la variabile casuale “punti realizzati lanciando un dado”, allora
Il modulo fractions permette di operare con le frazioni in modo simbolico, cioè sono trattate formalmente fino alla fine dei calcoli.
fractions
1 2 3 4 5 6 7 8 9 10 |
import fractions # Fractions import math # sqrt() X = list(range(1, 7)) # Esiti : 1, 2, 3, ... P = 6*[fractions.Fraction(1,6)] # probabilità: 1/6, 1/6, 1/6, ... print(" x | p(x)") print("---|------") for x, p in zip(X, P): print(" %i | %s" %(x, p)) |
Risultato
1 2 3 4 5 6 7 8 |
x | p(x) ---|------ 1 | 1/6 2 | 1/6 3 | 1/6 4 | 1/6 5 | 1/6 6 | 1/6 |
Con i calcoli successivi sarà possibile leggere i risultati come frazioni e come numeri decimali
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 |
media = 0 media_quadrati = 0 for p, x in zip(P, X): media += p*x media_quadrati += p*x**2 varianza_1 = media_quadrati-media**2 print("Media = %5s %10.6f" %(media , media )) print("Media dei quadrati = %5s %10.6f" %(media_quadrati, media_quadrati)) print("Varianza (1) = %5s %10.6f" %(varianza_1 , varianza_1 )) #------------------------------------------------------------------------- scarto_medio_assoluto = 0 devianza = 0 varianza_2 = 0 for p, x in zip(P, X): scarto = media-x scarto_medio_assoluto += p*abs(scarto) devianza += scarto**2 varianza_2 += p*scarto**2 print("Scarto medio assoluto = %5s %10.6f" %(scarto_medio_assoluto, scarto_medio_assoluto)) print("Devianza = %5s %10.6f" %(devianza , devianza )) print("Varianza (2) = %5s %10.6f" %(varianza_2 , varianza_2 )) #------------------------------------------------------------------------- deviazione_standard = math.sqrt(varianza_2) deviazione_standard_relativa = deviazione_standard/abs(media) print("Deviazione standard =", deviazione_standard ) print("Deviazione standard rel. =", deviazione_standard_relativa) |
Per ottenere
1 2 3 4 5 6 7 8 9 10 11 |
Media = 7/2 3.500000 Media dei quadrati = 91/6 15.166667 Varianza (1) = 35/12 2.916667 Scarto medio assoluto = 3/2 1.500000 Devianza = 35/2 17.500000 Varianza (2) = 35/12 2.916667 Deviazione standard = 1.707825127659933 Deviazione standard rel. = 0.48795003647426655 |
Osserva i risultati espressi come frazioni
Purtroppo… la deviazione standard richiede la radice quadrata che annulla l’intervanto di fractions.
SymPy
Il modulo sympy permette di operare in modo simbolico anche con la radice quadrata e quindi arrivare fino alla fine
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 |
import sympy as sp # Rational(), sqrt() X = list(range(1, 7)) # Esiti P = 6*[sp.Rational(1, 6)] # Probabilità print(" x | p(x)") print("---|------") for x, p in zip(X, P): print(" %i | %s" %(x, p)) media = 0 media_quadrati = 0 for p, x in zip(P, X): media += p*x media_quadrati += p*x**2 varianza_1 = media_quadrati-media**2 print("Media = %5s %10.6f" %(media , media )) print("Media dei quadrati = %5s %10.6f" %(media_quadrati, media_quadrati)) print("Varianza (1) = %5s %10.6f" %(varianza_1 , varianza_1 )) scarto_medio_assoluto = 0 devianza = 0 varianza_2 = 0 for p, x in zip(P, X): scarto = (media-x) scarto_medio_assoluto += p*abs(scarto) devianza += scarto**2 varianza_2 += p*scarto**2 print("Scarto medio assoluto = %5s %10.6f" %(scarto_medio_assoluto, scarto_medio_assoluto)) print("Devianza = %5s %10.6f" %(devianza , devianza )) print("Varianza (2) = %5s %10.6f" %(varianza_2 , varianza_2 )) deviazione_standard = sp.sqrt(varianza_2) deviazione_standard_relativa = deviazione_standard/abs(media) print("Deviazione standard = %12s %10.6f" %(deviazione_standard , deviazione_standard )) print("Deviazione standard rel. = %12s %10.6f" %(deviazione_standard_relativa, deviazione_standard_relativa)) |
Per ottenere
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 |
x | p(x) ---|------ 1 | 1/6 2 | 1/6 3 | 1/6 4 | 1/6 5 | 1/6 6 | 1/6 Media = 7/2 3.500000 Media dei quadrati = 91/6 15.166667 Varianza (1) = 35/12 2.916667 Scarto medio assoluto = 3/2 1.500000 Devianza = 35/2 17.500000 Varianza (2) = 35/12 2.916667 Deviazione standard = sqrt(105)/6 1.707825 Deviazione standard rel. = sqrt(105)/21 0.487950 |
E quindi…
Osserva che le frazioni sono razionalizzate.