def write_csv(df, file_name, index_label=None, columns=None, column_labels=None, transpose=True): """ Print write_csv Parameters ---------- df: pandas.DataFrame or pandas.Series traced dataframe file_name: str output file name index_label: str index name columns: list columns to write transpose: bool whether to transpose dataframe (ignored for series) Returns ------- Nothing """ assert len(file_name) > 0 if not file_name.endswith('.%s' % CSV_FILE_TYPE): file_name = '%s.%s' % (file_name, CSV_FILE_TYPE) file_path = config.trace_file_path(file_name) if os.path.isfile(file_path): logger.debug("write_csv file exists %s %s" % (type(df).__name__, file_name)) if isinstance(df, pd.DataFrame): # logger.debug("dumping %s dataframe to %s" % (df.shape, file_name)) write_df_csv(df, file_path, index_label, columns, column_labels, transpose=transpose) elif isinstance(df, pd.Series): # logger.debug("dumping %s element series to %s" % (df.shape[0], file_name)) write_series_csv(df, file_path, index_label, columns, column_labels) elif isinstance(df, dict): df = pd.Series(data=df) # logger.debug("dumping %s element dict to %s" % (df.shape[0], file_name)) write_series_csv(df, file_path, index_label, columns, column_labels) else: logger.error( "write_csv object for file_name '%s' of unexpected type: %s" % (file_name, type(df)))
def trace_interaction_eval_results(trace_results, trace_ids, label): """ Trace model design eval results for interaction_simulate Parameters ---------- trace_results: pandas.DataFrame traced model_design dataframe trace_ids : tuple (str, numpy.ndarray) column name and array of trace_ids from interaction_trace_rows() used to filter the trace_results dataframe by traced hh or person id label: str tracer name Returns ------- Nothing """ assert type(trace_ids[1]) == np.ndarray slicer_column_name = trace_ids[0] trace_results[slicer_column_name] = trace_ids[1] targets = np.unique(trace_ids[1]) if len(trace_results.index) == 0: return # write out the raw dataframe file_path = config.trace_file_path('%s.raw.csv' % label) trace_results.to_csv(file_path, mode="a", index=True, header=True) # if there are multiple targets, we want them in separate tables for readability for target in targets: df_target = trace_results[trace_results[slicer_column_name] == target] # we want the transposed columns in predictable order df_target.sort_index(inplace=True) # # remove the slicer (person_id or hh_id) column? # del df_target[slicer_column_name] target_label = '%s.%s.%s' % (label, slicer_column_name, target) trace_df(df_target, label=target_label, slicer="NONE", transpose=True, column_labels=['expression', None], warn_if_empty=False)
def trace_interaction_eval_results(trace_results, trace_ids, label): """ Trace model design eval results for interaction_simulate Parameters ---------- trace_results: pandas.DataFrame traced model_design dataframe trace_ids : tuple (str, numpy.ndarray) column name and array of trace_ids from interaction_trace_rows() used to filter the trace_results dataframe by traced hh or person id label: str tracer name Returns ------- Nothing """ assert type(trace_ids[1]) == np.ndarray slicer_column_name = trace_ids[0] trace_results[slicer_column_name] = trace_ids[1] targets = np.unique(trace_ids[1]) if len(trace_results.index) == 0: return # write out the raw dataframe file_path = config.trace_file_path('%s.raw.csv' % label) trace_results.to_csv(file_path, mode="a", index=True, header=True) # if there are multiple targets, we want them in separate tables for readability for target in targets: df_target = trace_results[trace_results[slicer_column_name] == target] # we want the transposed columns in predictable order df_target.sort_index(inplace=True) # # remove the slicer (person_id or hh_id) column? # del df_target[slicer_column_name] target_label = '%s.%s.%s' % (label, slicer_column_name, target) trace_df(df_target, label=target_label, slicer="NONE", transpose=True, column_labels=['expression', None], warn_if_empty=False)
def write_csv(df, file_name, index_label=None, columns=None, column_labels=None, transpose=True): """ Print write_csv Parameters ---------- df: pandas.DataFrame or pandas.Series traced dataframe file_name: str output file name index_label: str index name columns: list columns to write transpose: bool whether to transpose dataframe (ignored for series) Returns ------- Nothing """ assert len(file_name) > 0 if not file_name.endswith('.%s' % CSV_FILE_TYPE): file_name = '%s.%s' % (file_name, CSV_FILE_TYPE) file_path = config.trace_file_path(file_name) if os.path.isfile(file_path): logger.debug("write_csv file exists %s %s" % (type(df).__name__, file_name)) if isinstance(df, pd.DataFrame): # logger.debug("dumping %s dataframe to %s" % (df.shape, file_name)) write_df_csv(df, file_path, index_label, columns, column_labels, transpose=transpose) elif isinstance(df, pd.Series): # logger.debug("dumping %s element series to %s" % (df.shape[0], file_name)) write_series_csv(df, file_path, index_label, columns, column_labels) elif isinstance(df, dict): df = pd.Series(data=df) # logger.debug("dumping %s element dict to %s" % (df.shape[0], file_name)) write_series_csv(df, file_path, index_label, columns, column_labels) else: logger.error("write_csv object for file_name '%s' of unexpected type: %s" % (file_name, type(df)))