Howto bin-Serie von float-Werte in das Histogramm in Python?
Habe ich festgelegt der Wert in float (immer kleiner als 0). Denen will ich bin in einem Histogramm,
i,e. jeder Balken im Histogramm enthalten Wertebereich [0,0.150)
Den Daten die ich habe sieht wie folgt aus:
0.000
0.005
0.124
0.000
0.004
0.000
0.111
0.112
Whith meine code unten ich bekommen Ergebnis, das aussieht wie
[0, 0.005) 5
[0.005, 0.011) 0
...etc..
Habe ich versucht zu tun, tun solche Gruppierung mit diesem code von mir.
Aber es scheint nicht zu funktionieren. Was ist der richtige Weg, es zu tun?
#! /usr/bin/env python
import fileinput, math
log2 = math.log(2)
def getBin(x):
return int(math.log(x+1)/log2)
diffCounts = [0] * 5
for line in fileinput.input():
words = line.split()
diff = float(words[0]) * 1000;
diffCounts[ str(getBin(diff)) ] += 1
maxdiff = [i for i, c in enumerate(diffCounts) if c > 0][-1]
print maxdiff
maxBin = max(maxdiff)
for i in range(maxBin+1):
lo = 2**i - 1
hi = 2**(i+1) - 1
binStr = '[' + str(lo) + ',' + str(hi) + ')'
print binStr + '\t' + '\t'.join(map(str, (diffCounts[i])))
~
- Gut, in dem Beispiel "was erwarten Sie...", wenn Sie Bereiche definiert als [0, 0.005) (rechts offen) und [0.005, 0.011) (geschlossen Links) dann sollte die Ausgabe: [0, 0.005) 4 [0.005, 0.011) 1 etc...
- "Scheint nicht zu funktionieren?" Alle spezifischen Beschwerde? Oder erwarten Sie alle haben, um es laufen und versuchen zu erraten, was Sie nicht gerne über die Ausgabe?
- Um zu vermeiden, neu zu erfinden das Rad, vor allem, wenn der nächste Schritt ist das zeichnen Ihrer Histogramm: sollten Sie mithilfe der Matplotlib-framework behandelt alle, dass.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Wenn möglich, das Rad nicht neu erfinden. NumPy hat alles, was Sie brauchen:
density=True
.Der erste Fehler ist:
Warum sind Sie mit der Konvertierung eines int in einen str, wenn ein str ist erforderlich? Beheben, dann erhalten wir:
da hast du nur 5 Eimer. Ich verstehe nicht, Ihre giesst Schema, aber wir machen es 50 Eimer und sehen, was passiert:
maxdiff
ist ein einzelner Wert aus der Liste von ints, also, was istmax
hier tun? Entfernen Sie es, jetzt bekommen wir:Sicher genug ist, verwenden Sie einen einzelnen Wert als zweites argument
map
. Wir vereinfachen die letzten zwei Zeilen aus diesem:zu diesem:
Jetzt druckt er:
Ich bin mir nicht sicher, was anderes zu tun hier, da ich nicht wirklich verstehen, die giesst Sie in der Hoffnung zu verwenden. Es scheint zu beinhalten binäre Mächte, aber ist das nicht zu machen für mich Sinn...