Wenn Sie beim Aufteilen der Daten in Bins und Zeichnen des Histogramms usw. ein Array an hist () von matplotlib übergeben, werden die Bins in Bins unterteilt, die entsprechend den Daten gut aussehen und gezeichnet werden. Die Daten werden jedoch in beliebige Bins unterteilt. Möglicherweise möchten Sie wissen, welche Daten sich in welchem Fach befinden.
Dieses Mal erstellen wir einen Bin und erhalten die Korrespondenz zwischen Daten und Bin.
Erstellen Sie zunächst ein Array mit einer geeigneten Verteilung.
import numpy
n = 100
dist = numpy.random.normal(0, 1, n)
Es scheint eine Debatte über die Gültigkeit der Anzahl der Fächer zu geben, aber in Microsoft Excel usw. scheint die Anzahl der Fächer k die quadratische Anzahl von n für die Anzahl der Daten n als Standard zu sein.
k=\sqrt{n}
Dieses Mal werden wir diese Methode verwenden, um die Anzahl der Bins zu bestimmen und ein Array als Bins zu erstellen, das den Datenbereich in k unterteilt.
import math
bin_num = math.sqrt(n)
bins = numpy.linspace(min(dist), max(dist), bin_num)
Ein Array ähnlich dem folgenden wurde erstellt.
[-2.28875045 -1.72785426 -1.16695807 -0.60606188 -0.0451657 0.51573049 1.07662668 1.63752287 2.19841906 2.75931524]
Mal sehen, wie die Daten mit dem erstellten Bin gezeichnet werden.
import matplotlib.pyplot as plt
plt.hist(dist, bins=bins)
plt.show()
Mit numpy.digitize () können Sie eine Liste der Bin-Standortinformationen abrufen, die den Daten entsprechen.
bin_indice = numpy.digitize(dist, bins)
Im folgenden Ergebnis entspricht dist [0] dem 4. Bin und dist [1] dem 5. Bin.
[ 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]
Ich werde versuchen, es mit zip () zu befestigen.
bin_data_map = zip(dist, bin_indice)
[(-0.16840296791127732, 4), (0.43715458127052381, 5), (1.8635306330264274, 8), (0.89273121368100206, 6),...
Recommended Posts