Example #1
0
def plot_roc(y_binary, y_binary_scores, file_name, n_classes):
    pu.figure_setup()
    fig_size = pu.get_fig_size(10, 8)
    fig = plt.figure(figsize=fig_size)
    ax = fig.add_subplot(111)
    fpr = dict()
    tpr = dict()
    roc_auc = dict()
    for i in range(n_classes):
        fpr[i], tpr[i], _ = roc_curve(y_binary[:, i], y_binary_scores[:, i])
        roc_auc[i] = auc(fpr[i], tpr[i])

    # Compute micro-average ROC curve and ROC area
    fpr["micro"], tpr["micro"], _ = roc_curve(y_binary.ravel(),
                                              y_binary_scores.ravel())
    roc_auc["micro"] = auc(fpr["micro"], tpr["micro"])
    lw = 2
    plt.plot(fpr["micro"],
             tpr["micro"],
             color='darkorange',
             lw=lw,
             label='ROC curve (area = %0.2f)' % roc_auc["micro"])
    plt.plot([0, 1], [0, 1], color='navy', lw=lw, linestyle='--')
    plt.xlim([0.0, 1.0])
    plt.ylim([0.0, 1.05])
    plt.xlabel('False Positive Rate')
    plt.ylabel('True Positive Rate')
    plt.title('Receiver Operating Characteristic Curve')
    plt.legend(loc="lower right")
    pu.save_fig(fig, 'figures/roc_' + file_name + '.pdf', 'pdf')
Example #2
0
def main():
    pu.figure_setup()

    x = np.linspace(-20, 20, 300)

    fig, ax = pu.figure(pos=121)
    pu.subplots_adjust(fig)
    ax.plot(x, sigmoid(x))
    ax.axhline(0.5, color=".5")
    ax.set_ylabel(r"$\sigma(x)$")
    ax.set_xlabel(r"$x$")
    ax.set_yticks([0, 0.5, 1])
    # ax.set_ylim(-0.25, 1.25)

    # Bigger x in .plot() for smoother curve
    x = np.linspace(0, 25, 300)
    den = sum(np.exp(np.linspace(0, 25, 15)))

    ax = fig.add_subplot(122)
    ax.plot(x, np.exp(x) / den)
    ax.set_ylabel(r"$\text{softmax}(\vec{z_i})$")
    ax.set_xlabel(r"$z_i$")
    ax.set_ylim(0, 1)

    plt.savefig(
        os.path.join("images",
                     os.path.splitext(os.path.basename(__file__))[0] + ".pgf"))
    plt.close()
Example #3
0
def main(args):

    # Collect data from results
    df = pd.read_pickle(path='results/fixed_parameters_std-2/8.pkl')

    # Set time range, 1440 = 1 day
    N = 1440
    x = np.arange(N)

    # Prep figure
    pu.figure_setup()
    fig_size = pu.get_fig_size(10, 5)
    fig = plt.figure(figsize=(fig_size))

    ############################################################################
    # Collect glucose data
    gut_compartment = df['gt'].values[:N]
    plasma_compartment = df['mt'].values[:N]
    carb_est = df['carb_ests_'].values[:N]
    # carb_est[carb_est==0] = np.nan

    # Plot Glucose compartments...
    ax = fig.add_subplot(111)
    ax.plot(x, gut_compartment, c='b', lw=pu.plot_lw(), label='Gut glucose')
    ax.plot(x,
            plasma_compartment,
            c='r',
            lw=pu.plot_lw(),
            label='Plasma glucose')
    ax.set_xlabel('$t \, (minutes)$')
    ax.set_ylabel('$mg/L$')
    ax.set_axisbelow(True)

    # Add second axis
    ax2 = ax.twinx()
    color = 'tab:orange'
    ax2.set_ylabel('$\hat{m}$', color=color)
    ax2.plot(
        x,
        carb_est,  #lw=pu.plot_lw(),
        label='Carbs est.',
        color=color,
        alpha=.5)  #, marker='o', markerfacecolor='None',
    #markersize=5, linewidth=0, alpha=.2)
    ax2.tick_params(axis='y', labelcolor=color)

    # Add legends
    ax.legend(loc='upper left', prop={'size': 5})
    ax2.legend(loc='upper right', prop={'size': 5})

    # Finilize plot
    plt.grid()
    plt.tight_layout()

    if args.save:
        pu.save_fig(fig, args.save)
    else:
        plt.show()
