[PYTHON] Statistiques jusqu'à la dispersion et l'écart type

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 ]

moyenne

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()

image

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.

Distribué

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.

écart-type

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

finalement

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

Statistiques jusqu'à la dispersion et l'écart type
[Statistiques] Premier "écart-type" (pour éviter d'être frustré par les statistiques)
[Statistiques pour les programmeurs] Dispersion, écart type et coefficient de fluctuation
Cours des actions et statistiques (moyenne, écart type)
[Algorithme x Python] Calcul des statistiques de base Partie3 (plage, variance, écart type, coefficient de fluctuation)
Tous jusqu'à 775/664, 777/666, 755/644, etc.
Calculer la moyenne, la médiane, la plus fréquente, la variance, l'écart type en Python
Décorateur pour désactiver la sortie standard
Python / numpy / statistiques> différence> écart type> population / échantillon> notation anglaise non biaisée