Mercurial > hg > webaudioevaluationtool
comparison scripts/score_boxplot.py @ 1599:188aca76bf81
Score plotting: plot of individual scores and box plot (with optional overlay of selected individual ratings). Uses CSV files as produced by 'score_boxplot.py'.
author | Brecht De Man <b.deman@qmul.ac.uk> |
---|---|
date | Sun, 31 May 2015 18:03:13 +0100 |
parents | |
children | 97ebdb6b266a |
comparison
equal
deleted
inserted
replaced
1598:7da3e8c7039c | 1599:188aca76bf81 |
---|---|
1 import sys | |
2 import os | |
3 import csv | |
4 import matplotlib.pyplot as plt | |
5 import numpy as np | |
6 | |
7 rating_folder = 'ratings/' # folder with rating csv files | |
8 show_individual = 'frank' | |
9 | |
10 # get every csv file in folder | |
11 for file in os.listdir(rating_folder): # You have to put this in folder where rating csv files are. | |
12 if file.endswith(".csv"): | |
13 page_name = file[:-4] # file name (without extension) is page ID | |
14 | |
15 # get header | |
16 with open(rating_folder+file, 'r') as readfile: # read this csv file | |
17 filereader = csv.reader(readfile, delimiter=',') | |
18 headerrow = filereader.next() # use headerrow as X-axis | |
19 headerrow = headerrow[1:] | |
20 | |
21 # read ratings into matrix | |
22 ratings = np.loadtxt(open(rating_folder+file,"rb"), | |
23 delimiter=",", | |
24 skiprows=1, | |
25 usecols=range(1,len(headerrow)+1) | |
26 ) | |
27 | |
28 # draw boxplot | |
29 plt.boxplot(ratings) | |
30 | |
31 # add rating of individual(s) | |
32 with open(rating_folder+file, 'r') as readfile: # read this csv file | |
33 filereader = csv.reader(readfile, delimiter=',') | |
34 headerrow = filereader.next() # use headerrow as X-axis | |
35 headerrow = headerrow[1:] | |
36 markerlist = ["x", ".", "o", "*", "+", "v", ">", "<", "8", "s", "p"] | |
37 increment = 0 | |
38 linehandles = [] | |
39 legendnames = [] | |
40 for row in filereader: | |
41 subject_id = row[0][:-4] | |
42 if subject_id in show_individual: | |
43 plothandle, = plt.plot(range(1,len(row)), # x-values | |
44 row[1:], # y-values: csv values except subject name | |
45 color='k', | |
46 marker=markerlist[increment%len(markerlist)], | |
47 markersize=10, | |
48 linestyle='None', | |
49 label=subject_id | |
50 ) | |
51 increment += 1 # increase counter | |
52 linehandles.append(plothandle) | |
53 legendnames.append(subject_id) | |
54 plt.legend(linehandles, legendnames, | |
55 loc='upper right', | |
56 bbox_to_anchor=(1.1, 1), borderaxespad=0.) | |
57 | |
58 | |
59 plt.xlabel('Fragment') | |
60 plt.title('Box plot '+page_name) | |
61 plt.xlim(0, len(headerrow)+1) # only show relevant region, leave space left & right) | |
62 plt.xticks(range(1, len(headerrow)+1), headerrow) # show fragment names | |
63 | |
64 plt.ylabel('Rating') | |
65 plt.ylim(0,1) | |
66 | |
67 plt.show() | |
68 #exit() | |
69 | |
70 #TODO Save output automatically |