Example #4
0
def plot_auc_binary(y_binary, y_binary_scores, file_name, n_classes):
    pu.figure_setup()
    fig_size = pu.get_fig_size(10, 8)
    fig = plt.figure(figsize=fig_size)
    ax = fig.add_subplot(111)

    precision, recall, _ = precision_recall_curve(y_binary, y_binary_scores)

    plt.step(recall, precision, color='b', alpha=0.2, where='post')
    plt.fill_between(recall, precision, step='post', alpha=0.2, color='b')

    plt.xlabel('Recall')
    plt.ylabel('Precision')
    plt.ylim([0.0, 1.05])
    plt.xlim([0.0, 1.0])
    average_precision = average_precision_score(y_binary, y_binary_scores)
    plt.title('2-class Precision-Recall curve: AUC={0:0.2f}'.format(
        average_precision))
    pu.save_fig(fig, 'figures/auc_' + file_name + '.pdf', 'pdf')
def main(args):
    data = np.random.randn(args.n_points, 2)

    pu.figure_setup()

    fig_size = pu.get_fig_size(10, 10)
    fig = plt.figure(figsize=fig_size)
    ax = fig.add_subplot(111)

    ax.scatter(data[:, 0], data[:, 1], alpha=0.1, rasterized=True)

    ax.set_xlabel('$x$')
    ax.set_ylabel('$y$')

    plt.tight_layout()

    if args.save:
        pu.save_fig(fig, args.save)
    else:
        plt.show()
def main(args):
    data = np.random.randn(args.n_points, 2)

    pu.figure_setup()

    fig_size = pu.get_fig_size(10, 10)
    fig = plt.figure(figsize=fig_size)
    ax = fig.add_subplot(111)

    ax.scatter(data[:, 0], data[:, 1], alpha=0.1, rasterized=True)

    ax.set_xlabel('$x$')
    ax.set_ylabel('$y$')

    plt.tight_layout()

    if args.save:
        pu.save_fig(fig, args.save)
    else:
        plt.show()
Example #7
0
def plot_auc(y_binary, y_binary_scores, file_name, n_classes):
    pu.figure_setup()
    fig_size = pu.get_fig_size(10, 8)
    fig = plt.figure(figsize=fig_size)
    ax = fig.add_subplot(111)
    precision = dict()
    recall = dict()
    average_precision = dict()

    for i in range(n_classes):
        precision[i], recall[i], _ = precision_recall_curve(
            y_binary[:, i], y_binary_scores[:, i])
        average_precision[i] = average_precision_score(y_binary[:, i],
                                                       y_binary_scores[:, i])

    precision["micro"], recall["micro"], _ = precision_recall_curve(
        y_binary.ravel(), y_binary_scores.ravel())
    average_precision["micro"] = average_precision_score(y_binary,
                                                         y_binary_scores,
                                                         average="micro")
    print('Average precision score, micro-averaged over all classes: {0:0.2f}'.
          format(average_precision["micro"]))
    plt.step(recall['micro'],
             precision['micro'],
             color='b',
             alpha=0.2,
             where='post')
    plt.fill_between(recall["micro"],
                     precision["micro"],
                     step='post',
                     alpha=0.2,
                     color='b')

    plt.xlabel('Recall')
    plt.ylabel('Precision')
    plt.ylim([0.0, 1.05])
    plt.xlim([0.0, 1.0])
    plt.title(
        'Average precision score, micro-averaged over all classes: AUC={0:0.2f}'
        .format(average_precision["micro"]))
    pu.save_fig(fig, 'figures/auc_' + file_name + '.pdf', 'pdf')
def main():
    pu.figure_setup()

    # Toy dataset: it's just a straight line with some Gaussian noise:
    np.random.seed(0)
    x = np.random.normal(size=N_SAMPLES_1)
    y = (x > 0).astype(np.float)
    x[x > 0] *= 4
    x += 0.3 * np.random.normal(size=N_SAMPLES_1)
    x = x[:, np.newaxis]

    fig, ax = pu.figure(pos=121)
    pu.subplots_adjust(fig)
    plot(ax, x, y)

    x = np.array([float(idx) for idx in range(10)] + [
        10.5,
        10.7,
        10.85,
        10.95,
        11.5,
        12.1,
        12.5,
        12.6,
        12.65,
        13.33,
        33.3,
        35.5,
        36.6,
    ])
    y = (x > 11).astype(np.float)
    x = x[:, np.newaxis]

    ax = fig.add_subplot(122)
    plot(ax, x, y)

    plt.savefig(
        os.path.join("images",
                     os.path.splitext(os.path.basename(__file__))[0] + ".pgf"))
    plt.close()
