Esempio n. 1
0
    def assemble_metric_comparison_table(self, daily_metrics, model_dropdown,
                                         time_period_slider):
        model = model_dropdown.value
        date_start, date_end = time_period_slider.value_as_datetime
        target_df = daily_metrics[model][date_start:date_end]
        metric_data = self._calculate_metrics(target_df)

        source = ColumnDataSource(data=metric_data)

        columns = [
            TableColumn(field="precision", title="Precision"),
            TableColumn(field="recall", title="Recall"),
            TableColumn(field="f1_score", title="F1 Score"),
            TableColumn(field="sample_size", title="Sample Size"),
            TableColumn(field="threshold", title="Threshold")
        ]

        data_table = DataTable(source=source,
                               columns=columns,
                               width=600,
                               height=280)
        title_div = Div()
        title_div.text = "Precision, Recall, F1 Score, Sample Size and Threshold for <strong>{}</strong>".format(
            model)

        def update(attr, old, new):
            model = model_dropdown.value
            date_start, date_end = time_period_slider.value_as_datetime
            title_div.text = "Precision, Recall, F1 Score, Sample Size and Threshold for <strong>{}</strong>".format(
                model)
            model_metrics = daily_metrics[model][date_start:date_end]
            source.data = ColumnDataSource.from_df(
                self._calculate_metrics(model_metrics))

        model_dropdown.on_change('value', update)
        time_period_slider.on_change('value', update)

        return row(column(title_div, data_table))
Esempio n. 2
0
def create_2d_molecule(data, title="Generated Molecules", position=-1, width=850, height=590,
                       css_classes=["img_outside"]):
    img_fig = Div(text="", width=width, height=height)
    img_fig.css_classes = css_classes
    if position < 0:
        position = len(data) - 1
    smiles, score = extract_compounds(data, position)
    mols = []
    scores = []
    for i, smile in enumerate(smiles):
        mol = Chem.MolFromSmiles(smile)
        if mol:
            mols.append(mol)
            scores.append(str(score[i]))
            if len(mols) >= 6:
                break
    if len(mols) > 0:
        img = Draw.MolsToGridImage(mols, molsPerRow=3, legends=scores, subImgSize=(250, 250), useSVG=True)
        img = img.replace("FFFFFF", "EDEDED")
    else:
        img = ""
    img_fig.text = '<h2>' + title + ' Step: ' + str(position) + '</h2>' + '<div class="img_inside">' + img + '</div>'
    return img_fig
Esempio n. 3
0
        f_update()
    def preview():
        read_values()
        c_update()
        f_update()

    c_controls = [ov_min_text, ov_min1_text]
    for cc in c_controls:
        cc.on_change("value", lambda attr, old, new: change_values())
    preview_clust_button.on_click(preview)
    reset_button.on_click(reset_values)

    ### Page layout
    top_title = Div( text="<h3></h3>", name='top_title')
    if trimmed:
        top_title.text = "<h3>Caution: some regions had >50 hits, and have been truncated.</h3>"
    cl_title = Div( text="<h3>Clustering parameters:</h3>" )
    empty_vert = Div( text="<br><br>" )
    goto_summary_button = Div(text='''<form name="Goto_summary" action="/'''+orf+'''" method="get">
    <input type="hidden" name="prob" id="prob" value="'''+str(prob_def)+'''"/>
    <input type="hidden" name="ovm" id="ovm" value="'''+str(om_def)+'''" />
    <input type="hidden" name="ovm1" id="ovm1" value="'''+str(om_def1)+'''" />
    <button type="submit">Go to summary view</button>
    </form>''', name='goto_summary_button')
    page = layout( [widgetbox(top_title)],
                   [widgetbox(threshold_text),
                    widgetbox(cl_title, ov_min_text, ov_min1_text),
                    widgetbox(empty_vert, preview_clust_button, reset_button),
                    widgetbox(goto_summary_button)],
                   [p],
                   sizing_mode='scale_width' )
Esempio n. 4
0
year_input.on_change('value', season_handler)

# arrange layout
tab1 = Panel(child=plot1_wrap, title='Scores')
tab2 = Panel(child=plot2_wrap, title='Expected Wins')
tab3 = Panel(child=table_wrap, title='Summary')

figures = Tabs(tabs=[tab1, tab2, tab3], width=500)

compare_widgets = column(team1_dd, team2_dd, comp_button)

wid_spac1 = Spacer(height=30)
wid_spac2 = Spacer(height=30)
wid_spac3 = Spacer(height=30)

lg_id_message.text = '<b><p style="color: green;">League accessed successfully.</p></b>'

all_widgets = column(lg_id_input, lg_id_message, wid_spac1, compare_widgets,
                     wid_spac2, week_slider, wid_spac3, year_input)

page_title = Div(
    text=
    """<strong><h1 style="font-size: 2.5em;">ESPN Fantasy Football League Explorer</h1></strong>""",
    width=700,
    height=50)

main_area = row(all_widgets, figures)

layout = column(page_title, main_area)

curdoc().add_root(layout)
Esempio n. 5
0
def selection_tab(rtdap_data):
    def make_base_map(tile_map=CARTODBPOSITRON_RETINA,
                      map_width=800,
                      map_height=500,
                      xaxis=None,
                      yaxis=None,
                      xrange=(-9990000, -9619944),
                      yrange=(5011119, 5310000),
                      plot_tools="pan,wheel_zoom,reset,save"):

        p = figure(tools=plot_tools,
                   width=map_width,
                   height=map_height,
                   x_axis_location=xaxis,
                   y_axis_location=yaxis,
                   x_range=xrange,
                   y_range=yrange,
                   toolbar_location="above")

        p.grid.grid_line_color = None
        #p.background_fill_color = None
        p.background_fill_alpha = 0.5
        p.border_fill_color = None

        p.add_tile(tile_map)

        return p

    def rtdap_avg(df, corr, value):
        """
        returns mean for specificed attribute by highway corridor

        Keyword arguments:
        df -- dataframe to filter by corridor and calculate mean
        corr -- corridor name
        value -- dataframe column name to calculate mean
        """

        df_corr = df.loc[df['corridor'] == corr]
        mean_value = df_corr[value].mean()

        return mean_value

    def filter_selection(df, corr, date_s, date_e, weekday, tod):
        """
        returns subset of data based on corridor and time selections

        Keyword arguments:
        df -- dataframe to filter by corridor and time selections
        corr -- corridor name
        date_s -- start date
        date_e -- end date
        weekday -- day of week (Monday - Friday)
        tod -- time of day (8 tod time periods)
        """

        tod_start = tod[0]
        tod_end = tod[1]
        date_start = datetime.strptime(date_s, '%Y-%m-%d')
        date_end = datetime.strptime(date_e, '%Y-%m-%d')

        if weekday == 'All':
            weekday = df['dow'].drop_duplicates().values.tolist()
        else:
            weekday = [weekday]

        select_df = df.loc[(df['corridor'] == corr) &\
                           (df['date']>=date_start) & (df['date']<=date_end) &\
                           (df['dow'].isin(weekday)) &\
                           (df['hour']>=tod_start) & (df['hour']<=tod_end)]

        return select_df

    def summarize_metrics(df, corr, group, avg, select, label, missing):
        """
        return a summary of frequency, mean, mean difference, and count of missing values

        Keyword arguments:
        df -- dataframe to summarize
        corr -- corridor name
        group -- dataframe column name used to group and summarize data
        avg -- mean value derived from rtdap_avg(), used calculate mean diff
        select -- dateframe column name to calculate mean
        label -- name for values being calculate (ie Speed, Volumne, Time etc)
        missing -- dataframe column name of missing values
        """

        df['freq'] = 1
        df_groupby = df.groupby(group).agg({
            'freq': 'count',
            select: np.mean,
            missing: sum
        }).reset_index()

        df_groupby.loc[:,
                       'Mean Diff'] = (avg -
                                       df_groupby[select]) / df_groupby[select]
        df_groupby.loc[:, group] = label
        df_groupby.columns = [
            corr, 'Frequency', 'Mean', 'Missing Values', 'Mean Diff'
        ]
        df_groupby = df_groupby.set_index(corr)

        return df_groupby[['Frequency', 'Mean', 'Mean Diff', 'Missing Values']]

    def vbar_chart(full_df, df):
        """
        returns bokeh horizontal barchart representing mean % diff

        Keyword arguments:
        df -- dataframe to derive content of barchart
        col -- column name for values to diplay in graph
        """
        df_avg = full_df.groupby('FieldDeviceID').agg({'avgSpeed': np.mean})

        df_select = df.groupby('FieldDeviceID').agg({'avgSpeed': np.mean})
        df_select.columns = ['speed']

        diff = df_avg.merge(df_select,
                            how='left',
                            left_index=True,
                            right_index=True).fillna(0)
        diff_no_zero = diff.loc[(diff['avgSpeed'] > 0) & (diff['speed'] > 0)]
        diff_no_zero['speed_difference'] = diff_no_zero[
            'avgSpeed'] - diff_no_zero['speed']
        diff_no_zero = diff_no_zero.reset_index()

        diff_no_zero['bins'] = pd.cut(diff_no_zero['speed_difference'],
                                      bins=list(range(-20, 22)),
                                      labels=list(range(-20, 22))[:-1])

        source = ColumnDataSource(
            data=diff_no_zero.groupby('bins').agg({
                'speed_difference': 'count'
            }).reset_index())

        p = figure(plot_width=1000,
                   plot_height=150,
                   title="Speed Difference Distribution",
                   toolbar_location="above")

        p.vbar(x='bins',
               top='speed_difference',
               width=1,
               color='navy',
               alpha=0.5,
               source=source)

        #p.yaxis.visible = False
        #p.xaxis.formatter = NumeralTickFormatter(format="0.f%")
        p.xgrid.visible = False
        p.ygrid.visible = False
        #p.background_fill_color = None
        p.background_fill_alpha = 0.5
        p.border_fill_color = None

        return p

    def hbar_chart(df, col):
        """
        returns bokeh horizontal barchart representing mean % diff

        Keyword arguments:
        df -- dataframe to derive content of barchart
        col -- column name for values to diplay in graph
        """
        df_src = df[[col]]
        df_src['type'] = df_src.index
        df_src['order'] = 0

        df_src['order'] = np.where(df_src.index == 'Speed', 2, df_src['order'])
        df_src['order'] = np.where(df_src.index == 'Occupancy', 1,
                                   df_src['order'])
        df_src['order'] = np.where(df_src.index == 'Volume', 0,
                                   df_src['order'])
        df_src['color'] = '#C0C0C0'
        df_src['color'] = np.where(df_src['Mean Diff'] < -.05, '#FF0000',
                                   df_src['color'])
        df_src['color'] = np.where(df_src['Mean Diff'] > .05, '#008000',
                                   df_src['color'])
        source = ColumnDataSource(data=df_src.sort_values(by='order'))

        hover = HoverTool(tooltips=[
            ("Corridor Attribute", "@type"),
            ("% Difference", "@{%s}" % (col) + '{%0.2f}'),
        ])
        tools = ['reset', 'save', hover]
        p = figure(plot_width=400,
                   plot_height=175,
                   toolbar_location="above",
                   title='Mean Difference',
                   tools=tools)

        p.hbar(y='order',
               height=0.5,
               left=0,
               fill_color='color',
               line_color=None,
               right=col,
               color="navy",
               source=source)

        p.yaxis.visible = False
        p.xaxis.formatter = NumeralTickFormatter(format="0.f%")
        p.xgrid.visible = False
        p.ygrid.visible = False
        #p.background_fill_color = None
        p.background_fill_alpha = 0.5
        p.border_fill_color = None

        return source, p

    def scatter_plot(title_text):
        rng = np.random.RandomState(0)
        x = rng.randn(100)
        y = rng.randn(100)

        source = ColumnDataSource(data=dict(
            x=rng.randn(100),
            y=rng.randn(100),
            desc=['A', 'b', 'C', 'd', 'E'] * 20,
        ))

        hover = HoverTool(tooltips=[
            ("index", "$index"),
            ("(x,y)", "($x, $y)"),
            ("desc", "@desc"),
        ])

        p = figure(plot_width=300,
                   plot_height=250,
                   tools=[hover, 'box_select'],
                   toolbar_location="above",
                   title=title_text)

        p.circle('x', 'y', size=5, source=source)
        #p.background_fill_color = None
        p.background_fill_alpha = 0.5
        p.border_fill_color = None

        return p

    """
    return selection tab contents

    Keyword arguments:
    rtdap_data - dataframe containing rtdap vds detail data
    """

    #-----------------------------------------------------------------------------------------------------------------
    #submit_selection -- Data Selection Update Function

    def submit_selection():
        """
        python callback to update table and visual content based on
        user selections in the data review panel
        """

        avgs_speed = rtdap_avg(rtdap_data, corridor_select.value, 'avgSpeed')
        avgs_occ = rtdap_avg(rtdap_data, corridor_select.value, 'avgOccupancy')
        avgs_volume = rtdap_avg(rtdap_data, corridor_select.value, 'avgVolume')

        filtered_data = filter_selection(rtdap_data, corridor_select.value,
                                         str(date_picker_start.value),
                                         str(date_picker_end.value),
                                         day_of_week.value, time_of_day.value)

        speed = summarize_metrics(filtered_data, corridor_select.value,
                                  'corridor', avgs_speed, 'avgSpeed', 'Speed',
                                  'missing_speed')
        occ = summarize_metrics(filtered_data, corridor_select.value,
                                'corridor', avgs_occ, 'avgOccupancy',
                                'Occupancy', 'missing_occ')
        volume = summarize_metrics(filtered_data, corridor_select.value,
                                   'corridor', avgs_volume, 'avgVolume',
                                   'Volume', 'missing_vol')

        summary_df = speed.append(occ)
        summary_df = summary_df.append(volume)

        summary_title.text = "<h1>" + corridor_select.value + " Summary</h1>"

        summary_df_tbl = summary_df.copy()
        summary_df_tbl['Mean Diff'] = summary_df_tbl['Mean Diff'] * 100
        summary_df_tbl = summary_df_tbl.reset_index()
        summary_table.text = str(
            summary_df_tbl.fillna(0).to_html(
                index=False,
                formatters=[
                    str, '{:20,}'.format, '{:20,.1f}'.format,
                    '{:20,.1f}%'.format, '{:20,}'.format
                ],
                classes=["w3-table", "w3-hoverable", "w3-small"]))
        if len(summary_df) > 0:
            new_df = summary_df.fillna(0)
            bar_viz_new = hbar_chart(new_df, 'Mean Diff')[0]
            bar_viz_src.data.update(bar_viz_new.data)

    #-----------------------------------------------------------------------------------------------------------------
    #Data Review Panel

    panel_title = Div(
        text="Data Review",
        css_classes=["panel-heading", "text-center", "w3-text-white"])
    panel_text = Div(
        text=
        """Lorem Ipsum is simply dummy text of the printing and typesetting industry.
           Lorem Ipsum has been the industry's standard dummy text ever since the 1500s,
           when an unknown printer took a galley of type and scrambled it to make a type
           specimen book.""",
        css_classes=["panel-content", "w3-text-white"])

    #Panel Buttons
    corridor_select = Select(
        options=rtdap_data['corridor'].drop_duplicates().values.tolist(),
        title='Corridor:',
        height=60,
        value='Dan Ryan Express Lane',
        css_classes=["panel-content"])

    date_picker_start = DatePicker(min_date=date(2015, 1, 1),
                                   max_date=date(2018, 12, 31),
                                   css_classes=["panel-content"],
                                   title="Start Date:",
                                   height=60,
                                   value=date(2015, 12, 31))

    date_picker_end = DatePicker(min_date=date(2015, 1, 1),
                                 max_date=date(2018, 12, 31),
                                 css_classes=["panel-content"],
                                 title="End Date:",
                                 height=60,
                                 value=date(2017, 12, 31))

    time_of_day = RangeSlider(start=1,
                              end=8,
                              step=1,
                              value=(1, 2),
                              title="Time of Day:",
                              bar_color="black",
                              css_classes=["panel-content"])

    tod_description = Div(
        text="""Time of Day Categories:<br>
                          <ol>
                          <li>8pm-6am</li>
                          <li>6pm-7am</li>
                          <li>7am-8am</li>
                          <li>9am-10am</li>
                          <li>10am-2pm</li>
                          <li>2pm-4pm</li>
                          <li>4pm-6pm</li>
                          <li>6pm-8pm</li>
                          </ol>""",
        css_classes=["panel-content", "caption", "w3-text-white"])

    day_of_week = Select(options=['All'] +
                         rtdap_data['dow'].drop_duplicates().values.tolist(),
                         title="Day of Week:",
                         css_classes=["panel-content"],
                         height=60,
                         value="All")

    select_data = Button(label="Select Subset",
                         css_classes=["panel-content"],
                         height=60)

    select_data.on_click(submit_selection)
    #-----------------------------------------------------------------------------------------------------------------

    #-----------------------------------------------------------------------------------------------------------------
    #Create initial content
    avgs_speed = rtdap_avg(rtdap_data, corridor_select.value, 'avgSpeed')
    avgs_occ = rtdap_avg(rtdap_data, corridor_select.value, 'avgOccupancy')
    avgs_volume = rtdap_avg(rtdap_data, corridor_select.value, 'avgVolume')

    filtered_data = filter_selection(rtdap_data, corridor_select.value,
                                     str(date_picker_start.value),
                                     str(date_picker_end.value),
                                     day_of_week.value, time_of_day.value)

    speed = summarize_metrics(filtered_data, corridor_select.value, 'corridor',
                              avgs_speed, 'avgSpeed', 'Speed', 'missing_speed')
    occ = summarize_metrics(filtered_data, corridor_select.value, 'corridor',
                            avgs_occ, 'avgOccupancy', 'Occupancy',
                            'missing_occ')
    volume = summarize_metrics(filtered_data, corridor_select.value,
                               'corridor', avgs_volume, 'avgVolume', 'Volume',
                               'missing_vol')

    summary_df = speed.append(occ)
    summary_df = summary_df.append(volume)
    summary_df_tbl = summary_df.copy()
    summary_df_tbl['Mean Diff'] = summary_df_tbl['Mean Diff'] * 100
    summary_df_tbl = summary_df_tbl.reset_index()

    summary_title = Div(text="<h1>" + corridor_select.value + " Summary</h1>",
                        width=2000,
                        css_classes=["w3-panel", "w3-white"])
    summary_table = Div(text="", width=550, height=150)

    summary_table.text = str(
        summary_df_tbl.fillna(0).to_html(
            index=False,
            formatters=[
                str, '{:20,}'.format, '{:20,.1f}'.format, '{:20,.1f}%'.format,
                '{:20,}'.format
            ],
            classes=["w3-table", "w3-hoverable", "w3-small"]))

    line = Div(text="<hr>", css_classes=["w3-container"], width=1000)
    #-----------------------------------------------------------------------------------------------------------------

    #-----------------------------------------------------------------------------------------------------------------
    #Create initial graphics
    '''#horizontal bar chart
    p = figure(plot_width=300, plot_height=100)
    p.hbar(y=[1, 2, 3], height=0.5, left=0,
           right=[1.2, 2.5, 3.7], color="navy")
    p.yaxis.visible = False
    p.xaxis.formatter = NumeralTickFormatter(format="0.0f%")'''

    bar_viz = hbar_chart(summary_df.fillna(0), 'Mean Diff')
    bar_viz_src = bar_viz[0]
    bar_viz_chart = bar_viz[1]

    volume_scatter = scatter_plot('Volumes')
    time_scatter = scatter_plot('Time')

    corr_df = rtdap_data.loc[rtdap_data['corridor'] == corridor_select.value]
    speed_diff_vbar = (vbar_chart(corr_df, filtered_data))
    occ_diff_vbar = (vbar_chart(corr_df, filtered_data))
    volume_diff_vbar = (vbar_chart(corr_df, filtered_data))

    base_map = make_base_map(map_width=450,
                             map_height=960,
                             xaxis=None,
                             yaxis=None,
                             xrange=(-9990000, -9619944),
                             yrange=(5011119, 5310000),
                             plot_tools="pan,wheel_zoom,reset,save")

    select_content = row(
        #PANEL
        column(panel_title,
               panel_text,
               corridor_select,
               date_picker_start,
               date_picker_end,
               day_of_week,
               time_of_day,
               tod_description,
               select_data,
               height=1000,
               css_classes=["w3-sidebar", "w3-bar-block", "w3-darkgrey"]),
        column(css_classes=["w3-col"], width=275),
        #CONTENT
        column(summary_title,
               row(
                   Spacer(width=20),
                   column(
                       Spacer(height=10),
                       row(summary_table,
                           Spacer(width=50),
                           bar_viz_chart,
                           css_classes=["w3-panel", "w3-white", "w3-card-4"]),
                       Spacer(height=10),
                       row(volume_scatter,
                           Spacer(width=10),
                           time_scatter,
                           css_classes=["w3-panel", "w3-white", "w3-card-4"],
                           width=650),
                       Spacer(height=10),
                       row(column(speed_diff_vbar, occ_diff_vbar,
                                  volume_diff_vbar),
                           css_classes=["w3-panel", "w3-white", "w3-card-4"],
                           width=1050),
                   ),
                   row(
                       Spacer(width=20),
                       column(
                           Spacer(height=10),
                           column(base_map,
                                  css_classes=[
                                      "w3-panel", "w3-white", "w3-card-4"
                                  ],
                                  width=500)))),
               css_classes=["w3-container", "w3-row-padding"]),
        css_classes=["w3-container", "w3-light-grey"],
        width=2000,
        height=1200)

    return select_content
Esempio n. 6
0
    import pandas as pd
    tsCache = qqqPath+'/qqqTs.pkl'
    indxCache = qqqPath+'/qqqIndx.pkl'
    if os.path.isfile(tsCache) and os.path.isfile(indxCache):
        ts = pd.read_pickle(tsCache)
        indx = pd.read_pickle(indxCache)
    else:
        ts,indx=qqq_ret(getRetDF())
        ts.to_pickle(tsCache)
        indx.to_pickle(indxCache)
    if not ts.empty and not indx.empty:
      try:
        lineSrc = ColumnDataSource(data={'t':ts,'i':indx})
        retPlot.line(x='t',y='i',line_color='tan',source=lineSrc)
      except Exception as e:
        errBox.text = 'ERROR: '+str(e)
        if log.DEBUG>=log.getLogger().getEffectiveLevel():
            traceback.print_exc()
    else:
        errBox.text = 'ERROR: QQQ timeseries is emtpy'
except Exception as e:
    errBox.text = 'ERROR: '+str(e)
    if log.DEBUG>=log.getLogger().getEffectiveLevel():
        traceback.print_exc()

# assign actions
submit1.on_click(searchNews1)
submit2.on_click(searchNews2)
selBox1.on_change('value', populateQuery1)
selBox2.on_change('value', populateQuery2)
assemble_page()
Esempio n. 7
0
notificationDiv = Div(text="", width=800)

gateways = []
if redisconn.get("gateways"):
    gateways = json.loads(redisconn.get("gateways"))
else:
    try:
        cursor = db.gateways.find( {}, {"id":1, "name":1} )
        gateways = []
        gateways.append((None, "--- Choose a Gateway ---"))
        for d in cursor:
            gateways.append((d["id"], d["name"]))
        redisconn.set("gateways", json.dumps(gateways))
    except errors.ServerSelectionTimeoutError as e:
        print ("MongoDB Server timed out: %s" % e)
        notificationDiv.text = "MongoDB Server timed out: %s" % e
        sys.exit(-1)

gatewayControl = Select( title="Choose a Gateway", options=gateways)
deviceControl = Select( title="Choose a Device")
indicatorControl = Select( title="Choose an indicator")
submitButton = Button(label="Submit", button_type="primary")
timemachine = Slider(title="How many minutes back would you like to travel", start=1, end=30, value=1, step=1,
                     callback_policy="mouseup")
controls = [gatewayControl, deviceControl, indicatorControl, timemachine, submitButton, notificationDiv]

doc = curdoc()
source = ColumnDataSource(data=dict(last_mod_date=[None], date=[None], v=[None]))
# source = ColumnDataSource(data=dict(last_mod_date=[None], date=[None], v=[None]))

# hover = HoverTool(tooltips=[
Esempio n. 8
0
def bokeh_plot(import_df):
    import pandas as pd
    import numpy as np
    from bokeh.plotting import figure, show
    from bokeh.layouts import layout, widgetbox, row, column, gridplot
    from bokeh.models import ColumnDataSource, HoverTool, BoxZoomTool, ResetTool, PanTool, CustomJS, PrintfTickFormatter, WheelZoomTool, SaveTool, LassoSelectTool, NumeralTickFormatter
    from bokeh.models.widgets import Slider, Select, TextInput, Div, Tabs, Panel, DataTable, DateFormatter, TableColumn, PreText, NumberFormatter, RangeSlider
    from bokeh.io import curdoc
    from functools import lru_cache
    from bokeh.transform import dodge
    from os.path import dirname, join
    from bokeh.core.properties import value

    #load plotting data here
    @lru_cache()
    def load_data():
        df = import_df
        df.dropna(how='all', axis=0)
        #Northest=['3229','3277','3276','3230','3259','All_Stores_NE']
        df.location_reference_id = df.location_reference_id.astype(str)
        #df['region'] = ['Northeast' if x in Northest else 'Midwest' for x in df['location_reference_id']]
        df['date'] = pd.to_datetime(df['date'])
        df[[
            'BOH_gt_Shelf_Capacity', 'OTL_gt_Shelf_Capacity',
            'Ideal_BOH_gt_Shelf_Capacity', 'BOH_lt_Ideal', 'BOH_eq_Ideal',
            'BOH_gt_Ideal', 'Demand_Fulfilled', 'Fill_Rate', 'Backroom_OH',
            'Total_OH', 'Prop_OH_in_Backroom', 'Never_Q98_gt_POG',
            'Never_Ideal_BOH_gt_POG', 'Sometimes_OTL_Casepack_1_gt_POG',
            'Always_OTL_Casepack_1_le_POG', 'Non_POG'
        ]] = df[[
            'BOH > Shelf Capacity', 'OTL > Shelf Capacity',
            'Ideal BOH > Shelf Capacity', 'BOH < Ideal', 'BOH = Ideal',
            'BOH > Ideal', 'Demand Fulfilled', 'Fill Rate', 'Backroom_OH',
            'Total OH', 'Prop OH in Backroom', 'Never: Q98 > POG',
            'Never: Ideal BOH > POG', 'Sometimes: OTL+Casepack-1 > POG',
            'Always: OTL+Casepack-1 <= POG', 'Non-POG'
        ]]
        df['date_bar'] = df['date']
        df['date_bar'] = df['date_bar'].astype(str)
        return df

    #Filter data source for "All" stores OR data agrregation on DC level
    df_agg = load_data().groupby(['location_reference_id'],
                                 as_index=False).sum()
    source1 = ColumnDataSource(data=df_agg)
    sdate = min(load_data()['date'])
    edate = max(load_data()['date'])
    nodes = len(list(load_data().location_reference_id.unique()))
    days = len(list(load_data().date.unique()))
    policy = "Prod"

    #list of dates for vbar charts
    x_range_list = list(load_data().date_bar.unique())
    #direct access to number of location_reference_idand region
    all_locations1 = list(load_data().location_reference_id.unique())
    #agg_value=['All']
    #all location_reference_idfrom csv file along with an option for agg data "All"
    #all_locations=all_locations1+agg_value
    #all_regions = ['Northeast', 'Midwest']
    all_regions = list(load_data().region.unique())

    desc = Div(text="All locations", width=230)
    pre = Div(text="_", width=230)
    location = Select(title="Location",
                      options=all_locations1,
                      value="All_Stores_NE")
    region = Select(title="Region", options=all_regions, value="NE")

    text_input = TextInput(value="default", title="Search Location:")
    #full data set from load_data(df=df_import)
    source = ColumnDataSource(data=load_data())
    original_source = ColumnDataSource(data=load_data())

    #plotting starts........... here are total 8 graphs for each Metric.

    #Back room on hand
    hover = HoverTool(
        tooltips=[("Location", "@location_reference_id"), (
            "Date", "@date_bar"), ("Backroom_OH", "@Backroom_OH{0,0.00}")])
    TOOLS = [
        hover,
        BoxZoomTool(),
        LassoSelectTool(),
        WheelZoomTool(),
        PanTool(),
        ResetTool(),
        SaveTool()
    ]
    p = figure(x_range=x_range_list,
               plot_width=1000,
               plot_height=525,
               title="Backroom On hand by store",
               tools=TOOLS,
               toolbar_location='above',
               x_axis_label="Date",
               y_axis_label="Backroom OH")
    p.background_fill_color = "#e6e9ed"
    p.background_fill_alpha = 0.5
    p.vbar(x=dodge('date_bar', -0.25, range=p.x_range),
           top='Backroom_OH',
           hover_alpha=0.5,
           hover_line_color='black',
           width=0.8,
           source=source,
           color="#718dbf")
    p.xaxis.major_label_orientation = 1
    p.legend.border_line_width = 3
    p.legend.border_line_color = None
    p.legend.border_line_alpha = 0.5
    p.title.text_color = "olive"

    #inbound outbound
    hover_m = HoverTool(
        tooltips=[("Location", "@location_reference_id"), (
            "Date", "@date_bar"), (
                "Inbound",
                "@Inbound{0,0.00}"), ("Outbound", "@Outbound{0,0.00}")])
    TOOLS_m = [
        hover_m,
        BoxZoomTool(),
        LassoSelectTool(),
        WheelZoomTool(),
        PanTool(),
        ResetTool(),
        SaveTool()
    ]
    m = figure(plot_height=525,
               plot_width=1000,
               x_range=x_range_list,
               title="Inbound/Outbound by store",
               tools=TOOLS_m,
               toolbar_location='above',
               x_axis_label="Date",
               y_axis_label="Units")
    m.background_fill_color = "#e6e9ed"
    m.background_fill_alpha = 0.5
    m.vbar(x=dodge('date_bar', -0.25, range=m.x_range),
           top='Inbound',
           hover_alpha=0.5,
           hover_line_color='black',
           width=0.4,
           source=source,
           color="#718dbf",
           legend=value("Inbound"))
    m.vbar(x=dodge('date_bar', 0.25, range=m.x_range),
           top='Outbound',
           hover_alpha=0.5,
           hover_line_color='black',
           width=0.4,
           source=source,
           color="#e84d60",
           legend=value("Outbound"))
    m.xaxis.major_label_orientation = 1
    m.legend.border_line_width = 3
    m.legend.border_line_color = None
    m.legend.border_line_alpha = 0.5
    m.title.text_color = "olive"

    #Stockout
    hover_s = HoverTool(
        tooltips=[("Location", "@location_reference_id"), (
            "Date", "@date_bar"), (
                "BOH_OOS",
                "@BOH_OOS{0,0.000}"), ("EOH_OOS", "@EOH_OOS{0,0.000}")])
    TOOLS_s = [
        hover_s,
        BoxZoomTool(),
        LassoSelectTool(),
        WheelZoomTool(),
        PanTool(),
        ResetTool(),
        SaveTool()
    ]
    s = figure(plot_height=525,
               plot_width=1000,
               title="Stockouts by store",
               x_axis_type="datetime",
               toolbar_location='above',
               tools=TOOLS_s,
               x_axis_label="Date",
               y_axis_label="Prop Stockout")
    s.background_fill_color = "#e6e9ed"
    s.background_fill_alpha = 0.5
    s.circle(x='date',
             y='EOH_OOS',
             source=source,
             fill_color=None,
             line_color="#4375c6")
    s.line(x='date',
           y='EOH_OOS',
           source=source,
           hover_alpha=0.5,
           hover_line_color='black',
           line_width=2,
           line_color='navy',
           legend=value("EOH OOS"))
    s.circle(x='date',
             y='BOH_OOS',
             source=source,
             fill_color=None,
             line_color="#4375c6")
    s.line(x='date',
           y='BOH_OOS',
           source=source,
           hover_alpha=0.5,
           hover_line_color='black',
           line_width=2,
           line_color='red',
           legend=value("BOH OOS"))
    s.legend.border_line_width = 3
    s.legend.border_line_color = None
    s.legend.border_line_alpha = 0.5
    s.title.text_color = "olive"

    #Fill rate
    hover_t = HoverTool(
        tooltips=[("Location", "@location_reference_id"), (
            "Date", "@date_bar"), ("Fill Rate", "@Fill_Rate{0,0.00}")])
    TOOLS_t = [
        hover_t,
        BoxZoomTool(),
        LassoSelectTool(),
        WheelZoomTool(),
        PanTool(),
        ResetTool(),
        SaveTool()
    ]
    t = figure(plot_height=525,
               x_range=x_range_list,
               plot_width=1000,
               title="Fill rates by store",
               tools=TOOLS_t,
               toolbar_location='above',
               x_axis_label="Date",
               y_axis_label="Fill rate")
    t.background_fill_color = "#e6e9ed"
    t.background_fill_alpha = 0.5
    t.vbar(x=dodge('date_bar', -0.25, range=t.x_range),
           top='Fill Rate',
           hover_alpha=0.5,
           hover_line_color='black',
           width=0.8,
           source=source,
           color="#718dbf")
    t.xaxis.major_label_orientation = 1
    t.legend.border_line_width = 3
    t.legend.border_line_color = None
    t.legend.border_line_alpha = 0.5
    t.title.text_color = "olive"

    # % Backroom spillover
    hover_w = HoverTool(
        tooltips=[("Location", "@location_reference_id"), ("Date",
                                                           "@date_bar"),
                  ("Prop OH in Backroom", "@Prop_OH_in_Backroom{0,0.00}")])
    TOOLS_w = [
        hover_w,
        BoxZoomTool(),
        LassoSelectTool(),
        WheelZoomTool(),
        PanTool(),
        ResetTool(),
        SaveTool()
    ]
    w = figure(plot_height=525,
               plot_width=1000,
               title="Prop OH in Backroom by store",
               x_axis_type="datetime",
               tools=TOOLS_w,
               toolbar_location='above',
               x_axis_label="Date",
               y_axis_label=" % Backroom spillover")
    w.background_fill_color = "#e6e9ed"
    w.background_fill_alpha = 0.5
    w.circle(x='date',
             y='Prop OH in Backroom',
             source=source,
             fill_color=None,
             line_color="#4375c6")
    w.line(x='date',
           y='Prop OH in Backroom',
           source=source,
           hover_alpha=0.5,
           hover_line_color='black',
           line_width=2,
           line_color='navy')
    w.title.text_font_style = "bold"
    w.title.text_color = "olive"
    w.legend.click_policy = "hide"
    w.yaxis[0].formatter = NumeralTickFormatter(format="0.0%")

    #BOH vs Ideal
    hover_f = HoverTool(
        tooltips=[("Location", "@location_reference_id"), (
            "Date",
            "@date_bar"), ('BOH < Ideal', "@BOH_lt_Ideal{0,0.00}"
                           ), ('BOH > Ideal', "@BOH_gt_Ideal{0,0.00}"
                               ), ('BOH = Ideal', "@BOH_eq_Ideal{0,0.00}")])
    TOOLS_f = [
        hover_f,
        BoxZoomTool(),
        LassoSelectTool(),
        WheelZoomTool(),
        PanTool(),
        ResetTool(),
        SaveTool()
    ]
    colors = ["#c9d9d3", "#718dbf", "#e84d60"]
    BOH_vs_ideal = ['BOH < Ideal', 'BOH > Ideal', 'BOH = Ideal']
    f = figure(x_range=x_range_list,
               plot_height=525,
               plot_width=1000,
               title="BOH vs Ideal by store",
               toolbar_location='above',
               x_axis_label="Date",
               y_axis_label="Prop",
               tools=TOOLS_f)
    f.vbar_stack(BOH_vs_ideal,
                 x='date_bar',
                 width=0.9,
                 color=colors,
                 source=source,
                 legend=[value(x) for x in BOH_vs_ideal],
                 name=BOH_vs_ideal)
    f.xaxis.major_label_orientation = 1
    f.legend.border_line_width = 3
    f.legend.border_line_color = None
    f.legend.border_line_alpha = 0.5
    f.title.text_color = "olive"

    #Pog Fit
    hover_g = HoverTool(
        tooltips=[("Location", "@location_reference_id"), (
            "Date",
            "@date_bar"), ('Never: Q98 > POG', "@Never_Q98_gt_POG{0,0.00}"),
                  ("Never: Ideal BOH > POG",
                   "@Never_Ideal_BOH_gt_POG{0,0.00}"),
                  ("Sometimes: OTL+Casepack-1 > POG",
                   "@Sometimes_OTL_Casepack_1_gt_POG{0,0.00}"),
                  ("Always: OTL+Casepack-1 <= POG",
                   "@Always_OTL_Casepack_1_le_POG{0,0.00}"
                   ), ("Non-POG'", "@Non_POG{0,0.00}")])
    TOOLS_g = [
        hover_g,
        BoxZoomTool(),
        LassoSelectTool(),
        WheelZoomTool(),
        PanTool(),
        ResetTool(),
        SaveTool()
    ]
    colors2 = ['#79D151', "#718dbf", '#29788E', '#fc8d59', '#d53e4f']
    pog_fit = [
        'Never: Q98 > POG', 'Never: Ideal BOH > POG',
        'Sometimes: OTL+Casepack-1 > POG', 'Always: OTL+Casepack-1 <= POG',
        'Non-POG'
    ]
    g = figure(x_range=x_range_list,
               plot_height=525,
               plot_width=1200,
               title="Pog Fit by store",
               toolbar_location='above',
               x_axis_label="Date",
               y_axis_label="Counts",
               tools=TOOLS_g)
    g.vbar_stack(pog_fit,
                 x='date_bar',
                 width=0.9,
                 color=colors2,
                 source=source,
                 legend=[value(x) for x in pog_fit],
                 name=pog_fit)
    g.xaxis.major_label_orientation = 1
    g.legend.border_line_width = 3
    g.legend.border_line_color = None
    g.legend.border_line_alpha = 0.5
    g.title.text_color = "olive"
    g.legend.location = "top_right"

    # BOH vs Pog
    colors3 = ["#c9d9d3", "#718dbf", "#e84d60"]
    shelf = [
        'BOH > Shelf Capacity', 'OTL > Shelf Capacity',
        'Ideal BOH > Shelf Capacity'
    ]
    hover_h = HoverTool(
        tooltips=[("Location", "@location_reference_id"), ("Date",
                                                           "@date_bar"),
                  ("OTL > Shelf Capacity", "@OTL_gt_Shelf_Capacity{0,0.00}"
                   ), ("BOH > Shelf Capacity",
                       "@BOH_gt_Shelf_Capacity{0,0.00}"),
                  ("Ideal BOH > Shelf Capacity",
                   "@Ideal_BOH_gt_Shelf_Capacity{0,0.00}")])
    TOOLS_h = [
        hover_h,
        BoxZoomTool(),
        LassoSelectTool(),
        WheelZoomTool(),
        PanTool(),
        ResetTool(),
        SaveTool()
    ]
    h = figure(plot_height=525,
               plot_width=1000,
               title="BOH vs Pog by store",
               x_axis_type="datetime",
               toolbar_location='above',
               tools=TOOLS_h,
               x_axis_label="Date",
               y_axis_label="Prop")
    h.background_fill_color = "#e6e9ed"
    h.background_fill_alpha = 0.5
    h.circle(x='date',
             y='BOH > Shelf Capacity',
             source=source,
             fill_color=None,
             line_color="#4375c6")
    h.line(x='date',
           y='BOH > Shelf Capacity',
           source=source,
           hover_alpha=0.5,
           hover_line_color='black',
           line_width=2,
           line_color='navy',
           legend=value("BOH > Shelf Capacity"))
    h.circle(x='date',
             y='OTL > Shelf Capacity',
             source=source,
             fill_color=None,
             line_color="#4375c6")
    h.line(x='date',
           y='OTL > Shelf Capacity',
           source=source,
           hover_alpha=0.5,
           hover_line_color='black',
           line_width=2,
           line_color="green",
           legend=value("OTL > Shelf Capacity"))
    h.circle(x='date',
             y='Ideal BOH > Shelf Capacity',
             source=source,
             fill_color=None,
             line_color="#4375c6")
    h.line(x='date',
           y='Ideal BOH > Shelf Capacity',
           source=source,
           hover_alpha=0.5,
           hover_line_color='black',
           line_width=2,
           line_color="#e84d60",
           legend=value("Ideal BOH > Shelf Capacity"))
    h.legend.border_line_width = 3
    h.legend.border_line_color = None
    h.legend.border_line_alpha = 0.5
    h.title.text_color = "olive"
    h.legend.click_policy = "mute"

    # Inventory
    hover_j = HoverTool(
        tooltips=[("Location", "@location_reference_id"), (
            "Date", "@date_bar"), ("DFE_Q98", "@DFE_Q98{0,0.00}"),
                  ("OTL",
                   "@OTL{0,0.00}"), ("EOH",
                                     "@EOH{0,0.00}"), ("BOH", "@BOH{0,0.00}")])
    TOOLS_j = [
        hover_j,
        BoxZoomTool(),
        LassoSelectTool(),
        WheelZoomTool(),
        PanTool(),
        ResetTool(),
        SaveTool()
    ]
    j = figure(plot_height=525,
               plot_width=1200,
               x_range=x_range_list,
               title="Inbound/Outbound by store",
               tools=TOOLS_j,
               toolbar_location='above',
               x_axis_label="Date",
               y_axis_label="Units")
    j.background_fill_color = "#e6e9ed"
    j.background_fill_alpha = 0.5
    j.vbar(x=dodge('date_bar', -0.40, range=j.x_range),
           top='DFE_Q98',
           hover_alpha=0.3,
           hover_line_color='black',
           width=0.2,
           source=source,
           color="#FBA40A",
           legend=value("DFE_Q98"))
    j.vbar(x=dodge('date_bar', -0.20, range=j.x_range),
           top='OTL',
           hover_alpha=0.3,
           hover_line_color='black',
           width=0.2,
           source=source,
           color="#4292c6",
           legend=value("OTL"))
    j.vbar(x=dodge('date_bar', 0.00, range=j.x_range),
           top='EOH',
           hover_alpha=0.3,
           hover_line_color='black',
           width=0.2,
           source=source,
           color='#a1dab4',
           legend=value("EOH"))
    j.vbar(x=dodge('date_bar', 0.20, range=j.x_range),
           top='BOH',
           hover_alpha=0.3,
           hover_line_color='black',
           width=0.2,
           source=source,
           color="#DC5039",
           legend=value("BOH"))
    j.xaxis.major_label_orientation = 1
    j.legend.border_line_width = 3
    j.legend.border_line_color = None
    j.legend.border_line_alpha = 0.5
    j.title.text_color = "olive"
    j.legend.location = "top_left"
    j.legend.click_policy = "mute"

    #desc.text = " <br >  <b> Region:</b> <i>  </i> <br /> "
    pre.text = " <b>Start date:</b>  <i>{}</i> <br />  <b>End date:</b> <i>{}</i> <br /> <b>Time period:</b> <i>{}</i> days <br />  <b> Total Number of Nodes:</b> <i>{}</i> <br /> <b>Policy</b> = <i>{}</i><br /> ".format(
        sdate, edate, days, nodes, policy)

    #fuction to update data on selection
    callback = CustomJS(args=dict(source=source,
                                  original_source=original_source,
                                  location_select_obj=location,
                                  region_select_obj=region,
                                  div=desc,
                                  text_input=text_input),
                        code="""
    var data = source.get('data');
    var original_data = original_source.get('data');
    var loc = location_select_obj.get('value');
    var reg = region_select_obj.get('value');
    var line = " <br />  <b> Region:</b>"+ reg + "<br />  <b>Location:</b> " +   loc;
    var text_input =text_input.get('value');
    div.text=line;
    for (var key in original_data) {
    data[key] = [];
    for (var i = 0; i < original_data['location_reference_id'].length; ++i) {
    if ((original_data['location_reference_id'][i] === loc) && (original_data['region'][i] === reg) ) {
    data[key].push(original_data[key][i]);
    }   }   }
    source.trigger('change');
    """)

    #controls = [location, region]
    #for control in controls:
    #control.js_on_change("value", callback)
    #source.js_on_change("value", callback)
    desc.js_on_event('event', callback)
    location.js_on_change('value', callback)
    region.js_on_change('value', callback)
    text_input.js_on_change('value', callback)
    #inputs = widgetbox(*controls, sizing_mode="fixed")
    #inputs = widgetbox(*controls,width=220,height=500)
    inputs = widgetbox(location, region, desc, pre, width=220, height=500)
    # controls number of tabs
    tab1 = Panel(child=p, title='Backroom OH')
    tab2 = Panel(child=s, title='Stockouts')
    tab3 = Panel(child=f, title='BOH vs Ideal')
    tab4 = Panel(child=g, title='Pog Fit')
    tab5 = Panel(child=m, title='Inbound/Outbound')
    tab6 = Panel(child=h, title='BOH vs POG')
    tab7 = Panel(child=t, title='Fill Rate')
    tab8 = Panel(child=j, title='Inventory')
    tab9 = Panel(child=w, title='Prop OH in Backroom')

    #data table columns to summarize data
    columns = [
        TableColumn(field="location_reference_id", title="Location"),
        TableColumn(field="Backroom_OH",
                    title="Backroom_OH",
                    formatter=NumberFormatter(format="0,0")),
        TableColumn(field="Outbound",
                    title="Outbound",
                    formatter=NumberFormatter(format="0,0")),
        TableColumn(field="Inbound",
                    title="Inbound",
                    formatter=NumberFormatter(format="0,0")),
        TableColumn(field="OTL",
                    title="OTL",
                    formatter=NumberFormatter(format="0,0")),
        TableColumn(field="DFE_Q98",
                    title="DFE_Q98",
                    formatter=NumberFormatter(format="0,0")),
        TableColumn(field="BOH",
                    title="BOH",
                    formatter=NumberFormatter(format="0,0")),
        TableColumn(field="EOH",
                    title="EOH",
                    formatter=NumberFormatter(format="0,0")),
        TableColumn(field="BOH_OOS",
                    title="BOH_OOS",
                    formatter=NumberFormatter(format="0,0")),
        TableColumn(field="EOH_OOS",
                    title="EOH_OOS",
                    formatter=NumberFormatter(format="0,0"))
    ]
    data_table = DataTable(source=source1, columns=columns, width=1250)

    tab10 = Panel(child=data_table, title='Summary Table')
    view = Tabs(
        tabs=[tab1, tab2, tab5, tab8, tab6, tab3, tab7, tab4, tab9, tab10])

    layout_text = column(inputs)
    layout1 = row(layout_text, view)
    #laying out plot
    layout2 = layout(children=[[layout_text, view]],
                     sizing_mode='scale_height')
    #update plots
    return layout2
Esempio n. 9
0
                           'border-color': '	#05BAC5',\
                           'background-color': 'white',\
                           'padding': '.5em'})

if check_file['check'][0] == 0:
    source = ColumnDataSource(data={
        'File_1': [decode(data64_1)],
        'File_2': [decode(data64_2)]
    })
else:
    source = ColumnDataSource(
        data={
            'File_1': [pd.read_csv(main_path + 'file1_data.csv')],
            'File_2': [pd.read_csv(main_path + 'file2_data.csv')]
        })
    running_info.text = '<b>Status Bar</b>: Datasource is Updated ->->-> <b>Blend</b>, <b>Reset</b>, or <b>Select</b> New Data.'

# This is important! Save curdoc() to make sure all threads
# see the same document.
doc = curdoc()


@gen.coroutine
def update(data):
    source.stream(data)


def blocking_task():
    while True:
        # do some blocking computation
        time.sleep(10)
Esempio n. 10
0
def selection_tab(rtdap_data):
    """
    return selection tab contents

    Keyword arguments:
    rtdap_data - dataframe containing rtdap vds detail data
    """

    #-----------------------------------------------------------------------------------------------------------------
    #submit_selection -- Data Selection Update Function

    def submit_selection():
        """
        python callback to update table and visual content based on
        user selections in the data review panel
        """

        avgs_speed = rtdap_avg(rtdap_data, corridor_select.value, 'avgSpeed')
        avgs_occ = rtdap_avg(rtdap_data, corridor_select.value, 'avgOccupancy')
        avgs_volume = rtdap_avg(rtdap_data, corridor_select.value, 'avgVolume')

        filtered_data = filter_selection(rtdap_data, corridor_select.value,
                                         str(date_picker_start.value),
                                         str(date_picker_end.value),
                                         day_of_week.value, time_of_day.value)

        speed = summarize_metrics(filtered_data, corridor_select.value,
                                  'corridor', avgs_speed, 'avgSpeed', 'Speed',
                                  'missing_speed')
        occ = summarize_metrics(filtered_data, corridor_select.value,
                                'corridor', avgs_occ, 'avgOccupancy',
                                'Occupancy', 'missing_occ')
        volume = summarize_metrics(filtered_data, corridor_select.value,
                                   'corridor', avgs_volume, 'avgVolume',
                                   'Volume', 'missing_vol')

        summary_df = speed.append(occ)
        summary_df = summary_df.append(volume)

        summary_title.text = "<h1>" + corridor_select.value + " Summary</h1>"

        summary_df_tbl = summary_df.copy()
        summary_df_tbl['Mean Diff'] = summary_df_tbl['Mean Diff'] * 100
        summary_df_tbl = summary_df_tbl.reset_index()
        summary_table.text = str(
            summary_df_tbl.fillna(0).to_html(
                index=False,
                formatters=[
                    str, '{:20,}'.format, '{:20,.1f}'.format,
                    '{:20,.1f}%'.format, '{:20,}'.format
                ],
                classes=["w3-table", "w3-hoverable", "w3-small"]))
        if len(summary_df) > 0:
            new_df = summary_df.fillna(0)
            bar_viz_new = hbar_chart(new_df, 'Mean Diff')[0]
            bar_viz_src.data.update(bar_viz_new.data)

    #-----------------------------------------------------------------------------------------------------------------
    #Data Review Panel

    panel_title = Div(
        text="Data Review",
        css_classes=["panel-heading", "text-center", "w3-text-white"])
    panel_text = Div(
        text=
        """Lorem Ipsum is simply dummy text of the printing and typesetting industry.
           Lorem Ipsum has been the industry's standard dummy text ever since the 1500s,
           when an unknown printer took a galley of type and scrambled it to make a type
           specimen book.""",
        css_classes=["panel-content", "w3-text-white"])

    #Panel Buttons
    corridor_select = Select(
        options=rtdap_data['corridor'].drop_duplicates().values.tolist(),
        title='Corridor:',
        height=60,
        value='Dan Ryan Express Lane',
        css_classes=["panel-content"])

    date_picker_start = DatePicker(min_date=date(2015, 1, 1),
                                   max_date=date(2018, 12, 31),
                                   css_classes=["panel-content"],
                                   title="Start Date:",
                                   height=60,
                                   value=date(2015, 12, 31))

    date_picker_end = DatePicker(min_date=date(2015, 1, 1),
                                 max_date=date(2018, 12, 31),
                                 css_classes=["panel-content"],
                                 title="End Date:",
                                 height=60,
                                 value=date(2017, 12, 31))

    time_of_day = RangeSlider(start=1,
                              end=8,
                              step=1,
                              value=(1, 2),
                              title="Time of Day:",
                              bar_color="black",
                              css_classes=["panel-content"])

    tod_description = Div(
        text="""Time of Day Categories:<br>
                          <ol>
                          <li>8pm-6am</li>
                          <li>6pm-7am</li>
                          <li>7am-8am</li>
                          <li>9am-10am</li>
                          <li>10am-2pm</li>
                          <li>2pm-4pm</li>
                          <li>4pm-6pm</li>
                          <li>6pm-8pm</li>
                          </ol>""",
        css_classes=["panel-content", "caption", "w3-text-white"])

    day_of_week = Select(options=['All'] +
                         rtdap_data['dow'].drop_duplicates().values.tolist(),
                         title="Day of Week:",
                         css_classes=["panel-content"],
                         height=60,
                         value="All")

    select_data = Button(label="Select Subset",
                         css_classes=["panel-content"],
                         height=60)

    select_data.on_click(submit_selection)
    #-----------------------------------------------------------------------------------------------------------------

    #-----------------------------------------------------------------------------------------------------------------
    #Create initial content
    avgs_speed = rtdap_avg(rtdap_data, corridor_select.value, 'avgSpeed')
    avgs_occ = rtdap_avg(rtdap_data, corridor_select.value, 'avgOccupancy')
    avgs_volume = rtdap_avg(rtdap_data, corridor_select.value, 'avgVolume')

    filtered_data = filter_selection(rtdap_data, corridor_select.value,
                                     str(date_picker_start.value),
                                     str(date_picker_end.value),
                                     day_of_week.value, time_of_day.value)

    speed = summarize_metrics(filtered_data, corridor_select.value, 'corridor',
                              avgs_speed, 'avgSpeed', 'Speed', 'missing_speed')
    occ = summarize_metrics(filtered_data, corridor_select.value, 'corridor',
                            avgs_occ, 'avgOccupancy', 'Occupancy',
                            'missing_occ')
    volume = summarize_metrics(filtered_data, corridor_select.value,
                               'corridor', avgs_volume, 'avgVolume', 'Volume',
                               'missing_vol')

    summary_df = speed.append(occ)
    summary_df = summary_df.append(volume)
    summary_df_tbl = summary_df.copy()
    summary_df_tbl['Mean Diff'] = summary_df_tbl['Mean Diff'] * 100
    summary_df_tbl = summary_df_tbl.reset_index()

    summary_title = Div(text="<h1>" + corridor_select.value + " Summary</h1>",
                        width=2000,
                        css_classes=["w3-panel", "w3-white"])
    summary_table = Div(text="", width=550, height=150)

    summary_table.text = str(
        summary_df_tbl.fillna(0).to_html(
            index=False,
            formatters=[
                str, '{:20,}'.format, '{:20,.1f}'.format, '{:20,.1f}%'.format,
                '{:20,}'.format
            ],
            classes=["w3-table", "w3-hoverable", "w3-small"]))

    line = Div(text="<hr>", css_classes=["w3-container"], width=1000)
    #-----------------------------------------------------------------------------------------------------------------

    #-----------------------------------------------------------------------------------------------------------------
    #Create initial graphics
    '''#horizontal bar chart
    p = figure(plot_width=300, plot_height=100)
    p.hbar(y=[1, 2, 3], height=0.5, left=0,
           right=[1.2, 2.5, 3.7], color="navy")
    p.yaxis.visible = False
    p.xaxis.formatter = NumeralTickFormatter(format="0.0f%")'''

    bar_viz = hbar_chart(summary_df.fillna(0), 'Mean Diff')
    bar_viz_src = bar_viz[0]
    bar_viz_chart = bar_viz[1]

    volume_scatter = scatter_plot('Volumes')
    time_scatter = scatter_plot('Time')

    corr_df = rtdap_data.loc[rtdap_data['corridor'] == corridor_select.value]
    speed_diff_vbar = (vbar_chart(corr_df, filtered_data))
    occ_diff_vbar = (vbar_chart(corr_df, filtered_data))
    volume_diff_vbar = (vbar_chart(corr_df, filtered_data))

    base_map = make_base_map(map_width=450,
                             map_height=960,
                             xaxis=None,
                             yaxis=None,
                             xrange=(-9990000, -9619944),
                             yrange=(5011119, 5310000),
                             plot_tools="pan,wheel_zoom,reset,save")

    return row(
        #PANEL
        column(panel_title,
               panel_text,
               corridor_select,
               date_picker_start,
               date_picker_end,
               day_of_week,
               time_of_day,
               tod_description,
               select_data,
               height=1000,
               css_classes=["w3-sidebar", "w3-bar-block", "w3-darkgrey"]),
        column(css_classes=["w3-col"], width=275),
        #CONTENT
        column(summary_title,
               row(
                   Spacer(width=20),
                   column(
                       Spacer(height=10),
                       row(summary_table,
                           Spacer(width=50),
                           bar_viz_chart,
                           css_classes=["w3-panel", "w3-white", "w3-card-4"]),
                       Spacer(height=10),
                       row(volume_scatter,
                           Spacer(width=10),
                           time_scatter,
                           css_classes=["w3-panel", "w3-white", "w3-card-4"],
                           width=650),
                       Spacer(height=10),
                       row(column(speed_diff_vbar, occ_diff_vbar,
                                  volume_diff_vbar),
                           css_classes=["w3-panel", "w3-white", "w3-card-4"],
                           width=1050),
                   ),
                   row(
                       Spacer(width=20),
                       column(
                           Spacer(height=10),
                           column(base_map,
                                  css_classes=[
                                      "w3-panel", "w3-white", "w3-card-4"
                                  ],
                                  width=500)))),
               css_classes=["w3-container", "w3-row-padding"]),
        css_classes=["w3-container", "w3-light-grey"],
        width=2000,
        height=1200)
Esempio n. 11
0
 def make_sheet_div(self, text):
     d = Div()
     d.text = "<h3>" + text + "</h3>"
     return d
Esempio n. 12
0
 def make_title_div(self, text):
     d = Div()
     d.text = "<h1>" + text + "</h1>"
     return d
Esempio n. 13
0
    print text
    div.update(text=text)


fd = figure(tools=[TOOLS])

scatter = fd.circle(
    x='sumhobbit24hour',
    y='area24hour',
    size=sizescale,
    fill_color=colors,
    fill_alpha=0.9,
    line_color=None,
    selection_line_color="firebrick",
    source=source,
    nonselection_fill_color='colors',
    nonselection_fill_alpha=0.5,
)

div.text = '<img src=\"' + df['url24hour'][0] + '" width="700"/>'
p = row(fd, div)

#output_file("color_scatter.html", title="color_scatter.py example")
#show(p)
curdoc().add_root(p)

print scatter.data_source.properties()
print "testing"
scatter.data_source.on_change('selected', update)
# scatter.data_source.