Python список списка из файлов CSV для создания сгруппированной гистограммы - PullRequest
0 голосов
/ 03 августа 2011

У меня есть несколько файлов CSV в этом формате с именем n-data.csv, где n - количество потоков:

elapsed,label
120,Step 01
260,Step 02
113,Step 03
100,Step 01
200,Step 02
103,Step 03

и я хотел бы получить среднее значение каждого шага для потока (или n) и построить их в виде сгруппированных гистограмм, примерно так: http://matplotlib.sourceforge.net/examples/api/barchart_demo.html

Мой код отлично работает с одним файлом (спасибо Ещё один список csv-файлов в Python Вопрос ):

#!/usr/bin/env python

import csv
import sys

import pylab as p

fig = p.figure()
ax = fig.add_subplot(1,1,1)

result = dict()
av = []
idx = []
for file in sys.argv[1:]:
  for row in csv.DictReader(open(file)):
    label = row['label']
    elapsed = row['elapsed']
    if label in result:
      result[label].append(elapsed)
    else:
      result[label] = [elapsed]    
  for i in sorted (result.iterkeys()):
    s = sum(int(v) for v in result[i])
    a = s/float(len(result[i]))
    av.append(a)
    idx.append(i)

  y = av
  N = len(y)
  ind = range(N)
  ax.bar(ind, y, facecolor='#56A5EC',
          align='center',label='1 Thread') 
  ax.set_ylabel('Average Response Time')
  ax.set_title('Counts, by group',fontstyle='italic')
  ax.legend()
  ax.set_xticks(ind)
  ax.grid(color='#000000', linestyle=':', linewidth=1)
  group_labels = idx
  ax.set_xticklabels(group_labels)
  fig.autofmt_xdate()  
  p.grid(True) 
  p.show()

Однако, когда я запускаю этот сценарий с create_bar.py *csv, все данные помещаются в av (среднее) и idx (индекс), и все данные объединяются в av и idx - который работает как должно.

Как мне выделить av и idx, чтобы я мог создавать групповые диаграммы? Я попробовал:

    threads = file.split('-')[0]
    for count in threads
      for row in csv.DictReader(open(file)):
      ...
        av['threads'].append(a)
        idx['threads'].append(i)

безрезультатно.

1 Ответ

1 голос
/ 04 августа 2011

Возможно, есть список списков ...

av = []
idx = []

for file in sys.argv[1:]:
    next_av = []
    next_idx = []

    ...

    for i in sorted (result.iterkeys()):
        s = sum(int(v) for v in result[i])
        a = s/float(len(result[i]))
        next_av.append(a)
        next_idx.append(i)
    av.append(next_av)
    idx.append(next_idx)

for index in range(len(av)):
    # do something with the lists av[index] and idx[index]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...