Example #9
0
def main(args):
    x = np.linspace(-6, 6, 200)
    y = 1 / (1 + np.exp(-x))

    pu.figure_setup()

    fig_size = pu.get_fig_size(10, 5)
    fig = plt.figure(figsize=(fig_size))
    ax = fig.add_subplot(111)

    ax.plot(x, y, c='b', lw=pu.plot_lw())

    ax.set_xlabel('$x$')
    ax.set_ylabel('$\\sigma(x)$')

    ax.set_axisbelow(True)

    plt.grid()
    plt.tight_layout()

    if args.save:
        pu.save_fig(fig, args.save)
    else:
        plt.show()
def main(args):
    x = np.linspace(-6, 6, 200)
    y = 1/(1 + np.exp(-x))

    pu.figure_setup()

    fig_size = pu.get_fig_size(10, 5)
    fig = plt.figure(figsize=fig_size)
    ax = fig.add_subplot(111)

    ax.plot(x, y, c='b', lw=pu.plot_lw())

    ax.set_xlabel('$x$')
    ax.set_ylabel('$\\sigma(x)$')

    ax.set_axisbelow(True)

    plt.grid()
    plt.tight_layout()

    if args.save:
        pu.save_fig(fig, args.save)
    else:
        plt.show()
Example #11
0
def main(args):

    # Collect data from results
    df = pd.read_pickle(path='results/fixed_parameters_std-2/8.pkl')

    # Set time range, 1440 = 1 day
    N = 1440
    x = np.arange(N)

    # Prep figure
    pu.figure_setup()
    fig_size = pu.get_fig_size(10, 5)
    fig = plt.figure(figsize=(fig_size))

    ############################################################################
    # Collect insulin data
    tissue_compartment = df['s1'].values[:N]
    plasma_compartment = df['s2'].values[:N]
    bolus_data = df['bolus_inputs_'].values[:N]

    # Keep only non-zero bolus data - Set zeros to nan
    bolus_data[bolus_data == 0] = np.nan

    # Plot Insulin Compartment Data
    ax = fig.add_subplot(111)
    ax.plot(x,
            tissue_compartment,
            c='b',
            lw=pu.plot_lw(),
            label='Subcutaneous tissue')
    ax.plot(x,
            plasma_compartment,
            c='r',
            lw=pu.plot_lw(),
            label='Blood plasma')
    ax.set_xlabel('$t \, (minutes)$')
    ax.set_ylabel('$Insulin, \, mg/L$')
    ax.set_axisbelow(True)

    # Add Bolus Data on second y-axis
    ax2 = ax.twinx()
    color = 'tab:green'
    ax2.set_ylabel('Units', color=color)
    ax2.plot(
        x,
        bolus_data,  #lw=pu.plot_lw(),
        label='Bolus',
        color=color,
        marker='D',
        markerfacecolor='None',
        markersize=5,
        linewidth=0)
    ax2.tick_params(axis='y', labelcolor=color)

    # Show legend
    ax.legend(loc='upper left', prop={'size': 5})
    ax2.legend(loc='upper right', prop={'size': 5})

    plt.grid()
    plt.tight_layout()

    if args.save:
        pu.save_fig(fig, args.save)
    else:
        plt.show()
