n@921: import sys n@921: import os n@921: import csv n@921: import matplotlib.pyplot as plt n@921: import numpy as np n@921: n@921: rating_folder = 'ratings/' # folder with rating csv files n@921: show_individual = 'frank' n@921: n@921: # get every csv file in folder n@921: for file in os.listdir(rating_folder): # You have to put this in folder where rating csv files are. n@921: if file.endswith(".csv"): n@921: page_name = file[:-4] # file name (without extension) is page ID n@921: n@921: # get header n@921: with open(rating_folder+file, 'r') as readfile: # read this csv file n@921: filereader = csv.reader(readfile, delimiter=',') n@921: headerrow = filereader.next() # use headerrow as X-axis n@921: headerrow = headerrow[1:] n@921: n@921: # read ratings into matrix n@921: ratings = np.loadtxt(open(rating_folder+file,"rb"), n@921: delimiter=",", n@921: skiprows=1, n@921: usecols=range(1,len(headerrow)+1) n@921: ) n@921: n@921: # draw boxplot n@921: plt.boxplot(ratings) n@921: n@921: # add rating of individual(s) n@921: with open(rating_folder+file, 'r') as readfile: # read this csv file n@921: filereader = csv.reader(readfile, delimiter=',') n@921: headerrow = filereader.next() # use headerrow as X-axis n@921: headerrow = headerrow[1:] n@921: markerlist = ["x", ".", "o", "*", "+", "v", ">", "<", "8", "s", "p"] n@921: increment = 0 n@921: linehandles = [] n@921: legendnames = [] n@921: for row in filereader: n@921: subject_id = row[0][:-4] n@921: if subject_id in show_individual: n@921: plothandle, = plt.plot(range(1,len(row)), # x-values n@921: row[1:], # y-values: csv values except subject name n@921: color='k', n@921: marker=markerlist[increment%len(markerlist)], n@921: markersize=10, n@921: linestyle='None', n@921: label=subject_id n@921: ) n@921: increment += 1 # increase counter n@921: linehandles.append(plothandle) n@921: legendnames.append(subject_id) n@921: plt.legend(linehandles, legendnames, n@921: loc='upper right', n@921: bbox_to_anchor=(1.1, 1), borderaxespad=0.) n@921: n@921: n@921: plt.xlabel('Fragment') n@921: plt.title('Box plot '+page_name) n@921: plt.xlim(0, len(headerrow)+1) # only show relevant region, leave space left & right) n@921: plt.xticks(range(1, len(headerrow)+1), headerrow) # show fragment names n@921: n@921: plt.ylabel('Rating') n@921: plt.ylim(0,1) n@921: n@921: plt.show() n@921: #exit() n@921: n@921: #TODO Save output automatically n@921: