Tout d'abord, créez deux types de données avec des distributions différentes.
Génération de données
import numpy as np
np.random.seed(seed=32)
groupA = np.random.normal(100, 20, 100000) #Moyenne 100,Générez 100 000 valeurs aléatoires avec un écart type de 20
groupB = np.random.normal(100, 50, 100000) #Moyenne 100,Générez 100 000 valeurs aléatoires avec un écart type de 50
print("groupeUn échantillon: {}".format(groupA[0:5]))
print("groupeUn échantillon: {}".format(groupB[0:5]))
groupeUn échantillon: [ 93.02211098 119.67406867 111.61845661 101.40568882 115.55065353]
groupeUn échantillon: [ 122.71129387 134.76068077 88.52182502 92.52887435 107.2470646 ]
Tout d'abord, en regardant la moyenne, comme indiqué ci-dessous, les valeurs des deux groupes sont d'environ 100 en moyenne (c'est naturel car 100 est spécifié en moyenne).
mean
meanA, meanB = np.mean(groupA), np.mean(groupB)
print("moyenne du groupe A= {},moyenne du groupe B= {}".format(meanA, meanB))
moyenne du groupe A= 100.0881959959255,moyenne du groupe B= 100.13663565328969
Cependant, lors de l'écriture de l'histgramme comme suit, la distribution est clairement différente. Le groupe B a un ourlet plus large que le groupe A et est doux (c'est naturel car la valeur de l'écart type est différente).
import seaborn as sns
sns.distplot(groupA, bins=100, label='groupA', kde=False)
sns.distplot(groupB, bins=100, label='groupB', kde=False)
plt.legend()
plt.show()
De cette façon, le groupe A et le groupe B semblent être des groupes équivalents lorsqu'ils ne sont comparés que par la moyenne, mais en fait, l'information selon laquelle le groupe B a une plus grande variation de valeur que le groupe A est écartée. Les statistiques récapitulatives qui expriment ces variations de nombres sont les variances et les écarts types.
La variance peut être calculée par la formule suivante
S^2 = \frac{1}{n}{\sum_{i=1}^n(x_i-\bar{x})^2}
En d'autres termes, il est «(chaque valeur moyenne de valeur) au carré, additionnée et divisée par le nombre de données». En soustrayant la valeur moyenne de chaque valeur, cela semble être un indice montrant à quel point il s'écarte de la moyenne, mais il peut s'agir d'une valeur négative, donc il est au carré. Après cela, en les additionnant et en les divisant par le nombre de données, le degré de variation des données peut être exprimé. À propos, le résultat de chaque valeur moyenne est l'écart, et la valeur obtenue en la mettant au carré et en les ajoutant toutes est appelée la somme des écarts au carré.
L'écriture en python ressemble à ceci.
déviation
groupA[0] - groupA.mean()
Somme des carrés de déviation
s = np.sum((xi - groupA.mean())**2 for xi in groupA)
print(s)
40178555.707617663
Distribué
var = sum / len(groupA)
print(var)
401.78555707618096
groupA,B Essayez d'obtenir la dispersion des deux
a = ((groupA - groupA.mean())**2).sum()/len(groupA)
b = ((groupB - groupB.mean())**2).sum()/len(groupB)
print("Répartition du groupeA:{:.2f}\distribution ngroupB:{:.2f}".format(a, b))
Répartition du groupeA:401.79
Distribution du groupe B:2496.21
Ainsi, nous pouvons voir la variance de chacun, le groupe B a une variance plus grande que A, et les valeurs numériques ne sont pas concentrées près de la valeur moyenne. En d'autres termes, on peut voir qu'il existe des variations.
J'ai trouvé que B était plus variable, mais je ne sais pas s'il a été dit que "la variance est de 2496" était un ensemble de nombres avec une moyenne d'environ 100 pour le groupe A et le groupe B. Dans un tel cas, il vaut mieux donner l'écart type.
S=\sqrt{S^2}
L'écart type est la racine carrée de la variance. Puisqu'il était au carré lors du calcul de la variance, il revient à la dimension d'origine en prenant ici la racine carrée. Par conséquent, il devient plus facile de comprendre à quel point les chiffres varient.
écart-type
print("Écart type du groupe A:{:.2f}\écart type de ngroupB:{:.2f}".format(math.sqrt(a), math.sqrt(b)))
Écart type du groupe A:20.04
écart type du groupeB:49.96
Comme numpy est pratique, vous pouvez facilement calculer la moyenne, la variance et l'écart type.
mean = groupA.mean()
var = groupA.var()
std = groupA.std()
print("moyenne:{:.2f}Distribué:{:.2f}écart-type:{:.2f}".format(mean, var, std))
moyenne:100.09 Dispersion:401.79 écart type:20.04
Recommended Posts