def to_csv(self, index=False): ''' Get the JSON representation of this object :return: JSON string ''' data_frame = self.data_frame headers = [str(sub_col) for _, sub_col in data_frame.columns] headers.insert(0, 'experiment_name') headers.append('_empty_') headers.extend(Configuration.get_parameters()) datas = [] for index, row in data_frame.iterrows(): data = [] data.append(str(row.name)) for col_name, sub_col_name in data_frame.columns: data_value = float(row[col_name][sub_col_name]) # check for NaN if math.isnan(data_value): data_value = 0.0 data.append(str(data_value)) data.extend(str(row.name).split('-')) datas.append(data) csv_string = ','.join(headers) + '\n' for row in datas: csv_string += ','.join(row) + '\n' return csv_string
def process(self, data_object): ''' Process a given file :param data_object: JSON object :return: Updated data_object reference ''' super(ExperimentConfig, self).process(data_object) self.config = data_object row = [] for param in Configuration.get_parameters(): if param == 'repeat': continue if param in data_object: self.add_column(param) row.append(data_object[param]) self.add_row(row) return data_object
def compare_experiments(self, experiment_metric_file_paths): ''' Run analysis the compares the output from each experiment :param experiment_metric_file_paths: List of the metric files for each of the experiments :return: dict of the metric objects ''' # pivot data and generate graph for each metric for variable in Configuration.get_parameters(): if variable == 'repeat': continue # get metrics for variable cmp_exps = MetricManagerComparer(variable) class_reader = ClassReader([cmp_exps], MetricManager) finder = FileFinder([class_reader]) finder.process_file_list(self.base_directory, experiment_metric_file_paths) for group_name, metric_name, _ in metric_iter(cmp_exps.metric_map): if group_name == 'variables': continue metric_cmp = SummationVariableComparer(cmp_exps, metric_name) metric_cmp.process(None) self._set_data(metric_cmp.to_string(True), variable, group_name, metric_name) self._set_graph(metric_cmp.create_graph(), variable, group_name, metric_name) # get one table of all the values cmp_exps = MetricManagerComparer('') class_reader = ClassReader([cmp_exps], MetricManager) finder = FileFinder([class_reader]) finder.process_file_list(self.base_directory, experiment_metric_file_paths) self._set_data(cmp_exps.to_string(), 'all')