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.
Tout d'abord, créez un tableau avec une distribution appropriée.
import numpy
n = 100
dist = numpy.random.normal(0, 1, n)
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]
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()
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