2016-03-02 3 views
1

Мне нужно создать гистограмму с процентными бункерами из двухмерного набора данных, как это (это в основном набор отчетов с различных устройств, каждая строка - это устройство, сообщающее о своем статусе в течение заданного часа):Гистограмма с процентными ячейками в Python/numpy?

# hour # parameter (in percents) 
00  10 
00  20 
00  30 
01  40 
01  50 
... 

так, чтобы было собрано краткое изложение гистограмм отчетов устройств, записанных по часам и процентилям, как и пример gnuplot ниже, с бункерами, представляющими процентили, в которые попадают отчеты (например, 0 < r < 10%, 10% < r < 20% и так далее).

enter image description here

Прямо сейчас я думал только о создании 2D массива и подкормки все это GNUPLOT так:

#!/usr/bin/python 

import numpy as np 
import sys 

data = np.loadtxt('mac-quality.csv') 
out = [ [ 0 for k in xrange(10) ] for i in (xrange(24)) ] 

for i in data: 
    hour = i[0].astype(int) 
    quality = i[1].astype(int) 
    for bin in xrange(10): 
     pct = bin * 10 
     if quality > pct and quality < (pct + 10): 
      print('Data: %s, H: %s Percentile: %s:') % (i, hour, pct) 
      out[hour][bin] += 1 
# print(out) 

Что бы правильный способ создания этих гистограмм внутри питона ?

+0

Не могли бы вы предоставить exceprt данные 'cvs'? –

ответ

1

Это использует именно ваш код на Python, но расширяет его с помощью некоторого кода библиотеки Matplotlib, который обычно используется для построения в python. Это обычно заменяет gnuplot на python.

import numpy as np 
import sys 
import matplotlib.pyplot as plt 

data = np.loadtxt('mac-quality.csv') 
out = [ [ 0 for k in xrange(10) ] for i in (xrange(24)) ] 

# Number of bins you have 
nBins = 10 

for i in data: 
    hour = i[0].astype(int) 
    quality = i[1].astype(int) 
    for bin in xrange(10): 
     pct = bin * 10 
     if quality > pct and quality < (pct + 10): 
      print('Data: %s, H: %s Percentile: %s:') % (i, hour, pct) 
      out[hour][bin] += 1 


plt.hist(data, nBins, normed=1, histtype='bar', stacked=True) 
plt.title('Some Title') 
plt.show() 
+0

Не совсем то, что он строит данные, забитые процентилем, в то время как я бы хотел, чтобы гистограмма с уложенными процентилями бинала в течение часа (час - ось X, а процентили - бункеры внутри уложенных гистограмм). Но спасибо, это хорошее начало. –