Mam zestaw wartości w float (zawsze mniej niż 0). Które chcę bin na histogram, i, e. każdy bar w histogramie zawierać zakres wartości [0,0.150)Howto bin serii wartości zmiennoprzecinkowe na histogram w języku Python?
Dane mam wygląda następująco:
0.000
0.005
0.124
0.000
0.004
0.000
0.111
0.112
Whith mojego kodu poniżej oczekiwać, aby uzyskać wynik, który wygląda jak
[0, 0.005) 5
[0.005, 0.011) 0
...etc..
Próbowałem zrobić takie binning z tym kodem. Ale to nie działa. Jak to zrobić?
#! /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])))
~
Cóż, w przykładzie „Czego można oczekiwać ...”, jeśli masz zakresy zdefiniowane jako [0, 0,005) (prawy otwarty) i [0,005, 0,011) (zamknięte po lewej) to powinno być: [0, 0,005) 4 [0,005, 0,011] 1 itd ... – Gacek
"Czy nie działa?" Każda konkretna skarga? A może oczekujesz, że wszyscy będą go uruchamiać i próbować zgadywać, co ci się nie podoba w wynikach? –
Aby uniknąć ponownego wynalezienia koła, szczególnie jeśli następnym krokiem jest wykreślenie histogramu: powinieneś rozważyć użycie platformy Matplotlib, która obsługuje to wszystko. – RedGlyph