annotate scripts/score_boxplot.py @ 1030:057c6b039f4e

Comment and rating scripts: robust against audioholders without id or audioelements; fixes issue where plots were not cleared before adding new content; showing legend optional; robust against non-UTF8 characters in legend names
author Brecht De Man <BrechtDeMan@users.noreply.github.com>
date Mon, 15 Jun 2015 13:09:46 +0100
parents 4e9ab4f92f20
children ab79d76c6f85
rev   line source
BrechtDeMan@929 1 import sys
BrechtDeMan@929 2 import os
BrechtDeMan@929 3 import csv
BrechtDeMan@929 4 import matplotlib.pyplot as plt
BrechtDeMan@929 5 import numpy as np
BrechtDeMan@929 6
BrechtDeMan@929 7 rating_folder = 'ratings/' # folder with rating csv files
BrechtDeMan@929 8 show_individual = 'frank'
BrechtDeMan@929 9
BrechtDeMan@929 10 # get every csv file in folder
BrechtDeMan@929 11 for file in os.listdir(rating_folder): # You have to put this in folder where rating csv files are.
BrechtDeMan@929 12 if file.endswith(".csv"):
BrechtDeMan@929 13 page_name = file[:-4] # file name (without extension) is page ID
BrechtDeMan@929 14
BrechtDeMan@929 15 # get header
BrechtDeMan@929 16 with open(rating_folder+file, 'r') as readfile: # read this csv file
BrechtDeMan@929 17 filereader = csv.reader(readfile, delimiter=',')
BrechtDeMan@929 18 headerrow = filereader.next() # use headerrow as X-axis
BrechtDeMan@929 19 headerrow = headerrow[1:]
BrechtDeMan@929 20
BrechtDeMan@929 21 # read ratings into matrix
BrechtDeMan@929 22 ratings = np.loadtxt(open(rating_folder+file,"rb"),
BrechtDeMan@929 23 delimiter=",",
BrechtDeMan@929 24 skiprows=1,
BrechtDeMan@929 25 usecols=range(1,len(headerrow)+1)
BrechtDeMan@929 26 )
BrechtDeMan@929 27
BrechtDeMan@929 28 # draw boxplot
BrechtDeMan@929 29 plt.boxplot(ratings)
BrechtDeMan@929 30
BrechtDeMan@929 31 # add rating of individual(s)
BrechtDeMan@929 32 with open(rating_folder+file, 'r') as readfile: # read this csv file
BrechtDeMan@929 33 filereader = csv.reader(readfile, delimiter=',')
BrechtDeMan@929 34 headerrow = filereader.next() # use headerrow as X-axis
BrechtDeMan@929 35 headerrow = headerrow[1:]
BrechtDeMan@929 36 markerlist = ["x", ".", "o", "*", "+", "v", ">", "<", "8", "s", "p"]
BrechtDeMan@929 37 increment = 0
BrechtDeMan@929 38 linehandles = []
BrechtDeMan@929 39 legendnames = []
BrechtDeMan@929 40 for row in filereader:
BrechtDeMan@929 41 subject_id = row[0][:-4]
BrechtDeMan@929 42 if subject_id in show_individual:
BrechtDeMan@929 43 plothandle, = plt.plot(range(1,len(row)), # x-values
BrechtDeMan@929 44 row[1:], # y-values: csv values except subject name
BrechtDeMan@929 45 color='k',
BrechtDeMan@929 46 marker=markerlist[increment%len(markerlist)],
BrechtDeMan@929 47 markersize=10,
BrechtDeMan@929 48 linestyle='None',
BrechtDeMan@929 49 label=subject_id
BrechtDeMan@929 50 )
BrechtDeMan@929 51 increment += 1 # increase counter
BrechtDeMan@929 52 linehandles.append(plothandle)
BrechtDeMan@929 53 legendnames.append(subject_id)
BrechtDeMan@929 54 plt.legend(linehandles, legendnames,
BrechtDeMan@929 55 loc='upper right',
BrechtDeMan@929 56 bbox_to_anchor=(1.1, 1), borderaxespad=0.)
BrechtDeMan@929 57
BrechtDeMan@929 58
BrechtDeMan@929 59 plt.xlabel('Fragment')
BrechtDeMan@929 60 plt.title('Box plot '+page_name)
BrechtDeMan@929 61 plt.xlim(0, len(headerrow)+1) # only show relevant region, leave space left & right)
BrechtDeMan@929 62 plt.xticks(range(1, len(headerrow)+1), headerrow) # show fragment names
BrechtDeMan@929 63
BrechtDeMan@929 64 plt.ylabel('Rating')
BrechtDeMan@929 65 plt.ylim(0,1)
BrechtDeMan@929 66
BrechtDeMan@1025 67 #plt.show() # show plot
BrechtDeMan@929 68 #exit()
BrechtDeMan@929 69
BrechtDeMan@1030 70 plt.savefig(rating_folder+page_name+"-box.png")
BrechtDeMan@1030 71 plt.close()