Changeset 34441

Show
Ignore:
Timestamp:
05.10.2020 12:49:05 (3 weeks ago)
Author:
davidb
Message:

Further refactoring

Files:
1 modified

Legend:

Unmodified
Added
Removed
  • main/trunk/model-sites-dev/mars/collect/deam/MERGE-CSV-FEATURES-AND-AV-FILES.py

    r34440 r34441  
    44from __future__ import division 
    55from __future__ import print_function 
     6from __future__ import with_statement 
     7 
    68 
    79import csv 
     
    911from collections import OrderedDict 
    1012 
    11 def csv_features_to_dict(csv_filename): 
     13def csv_load_features_to_dict(csv_filename): 
    1214    csv_features_file = open(csv_filename,"r") 
    13     csv_features_reader = csv.reader(csv_features_file, delimiter=',', quotechar='"') 
    1415 
    15     csv_features_dict = {} 
     16    try: 
     17        csv_features_reader = csv.reader(csv_features_file, delimiter=',', quotechar='"') 
    1618 
    17     line_count = 0 
    18     header_row = None 
     19        csv_features_dict = {} 
     20         
     21        line_count = 0 
     22        header_row = None 
     23         
     24        for row in csv_features_reader: 
     25            if line_count == 0: 
     26                row.pop(0) 
     27                header_row = row 
     28            else: 
     29                full_file_id = row[0] 
     30                 
     31                pat = re.compile('^import/(\\d+).json$') 
     32                mat = pat.match(full_file_id) 
     33                song_id = int(mat.group(1)) 
    1934 
    20     for row in csv_features_reader: 
    21         if line_count == 0: 
    22             row.pop(0) 
    23             header_row = row 
    24         else: 
    25             full_file_id = row[0] 
     35                row.pop(0) 
     36                row_ordered_dict = OrderedDict() 
     37                 
     38                for i in range(0, len(header_row)): 
     39                    field = header_row[i]; 
     40                    value = row[i]; 
     41                     
     42                    row_ordered_dict[field] = value 
     43                 
     44                csv_features_dict[song_id] = row_ordered_dict 
    2645 
    27             pat = re.compile('^import/(\\d+).json$') 
    28             mat = pat.match(full_file_id) 
    29             song_id = int(mat.group(1)) 
     46            line_count += 1 
    3047 
    31             row.pop(0) 
    32             row_ordered_dict = OrderedDict() 
     48    finally: 
     49        csv_features_file.close() 
     50        return csv_features_dict 
    3351 
    34             for i in range(0, len(header_row)): 
    35                 field = header_row[i]; 
    36                 value = row[i]; 
     52def csv_load_groundtruth_to_dict(csv_filename): 
    3753 
    38                 row_ordered_dict[field] = value 
     54    # Written in the 'with' style that automatically closes the open() 
     55    with open(csv_filename,"r") as csv_file: 
     56        csv_reader = csv.reader(csv_file, delimiter=',') 
     57 
     58        csv_gt_dict = {} 
     59 
     60        line_count = 0 
     61        header_row = None 
     62 
     63        for row in csv_reader: 
     64            if line_count == 0: 
     65                row.pop(0) 
     66                header_row = row 
     67            else: 
     68                song_id = int(row[0]) 
     69                row.pop(0) 
     70 
     71                row_ordered_dict = OrderedDict() 
     72 
     73                for i in range(0, len(row)): 
     74                    field = header_row[i]; 
     75                    value = row[i]; 
     76 
     77                    row_ordered_dict[field] = value 
    3978                 
    40             csv_features_dict[song_id] = row_ordered_dict 
     79                csv_gt_dict[song_id] = row_ordered_dict 
    4180 
    42         line_count += 1 
    43  
    44     return csv_features_dict 
    45  
    46 def csv_groundtruth_to_dict(csv_filename): 
    47  
    48     csv_file = open(csv_filename) 
    49     csv_reader = csv.reader(csv_file, delimiter=',') 
    50  
    51     csv_gt_dict = {} 
    52  
    53     line_count = 0 
    54     header_row = None 
    55  
    56     for row in csv_reader: 
    57         if line_count == 0: 
    58             row.pop(0) 
    59             header_row = row 
    60         else: 
    61             song_id = int(row[0]) 
    62             row.pop(0) 
    63  
    64             row_ordered_dict = OrderedDict() 
    65  
    66             for i in range(0, len(row)): 
    67                 field = header_row[i]; 
    68                 value = row[i]; 
    69  
    70                 row_ordered_dict[field] = value 
    71                  
    72             csv_gt_dict[song_id] = row_ordered_dict 
    73  
    74         line_count += 1 
     81            line_count += 1 
    7582 
    7683    return csv_gt_dict 
     
    98105     
    99106 
    100 def ordered_dict_features_to_array(songkey_combined_dict): 
     107def ordered_dict_features_to_list(songkey_combined_dict): 
    101108     
    102     features_array = [] 
     109    features_list = [] 
    103110 
    104111    header = [] 
     
    111118        header.append(feature_key) 
    112119 
    113     features_array.append(header) 
     120    features_list.append(header) 
    114121 
    115122    # Now move on to processing each of the song_key_id entries 
     
    127134 
    128135 
    129         features_array.append(row) 
     136        features_list.append(row) 
    130137 
    131     return features_array 
     138    return features_list 
    132139         
    133140 
    134 def csv_save_combined_features(csv_filename,combined_features_array): 
     141def csv_save_combined_features(csv_filename,combined_features_list): 
    135142    csv_features_file = open(csv_filename,"w",newline="") 
    136143    csv_features_writer = csv.writer(csv_features_file, delimiter=',', quotechar='"') 
    137144 
    138     csv_features_writer.writerows(combined_features_array); 
     145    csv_features_writer.writerows(combined_features_list); 
    139146 
    140147 
     
    157164 
    158165 
    159 csv_features_dict = csv_features_to_dict(csv_input_filename) 
     166csv_features_dict = csv_load_features_to_dict(csv_input_filename) 
    160167 
    161 arousal_groundtruth_dict = csv_groundtruth_to_dict(arousal_csv_filename) 
    162 valence_groundtruth_dict = csv_groundtruth_to_dict(valence_csv_filename) 
     168arousal_groundtruth_dict = csv_load_groundtruth_to_dict(arousal_csv_filename) 
     169valence_groundtruth_dict = csv_load_groundtruth_to_dict(valence_csv_filename) 
    163170 
    164171print_songkey_dict("Arousal Ground-truth",arousal_groundtruth_dict) 
     
    170177print_songkey_dict("Essentia Features",csv_features_dict,1) 
    171178 
    172 combined_features_array = ordered_dict_features_to_array(csv_features_dict) 
     179combined_features_list = ordered_dict_features_to_list(csv_features_dict) 
    173180 
    174181 
     
    177184print("* Saving combined CSV data to: " + csv_output_filename) 
    178185print("****") 
    179 csv_save_combined_features(csv_output_filename,combined_features_array) 
     186csv_save_combined_features(csv_output_filename,combined_features_list) 
    180187