从CSV文件生成的Python列表列表以创建分组条形图

0 投票
1 回答
1341 浏览
提问于 2025-04-16 22:50

我有几个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 中——这本来是应该工作的。

我该如何将 avidx 分开,以便我可以创建分组图表呢?我尝试过:

    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

也许可以考虑使用一个列表里面再放一个列表……

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]

撰写回答