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