def main(args):

    # Collect data from results
    df = pd.read_pickle(path='./../results/2019-06-15_17:48/4.pkl')

    # Set time range, 1440 = 1 day
    N = 3000
    x = np.arange(N)

    # Prep figure
    pu.figure_setup()
    fig_size = pu.get_fig_size(10, 50)
    fig = plt.figure(figsize=(fig_size))

    ############################################################################
    # Collect CGM and meal data

    cgm_data = df['cgm_inputs_'].values[:N]
    cgm_model = df['Gt'].values[:N]
    meals = df['y_meals'].values[:N]

    # Make all 0 target meal NaNs
    meals[meals == 0] = np.nan

    # Plot CGM and Meal data
    ax = fig.add_subplot(411)
    ax.axhspan(70, 180, alpha=0.1, color='black')
    ax.set_ylim(0, 350)
    ax.plot(x,
            cgm_data,
            marker='o',
            c='g',
            linewidth=0,
            markersize=1,
            label='CGM')
    ax.plot(x,
            cgm_model,
            c='black',
            linewidth=1,
            linestyle='dashed',
            label='Modeled CGM')
    ax.plot(x,
            meals * 20,
            marker='*',
            c='purple',
            linewidth=0,
            markersize=4,
            label='Meal')

    # ax.set_xlabel('$t (minutes)$')
    ax.legend(loc='upper left', prop={'size': 6})
    ax.set_ylabel('$mg/dl$')

    meal_preds = df['meal_preds_'].values[:N]
    meal_preds[meal_preds == 0] = np.nan

    for it, m in enumerate(meal_preds):
        if m == 1:
            ax.axvline(it, c='magenta', alpha=.1)

    # Add CGM prediction
    # horizon = 45
    # start_time = 488
    # x_pred = np.arange(start_time,start_time+horizon+1)
    # cgm_pred = cgm_preds[start_time]-46
    # ax.plot(x_pred, cgm_pred, c='black', linewidth=1, linestyle='dashed')

    ############################################################################
    # Collect insulin data

    tissue_compartment = df['s1'].values[:N]
    plasma_compartment = df['s2'].values[:N]
    bolus_data = df['bolus_inputs_'].values[:N]

    # Keep only non-zero bolus data - Set zeros to nan
    bolus_data[bolus_data == 0] = np.nan

    # Plot Insulin Compartment Data
    ax = fig.add_subplot(412)
    ax.plot(x,
            tissue_compartment,
            c='b',
            lw=pu.plot_lw(),
            label='Subcutaneous tissue')
    ax.plot(x,
            plasma_compartment,
            c='r',
            lw=pu.plot_lw(),
            label='Blood plasma')

    # ax.set_xlabel('$t \, (minutes)$')
    ax.set_ylabel('$Insulin, \, mg/L$')
    ax.set_axisbelow(True)

    # Add Bolus Data on second y-axis
    ax2 = ax.twinx()
    color = 'tab:green'
    ax2.set_ylabel('Units', color=color)
    ax2.plot(
        x,
        bolus_data,  #lw=pu.plot_lw(),
        label='Bolus',
        color=color,
        marker='D',
        markerfacecolor='None',
        markersize=5,
        linewidth=0)
    ax2.tick_params(axis='y', labelcolor=color)

    # Show legend
    ax.legend(loc='upper left', prop={'size': 6})
    # ax2.legend(loc='upper right', prop={'size': 6})

    ############################################################################

    # Collect glucose data
    gut_compartment = df['gt'].values[:N]
    plasma_compartment = df['mt'].values[:N]

    # Plot Glucose compartments...
    ax = fig.add_subplot(413)
    ax.plot(x, gut_compartment, c='b', lw=pu.plot_lw(), label='Gut glucose')
    ax.plot(x,
            plasma_compartment,
            c='r',
            lw=pu.plot_lw(),
            label='Plasma glucose')

    # ax.set_xlabel('$t \, (minutes)$')
    ax.set_ylabel('$mg/L$')
    ax.set_axisbelow(True)
    ax.legend(loc='upper left', prop={'size': 6})

    ############################################################################
    # Glucose and Meal Detection

    # Get glucose data
    carb_est = df['carb_ests_'].values[:N]
    carb_mean = df['carb_mean_'].values[:N]
    carb_stds = df['carb_stds_'].values[:N]

    # Get meal predictions
    meal_preds = df['meal_preds_'].values[:N]
    meal_preds[meal_preds == 0] = np.nan

    # Plot
    ax = fig.add_subplot(414)
    ax.plot(x, carb_est, c='orange', lw=pu.plot_lw())
    # ax.plot(x, carb_mean, c='b', lw=pu.plot_lw(), linestyle='dashed')
    # ax.plot(x, carb_mean, c='b', lw=pu.plot_lw(), linestyle='dashed')
    ax.plot(x,
            meal_preds * carb_est,
            marker='*',
            c='magenta',
            linewidth=0,
            markersize=4,
            label='Predicted meal')

    ax.set_xlabel('$t \, (minutes)$')
    ax.set_ylabel('$Carbs, \, mg$')
    ax.set_axisbelow(True)

    plt.grid()
    plt.tight_layout()

    if args.save:
        pu.save_fig(fig, args.save)
    else:
        plt.show()
