Bases statistiques et Python, graphisme, etc. (mémo)

Actuellement, j'étudie Python et l'analyse de données (y compris les statistiques), donc tout en étudiant sur cette page, j'ajouterai des notes sur les statistiques et la représentation graphique en Python. Le jugement basé sur des données est un outil efficace qui a le pouvoir de prévenir les erreurs de jugement qui ne peuvent pas être évitées par la pensée logique, j'ai donc étudié activement.

※Mise en garde※ Puisqu'il est écrit pendant les études, il peut être mal compris. Je la corrigerai dès que je la remarquerai, mais si vous remarquez une erreur, j'apprécierais que vous puissiez la signaler.

Livres de référence

・ Shinichi Kurihara "Introduction aux statistiques" ・ Wes McKinney, "Introduction à l'analyse de données avec Python" ・ Anchibe, "Introduction au processus pratique d'analyse des données" ・ Bill Lubanovic, "Introduction à Python 3" ・ Yoshinori Fujii et al., "Analyse des données correspondant au test statistique officiellement certifié niveau 3 de la Société statistique japonaise" ・ Yutaka Tanaka et al., "Édition révisée du test statistique de la Société japonaise de statistique officiellement certifié de base des statistiques de correspondance de niveau 2" ・ Nanfuhara, "Bases des statistiques psychologiques"

Le texte des deux tests statistiques est inclus, mais il est recommandé d'étudier pour le test statistique plutôt que le contenu du texte. Bien que ce soit une qualification privée, je pense que c'est un test de qualification qui soulève d'assez bonnes questions. À propos, le test statistique de niveau 3 ne peut être fait qu'avec le manuel officiel. Pour la deuxième année, «Introduction aux statistiques» de Kurihara recommandé par M. Anchibe est une bonne chose. C'est tout ce dont vous avez besoin.

Statistiques récapitulatives

Moyenne de l'échantillon (dispersion), moyenne sans biais (dispersion)

Lors de l'apprentissage des statistiques, la variance est calculée en divisant par le nombre d'échantillons n ou par n-1, mais si vous ne comprenez pas bien ce point, ce sera déroutant.

Du point de vue des statistiques descriptives, c'est-à-dire lorsque vous essayez de résumer les échantillons prélevés et de montrer leurs caractéristiques sous forme de valeurs statistiques, exprimez-les sous forme de moyenne d'échantillon / variance d'échantillon et divisez-les par le nombre d'échantillons n.

Du point de vue des statistiques spéculatives, nous adoptons la propriété souhaitable de l'impartialité, c'est-à-dire la propriété que la valeur attendue du montant estimé correspond à la valeur réelle de la population à estimer. Premièrement, la moyenne de l'échantillon, puisqu'elle a une impartialité telle qu'elle est, elle est également adoptée du point de vue des statistiques spéculatives. Lors de l'estimation de la variance du point de vue des statistiques d'inférence, le nombre d'échantillons n-, compte tenu du résultat de la prise en compte de l'erreur lors de l'extraction de l'échantillon, et la tendance à ce que la variance de l'échantillon devienne une valeur plus petite que la vraie variance. Il sera divisé par 1.

(Arithmétique) Moyenne et médiane

S'il y a des valeurs aberrantes ou si les données sont biaisées, il est facile de la considérer comme la valeur médiane (je pense), mais la valeur moyenne est la valeur minimale au carré de la «distance» d'un certain point à chaque donnée. La valeur médiane est la statistique qui minimise la valeur absolue (et non le carré) de la distance. C'est une valeur qui optimise différents critères, donc je ne peux pas simplement dire lequel me convient. Lorsque les valeurs moyennes et médianes sont significativement différentes, il est recommandé d'afficher les deux valeurs.

Si les valeurs diffèrent considérablement selon la forme de la distribution des données, il peut être préférable de présenter également l'histogramme.

Variations et écarts normalisés

La variate standardisée est la valeur calculée par z_i = (x_i-μ) / σ lorsque la moyenne μ (de la population) et l'écart type σ (de la population) calculés à partir des données (multiples) données x_i. ..

Vous voulez que la moyenne soit égale à zéro et l'écart à 1. Les niveaux de test statistique 3 et 2 (et des problèmes réels) peuvent comparer les notes de l'élève A en mathématiques et en sciences. Cependant, le score moyen et la dispersion diffèrent selon le sujet. Puisqu'il est difficile de comparer tel quel, nous calculerons la variable standardisée.

