changeset 2280:334b11f2b418

Merge branch 'master' of https://github.com/BrechtDeMan/WebAudioEvaluationTool
author www-data <www-data@sucuk.dcs.qmul.ac.uk>
date Wed, 20 Apr 2016 20:20:54 +0100
parents 372a355779de (current diff) 17b7ab4f93f2 (diff)
children ace330a89910
files
diffstat 2 files changed, 83 insertions(+), 90 deletions(-) [+]
line wrap: on
line diff
--- a/python/evaluation_stats.py	Wed Apr 20 19:20:48 2016 +0100
+++ b/python/evaluation_stats.py	Wed Apr 20 20:20:54 2016 +0100
@@ -13,8 +13,8 @@
 # XML results files location
 if len(sys.argv) == 1:
     folder_name = "../saves"    # Looks in 'saves/' folder from 'scripts/' folder
-    print "Use: python evaluation_stats.py [results_folder]"
-    print "Using default path: " + folder_name
+    print("Use: python evaluation_stats.py [results_folder]")
+    print("Using default path: " + folder_name)
 elif len(sys.argv) == 2:
     folder_name = sys.argv[1]   # First command line argument is folder
 
@@ -48,35 +48,35 @@
         tree = ET.parse(folder_name + '/' + file)
         root = tree.getroot()
         
-        print file # print file name (subject name)
+        print(file) # print file name (subject name)
         
         # reset for new subject
         total_duration = 0
         page_number = 0
         
         # get list of all page names
-        for audioholder in root.findall("./page"):   # iterate over pages
-            page_name = audioholder.get('ref')               # get page name
+        for page in root.findall("./page"):   # iterate over pages
+            page_name = page.get('ref')               # get page name
             
             if page_name is None: # ignore 'empty' audio_holders
-                print "WARNING: " + file + " contains empty audio holder. (evaluation_stats.py)"
+                print("\tWARNING: " + file + " contains empty audio holder. (evaluation_stats.py)")
                 break # move on to next
-            if audioholder.get("state") != "complete":
-                print "WARNING" + file + " contains incomplete audio holder."
+            if page.get("state") != "complete":
+                print("\tWARNING: " + file + " contains incomplete audio holder.")
                 break
             number_of_comments = 0 # for this page
             number_of_missing_comments = 0 # for this page
             not_played = 0 # for this page
             not_moved = 0 # for this page
             
-            # 'testTime' keeps total duration: subtract time so far for duration of this audioholder
-            duration = float(audioholder.find("./metric/metricresult[@id='testTime']").text) - total_duration
+            # 'testTime' keeps total duration: subtract time so far for duration of this page
+            duration = float(page.find("./metric/metricresult[@id='testTime']").text) - total_duration
             
             # total duration of test
             total_duration += duration
             
             # number of audio elements
-            audioelements = audioholder.findall("./audioelement") # get audioelements
+            audioelements = page.findall("./audioelement") # get audioelements
             number_of_fragments += len(audioelements) # add length of this list to total
             
             # number of comments (interesting if comments not mandatory)
@@ -99,22 +99,22 @@
             total_not_played += not_played
             total_not_moved += not_moved
             
-            # print audioholder id and duration
-            print "    " + page_name + ": " + seconds2timestr(duration) + ", "\
+            # print page id and duration
+            print("    " + page_name + ": " + seconds2timestr(duration) + ", "\
                   + str(number_of_comments)+"/"\
-                  +str(number_of_comments+number_of_missing_comments)+" comments"
+                  +str(number_of_comments+number_of_missing_comments)+" comments")
             
             # number of audio elements not played
             if not_played > 1:
-                print 'ATTENTION: '+str(not_played)+' fragments were not listened to!'
+                print('ATTENTION: '+str(not_played)+' fragments were not listened to!')
             if not_played == 1: 
-                print 'ATTENTION: one fragment was not listened to!'
+                print('ATTENTION: one fragment was not listened to!')
             
             # number of audio element markers not moved
             if not_moved > 1:
-                print 'ATTENTION: '+str(not_moved)+' markers were not moved!'
+                print('ATTENTION: '+str(not_moved)+' markers were not moved!')
             if not_moved == 1: 
-                print 'ATTENTION: one marker was not moved!'
+                print('ATTENTION: one marker was not moved!')
             
             # keep track of duration in function of page index
             if len(duration_order)>page_number:
@@ -122,9 +122,9 @@
             else:
                 duration_order.append([duration])
                 
-            # keep list of audioholder ids and count how many times each audioholder id
+            # keep list of page ids and count how many times each page id
             # was tested, how long it took, and how many fragments there were (if number of 
-            # fragments is different, store as different audioholder id)
+            # fragments is different, store as different page id)
             if page_name in page_names: 
                 page_index = page_names.index(page_name) # get index
                 # check if number of audioelements the same
