У меня есть несколько файлов 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)
безрезультатно.