def main(args):

    # Collect data from results
    df = pd.read_pickle(path='results/fixed_parameters_std-2/4.pkl')

    # Set time range
    S = 540
    N = 710
    x = np.arange(N - S)

    # Prep figure
    pu.figure_setup()
    fig_size = pu.get_fig_size(10, 5)
    fig = plt.figure(figsize=(fig_size))

    ############################################################################
    # Collect CGM and meal data
    cgm_data = df['cgm_inputs_'].values[S:N]
    cgm_model = df['Gt'].values[S:N]
    meals = df['y_meals'].values[S:N]

    # Make all 0 target meal NaNs
    meals[meals == 0] = np.nan

    # Print meal idxs
    print('Meal idxs: ', np.where(meals == 1.))

    # Plot CGM and Meal data
    ax = fig.add_subplot(211)
    ax.set_xlim(0, N - S)
    ax.set_ylim(0, 250)

    ax.axhline(70, linewidth=1, color='#e3e1e1')
    ax.axhline(180, linewidth=1, color='#e3e1e1')
    # ax.axvspan(125, 170, color='#eeeeee')

    ax.plot(x,
            cgm_data,
            marker='o',
            c='g',
            linewidth=0,
            markersize=1,
            label='CGM')

    ax.plot(x,
            meals * 20,
            marker='o',
            c='purple',
            linewidth=0,
            markersize=4,
            markerfacecolor='None',
            label='Meal')
    ax.set_axisbelow(True)

    ax.legend(loc='upper left', prop={'size': 6})
    ax.set_ylabel('$mg/dl$')

    ############################################################################
    # Collect insulin data
    tissue_compartment = df['s1'].values[S:N]
    plasma_compartment = df['s2'].values[S:N]
    bolus_data = df['bolus_inputs_'].values[S:N]

    # Keep only non-zero bolus data - Set zeros to nan
    bolus_data[bolus_data == 0] = np.nan

    # Print bolus idxs
    print('Bolus idxs: ', np.where(bolus_data > 0.))

    # Plot Insulin Compartment Data
    ax = fig.add_subplot(212, sharex=ax)
    ax.set_xlim(0, N - S)

    ax.plot(x,
            tissue_compartment,
            c='b',
            lw=pu.plot_lw(),
            label='Subcutaneous tissue')
    ax.plot(x,
            plasma_compartment,
            c='r',
            lw=pu.plot_lw(),
            label='Blood plasma')

    ax.set_xlabel('$t \, (minutes)$')
    ax.set_ylabel('$Insulin, \, mg/L$')

    # plt.grid()
    ax.set_axisbelow(True)

    # Add Bolus Data on second y-axis
    ax2 = ax.twinx()
    color = 'tab:green'
    ax2.set_ylabel('Units', color=color)
    ax2.plot(
        x,
        bolus_data,  #lw=pu.plot_lw(),
        label='Bolus',
        color=color,
        marker='D',
        markerfacecolor='None',
        markersize=4,
        linewidth=0)
    ax2.tick_params(axis='y', labelcolor=color)
    ax2.set_axisbelow(True)

    # Show legend
    ax.legend(loc='upper left', prop={'size': 6})
    ax2.legend(loc='upper right', prop={'size': 6})

    plt.tight_layout()

    if args.save:
        pu.save_fig(fig, args.save)
    else:
        plt.show()
def main(args):

    # Collect data from results
    df = pd.read_pickle(path='results/fixed_parameters_std-2/4.pkl')

    # Set time range
    S = 540
    N = 695
    H = 30
    x = np.arange(N - S)

    # Prep figure
    pu.figure_setup()
    fig_size = pu.get_fig_size(10, 5)
    fig = plt.figure(figsize=(fig_size))

    ############################################################################

    # Collect CGM and meal data
    cgm_data = df['cgm_inputs_'].values[S:N]
    cgm_model = df['Gt'].values[S:N]
    meals = df['y_meals'].values[S:N]

    # Make all 0 target meal NaNs
    meals[meals == 0] = np.nan
    print('Logged Meal idxs:', np.where(meals > 0))

    # Get meal predictions
    meal_preds = df['meal_preds_'].values[S:N]
    meal_preds[meal_preds == 0] = np.nan

    # Plot CGM and Meal data
    ax = fig.add_subplot(211)
    ax.set_xlim(0, N - S)
    ax.set_ylim(0, 250)

    ax.axhline(70, linewidth=1, color='#ececec')
    ax.axhline(180, linewidth=1, color='#ececec')

    ax.plot(x,
            cgm_data,
            marker='o',
            c='g',
            linewidth=0,
            markersize=1,
            label='CGM')
    ax.plot(x,
            meals * 20,
            marker='o',
            c='purple',
            linewidth=0,
            markersize=4,
            markerfacecolor='None',
            label='Meal')
    ax.plot(x,
            meal_preds * 5,
            marker='^',
            c='magenta',
            linewidth=0,
            markersize=4,
            label='Predicted meal')

    ax.set_axisbelow(True)

    ax.legend(loc='upper left', prop={'size': 6})
    ax.set_ylabel('$mg/dl$')

    ############################################################################
    # Glucose and Meal Detection

    # Get glucose data
    carb_est = df['carb_ests_'].values[S:N]
    carb_mean = df['carb_mean_'].values[S:N]
    carb_stds = df['carb_stds_'].values[S:N]

    # Plot
    ax = fig.add_subplot(212, sharex=ax)
    ax.set_xlim(0, N - S)

    for it, m in enumerate(meal_preds):
        if m == 1:
            print('Meal prediction idx: ', it)
            ax.axvline(it, c='magenta')

    ax.plot(x, carb_est, c='orange', lw=pu.plot_lw(), label="$\hat{m}_t'$")
    ax.plot(x, carb_mean, c='b', lw=.8, label="$\\overline{\hat{m'}}_{0:t}$")
    ax.plot(x,
            carb_stds,
            c='b',
            lw=.8,
            label="$2 \cdot \sigma$",
            linestyle='-.')

    ax.legend(loc='upper left', prop={'size': 6})
    ax.set_xlabel('$t \, (minutes)$')
    ax.set_ylabel('$Carbs, \, mg$')
    ax.set_axisbelow(True)

    # plt.grid()
    plt.tight_layout()

    if args.save:
        pu.save_fig(fig, args.save)
    else:
        plt.show()