Puisqu'il est normalisé, il est possible de comparer les notes de différentes matières uniquement par l'ampleur de la valeur. À propos, la valeur de l'écart est la valeur obtenue en multipliant cette variable normalisée par 10 et en ajoutant 50.

y=ax+Lorsque les données sont converties en b, la valeur moyenne est aE[x]+b, l'écart est|a|Puisqu'elle est doublée, la valeur de l'écart signifie que la valeur moyenne est de 50 points et la valeur de l'écart est de 10 points en utilisant la variable normalisée. En pensant de cette façon, je pense qu'il est facile de se souvenir de la valeur de l'écart. Même dans le test statistique, on suppose que vous l'avez mémorisé.

Coefficient de fluctuation

Il est difficile de comparer les variances des distributions avec différentes valeurs moyennes. Par conséquent, le coefficient de fluctuation est calculé par (écart) / (moyenne). Il absorbe la différence entre les valeurs moyennes et facilite la comparaison des valeurs diffusées. Il faut se souvenir car il peut être obtenu même en troisième année du test statistique. Le calcul est simple, donc je pense qu'il peut être utilisé dans la vraie vie.

Si vous ne vous souvenez que du mot coefficient de fluctuation, vous risquez de ne pas savoir si la valeur moyenne était le dénominateur ou la molécule. Par conséquent, si vous vous souvenez que «le coefficient de fluctuation est une valeur lorsque l'on considère la variation des valeurs ainsi que la dispersion» comme une prémisse majeure, il est facile de se rappeler que l'écart est dans la molécule et la valeur moyenne est dans le dénominateur. Je pense que vous devez faire attention à ne pas vous confondre avec la variable normalisée lors de la conversion de la moyenne à zéro et de l'écart type à un.

Premièrement, si la moyenne de x est E [x] et la variance est V [x], alors y = ax + b, E[y]=aE[x]+b、V[y]=|a|^2 *E[x] est.

À l'aide de cette relation, créez deux types de données, calculez le coefficient de fluctuation des données avec des variances similaires, bien que les échelles soient différentes, et essayez ce qui suit pour obtenir des valeurs similaires. J'ai fait.

import numpy as np
import matplotlib.pyplot as plt


def main():
    sample_size = 1000
    a = 10
    b = 5

    data = np.random.standard_normal(sample_size)+1
    data2 = a*data+b

    print('data Mean:{} Var:{}'.format(np.mean(data), np.var(data)))
    print('data2 Mean:{} Var:{}'.format(np.mean(data2), np.var(data2)))

    print('coefficient of var {} : {}'.format(np.std(data)/np.mean(data), np.std(data2)/np.mean(data2)))

    plt.subplot(2, 1, 1)
    plt.hist(data)

    plt.subplot(2, 1, 2)
    plt.hist(data2)
    plt.show()


if __name__ == "__main__":
    main()

Conversion de variables stochastiques avec y = ax + b

Moyenne μ,Dispersion σ^À la variable de probabilité x de 2, ax+Lorsque b est converti, la moyenne est aμ+b,Dispersion|a|^Si vous utilisez la relation qui devient 2, Lorsque vous voulez générer un nombre aléatoire selon N (0,1), en utilisant randn de numpy, vous voulez générer un nombre aléatoire selon une distribution normale avec moyenne μ et variance σ ^ 2. σrandn() + μ Je sais quoi faire. site numpy: http://docs.scipy.org/doc/numpy/reference/generated/numpy.random.randn.html Il est également écrit.

Distorsion et netteté

La valeur qui représente l'asymétrie de la distribution statistique est le degré de distorsion. Zéro représente la symétrie gauche-droite, et quand il devient positif, cela indique que la distribution s'étend vers le haut. S'il est négatif, c'est le contraire qui est vrai. Il existe une fonction pour calculer dans scipy, et bien sûr dans Excel. ※scipy http://docs.scipy.org/doc/scipy-0.15.1/reference/generated/scipy.stats.skew.html

