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
La lista X contiene i possibili esiti da 1 a 6.
La lista P contiene le probabilità, come frazione 1/6.
import fractions # Fractions
import math # sqrt()
X = list(range(1, 7))
P = 6*[fractions.Fraction(1,6)]
print("+---+------+")
print("| x | p(x) |")
print("+---+------+")
for x, p in zip(X, P):
print("| %i | %s |" %(x, p))
print("+---+------+")
+---+------+
| 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
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
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.
Il modulo sympy permette di operare in modo simbolico anche con la radice quadrata e quindi arrivare fino alla fine
import sympy as sp # Rational(), sqrt()
X = list(range(1, 7)) # Esiti
P = 6*[sp.Rational(1, 6)] # Probabilità
print("+---+------+")
print("| x | p(x) |")
print("+---+------+")
for x, p in zip(X, P):
print("| %i | %s |" %(x, p))
print("+---+------+")
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
+---+------+
| 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: le frazioni sono razionalizzate.