Mercurial > hg > webaudioevaluationtool
changeset 2488:f377350e7259
Merge branch 'master' of https://github.com/BrechtDeMan/WebAudioEvaluationTool
author | www-data <www-data@sucuk.dcs.qmul.ac.uk> |
---|---|
date | Mon, 08 Aug 2016 12:20:51 +0100 |
parents | 83c1352ce756 (current diff) b0ef31a58ec5 (diff) |
children | 41346c364ac1 |
files | |
diffstat | 2 files changed, 92 insertions(+), 57 deletions(-) [+] |
line wrap: on
line diff
--- a/python/generate_report.py Thu Aug 04 12:20:54 2016 +0100 +++ b/python/generate_report.py Mon Aug 08 12:20:51 2016 +0100 @@ -72,16 +72,20 @@ else: user = '' +# Months +month_array = ['January', 'February', 'March', 'April', 'May', 'June', \ + 'July', 'August', 'September', 'October', 'November', 'December'] # begin LaTeX document header = r'''\documentclass[11pt, oneside]{article} \usepackage{geometry} \geometry{a4paper} \usepackage[parfill]{parskip} % empty line instead of indent - \usepackage{graphicx} % figures - \usepackage[space]{grffile} % include figures with spaces in paths - \usepackage{hyperref} - \usepackage{tikz} % pie charts + \usepackage{graphicx} % figures + \usepackage[space]{grffile} % include figures with spaces in paths + \usepackage[pdfpagelabels]{hyperref} + \usepackage{tikz} % pie charts + \usepackage{float} % place figures 'here' \title{Report} \author{'''+\ user+\ @@ -94,12 +98,12 @@ \maketitle This is an automatically generated report using the `generate\_report.py' Python script included with the Web Audio Evaluation Tool \cite{WAET} distribution which can be found - at \texttt{code.soundsoftware.ac.uk/projects/webaudioevaluationtool}. + at \texttt{\href{https://github.com/BrechtDeMan/WebAudioEvaluationTool}{github.com/BrechtDeMan/WebAudioEvaluationTool}}. \tableofcontents ''' -footer = '\n\t\t'+r'''\begin{thebibliography}{9} +footer = '\n\t\t'+r'''\begin{thebibliography}{1} \bibitem{WAET} % reference to accompanying publication Nicholas Jillings, Brecht De Man, David Moffat and Joshua D. Reiss, ``Web Audio Evaluation Tool: A browser-based listening test environment,'' @@ -107,8 +111,6 @@ \end{thebibliography} \end{document}''' -body = '' - # make sure folder_name ends in '/' folder_name = os.path.join(folder_name, '') @@ -118,6 +120,10 @@ subprocess.call("python score_parser.py '"+folder_name+"'", shell=True) subprocess.call("python score_plot.py '"+folder_name+"ratings/'", shell=True) +# make array of text and array of dates +body_array = [] +date_array = [] + # get every XML file in folder files_list = os.listdir(folder_name) for file in files_list: # iterate over all files in files_list @@ -126,9 +132,28 @@ tree = ET.parse(folder_name + file) root = tree.getroot() - # PRINT name as section - body+= '\n\section{'+file[:-4].capitalize()+'}\n' # make section header from name without extension + # get date + # <datetime> + # <date year="2016" month="7" day="12"/> + # <time hour="14" minute="12" secs="6"/> + # </datetime> + date_node = root.find("./datetime/date") + time_node = root.find("./datetime/time") + year = date_node.get("year") + month = date_node.get("month") + day = date_node.get("day") + hour = time_node.get("hour") + minute = time_node.get("minute") + second = time_node.get("secs") + date_array.append((int(year),int(month),int(day),\ + int(hour),int(minute),int(second))) + # date as section title + body = '\n\section{'+day+' '+month_array[int(month)]+' '+year+' '+hour+':'+minute+':'+second+'}\n' + + # file name + body += '\t\tFile: '+file[:-4]+'\\\\ \n' + # reset for new subject total_duration = 0 page_number = 0 @@ -138,16 +163,21 @@ # DEMO survey stats # get gender - this_subjects_gender = root.find("./posttest/radio/[@id='gender']") + post_survey = root.find("./survey/[@location='post']") + this_subjects_gender = post_survey.find("./surveyresult/[@ref='gender']/response") if this_subjects_gender is not None: gender.append(this_subjects_gender.get("name")) else: gender.append('UNAVAILABLE') # get age - this_subjects_age = root.find("./posttest/number/[@id='age']") + this_subjects_age = post_survey.find("./surveyresult/[@ref='age']/response") if this_subjects_age is not None: age.append(this_subjects_age.text) - #TODO add plot of age + if this_subjects_gender is not None: + body += 'Details: '+this_subjects_gender.get("name") + if this_subjects_age is not None: + body += ', ' + this_subjects_age.text + body += '\\\\ \n' # get list of all page names for page in root.findall("./page"): # iterate over pages @@ -289,7 +319,13 @@ ''' # PRINT timeline plots - body += timeline_plots + body += timeline_plots+'\n' + + body_array.append(body) + +# put sections in order according to date +body_array_ordered = [b for d,b in sorted(zip(date_array,body_array))] +body = ''.join(body_array_ordered) # join to footer footer = body + footer @@ -313,10 +349,10 @@ body += r'Number of unmoved markers: &' + str(total_not_moved) +\ " (" + str(round(100.0*total_not_moved/number_of_fragments,2)) + r"\%)\\"+'\n\t\t\t' body += r'Average time per page: &' + seconds2timestr(time_per_page_accum/number_of_pages) + r"\\"+'\n\t\t' -body += '\\end{tabular} \\vspace{1.5cm} \\\\ \n' +body += '\\end{tabular} \\\\ \n' # Average duration for first, second, ... page -body += "\t\t\\vspace{.5cm} \n\n\t\tAverage duration per page (see also Figure \\ref{fig:avgtimeperpage}): \\\\ \n\t\t" +body += "\n\n\t\t\\subsection*{Average duration per ordered page}\n See also Figure \\ref{fig:avgtimeperorder}. \\\\ \n\t\t" body += r'''\begin{tabular}{lll} \textbf{Page} & \textbf{Duration} & \textbf{\# subjects}\\''' tpp_averages = [] # store average time per page @@ -334,7 +370,7 @@ plt.xlim(.8, len(duration_order)+1) plt.xticks(np.arange(1,len(duration_order)+1)+.4, range(1,len(duration_order)+1)) plt.ylabel('Average time [minutes]') -plt.savefig(folder_name+"time_per_page.pdf", bbox_inches='tight') +plt.savefig(folder_name+"time_per_order.pdf", bbox_inches='tight') plt.close() #TODO add error bars @@ -353,8 +389,8 @@ combined_list = sorted(zip(*combined_list), key=operator.itemgetter(1, 2)) # sort # Show average duration for all songs -body += r'''\vspace{.5cm} - Average duration per page (see also Figure \ref{fig:avgtimeperpage}): \\ +body += '\n\n\t\t'+r'''\subsection*{Average duration per page} + See also Figure \ref{fig:avgtimeperpage}. \\ \begin{tabular}{llll} \textbf{Audioholder} & \textbf{Duration} & \textbf{\# subjects} & \textbf{\# fragments} \\''' page_names_ordered = [] @@ -394,59 +430,59 @@ # SHOW both figures body += r''' - \begin{figure}[htbp] - \begin{center} - \includegraphics[width=.65\textwidth]{'''+\ - folder_name+'time_per_page.pdf'+\ + \begin{figure}[htbp] + \begin{center} + \includegraphics[width=.65\textwidth]{'''+\ + folder_name+'time_per_order.pdf'+\ r'''} - \caption{Average time spent per page.} - \label{fig:avgtimeperpage} - \end{center} - \end{figure} + \caption{Average time spent per page (order).} + \label{fig:avgtimeperorder} + \end{center} + \end{figure} ''' body += r'''\begin{figure}[htbp] - \begin{center} - \includegraphics[width=.65\textwidth]{'''+\ + \begin{center} + \includegraphics[width=.65\textwidth]{'''+\ folder_name+'time_per_page.pdf'+\ r'''} - \caption{Average time spent per page.} + \caption{Average time spent per page (content).} \label{fig:avgtimeperpage} - \end{center} - \end{figure} + \end{center} + \end{figure} ''' body += r'''\begin{figure}[htbp] - \begin{center} - \includegraphics[width=.65\textwidth]{'''+\ + \begin{center} + \includegraphics[width=.65\textwidth]{'''+\ folder_name+'subjects_per_page.pdf'+\ r'''} \caption{Number of subjects per page.} \label{fig:subjectsperpage} - \end{center} - \end{figure} - + \end{center} + \end{figure} + ''' #TODO add error bars #TODO layout of figures -# SHOW boxplot per page -#TODO order in decreasing order of participants -for page_name in page_names: # get each name +# SHOW boxplot per page (in alphabetical order of page name) +body += '\t\t\\clearpage \n\t\\subsection*{Ratings per page}\n' +for page_name in sorted(page_names): # get each name # plot boxplot if exists (not so for the 'alt' names) if os.path.isfile(folder_name+'ratings/'+page_name+'-ratings-box.pdf'): - body += r'''\begin{figure}[htbp] - \begin{center} - \includegraphics[width=.65\textwidth]{'''+\ - folder_name+"ratings/"+page_name+'-ratings-box.pdf'+\ - r'''} - \caption{Box plot of ratings for page '''+\ - page_name+' ('+str(subject_count[real_page_names.index(page_name)])+\ - ''' participants).} - \label{fig:boxplot'''+page_name.replace(" ", "")+'''} - \end{center} - \end{figure} - + body += r'''\begin{figure}[H] + \begin{center} + \includegraphics[width=.65\textwidth]{'''+\ + folder_name+"ratings/"+page_name+'-ratings-box.pdf'+\ + r'''} + \caption{Box plot of ratings for page '''+\ + page_name+' ('+str(subject_count[real_page_names.index(page_name)])+\ + ''' participants).} + \label{fig:boxplot'''+page_name.replace(" ", "")+'''} + \end{center} + \end{figure} + ''' # DEMO pie chart of gender distribution among subjects
--- a/python/timeline_view_movement.py Thu Aug 04 12:20:54 2016 +0100 +++ b/python/timeline_view_movement.py Mon Aug 08 12:20:51 2016 +0100 @@ -62,7 +62,7 @@ subject_id = file[:-4] # drop '.xml' previous_page_time = 0 # time spent before current page - time_offset = 0 # test starts at zero + #time_offset = 0 # test starts at zero # ONE TIMELINE PER PAGE - make new plot per page @@ -125,8 +125,8 @@ listen_events = audioelement.findall("./metric/metricresult/[@name='elementListenTracker']/event") for event in listen_events: # get testtime: start and stop - start_times_global.append(float(event.find('testtime').get('start'))-time_offset) - stop_times_global.append(float(event.find('testtime').get('stop'))-time_offset) + start_times_global.append(float(event.find('testtime').get('start')))#-time_offset) + stop_times_global.append(float(event.find('testtime').get('stop')))#-time_offset) # display fragment name at start plt.text(0,initial_position+0.02,audio_id,color=colormap[increment%len(colormap)]) #,rotation=45 @@ -279,7 +279,7 @@ increment+=1 # to next audioelement last_page_duration = page_time #-time_offset - time_offset = page_time + #time_offset = page_time if not plot_empty: # if plot is not empty, show and/or store # set plot parameters @@ -298,4 +298,3 @@ plt.savefig(timeline_folder+subject_id+"-"+page_name+".pdf", bbox_inches='tight') plt.close() -