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.
InformationsquelleAutor neversaint | 2009-11-12
Schreibe einen Kommentar