import collections # Counter()
import matplotlib.pyplot as plt
import sympy as sp # Rational(), sqrt()
DADO = list(range(1, 7))
DADI = [d1+d2+d3 for d1 in DADO for d2 in DADO for d3 in DADO]
COUNT = collections.Counter(DADI);
X = COUNT.keys()
P = [sp.Rational(count, 216) for count in COUNT.values()]
plt.bar(X, P)
plt.grid()
plt.show()
print(" x | p(x)")
print("----|------")
for x, p in zip(X, P):
print(" %2i | %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_medio_assoluto += p*abs(media-x)
devianza += (media-x)**2
varianza_2 += p*(media-x)**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 = %11s %10.6f" %(deviazione_standard , deviazione_standard ))
print("Deviazione standard rel. = %11s %10.6f" %(deviazione_standard_relativa, deviazione_standard_relativa))