[PYTHON] Créez un bac avec NumPy, obtenez la correspondance entre les données et le bac

Lors du processus de division des données en bacs et de dessin de l'histogramme, etc., si vous passez tableau à hist () de matplotlib, il sera divisé en bacs qui semblent bons selon les données et dessinés, mais les données sont divisées en bacs arbitraires. Vous voudrez peut-être savoir quelles données se trouvent dans quel bac.

Cette fois, nous allons créer un bac et obtenir la correspondance entre les données et le bac.

Créer une distribution

Tout d'abord, créez un tableau avec une distribution appropriée.

import numpy

n = 100
dist = numpy.random.normal(0, 1, n)

Créer un bac

Il semble y avoir un débat sur la validité du nombre de cases, mais dans Microsoft Excel etc., il semble que le nombre de cases k soit le nombre carré de n pour le nombre de données n en standard.

k=\sqrt{n}

Cette fois, nous utiliserons cette méthode pour déterminer le nombre de bins et créer un tableau sous forme de bins qui divise la plage de données en k.

import math

bin_num = math.sqrt(n)
bins = numpy.linspace(min(dist), max(dist), bin_num)

Un tableau similaire au suivant a été créé.

[-2.28875045 -1.72785426 -1.16695807 -0.60606188 -0.0451657   0.51573049 1.07662668  1.63752287  2.19841906  2.75931524]

Vérification

Voyons comment les données sont tracées à l'aide du bac créé.

import matplotlib.pyplot as plt

plt.hist(dist, bins=bins) 
plt.show()

binning.png

Obtenez la correspondance entre les données et les bacs

Vous pouvez obtenir une liste d'informations sur l'emplacement des bacs correspondant aux données avec numpy.digitize ().

bin_indice = numpy.digitize(dist, bins)

Pour les résultats suivants, dist [0] correspond au 4ème bac et dist [1] correspond au 5ème bac.

[ 4  5  8  6  4  6  8  1  6  6  8  2  6  3  5  4  5  4  5  3  8  2  5  5  4 4  4  4  2  3  5  6  5  3  4  3  7  6  4  3  4  4  8  2  4  4  8  6  6  3 6  2  9  5  5  4  4  1  8  6  5  5  5  5  4  1 10  3  1  8  7  3  4  3  8 2  6  5  6  3  6  7  5  3  3  5  5  5  4  1  3  6  5  6  7  3  4  7  8  4]

J'essaierai de le joindre avec zip ().

bin_data_map = zip(dist, bin_indice)
[(-0.16840296791127732, 4), (0.43715458127052381, 5), (1.8635306330264274, 8), (0.89273121368100206, 6),...

Recommended Posts

Créez un bac avec NumPy, obtenez la correspondance entre les données et le bac
[Python] Créer un tableau structuré (stocker des données hétérogènes avec NumPy)
Moyenne mobile avec numpy
Créez des jeux avec Pygame
Créer un filtre avec scipy
Démarrez avec MicroPython
Recevez des tweets avec Tweepy
Obtenez date avec python
Premiers pas avec Numpy
Démarrez avec Mezzanine
Apprenez avec Chemo Informatics NumPy
Concaténation de matrices avec Numpy
Code de bourdonnement avec numpy
Effectuer une analyse de régression avec NumPy
Étendre NumPy avec Rust
Créons un diagramme PRML avec Python, Numpy et matplotlib.