En pratique, il peut être utilisé pour vérifier les valeurs aberrantes. Par exemple, lorsqu'il y a une grande valeur positive, cela indique qu'il y a une grande valeur d'écart dans le sens positif. Les valeurs aberrantes ont un certain impact lors de la synthèse des données statistiques (bien que l'ampleur de l'impact varie) et doivent être traitées d'une manière ou d'une autre. C'est une valeur qui peut être utilisée en considérant la nécessité. Lors du traitement manuel, vous pouvez remarquer les valeurs aberrantes en dessinant un histogramme ou en dessinant un diagramme de dispersion, mais cela est utile lorsque vous souhaitez modifier le traitement en fonction des valeurs aberrantes du programme. Je vais.

La netteté est une valeur qui indique la netteté de la distribution à laquelle vous pensez par rapport à la distribution normale. Vous pouvez calculer avec KURT.

Si vous regardez les sources liées aux statistiques, vous verrez SKEW et KURT, mais ils sont sujets à la distorsion et à la netteté. Par exemple, lisez les données dirty_iris.csv (recherchez sur Google et vous verrez la page Github) du livre d'Anchibe, y compris les valeurs aberrantes, et calculez les statistiques et la distorsion comme suit: Je vais essayer.

import numpy as np
import matplotlib.pyplot as plt
import pandas as pd

def main():
    iris = pd.read_csv('./dirty_iris.csv')

    print(iris.head(n=5))
    print(iris.describe())
    print(iris.skew())

if __name__ == "__main__":
    main()

.txt


   sepallength  sepalwidth  petallength petalwidth   class
0          5.1         3.5          1.4        0.2  setosa
1          4.9         3.0          1.4        0.2  setosa
2          4.7         3.2          1.3        0.2  setosa
3          4.6         3.1          1.5        0.2  setosa
4          5.0         3.6          1.4        0.2  setosa
       sepallength  sepalwidth  petallength
count   150.000000  150.000000   150.000000
mean      6.464000    3.040667     3.738000
std       7.651181    0.578136     1.763221
min       4.300000   -1.000000     1.000000
25%       5.100000    2.800000     1.600000
50%       5.800000    3.000000     4.300000
75%       6.400000    3.300000     5.100000
max      99.000000    5.400000     6.900000
sepallength    12.030413
sepalwidth     -1.681226
petallength    -0.248723
dtype: float64

Au fait, je me rends compte que la longueur des sépales est suspecte juste en décrivant, mais même avec la valeur donnée par skew, je peux voir que la longueur des sépales est suspecte par rapport aux autres.

Pour les valeurs aberrantes, il ne s'agit pas seulement de les exclure, mais de réfléchir à la manière de les traiter en utilisant la connaissance du domaine (connaissance du domaine analysé comme la connaissance et l'expertise métier) pour savoir pourquoi la valeur réside dans les données. C'est nécessaire, mais cette fois j'ai décidé d'utiliser NaN de manière appropriée

  iris[np.abs(iris['sepallength'])>10] = np.nan
    iris.boxplot(by='class')
    plt.show()

Ensuite, il est devenu une belle figure de barbe en boîte.

Distribution statistique

Distribution de Poisson