Example #15
0
def main(args):
    """Visualize basic CGM - This can be used as a template to add
    more coupled data."""

    # Load data
    F_NAME = 'data/minimal_tracking_data.csv'
    df = pd.read_csv(F_NAME)

    # Pick a user
    random.seed(42)
    usr_id = random.choice(df['user_id'].unique())
    df = df[df['user_id'] == usr_id]

    # Set dateTimetimeIndex
    df['date'] = df['date'].apply(lambda x: x[:19])
    df['date'] = pd.to_datetime(df['date'])
    df.set_index('date', inplace=True)

    # Pick a day
    date = random.choice(df.index.date)
    df = df[date.strftime('%Y-%m-%d')]

    # Original CGM
    original_x_axis = np.arange(0, 60 * 24, 5)
    original_cgm_data = df['quantity']

    # Increase resolution by interpolation
    new_x_axis = np.arange(0, 60 * 24, 1)
    new_cgm_vals = pchip_interpolate(original_x_axis, original_cgm_data,
                                     new_x_axis)

    smoothed_cgm = savgol_filter(new_cgm_vals,
                                 window_length=15,
                                 polyorder=1,
                                 mode='interp')

    # Remove overlap of indices
    # new_x_axis = new_x_axis[~original_x_axis]
    # new_cgm_vals = new_cgm_vals[~original_x_axis]

    # Prepare figure
    pu.figure_setup()
    fig_size = pu.get_fig_size(10, 5)
    fig = plt.figure(figsize=(fig_size))

    # Plot
    ax = fig.add_subplot(111)
    # ax.axhspan(70, 180, alpha=0.1, color='#ccced1')
    ax.set_ylim(125, 200)

    ax.plot(new_x_axis,
            smoothed_cgm,
            c='black',
            linewidth=1,
            linestyle='dashed',
            label='Smoothed data')
    ax.plot(new_x_axis,
            new_cgm_vals,
            marker='o',
            c='r',
            linewidth=0,
            markersize=1,
            label='Upsampled data')
    ax.plot(original_x_axis,
            original_cgm_data,
            marker='o',
            c='b',
            linewidth=0,
            markersize=1,
            label='Measured data')

    ax.set_xlabel('$t \, (minutes)$')
    ax.set_ylabel('$ mg/dl$')
    ax.legend(loc='upper left', prop={'size': 5})

    plt.xlim(0, 60 * 1 + 2)
    ax.set_axisbelow(True)

    plt.grid()
    plt.tight_layout()

    if args.save:
        pu.save_fig(fig, args.save)
    else:
        plt.show()
