【发布时间】:2011-08-03 19:58:42
【问题描述】:
我有几个这种格式的 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
我的代码适用于一个文件(感谢Yet Another list csv file in Python Question):
#!/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)
无济于事。
【问题讨论】:
标签: python list csv charts matplotlib