La distribution de Poisson est une distribution statistique utilisée pour analyser les événements rares. Lorsque la valeur moyenne = (dispersion =) λ Le fait est que λ = (nombre d'essais n) × (probabilité p). Pour l'événement qui se produit dans p, la valeur de la probabilité peut être obtenue en spécifiant le nombre de fois x qui se produit réellement.

La façon de définir n, p, x peut différer selon l'interprétation du problème, mais lorsque vous utilisez la formule de distribution de Poisson, même si l'interprétation est différente, la même formule peut être utilisée pour calculer la même probabilité, alors soyez inquiet. Vous n'êtes pas obligé.

Etant donné que des valeurs différentes sont obtenues en fonction du nombre de fois où x se produit réellement, par exemple, lors de la recherche de la probabilité de k fois ou moins, il est nécessaire de répéter le calcul plusieurs fois. Mais c'est facile avec un programme, et le nombre de fois où la somme des probabilités atteint une certaine valeur peut être calculé à l'aide de scipy, donc cela ne semble pas avoir beaucoup d'importance.

Il est utile d'utiliser scipy http://docs.scipy.org/doc/scipy/reference/generated/scipy.stats.poisson.html

Sur la page ci-dessus, je voulais savoir comment dessiner un graphique avec de fines barres verticales, je vais donc le citer et l'expliquer.

>>> ax.plot(x, poisson.pmf(x, mu), 'bo', ms=8, label='poisson pmf')
>>> ax.vlines(x, 0, poisson.pmf(x, mu), colors='b', lw=5, alpha=0.5)

Commencez par dessiner la valeur avec un cercle bleu avec "bo", puis dessinez une ligne verticale avec ax.vlines. x est la position de la ligne verticale, 0 est l'extrémité inférieure de la ligne verticale et poisson.pmf (x, mu) spécifie l'extrémité supérieure de la ligne verticale. lw serait une abréviation pour la largeur de ligne. alpha spécifie la transparence de la ligne. Utilisez plt.xlim () pour spécifier la plage sur l'axe horizontal afin de rendre le graphique plus facile à voir.

À propos, pmph est une abréviation de fonction de masse de probabilité. Pour les valeurs continues, c'est la fonction de densité de probabilité (PDF), mais pour les valeurs discrètes telles que la distribution de Poisson, c'est PMF.

Méthode de visualisation

Boîte à moustaches (boîte à moustaches)

La visualisation des données est importante pour l'analyse exploratoire des données, mais c'est une bonne idée de connaître les moustaches en plus des diagrammes de dispersion et des histogrammes couramment utilisés. Ce sera des connaissances nécessaires même en troisième année de statistique. Convient pour comparer la distribution de plusieurs données.

Des informations telles que le nombre de pics visibles lors du dessin d'un histogramme disparaissent, mais il existe également un tracé de violon qui correspond à cela, mais c'est un design légèrement dur.

La méthode d'expression des valeurs aberrantes est un petit point, et il semble que les valeurs qui sont plus de 1,5 fois le (troisième quadrant) - (premier quadrant) et sont éloignées de chaque valeur sont souvent définies comme des valeurs aberrantes. La définition des valeurs aberrantes devrait changer en fonction des données à traiter, et je pense que les valeurs par défaut peuvent être utilisées ici.

S'il n'y a qu'une seule montagne, vous pouvez à peu près imaginer un histogramme à partir de la forme des moustaches de la boîte, de sorte que les moustaches de la boîte sont utiles pour la comparaison lorsqu'il y a plusieurs données de ce type. Un complot de violon dégoûtant est bien, cependant. Vous pouvez dessiner avec Python.

boxplot.JPG

Recommended Posts

Bases statistiques et Python, graphisme, etc. (mémo)
Mémo graphique Twitter avec Python
Mémo tranche python et rubis
bases de python: conditions et itérations
Différence entre java et python (mémo)
Mémo Python ① Opérations sur les dossiers et fichiers
Les bases de Python ⑤
Les bases de Python
Mémo Python
Les bases de Python ④
mémo python
[Python] df Lire et faire le premier mémo (confirmation NaN etc.)
Mémo Python
Les bases de Python ③
Les bases de Python
mémo python
Mémo Python
Les bases de Python
Les bases de Python
Les bases de Python ③
Les bases de Python ②
Les bases de Python ②
Mémo Python
[Introduction aux Data Scientists] Bases de Python ♬ Fonctions et fonctions anonymes, etc.
[Mémo d'apprentissage] Bases de la classe par python
Un mémo contenant Python2.7 et Python3 dans CentOS
Le mémo Python le plus simple du Japon (boîte de dialogue, etc.)
Structure et fonctionnement des données Python (mémo d'apprentissage Python ③)
[Python] Mémo sur le dictionnaire
bases de python: liste
Mémorandum de base Python
mémo débutant python (9.2-10)
mémo débutant python (9.1)
Les bases de #Python (#matplotlib)
Principes de base de Python CGI
bases de python: dictionnaire
[Python] Mémo de conversion entre les données temporelles et les données numériques
Les bases de Python ①
★ Mémo ★ Python Iroha
Bases de python ①
bases de la tranche de python
# Principes de base de Python (portée)
[Python] Chapitre 02-01 Bases des programmes Python (opérations et variables)
Les bases de #Python (#Numpy 1/2)
[Python] Mémo EDA
Les bases de #Python (#Numpy 2/2)
Mémo opérateur Python 3
# Bases de Python (fonctions)
principes de base des tableaux python
[Mon mémo] python
Mémo de métaclasse Python3
La lecture et l'écriture s'adaptent aux fichiers avec Python (mémo)
Principes de base du profilage Python
[Python] Mémo de fond de carte
Principes de base de Python #Numpy
bases de python: fonctions
Mémo débutant Python (2)
Les bases de #Python (classe)
Résumé des bases de Python
[Python] Mémo Numpy