@@ -154,35 +154,28 @@
             time_per_page_accum += duration # total duration (for average time spent per page)
 
         # print total duration of this test
-        print "    TOTAL: " + seconds2timestr(total_duration)
+        print("    TOTAL: " + seconds2timestr(total_duration))
 
 
 # PRINT EVERYTHING
 
-print "Number of XML files: " + str(number_of_XML_files)
-print "Number of pages: " + str(number_of_pages)
-print "Number of fragments: " + str(number_of_fragments)
-print "Number of empty comments: " + str(total_empty_comments) +\
-      " (" + str(round(100.0*total_empty_comments/number_of_fragments,2)) + "%)"
-print "Number of unplayed fragments: " + str(total_not_played) +\
-      " (" + str(round(100.0*total_not_played/number_of_fragments,2)) + "%)"
-print "Number of unmoved markers: " + str(total_not_moved) +\
-      " (" + str(round(100.0*total_not_moved/number_of_fragments,2)) + "%)"
-print "Average time per page: " + seconds2timestr(time_per_page_accum/number_of_pages)
-
-# Pages and number of times tested
-page_count_strings = list(str(x) for x in page_count)
-count_list = page_names + page_count_strings
-count_list[::2] = page_names
-count_list[1::2] = page_count_strings
-print "Pages tested: " + str(count_list)
+print("Number of XML files: " + str(number_of_XML_files))
+print("Number of pages: " + str(number_of_pages))
+print("Number of fragments: " + str(number_of_fragments))
+print("Number of empty comments: " + str(total_empty_comments) +\
+      " (" + str(round(100.0*total_empty_comments/number_of_fragments,2)) + "%)")
+print("Number of unplayed fragments: " + str(total_not_played) +\
+      " (" + str(round(100.0*total_not_played/number_of_fragments,2)) + "%)")
+print("Number of unmoved markers: " + str(total_not_moved) +\
+      " (" + str(round(100.0*total_not_moved/number_of_fragments,2)) + "%)")
+print("Average time per page: " + seconds2timestr(time_per_page_accum/number_of_pages))
 
 # Average duration for first, second, ... page
-print "Average duration per page:"
+print("Average duration per ordered page:")
 for page_number in range(len(duration_order)): 
-    print "        page " + str(page_number+1) + ": " +\
+    print("        page " + str(page_number+1) + ": " +\
         seconds2timestr(sum(duration_order[page_number])/len(duration_order[page_number])) +\
-            " ("+str(len(duration_order[page_number]))+" subjects)"
+            " ("+str(len(duration_order[page_number]))+" subjects)")
 
 
 # Sort pages by number of audioelements, then by duration
@@ -199,12 +192,12 @@
 combined_list = sorted(zip(*combined_list), key=operator.itemgetter(1, 2)) # sort
 
 # Show average duration for all songs
-print "Average duration per audioholder:"
+print("Average duration per page ID:")
 for page_index in range(len(page_names)):
-    print "        "+combined_list[page_index][0] + ": " \
+    print("        "+combined_list[page_index][0] + ": " \
           + seconds2timestr(combined_list[page_index][1]) \
           + " (" + str(combined_list[page_index][3]) + " subjects, " \
-          + str(combined_list[page_index][2]) + " fragments)"
+          + str(combined_list[page_index][2]) + " fragments)")
 
 
 #TODO
--- a/python/generate_report.py	Wed Apr 20 19:20:48 2016 +0100
+++ b/python/generate_report.py	Wed Apr 20 20:20:54 2016 +0100
@@ -19,8 +19,8 @@
 # XML results files location
 if len(sys.argv) == 1:
     folder_name = "../saves/"    # Looks in 'saves/' folder from 'scripts/' folder
-    print "Use: python generate_report.py [results_folder] [no_render | -nr]"
-    print "Using default path: " + folder_name
+    print("Use: python generate_report.py [results_folder] [no_render | -nr]")
+    print("Using default path: " + folder_name)
 elif len(sys.argv) == 2:
     folder_name = sys.argv[1]   # First command line argument is folder
 elif len(sys.argv) == 3:
@@ -54,7 +54,7 @@
 # arrays initialisation
 page_names       = []
 real_page_names  = [] # regardless of differing numbers of fragments
-subject_count    = [] # subjects per audioholder name
+subject_count    = [] # subjects per page name
 page_count       = []
 duration_page    = []      # duration of experiment in function of page content
 duration_order   = []      # duration of experiment in function of page number
@@ -150,11 +150,11 @@
         #TODO add plot of age
                 
         # get list of all page names
-        for audioholder in root.findall("./page"):   # iterate over pages
-            page_name = audioholder.get('id')               # get page name
+        for page in root.findall("./page"):   # iterate over pages
+            page_name = page.get('ref')               # get page name
             
             if page_name is None: # ignore 'empty' audio_holders
