#!/usr/bin/env python # coding: utf-8 # # Python API for Table Display # # In addition to APIs for creating and formatting BeakerX's interactive table widget, the Python runtime configures pandas to display tables with the interactive widget instead of static HTML. # In[ ]: import pandas as pd from beakerx import * # In[ ]: pd.read_csv('../resources/data/interest-rates.csv') # In[ ]: table = TableDisplay(pd.read_csv('../resources/data/interest-rates.csv')) table.setAlignmentProviderForColumn('m3', TableDisplayAlignmentProvider.CENTER_ALIGNMENT) table.setRendererForColumn("y10", TableDisplayCellRenderer.getDataBarsRenderer(False)) table.setRendererForType(ColumnType.Double, TableDisplayCellRenderer.getDataBarsRenderer(True)) table # In[ ]: df = pd.read_csv('../resources/data/interest-rates.csv') df['time'] = df['time'].str.slice(0,19).astype('datetime64[ns]') table = TableDisplay(df) table.setStringFormatForTimes(TimeUnit.DAYS) table.setStringFormatForType(ColumnType.Double, TableDisplayStringFormat.getDecimalFormat(4,6)) table.setStringFormatForColumn("m3", TableDisplayStringFormat.getDecimalFormat(0, 0)) table # In[ ]: table = TableDisplay(pd.read_csv('../resources/data/interest-rates.csv')) table #freeze a column table.setColumnFrozen("y1", True) #freeze a column to the right table.setColumnFrozenRight("y10", True) #hide a column table.setColumnVisible("y30", False) table.setColumnOrder(["m3", "y1", "y5", "time", "y2"]) table # In[ ]: table = TableDisplay(pd.read_csv('../resources/data/interest-rates.csv')) table.addCellHighlighter(TableDisplayCellHighlighter.getHeatmapHighlighter("m3", TableDisplayCellHighlighter.FULL_ROW)) table # ### Display mode: Pandas default # In[ ]: beakerx.pandas_display_default() pd.read_csv('../resources/data/interest-rates.csv') # ### Display mode: TableDisplay Widget # In[ ]: beakerx.pandas_display_table() pd.read_csv('../resources/data/interest-rates.csv') # ## Recognized Formats # In[ ]: TableDisplay([{'y1':4, 'm3':2, 'z2':1}, {'m3':4, 'z2':2}]) # In[ ]: TableDisplay({"x" : 1, "y" : 2}) # In[ ]: mapList4 = [ {"a":1, "b":2, "c":3}, {"a":4, "b":5, "c":6}, {"a":7, "b":8, "c":5} ] display = TableDisplay(mapList4) #set what happens on a double click display.setDoubleClickAction(lambda row, column, tabledisplay: tabledisplay.values[row].__setitem__(column, sum(tabledisplay.values[row]))) #add a context menu item display.addContextMenuItem("negate", lambda row, column, tabledisplay: tabledisplay.values[row].__setitem__(column, -1 * tabledisplay.values[row][column])) display # In[ ]: mapList4 = [ {"a":1, "b":2, "c":3}, {"a":4, "b":5, "c":6}, {"a":7, "b":8, "c":5} ] display = TableDisplay(mapList4) #set what happens on a double click display.setDoubleClickAction("runDoubleClick") display # In[ ]: print("runDoubleClick fired") # ## Set index to DataFrame # In[ ]: df = pd.read_csv('../resources/data/interest-rates.csv') df.set_index(['m3']) # In[ ]: df = pd.read_csv('../resources/data/interest-rates.csv') df.index = df['time'] df # # Update cell # In[ ]: dataToUpdate = [ {'a':1, 'b':2, 'c':3}, {'a':4, 'b':5, 'c':6}, {'a':7, 'b':8, 'c':9} ] tableToUpdate = TableDisplay(dataToUpdate) tableToUpdate # In[ ]: tableToUpdate.values[0][0] = 99 tableToUpdate.sendModel() # In[ ]: tableToUpdate.updateCell(2,"c",121) tableToUpdate.sendModel() # ## HTML format # # HTML format allows markup and styling of the cell's content. Interactive JavaScript is not supported however. # In[ ]: table = TableDisplay({'x': 'italic red', 'y': 'bold blue', 'z': 'strings without markup work fine too'}) table.setStringFormatForColumn("Value", TableDisplayStringFormat.getHTMLFormat()) table # ## Auto linking of URLs # # The normal string format automatically detects URLs and links them. An underline appears when the mouse hovers over such a string, and when you click it opens in a new window. # In[ ]: TableDisplay({'Two Sigma': 'http://twosigma.com', 'BeakerX': 'http://BeakerX'})