def plot_perf(): import os import numpy as np import pandas as pd import matplotlib.pyplot as plt from matplotlib.backends.backend_pdf import PdfPages # SOME ERROR WERE HERE CORRECTED 27/04/2014 think its good #INPUT_vbm = "/home/ed203246/mega/data/2015_logistic_nestv/adni/MCIc-CTL/MCIc-CTL_cs.csv" INPUT = os.path.join(WD, "MCIc-CTL_csi_modselectcv.csv") y_col = 'recall_mean' x_col = 'tv' y_col = 'auc' a = 0.01 #color_map = {0.:'#D40000', 0.01: 'black', 0.1:'#F0a513', 0.5:'#2CA02C', 0.9:'#87AADE', 1.:'#214478'} color_map = {0.:'#D40000', 0.01:'#F0a513', 0.1:'#2CA02C', 0.5:'#87AADE', .9:'#214478', 1.: 'black'} # reds dark => brigth, green blues: brigth => dark input_filename = INPUT #input_filename = INPUTS[data_type]["filename"] outut_filename = input_filename.replace(".csv", "_%s.pdf" % y_col) #print outut_filename # Filter data data = pd.read_csv(input_filename) #data.l1l2_ratio = data.l1l2_ratio.round(5) # avoid poor rounding data.l1l2_ratio = np.asarray(data.l1l2_ratio).round(3) data.tv = np.asarray(data.tv).round(5) data.a = np.asarray(data.a).round(5) data = data[data.k == -1] data = data[data.l1l2_ratio.isin([0, 0.01, 0.1, 0.5, 0.9, 1.])] data = data[(data.tv >= 0.1) | (data.tv == 0)] def close(vec, val, tol=1e-4): return np.abs(vec - val) < tol assert np.sum(data.l1l2_ratio == 0.01) == np.sum(close(data.l1l2_ratio, 0.01)) #data = data[data.a <= 1] # for each a, l1l2_ratio, append the last point tv==1 last = list() for a_ in np.unique(data.a): full_tv = data[(data.a == a_) & (data.tv == 1)] for l1l2_ratio in np.unique(data.l1l2_ratio): new = full_tv.copy() new.l1l2_ratio = l1l2_ratio last.append(new) # last = pd.concat(last) data = pd.concat([data, last]) data.drop_duplicates(inplace=True) # from brainomics.plot_utilities import plot_lines figures = plot_lines(df=data, x_col=x_col, y_col=y_col, colorby_col='l1l2_ratio', splitby_col='a', color_map=color_map) pdf = PdfPages(outut_filename) for fig in figures: print fig, figures[fig] pdf.savefig(figures[fig]); plt.clf() pdf.close()
for global_pen in global_pens for tv_ratio in tv_ratios for l1_ratio in l1_ratios]) df = pd.DataFrame(index, columns=['global_pen', 'tv_ratio', 'l1_ratio']) def metric_fun(r): return (r['tv_ratio'] + r['l1_ratio']) * r['global_pen'] df['metric'] = df.apply(metric_fun, axis=1) # Test handles = plot_utilities.plot_lines(df, x_col='tv_ratio', y_col='metric', splitby_col='global_pen', colorby_col='l1_ratio', use_suptitle=False, use_subplots=True) plt.show() # Test with index df.set_index(['global_pen', 'tv_ratio', 'l1_ratio'], inplace=True) handles = plot_utilities.plot_lines(df, x_col=1, y_col='metric', splitby_col=0, colorby_col=2, use_suptitle=False, use_subplots=True)
print "Found", n_indiv, "persons" ############################################################################### # Plot metrics # ############################################################################### L1_RATIOS = [0.0, 0.5, 1.0] l1_ratio_filter = lambda v: v in L1_RATIOS df_noindex = df.reset_index() struct_pca_df = df_noindex.loc[(df_noindex.model == 'struct_pca') & (df_noindex.l1_ratio.apply(l1_ratio_filter))] for metric in METRICS: handles = plot_utilities.plot_lines(struct_pca_df, x_col="tv_ratio", y_col=metric, splitby_col="global_pen", colorby_col="l1_ratio") for val, handle in handles.items(): filename = OUTPUT_CURVE_FILE_FORMAT.format(metric=metric, global_pen=val) handle.savefig(filename) ############################################################################### # Components # ############################################################################### # Load components components = np.zeros((len(COND), np.prod(IM_SHAPE), N_COMP)) for j, (params, name) in enumerate(COND): key = '_'.join([str(param) for param in params])
# Subsample df struct_pca_df = df[df.model == EXAMPLE_MODEL] # GroupBy SNR snr_groups = struct_pca_df.groupby('snr') # Summary per SNR value (pivot the table to have better display) for metric, metric_name in zip(METRICS, METRICS_NAME): summary = pd.DataFrame(snr_groups[metric].describe()).unstack(1)[0] filename = TAB_FILE_FORMAT.format(metric=metric) summary.to_latex(open(filename, 'w')) # Plot some metrics for struct_pca for each SNR value for snr_val, snr_group in snr_groups: for metric, metric_name in zip(METRICS, METRICS_NAME): handles = plot_utilities.plot_lines(snr_group, x_col='tv_ratio', y_col=metric, splitby_col='global_pen', colorby_col='l1_ratio', use_suptitle=False) for val, handle in handles.items(): # Tune the figure ax = handle.get_axes()[0] ax.set_xlabel("TV ratio") ax.set_ylabel(metric_name) l = ax.get_legend() l.set_title("$\ell_1$ ratio") s = r'$ \alpha $ =' + str(val) handle.suptitle(r'$ \alpha $ =' + str(val)) filename = CURVE_FILE_FORMAT.format(metric=metric, snr=snr_val, global_pen=val) handle.savefig(filename)
# Subsample it & add a column based on name summary = df.loc[PARAMS][METRICS] name_serie = pd.Series([item[1] for item in COND], name='Name', index=PARAMS) summary['name'] = name_serie # Write in a CSV summary.to_csv(OUTPUT_RESULTS_FILE) # Subsample df struct_pca_df = df.xs(EXAMPLE_MODEL) # Plot some metrics for struct_pca for metric in METRICS: handles = plot_utilities.plot_lines(struct_pca_df, x_col=1, y_col=metric, splitby_col=0, colorby_col=2) for val, handle in handles.items(): filename = CURVE_FILE_FORMAT.format(metric=metric, global_pen=val) handle.savefig(filename) ##################################################################### # Loading as images # # Projection to csv # # eventually flip Projection and Loading such that they positivetly # # correlate with clinical severity # ##################################################################### # Open mask mask_ima = nib.load(INPUT_MASK)