-                print "WARNING: " + file + " contains empty audio holder. (evaluation_stats.py)"
+                print("WARNING: " + file + " contains empty audio holder. (evaluation_stats.py)")
                 break # move on to next
             
             number_of_comments = 0 # for this page
@@ -162,9 +162,9 @@
             not_played = [] # for this page
             not_moved = [] # for this page
             
-            if audioholder.find("./metric/metricresult[@id='testTime']") is not None: # check if time is included
-                # 'testTime' keeps total duration: subtract time so far for duration of this audioholder
-                duration = float(audioholder.find("./metric/metricresult[@id='testTime']").text) - total_duration
+            if page.find("./metric/metricresult[@id='testTime']") is not None: # check if time is included
+                # 'testTime' keeps total duration: subtract time so far for duration of this page
+                duration = float(page.find("./metric/metricresult[@id='testTime']").text)# - total_duration
             
                 # total duration of test
                 total_duration += duration
@@ -173,22 +173,22 @@
                 total_duration = float('nan')
             
             # number of audio elements
-            audioelements = audioholder.findall("./audioelement") # get audioelements
+            audioelements = page.findall("./audioelement") # get audioelements
             number_of_fragments += len(audioelements) # add length of this list to total
             
             # number of comments (interesting if comments not mandatory)
             for audioelement in audioelements:
                 response = audioelement.find("./comment/response")
-                was_played = audioelement.find("./metric/metricresult/[@name='elementFlagListenedTo']")
-                was_moved = audioelement.find("./metric/metricresult/[@name='elementFlagMoved']")
-                if response.text is not None and len(response.text) > 1: 
+                was_played = audioelement.find("./metric/metricResult/[@name='elementFlagListenedTo']")
+                was_moved = audioelement.find("./metric/metricResult/[@name='elementFlagMoved']")
+                if response is not None and response.text is not None and len(response.text) > 1: 
                     number_of_comments += 1
                 else: 
                     number_of_missing_comments += 1
                 if was_played is not None and was_played.text == 'false': 
-                    not_played.append(audioelement.get('id'))
+                    not_played.append(audioelement.get('name'))
                 if was_moved is not None and was_moved.text == 'false': 
-                    not_moved.append(audioelement.get('id'))
+                    not_moved.append(audioelement.get('name'))
             
             # update global counters
             total_empty_comments += number_of_missing_comments
@@ -220,7 +220,7 @@
                                 str(number_of_comments+number_of_missing_comments)+'&'+\
                                 seconds2timestr(duration)+'\\\\\n'
             
-            # get timeline for this audioholder
+            # get timeline for this page
             img_path = 'timelines_movement/'+file[:-4]+'-'+page_name+'.pdf'
             
             # check if available
@@ -235,9 +235,9 @@
             else:
                 duration_order.append([duration])
             
-            # keep list of audioholder ids and count how many times each audioholder id
+            # keep list of page ids and count how many times each page id
             # was tested, how long it took, and how many fragments there were 
-            # (if number of fragments is different, store as different audioholder id)
+            # (if number of fragments is different, store as different page id)
             if page_name in page_names: 
                 page_index = page_names.index(page_name) # get index
                 # check if number of audioelements the same
@@ -261,7 +261,7 @@
                 duration_page.append([duration])
                 fragments_per_page.append(len(audioelements))
             
-            # number of subjects per audioholder regardless of differing numbers of 
+            # number of subjects per page regardless of differing numbers of 
             # fragments (for inclusion in box plots)
             if page_name in real_page_names:
                 page_index = real_page_names.index(page_name) # get index
@@ -354,15 +354,15 @@
 
 # Show average duration for all songs
 body += r'''\vspace{.5cm}
-                Average duration per audioholder (see also Figure \ref{fig:avgtimeperaudioholder}): \\
+                Average duration per page (see also Figure \ref{fig:avgtimeperpage}): \\
                 \begin{tabular}{llll}
                         \textbf{Audioholder} & \textbf{Duration} & \textbf{\# subjects} & \textbf{\# fragments} \\'''
-audioholder_names_ordered = []
-average_duration_audioholder_ordered = []
+page_names_ordered = []
+average_duration_page_ordered = []
 number_of_subjects = []
 for page_index in range(len(page_names)):
-    audioholder_names_ordered.append(combined_list[page_index][0])
-    average_duration_audioholder_ordered.append(combined_list[page_index][1])
+    page_names_ordered.append(combined_list[page_index][0])
+    average_duration_page_ordered.append(combined_list[page_index][1])
     number_of_subjects.append(combined_list[page_index][3])
     body +=  '\n\t\t\t'+combined_list[page_index][0] + "&" +\
              seconds2timestr(combined_list[page_index][1]) + "&" +\