def main(args):
    """Plot multiple meals to illustrate the variance in meal responses."""

    # Load data
    F_NAME = 'data/minimal_tracking_data.csv'
    df = pd.read_csv(F_NAME)

    # Set window length of meal response
    frequency = 5
    w_len = (2 * 60) // frequency
    x = np.arange(w_len)

    # Pick a user
    random.seed(42)
    usr_id = random.choice(df['user_id'].unique())
    df = df[df['user_id'] == usr_id]
    df.reset_index(inplace=True)

    # Prep data - Select frames only just after a meal is logged
    meal_chunks = []
    meal_idxs = df.index[df['meal'] == 1].tolist()

    for meal_idx in meal_idxs:
        meal_chunks.append(df.loc[meal_idx:meal_idx + w_len -
                                  1]['quantity'].values)

    # Normalize to have every line start from 0
    for it, chunk in enumerate(meal_chunks):
        delta = chunk[0]
        meal_chunks[it] = [x - delta for x in chunk]

    # Increase resolution by interpolation
    x_axis = np.arange(0, w_len * frequency, frequency)
    new_x_axis = np.arange(w_len * frequency) + 1

    meal_chunks = [
        pchip_interpolate(x_axis, chunk, new_x_axis) for chunk in meal_chunks
    ]
    print('Numer of meals: ', len(meal_chunks))

    # Prepare figure
    pu.figure_setup()
    fig_size = pu.get_fig_size(10, 5)
    fig = plt.figure(figsize=(fig_size))

    # Plot
    ax = fig.add_subplot(111)
    for meal in meal_chunks:
        ax.plot(new_x_axis, meal, c='b', lw=.2, linestyle='dashed')
    ax.set_xlabel('$t \, (minutes)$')
    ax.set_ylabel('$\Delta mg/dl$')

    ax.set_axisbelow(True)

    plt.xlim(0, 120)
    plt.grid()
    plt.tight_layout()

    if args.save:
        pu.save_fig(fig, args.save)
    else:
        plt.show()
Example #17
0
            parsed = line_temp.split('\t')
            print(parsed)
            x.append(int(parsed[0]))
            y.append(float(parsed[3]))
        cnt += 1

    return x, y


if __name__ == '__main__':

    filenames = [
        'AdenoSquam', 'BladderBreastLungHe', 'BladderFourBiomarkers',
        'BladderFourScores', 'BreastFiveBiomarkers', 'BreastFourScores'
    ]
    pu.figure_setup()
    fig_size = pu.get_fig_size(10, 8)
    fig = plt.figure(figsize=fig_size)
    ax = fig.add_subplot(111)
    for filename in filenames:
        x, y = read_files(filename + '.txt')
        plt.plot(x, y, label=filename)

    ax.set_xlabel('Number of Steps')
    ax.set_ylabel('Accuracy')
    ax.set_axisbelow(True)
    ax.legend(loc='lower right')
    plt.grid()
    plt.tight_layout()
    pu.save_fig(fig, '../cnn_acc_steps.pdf', 'pdf')
    plt.show()
Example #18
0
def main(args):

    # Collect data from results
    df = pd.read_pickle(path='results/fixed_parameters_std-2/4.pkl')

    # Set time range
    S = 540
    N = 695
    H = 30
    x = np.arange(N - S)

    # Prep figure
    pu.figure_setup()
    fig_size = pu.get_fig_size(10, 8)
    fig = plt.figure(figsize=(fig_size))

    ############################################################################

    # Collect CGM and meal data
    cgm_data = df['cgm_inputs_'].values[S:N]
    cgm_model = df['Gt'].values[S:N]
    meals = df['y_meals'].values[S:N]

    # Set up prediction line
    pred_t = 124
    pred = df['cgm_preds_'][pred_t]
    x_pred = np.arange(pred_t, pred_t + len(pred))

    # Make all 0 target meal NaNs
    meals[meals == 0] = np.nan

    # Print meal idxs
    print('Meal idxs: ', np.where(meals == 1.))

    # Plot CGM and Meal data
    ax = fig.add_subplot(411)
    ax.set_xlim(0, N - S)
    ax.set_ylim(0, 250)

    ax.axhline(70, linewidth=1, color='#ececec')
    ax.axhline(180, linewidth=1, color='#ececec')
    ax.axvspan(pred_t, pred_t + H + 1, color='#f6f6f6')

    ax.plot(x,
            cgm_data,
            marker='o',
            c='g',
            linewidth=0,
            markersize=1,
            label='CGM')
    ax.plot(x_pred,
            pred,
            c='black',
            linewidth=1,
            linestyle='dashed',
            label='Modeled CGM')
    ax.plot(x,
            meals * 20,
            marker='o',
            c='purple',
            linewidth=0,
            markersize=4,
            markerfacecolor='None',
            label='Meal')
    plt.vlines(x=pred_t + H,
               ymin=pred[-1],
               ymax=cgm_data[pred_t + H - 1],
               color='r',
               linewidth=2)

    ax.set_axisbelow(True)

    ax.legend(loc='upper left', prop={'size': 6})
    ax.set_ylabel('$mg/dl$')

    ############################################################################

    # Collect insulin data
    tissue_compartment = df['s1'].values[S:N]
    plasma_compartment = df['s2'].values[S:N]
    bolus_data = df['bolus_inputs_'].values[S:N]

    # Keep only non-zero bolus data - Set zeros to nan
    bolus_data[bolus_data == 0] = np.nan

    # Print bolus idxs
    print('Bolus idxs: ', np.where(bolus_data > 0.))

    # Plot Insulin Compartment Data
    ax = fig.add_subplot(412, sharex=ax)
    ax.set_xlim(0, N - S)
    ax.axvspan(pred_t, pred_t + H + 1, color='#f6f6f6')

    ax.plot(x,
            tissue_compartment,
            c='b',
            lw=pu.plot_lw(),
            label='Subcutaneous tissue')
    ax.plot(x,
            plasma_compartment,
            c='r',
            lw=pu.plot_lw(),
            label='Blood plasma')

    ax.set_ylabel('$Insulin, \, mg/L$')

    # plt.grid()
    ax.set_axisbelow(True)

    # Add Bolus Data on second y-axis
    ax2 = ax.twinx()
    color = 'tab:green'
    ax2.set_ylabel('Units', color=color)
    ax2.plot(
        x,
        bolus_data,  #lw=pu.plot_lw(),
        label='Bolus',
        color=color,
        marker='D',
        markerfacecolor='None',
        markersize=4,
        linewidth=0)
    ax2.tick_params(axis='y', labelcolor=color)
    ax2.set_axisbelow(True)

    # Show legend
    ax.legend(loc='upper left', prop={'size': 6})
    ax2.legend(loc='upper right', prop={'size': 6})

    ############################################################################

    # Collect glucose data
    gut_compartment = df['gt'].values[S:N - H]
    plasma_compartment = df['mt'].values[S:N - H]
    xx = np.arange(N - S - H)

    # Collect "prediction" data
    gut_compartment_ff = df['gt'].values[N - H:N]
    plasma_compartment_ff = df['mt'].values[N - H:N]
    xx_ff = np.arange(N - S - H, N - S)

    # Plot Glucose compartments...
    ax = fig.add_subplot(413, sharex=ax)
    ax.set_xlim(0, N - S)
    ax.axvspan(pred_t, pred_t + H + 1, color='#f6f6f6')

    ax.plot(xx, gut_compartment, c='b', lw=pu.plot_lw(), label='Gut glucose')
    ax.plot(xx,
            plasma_compartment,
            c='r',
            lw=pu.plot_lw(),
            label='Plasma glucose')

    ax.plot(xx_ff,
            gut_compartment_ff,
            c='b',
            lw=pu.plot_lw(),
            linestyle='dashed')
    ax.plot(xx_ff,
            plasma_compartment_ff,
            c='r',
            lw=pu.plot_lw(),
            linestyle='dashed')

    ax.set_ylabel('$mg/L$')
    ax.set_axisbelow(True)
    ax.legend(loc='upper left', prop={'size': 6})

    ############################################################################
    # Glucose and Meal Detection

    # Get glucose data
    carb_est = df['carb_ests_'].values[S:N - H]
    carb_mean = df['carb_mean_'].values[S:N - H]
    carb_stds = df['carb_stds_'].values[S:N - H]
    xx_carbs = np.arange(N - S - H)

    # Get "future" glucose data
    carb_est_ff = df['carb_ests_'].values[N - H:N]
    xx_carbs_ff = np.arange(N - S - H, N - S)

    # Get meal predictions
    meal_preds = df['meal_preds_'].values[S:N - H]
    meal_preds[meal_preds == 0] = np.nan

    # Plot
    ax = fig.add_subplot(414, sharex=ax)
    ax.set_xlim(0, N - S)
    ax.axvspan(pred_t, pred_t + H + 1, color='#f6f6f6')

    ax.plot(xx_carbs,
            carb_est,
            c='orange',
            lw=pu.plot_lw(),
            label='Carbs est.')
    ax.plot(xx_carbs_ff,
            carb_est_ff,
            c='orange',
            lw=pu.plot_lw(),
            linestyle='dashed')

    # ax.plot(x, carb_mean, c='b', lw=0.5, label)
    # ax.plot(xx_carbs, meal_preds, marker='^', c='magenta', linewidth=0,
    #         markersize=3, label='Predicted meal')

    ax.legend(loc='upper left', prop={'size': 6})
    ax.set_xlabel('$t \, (minutes)$')
    ax.set_ylabel('$Carbs, \, mg$')
    ax.set_axisbelow(True)

    # plt.grid()
    plt.tight_layout()

    if args.save:
        pu.save_fig(fig, args.save)
    else:
        plt.show()