Module brevettiai.interfaces.vegalite_charts

Expand source code
import altair as alt
import pandas as pd
import numpy as np


def make_selector_chart(df, x_name, y_name, chart_text, selector, color="red", size=10, scale_type="linear"):
    chart_line = alt.Chart(df).mark_line(color='green').encode(
        x=alt.X(x_name, scale=alt.Scale(type=scale_type)),
        y=alt.Y(y_name, scale=alt.Scale(type=scale_type)))

    chart_text = alt.Chart(df).mark_text(align='left',baseline='middle', dx=7, fontSize=20).encode(
        x=alt.X(x_name, scale=alt.Scale(type=scale_type)),
        y=alt.Y(y_name, scale=alt.Scale(type=scale_type)),
        text=chart_text,
        color=alt.condition(selector, alt.value(color), 'security_threshold')).add_selection(selector)
    chart_layered = alt.layer(chart_line, chart_text)
    return chart_layered


def make_security_selection(devel_pred_output, classes):
    step = 1
    rng = np.arange(0.0, 100+step, step)

    security_charts = []

    for cl in classes:
        sec_level = '{}_security_level'.format(cl)
        select_security = alt.selection_single(on='mouseover', nearest=True, empty='none')
        scores_accept = devel_pred_output[devel_pred_output.category.apply(lambda x: cl in x)]["prob_" + cl].values
        scores_reject = devel_pred_output[devel_pred_output.category.apply(lambda x: cl not in x)]["prob_" + cl].values

        FRR = [0.0 if len(scores_accept)==0 else (scores_accept < thr/100).sum()/len(scores_accept ) for thr in rng]
        TRR = [0.0 if len(scores_reject)==0 else (scores_reject < thr/100).sum()/len(scores_reject) for thr in rng]

        ROC_df = pd.DataFrame({'FRR': FRR, 'TRR': TRR+1e-5*rng, sec_level: rng,
                               'security_threshold': ['security_level']*len(rng)})

        ROC_comb_alt = make_selector_chart(df=ROC_df, x_name='TRR', y_name='FRR', chart_text=sec_level,
                                           selector=select_security)\
            .properties(title=sec_level)\
            .configure_title(fontSize=24, anchor='start', color='green').interactive().to_json()

        security_charts.append(ROC_comb_alt)
    return security_charts


def dataset_summary(samples):
    if isinstance(samples, pd.DataFrame):
        samples = samples.copy()
    else:
        samples = pd.DataFrame(list(samples) if isinstance(samples, np.ndarray) else samples)

    samples["category"] = samples["category"].apply(lambda x: x if isinstance(x, str) else "/".join(x))

    samples = samples.groupby(["dataset", "category"]) \
        .size().reset_index(name="samples")

    chart = alt.Chart(samples) \
        .mark_bar() \
        .encode(x='samples',
                y='dataset',
                color='category',
                order=alt.Order(
                    'category',
                    sort='ascending'
                ),
                tooltip = ['samples', 'dataset', 'category']) \
        .configure_axis(labelLimit=30)

    return chart.to_json()

Functions

def dataset_summary(samples)
Expand source code
def dataset_summary(samples):
    if isinstance(samples, pd.DataFrame):
        samples = samples.copy()
    else:
        samples = pd.DataFrame(list(samples) if isinstance(samples, np.ndarray) else samples)

    samples["category"] = samples["category"].apply(lambda x: x if isinstance(x, str) else "/".join(x))

    samples = samples.groupby(["dataset", "category"]) \
        .size().reset_index(name="samples")

    chart = alt.Chart(samples) \
        .mark_bar() \
        .encode(x='samples',
                y='dataset',
                color='category',
                order=alt.Order(
                    'category',
                    sort='ascending'
                ),
                tooltip = ['samples', 'dataset', 'category']) \
        .configure_axis(labelLimit=30)

    return chart.to_json()
def make_security_selection(devel_pred_output, classes)
Expand source code
def make_security_selection(devel_pred_output, classes):
    step = 1
    rng = np.arange(0.0, 100+step, step)

    security_charts = []

    for cl in classes:
        sec_level = '{}_security_level'.format(cl)
        select_security = alt.selection_single(on='mouseover', nearest=True, empty='none')
        scores_accept = devel_pred_output[devel_pred_output.category.apply(lambda x: cl in x)]["prob_" + cl].values
        scores_reject = devel_pred_output[devel_pred_output.category.apply(lambda x: cl not in x)]["prob_" + cl].values

        FRR = [0.0 if len(scores_accept)==0 else (scores_accept < thr/100).sum()/len(scores_accept ) for thr in rng]
        TRR = [0.0 if len(scores_reject)==0 else (scores_reject < thr/100).sum()/len(scores_reject) for thr in rng]

        ROC_df = pd.DataFrame({'FRR': FRR, 'TRR': TRR+1e-5*rng, sec_level: rng,
                               'security_threshold': ['security_level']*len(rng)})

        ROC_comb_alt = make_selector_chart(df=ROC_df, x_name='TRR', y_name='FRR', chart_text=sec_level,
                                           selector=select_security)\
            .properties(title=sec_level)\
            .configure_title(fontSize=24, anchor='start', color='green').interactive().to_json()

        security_charts.append(ROC_comb_alt)
    return security_charts
def make_selector_chart(df, x_name, y_name, chart_text, selector, color='red', size=10, scale_type='linear')
Expand source code
def make_selector_chart(df, x_name, y_name, chart_text, selector, color="red", size=10, scale_type="linear"):
    chart_line = alt.Chart(df).mark_line(color='green').encode(
        x=alt.X(x_name, scale=alt.Scale(type=scale_type)),
        y=alt.Y(y_name, scale=alt.Scale(type=scale_type)))

    chart_text = alt.Chart(df).mark_text(align='left',baseline='middle', dx=7, fontSize=20).encode(
        x=alt.X(x_name, scale=alt.Scale(type=scale_type)),
        y=alt.Y(y_name, scale=alt.Scale(type=scale_type)),
        text=chart_text,
        color=alt.condition(selector, alt.value(color), 'security_threshold')).add_selection(selector)
    chart_layered = alt.layer(chart_line, chart_text)
    return chart_layered