@@ -371,25 +371,25 @@
 body += '\n\t\t\\end{tabular}\n'
 
 # SHOW bar plot of average time per page
-plt.bar(range(1,len(audioholder_names_ordered)+1), np.array(average_duration_audioholder_ordered)/60)
+plt.bar(range(1,len(page_names_ordered)+1), np.array(average_duration_page_ordered)/60)
 plt.xlabel('Audioholder')
-plt.xlim(.8, len(audioholder_names_ordered)+1)
-plt.xticks(np.arange(1,len(audioholder_names_ordered)+1)+.4, audioholder_names_ordered, rotation=90)
+plt.xlim(.8, len(page_names_ordered)+1)
+plt.xticks(np.arange(1,len(page_names_ordered)+1)+.4, page_names_ordered, rotation=90)
 plt.ylabel('Average time [minutes]')
-plt.savefig(folder_name+"time_per_audioholder.pdf", bbox_inches='tight')
+plt.savefig(folder_name+"time_per_page.pdf", bbox_inches='tight')
 plt.close()
 
 # SHOW bar plot of average time per page
-plt.bar(range(1,len(audioholder_names_ordered)+1), number_of_subjects)
+plt.bar(range(1,len(page_names_ordered)+1), number_of_subjects)
 plt.xlabel('Audioholder')
-plt.xlim(.8, len(audioholder_names_ordered)+1)
-plt.xticks(np.arange(1,len(audioholder_names_ordered)+1)+.4, audioholder_names_ordered, rotation=90)
+plt.xlim(.8, len(page_names_ordered)+1)
+plt.xticks(np.arange(1,len(page_names_ordered)+1)+.4, page_names_ordered, rotation=90)
 plt.ylabel('Number of subjects')
 ax = plt.gca()
 ylims = ax.get_ylim()
 yint = np.arange(int(np.floor(ylims[0])), int(np.ceil(ylims[1]))+1)
 plt.yticks(yint)
-plt.savefig(folder_name+"subjects_per_audioholder.pdf", bbox_inches='tight')
+plt.savefig(folder_name+"subjects_per_page.pdf", bbox_inches='tight')
 plt.close()
 
 # SHOW both figures
@@ -408,10 +408,10 @@
 body += r'''\begin{figure}[htbp]
          \begin{center}
          \includegraphics[width=.65\textwidth]{'''+\
-         folder_name+'time_per_audioholder.pdf'+\
+         folder_name+'time_per_page.pdf'+\
         r'''}
-        \caption{Average time spent per audioholder.}
-        \label{fig:avgtimeperaudioholder}
+        \caption{Average time spent per page.}
+        \label{fig:avgtimeperpage}
          \end{center}
          \end{figure}
          
@@ -419,10 +419,10 @@
 body += r'''\begin{figure}[htbp]
          \begin{center}
          \includegraphics[width=.65\textwidth]{'''+\
-         folder_name+'subjects_per_audioholder.pdf'+\
+         folder_name+'subjects_per_page.pdf'+\
         r'''}
-        \caption{Number of subjects per audioholder.}
-        \label{fig:subjectsperaudioholder}
+        \caption{Number of subjects per page.}
+        \label{fig:subjectsperpage}
          \end{center}
          \end{figure}
          
@@ -430,20 +430,20 @@
 #TODO add error bars
 #TODO layout of figures
 
-# SHOW boxplot per audioholder
+# SHOW boxplot per page
 #TODO order in decreasing order of participants
-for audioholder_name in page_names: # get each name
+for page_name in page_names: # get each name
     # plot boxplot if exists (not so for the 'alt' names)
-    if os.path.isfile(folder_name+'ratings/'+audioholder_name+'-ratings-box.pdf'):
+    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/"+audioholder_name+'-ratings-box.pdf'+\
+             folder_name+"ratings/"+page_name+'-ratings-box.pdf'+\
             r'''}
-            \caption{Box plot of ratings for audioholder '''+\
-            audioholder_name+' ('+str(subject_count[real_page_names.index(audioholder_name)])+\
+            \caption{Box plot of ratings for page '''+\
+            page_name+' ('+str(subject_count[real_page_names.index(page_name)])+\
             ''' participants).}
-            \label{fig:boxplot'''+audioholder_name.replace(" ", "")+'''}
+            \label{fig:boxplot'''+page_name.replace(" ", "")+'''}
              \end{center}
              \end{figure}
              
@@ -509,7 +509,7 @@
 
 texfile = header+body+footer # add bits together
 
-print 'pdflatex -output-directory="'+folder_name+'"" "'+ folder_name + 'Report.tex"' # DEBUG
+# print('pdflatex -output-directory="'+folder_name+'"" "'+ folder_name + 'Report.tex"')# DEBUG
 
 # write TeX file
 with open(folder_name + 'Report.tex','w') as f: