Python bokeh.models.ColumnDataSource() Examples
The following are 30
code examples of bokeh.models.ColumnDataSource().
You can vote up the ones you like or vote down the ones you don't like,
and go to the original project or source file by following the links above each example.
You may also want to check out all available functions/classes of the module
bokeh.models
, or try the search function
.
Example #1
Source File: temperature.py From bigquery-bokeh-dashboard with Apache License 2.0 | 7 votes |
def make_plot(self, dataframe): self.source = ColumnDataSource(data=dataframe) self.plot = figure( x_axis_type="datetime", plot_width=600, plot_height=300, tools='', toolbar_location=None) self.plot.quad( top='max_temp', bottom='min_temp', left='left', right='right', color=Blues4[2], source=self.source, legend='Magnitude') line = self.plot.line( x='date', y='avg_temp', line_width=3, color=Blues4[1], source=self.source, legend='Average') hover_tool = HoverTool(tooltips=[ ('Value', '$y'), ('Date', '@date_readable'), ], renderers=[line]) self.plot.tools.append(hover_tool) self.plot.xaxis.axis_label = None self.plot.yaxis.axis_label = None self.plot.axis.axis_label_text_font_style = 'bold' self.plot.x_range = DataRange1d(range_padding=0.0) self.plot.grid.grid_line_alpha = 0.3 self.title = Paragraph(text=TITLE) return column(self.title, self.plot)
Example #2
Source File: BokehRenderer.py From BAC0 with GNU Lesser General Public License v3.0 | 6 votes |
def modify_document(self, doc): controller = self.network.notes[0] notes_df = pd.DataFrame(self.network.notes[1]).reset_index() notes_df.columns = ["index", "notes"] notes = ColumnDataSource(notes_df) self.columns = [ TableColumn(field="index", title="Timestamp"), TableColumn(field="notes", title="Notes"), ] self.data_table = DataTable(source=notes, columns=self.columns) layout = row([self.data_table]) doc.add_root(layout) doc.title = "Notes for {}".format(controller) # doc.add_periodic_callback(self.update_data,100) return doc
Example #3
Source File: population.py From bigquery-bokeh-dashboard with Apache License 2.0 | 6 votes |
def make_plot(self, dataframe): self.source = ColumnDataSource(data=dataframe) self.title = Paragraph(text=TITLE) self.data_table = DataTable(source=self.source, width=390, height=275, columns=[ TableColumn(field="zipcode", title="Zipcodes", width=100), TableColumn(field="population", title="Population", width=100, formatter=NumberFormatter(format="0,0")), TableColumn(field="city", title="City") ]) return column(self.title, self.data_table)
Example #4
Source File: harvest.py From memex-explorer with BSD 2-Clause "Simplified" License | 6 votes |
def update_source(self): proc = subprocess.Popen(shlex.split("tail -n 800 %s" % self.harvest_data), stdout=subprocess.PIPE, stderr=subprocess.PIPE) stdout, stderr = proc.communicate() if stderr or not stdout: raise ValueError("harvestinfo.csv is empty") # Converts stdout to StringIO to allow pandas to read it as a file df = pd.read_csv(StringIO(stdout), delimiter='\t', names=['relevant_pages', 'downloaded_pages', 'timestamp']) df['harvest_rate'] = df['relevant_pages'] / df['downloaded_pages'] df['timestamp'] = pd.to_datetime(df['timestamp'], unit='s') source = into(ColumnDataSource, df) return source
Example #5
Source File: air.py From bigquery-bokeh-dashboard with Apache License 2.0 | 6 votes |
def make_plot(self, dataframe): self.source = ColumnDataSource(data=dataframe) palette = all_palettes['Set2'][6] hover_tool = HoverTool(tooltips=[ ("Value", "$y"), ("Year", "@year"), ]) self.plot = figure( plot_width=600, plot_height=300, tools=[hover_tool], toolbar_location=None) columns = { 'pm10': 'PM10 Mass (µg/m³)', 'pm25_frm': 'PM2.5 FRM (µg/m³)', 'pm25_nonfrm': 'PM2.5 non FRM (µg/m³)', 'lead': 'Lead (¹/₁₀₀ µg/m³)', } for i, (code, label) in enumerate(columns.items()): self.plot.line( x='year', y=code, source=self.source, line_width=3, line_alpha=0.6, line_color=palette[i], legend=label) self.title = Paragraph(text=TITLE) return column(self.title, self.plot) # [END make_plot]
Example #6
Source File: precipitation.py From bigquery-bokeh-dashboard with Apache License 2.0 | 6 votes |
def make_plot(self, dataframe): self.source = ColumnDataSource(data=dataframe) self.plot = figure( x_axis_type="datetime", plot_width=400, plot_height=300, tools='', toolbar_location=None) vbar = self.plot.vbar( x='date', top='prcp', width=1, color='#fdae61', source=self.source) hover_tool = HoverTool(tooltips=[ ('Value', '$y'), ('Date', '@date_readable'), ], renderers=[vbar]) self.plot.tools.append(hover_tool) self.plot.xaxis.axis_label = None self.plot.yaxis.axis_label = None self.plot.axis.axis_label_text_font_style = 'bold' self.plot.x_range = DataRange1d(range_padding=0.0) self.plot.grid.grid_line_alpha = 0.3 self.title = Paragraph(text=TITLE) return column(self.title, self.plot)
Example #7
Source File: bk_sliders.py From parambokeh with BSD 3-Clause "New" or "Revised" License | 6 votes |
def app(doc): x,y = SineWave() source = ColumnDataSource(data=dict(x=x, y=y)) import numpy as np # see TODO below about ranges plot = figure(plot_height=400, plot_width=400, tools="crosshair,pan,reset,save,wheel_zoom", x_range=[0, 4*np.pi], y_range=[-2.5, 2.5]) plot.line('x', 'y', source=source, line_width=3, line_alpha=0.6) def update_sinewave(sw,**kw): x,y = sw() source.data = dict(x=x, y=y) # TODO couldn't figure out how to update ranges #plot.x_range.start,plot.x_range.end=pobj.x_range #plot.y_range.start,plot.y_range.end=pobj.y_range parambokeh.Widgets(SineWave, mode='server', doc=doc, callback=update_sinewave) doc.add_root(row(plot, width=800))
Example #8
Source File: test_bokeh_server.py From choochoo with GNU General Public License v2.0 | 6 votes |
def modify_doc(doc): df = sea_surface_temperature.copy() source = ColumnDataSource(data=df) plot = figure(x_axis_type='datetime', y_range=(0, 25), y_axis_label='Temperature (Celsius)', title="Sea Surface Temperature at 43.18, -70.43") plot.line('time', 'temperature', source=source) def callback(attr, old, new): if new == 0: data = df else: data = df.rolling('{0}D'.format(new)).mean() source.data = ColumnDataSource(data=data).data slider = Slider(start=0, end=30, value=0, step=1, title="Smoothing by N Days") slider.on_change('value', callback) doc.add_root(column(slider, plot)) doc.theme = Theme(filename="theme.yaml")
Example #9
Source File: master_app.py From estimagic with BSD 3-Clause "New" or "Revised" License | 6 votes |
def master_app(doc, database_name_to_path, session_data): """Create the page with the master dashboard. Args: doc (bokeh.Document): document where the overview over the optimizations will be displayed by their current stage. database_name_to_path (dict): mapping from the short, unique names to the full paths to the databases. session_data (dict): infos to be passed between and within apps. Keys of the monitoring apps' entries are: - last_retrieved (int): last iteration currently in the ColumnDataSource - database_path """ sec_to_elements = _create_section_to_elements( doc=doc, database_name_to_path=database_name_to_path ) tabs = _setup_tabs(sec_to_elements=sec_to_elements) doc.add_root(tabs)
Example #10
Source File: master_app.py From estimagic with BSD 3-Clause "New" or "Revised" License | 6 votes |
def _map_dabase_name_to_bokeh_row_elements(doc, database_name_to_path): """Inner part of the sec_to_elements dictionary. For each entry that belongs to the section create a clickable link to that optimization's monitoring page. Args: doc (bokeh Document) database_name_to_path (dict): mapping from the short, unique names to the full paths to the databases. """ name_to_row = {} for database_name in database_name_to_path: name_to_row[database_name] = [create_dashboard_link(database_name)] return ColumnDataSource(name_to_row)
Example #11
Source File: monitoring_app.py From estimagic with BSD 3-Clause "New" or "Revised" License | 6 votes |
def _create_bokeh_data_sources(database, tables): """Load the first entry from the database to initialize the ColumnDataSources. Args: database (sqlalchemy.MetaData) tables (list): list of table names to load and convert to ColumnDataSources Returns: all_cds (list): list of ColumnDataSources """ data_dict, _ = read_new_iterations( database=database, tables=tables, last_retrieved=0, limit=1, return_type="bokeh", ) all_cds = [] for tab, data in data_dict.items(): cds = ColumnDataSource(data=data, name=f"{tab}_cds") all_cds.append(cds) return all_cds
Example #12
Source File: domain.py From memex-explorer with BSD 2-Clause "Simplified" License | 6 votes |
def update_source(self): df = pd.read_csv(StringIO(self.get_relevant_data()), delimiter='\t', header=None, names=['url', 'timestamp']) df['domain'] = df['url'].apply(self.extract_tld) df1 = df.groupby(['domain']).size() df = pd.read_csv(StringIO(self.get_crawled_data()), delimiter='\t', header=None, names=['url', 'timestamp']) df['domain'] = df['url'].apply(self.extract_tld) df2 = df.groupby(['domain']).size() df = pd.concat((df1, df2), axis=1) df.columns = ['relevant', 'crawled'] df = df.sort(self.sort, ascending=False).head(25).fillna(value=0) for col in df.columns: df['%s_half' % col] = df[col] / 2 df.reset_index(inplace=True) df.rename(columns={'index':'domain'}, inplace=True) source = into(ColumnDataSource, df) return source
Example #13
Source File: stock.py From osqf2015 with MIT License | 6 votes |
def create(clz): """One-time creation of app's objects. This function is called once, and is responsible for creating all objects (plots, datasources, etc) """ self = clz() n_vals = 1000 self.source = ColumnDataSource( data=dict( top=[], bottom=0, left=[], right=[], x= np.arange(n_vals), values= np.random.randn(n_vals) )) # Generate a figure container self.stock_plot = clz.create_stock(self.source) self.update_data() self.children.append(self.stock_plot)
Example #14
Source File: optbrowser.py From backtrader_plotting with GNU General Public License v3.0 | 6 votes |
def _build_optresult_selector(self, optresults) -> Tuple[DataTable, ColumnDataSource]: # 1. build a dict with all params and all user columns data_dict = defaultdict(list) for optres in optresults: for param_name, _ in optres[0].params._getitems(): param_val = optres[0].params._get(param_name) data_dict[param_name].append(param_val) for usercol_label, usercol_fnc in self._usercolumns.items(): data_dict[usercol_label].append(usercol_fnc(optres)) # 2. build a pandas DataFrame df = DataFrame(data_dict) # 3. now sort and limit result if self._sortcolumn is not None: df = df.sort_values(by=[self._sortcolumn], ascending=self._sortasc) if self._num_result_limit is not None: df = df.head(self._num_result_limit) # 4. build column info for Bokeh table tab_columns = [] for colname in data_dict.keys(): formatter = NumberFormatter(format='0.000') if len(data_dict[colname]) > 0 and isinstance(data_dict[colname][0], int): formatter = StringFormatter() tab_columns.append(TableColumn(field=colname, title=f'{colname}', sortable=False, formatter=formatter)) # TODO: currently table size is hardcoded cds = ColumnDataSource(df) selector = DataTable(source=cds, columns=tab_columns, width=1600, height=150) return selector, cds
Example #15
Source File: bokeh.py From thingflow-python with Apache License 2.0 | 6 votes |
def run(self): print("In thread.run") self.p = figure(plot_height=500, tools=TOOLS, y_axis_location='left', title=self.title) self.p.x_range.follow = "end" self.p.xaxis.axis_label = "Timestamp" self.p.x_range.follow_interval = 100 self.p.x_range.range_padding = 0 self.p.line(x="timestamp", y="value", color="blue", source=self.source) self.p.circle(x="timestamp", y="value", color="red", source=self.source) self.session = push_session(curdoc()) curdoc().add_periodic_callback(self.update, 100) #period in ms self.session.show(column(self.p)) curdoc().title = 'Sensor' self.session.loop_until_closed() # def register(self, d, sourceq): # source = ColumnDataSource(dict(d)) # self.p.line(x=d[0], y=d[1], color="orange", source=source) # curdoc().add_periodic_callback(self.update, 100) #period in ms
Example #16
Source File: viz2.py From scipy2015-blaze-bokeh with MIT License | 6 votes |
def timeseries(): # Get data df = pd.read_csv('data/Land_Ocean_Monthly_Anomaly_Average.csv') df['datetime'] = pd.to_datetime(df['datetime']) df = df[['anomaly','datetime']] df['moving_average'] = pd.rolling_mean(df['anomaly'], 12) df = df.fillna(0) # List all the tools that you want in your plot separated by comas, all in one string. TOOLS="crosshair,pan,wheel_zoom,box_zoom,reset,hover,previewsave" # New figure t = figure(x_axis_type = "datetime", width=1000, height=200,tools=TOOLS) # Data processing # The hover tools doesn't render datetime appropriately. We'll need a string. # We just want dates, remove time f = lambda x: str(x)[:7] df["datetime_s"]=df[["datetime"]].applymap(f) source = ColumnDataSource(df) # Create plot t.line('datetime', 'anomaly', color='lightgrey', legend='anom', source=source) t.line('datetime', 'moving_average', color='red', legend='avg', source=source, name="mva") # Style xformatter = DatetimeTickFormatter(formats=dict(months=["%b %Y"], years=["%Y"])) t.xaxis[0].formatter = xformatter t.xaxis.major_label_orientation = math.pi/4 t.yaxis.axis_label = 'Anomaly(ºC)' t.legend.orientation = "bottom_right" t.grid.grid_line_alpha=0.2 t.toolbar_location=None # Style hover tool hover = t.select(dict(type=HoverTool)) hover.tooltips = """ <div> <span style="font-size: 15px;">Anomaly</span> <span style="font-size: 17px; color: red;">@anomaly</span> </div> <div> <span style="font-size: 15px;">Month</span> <span style="font-size: 10px; color: grey;">@datetime_s</span> </div> """ hover.renderers = t.select("mva") # Show plot #show(t) return t # Add title
Example #17
Source File: client_demo.py From pairstrade-fyp-2019 with MIT License | 6 votes |
def build_pv_fig(data): # ========== themes & appearance ============= # LINE_COLOR = "#053061" LINE_WIDTH = 1.5 TITLE = "PORTFOLIO VALUE OVER TIME" # ========== data ============= # dates = np.array(data['date'], dtype=np.datetime64) pv_source = ColumnDataSource(data=dict(date=dates, portfolio_value=data['portfolio_value'])) # ========== plot data points ============= # # x_range is the zoom in slider setup. Pls ensure both STK_1 and STK_2 have same length, else some issue pv_p = figure(plot_height=250, plot_width=600, title=TITLE, toolbar_location=None) pv_p.line('date', 'portfolio_value', source=pv_source, line_color = LINE_COLOR, line_width = LINE_WIDTH) pv_p.yaxis.axis_label = 'Portfolio Value' pv_p.xaxis[0].formatter = DatetimeTickFormatter() return pv_p
Example #18
Source File: layout.py From pairstrade-fyp-2019 with MIT License | 6 votes |
def build_pv_fig(data): # ========== themes & appearance ============= # LINE_COLOR = "#053061" LINE_WIDTH = 1.5 TITLE = "PORTFOLIO VALUE OVER TIME" # ========== data ============= # dates = np.array(data['date'], dtype=np.datetime64) pv_source = ColumnDataSource(data=dict(date=dates, portfolio_value=data['portfolio_value'])) # ========== plot data points ============= # # x_range is the zoom in slider setup. Pls ensure both STK_1 and STK_2 have same length, else some issue pv_p = figure(plot_height=250, plot_width=600, title=TITLE, toolbar_location=None) pv_p.line('date', 'portfolio_value', source=pv_source, line_color = LINE_COLOR, line_width = LINE_WIDTH) pv_p.yaxis.axis_label = 'Portfolio Value' pv_p.xaxis[0].formatter = DatetimeTickFormatter() return pv_p
Example #19
Source File: testserver.py From holoviews with BSD 3-Clause "New" or "Revised" License | 6 votes |
def test_server_dynamicmap_with_stream_dims(self): stream = Stream.define('Custom', y=2)() dmap = DynamicMap(lambda x, y: Curve([x, 1, y]), kdims=['x', 'y'], streams=[stream]).redim.values(x=[1, 2, 3]) obj, _ = bokeh_renderer._validate(dmap, None) session = self._threaded_launcher(obj) [(doc, _)] = obj.layout._documents.items() orig_cds = session.document.roots[0].select_one({'type': ColumnDataSource}) self.assertEqual(orig_cds.data['y'][2], 2) def run(): stream.event(y=3) doc.add_next_tick_callback(run) time.sleep(1) cds = self.session.document.roots[0].select_one({'type': ColumnDataSource}) self.assertEqual(cds.data['y'][2], 3) self.assertEqual(orig_cds.data['y'][0], 1) slider = obj.layout.select(DiscreteSlider)[0] def run(): slider.value = 3 doc.add_next_tick_callback(run) time.sleep(1) cds = self.session.document.roots[0].select_one({'type': ColumnDataSource}) self.assertEqual(cds.data['y'][0], 3)
Example #20
Source File: tornado_bokeh_embed.py From stock with Apache License 2.0 | 6 votes |
def modify_doc(doc): df = sea_surface_temperature.copy() source = ColumnDataSource(data=df) plot = figure(x_axis_type='datetime', y_range=(0, 25), y_axis_label='Temperature (Celsius)', title="Sea Surface Temperature at 43.18, -70.43") plot.line('time', 'temperature', source=source) def callback(attr, old, new): if new == 0: data = df else: data = df.rolling('{0}D'.format(new)).mean() source.data = ColumnDataSource(data=data).data slider = Slider(start=0, end=30, value=0, step=1, title="Smoothing by N Days") slider.on_change('value', callback) doc.add_root(column(slider, plot)) # doc.theme = Theme(filename="theme.yaml")
Example #21
Source File: test_image.py From PyBloqs with GNU Lesser General Public License v2.1 | 6 votes |
def test_bokehplot(): fruits = ['Apples', 'Pears', 'Nectarines', 'Plums', 'Grapes', 'Strawberries'] years = ['2015', '2016', '2017'] data = {'fruits': fruits, '2015': [2, 1, 4, 3, 2, 4], '2016': [5, 3, 3, 2, 4, 6], '2017': [3, 2, 4, 4, 5, 3]} x = [(fruit, year) for fruit in fruits for year in years] counts = sum(zip(data['2015'], data['2016'], data['2017']), ()) # like an hstack source = ColumnDataSource(data=dict(x=x, counts=counts)) fig = figure(x_range=FactorRange(*x), plot_height=350, title="Fruit Counts by Year", toolbar_location=None, tools="") fig.vbar(x='x', top='counts', width=0.9, source=source) return BokehPlotBlock(fig)
Example #22
Source File: testserver.py From holoviews with BSD 3-Clause "New" or "Revised" License | 6 votes |
def test_server_dynamicmap_with_dims(self): dmap = DynamicMap(lambda y: Curve([1, 2, y]), kdims=['y']).redim.range(y=(0.1, 5)) obj, _ = bokeh_renderer._validate(dmap, None) session = self._threaded_launcher(obj) [(plot, _)] = obj._plots.values() [(doc, _)] = obj.layout._documents.items() cds = session.document.roots[0].select_one({'type': ColumnDataSource}) self.assertEqual(cds.data['y'][2], 0.1) slider = obj.layout.select(FloatSlider)[0] def run(): slider.value = 3.1 doc.add_next_tick_callback(run) time.sleep(1) cds = self.session.document.roots[0].select_one({'type': ColumnDataSource}) self.assertEqual(cds.data['y'][2], 3.1)
Example #23
Source File: datatable.py From backtrader_plotting with GNU General Public License v3.0 | 6 votes |
def get_analyzers_tables(self, analyzer: bt.analyzers.Analyzer, table_width) -> (Paragraph, List[DataTable]): """Return a header for this analyzer and one *or more* data tables.""" if hasattr(analyzer, 'get_analysis_table'): title, table_columns_list = analyzer.get_analysis_table() else: # Analyzer does not provide a table function. Use our generic one title, table_columns_list = TableGenerator._get_analysis_table_generic(analyzer) param_str = get_params_str(analyzer.params) if len(param_str) > 0: title += f' ({param_str})' elems: List[DataTable] = [] for table_columns in table_columns_list: cds = ColumnDataSource() columns = [] for i, c in enumerate(table_columns): col_name = f'col{i}' cds.add(c[2:], col_name) columns.append(TableColumn(field=col_name, title=c[0], formatter=self._get_formatter(c[1]))) column_height = len(table_columns[0]) * 25 elems.append(DataTable(source=cds, columns=columns, index_position=None, width=table_width, height=column_height)) return Paragraph(text=title, style={'font-size': 'large'}), elems
Example #24
Source File: testlinks.py From holoviews with BSD 3-Clause "New" or "Revised" License | 6 votes |
def test_data_link_poly_table(self): arr1 = np.random.rand(10, 2) arr2 = np.random.rand(10, 2) polys = Polygons([arr1, arr2]) table = Table([('A', 1), ('B', 2)], 'A', 'B') DataLink(polys, table) layout = polys + table plot = bokeh_renderer.get_plot(layout) cds = list(plot.state.select({'type': ColumnDataSource})) self.assertEqual(len(cds), 1) merged_data = {'xs': [[[np.concatenate([arr1[:, 0], arr1[:1, 0]])]], [[np.concatenate([arr2[:, 0], arr2[:1, 0]])]]], 'ys': [[[np.concatenate([arr1[:, 1], arr1[:1, 1]])]], [[np.concatenate([arr2[:, 1], arr2[:1, 1]])]]], 'A': np.array(['A', 'B']), 'B': np.array([1, 2])} for k, v in cds[0].data.items(): self.assertEqual(v, merged_data[k])
Example #25
Source File: testboxwhiskerplot.py From holoviews with BSD 3-Clause "New" or "Revised" License | 5 votes |
def test_box_whisker_datetime(self): times = np.arange(dt.datetime(2017,1,1), dt.datetime(2017,2,1), dt.timedelta(days=1)) box = BoxWhisker((times, np.random.rand(len(times))), kdims=['Date']) plot = bokeh_renderer.get_plot(box) formatted = [box.kdims[0].pprint_value(t) for t in times] self.assertTrue(all(cds.data['index'][0] in formatted for cds in plot.state.select(ColumnDataSource) if len(cds.data.get('index', []))))
Example #26
Source File: BokehRenderer.py From BAC0 with GNU Lesser General Public License v3.0 | 5 votes |
def modify_document(self, doc): self.network.whois() devices_df = self.network.devices dev = ColumnDataSource(devices_df) columns = [ TableColumn(field=" Device ID", title="Dev ID"), TableColumn(field="Address", title="Address"), TableColumn(field="Manufacturer", title="Manuf"), TableColumn(field="Name", title="Name"), ] data_table = DataTable(source=dev, columns=columns) layout = row([data_table]) doc.add_root(layout) doc.title = "BACnet devices" return doc
Example #27
Source File: BokehRenderer.py From BAC0 with GNU Lesser General Public License v3.0 | 5 votes |
def update_data(self): controller = self.network.notes[0] notes_df = pd.DataFrame(self.network.notes[1]).reset_index() notes_df.columns = ["index", "notes"] notes = ColumnDataSource(notes_df) self.data_table.source.data.update(notes.data) curdoc().title = "Notes for {}".format(controller)
Example #28
Source File: model.py From osqf2015 with MIT License | 5 votes |
def compute_data_source(self): source = ColumnDataSource(self.df.reset_index()[2:]) source.add(self.df[2:].LogReturns.ge(0).map(lambda x: "steelblue" if x else "red"), 'LogReturnsColor') source.add(self.df[2:].DevolLogReturns / 2., 'y_mids') return source
Example #29
Source File: BokehRenderer.py From BAC0 with GNU Lesser General Public License v3.0 | 5 votes |
def modify_document(self, doc): self.network.whois() devices_df = self.network.devices dev = ColumnDataSource(devices_df) columns = [ TableColumn(field=" Device ID", title="Dev ID"), TableColumn(field="Address", title="Address"), TableColumn(field="Manufacturer", title="Manuf"), TableColumn(field="Name", title="Name"), ] data_table = DataTable(source=dev, columns=columns) layout = row([data_table]) doc.add_root(layout) doc.title = "BACnet devices" return doc
Example #30
Source File: BokehRenderer.py From BAC0 with GNU Lesser General Public License v3.0 | 5 votes |
def build_data_sources(self): sources = {} self.organize_data() for each in self.lst_of_trends: df = pd.DataFrame(each) df = df.reset_index() df["name"] = each.name df["units"] = str(each.units) df["time_s"] = df["index"].apply(str) df.states = each.states try: df = ( df.fillna(method="ffill") .fillna(method="bfill") .replace(["inactive", "active"], [0, 1]) ) except TypeError: df = df.fillna(method="ffill").fillna(method="bfill") sources[each.name] = ColumnDataSource( data=dict( x=df["index"], y=df[each.name], time=df["time_s"], name=df["name"], units=df["units"], ) ) return sources