import pandas as pd import os from bokeh.layouts import row, widgetbox from bokeh.models import Select from bokeh.palettes import Spectral5 from bokeh.plotting import curdoc, figure from bokeh.sampledata.autompg import autompg from bokeh.io import show import ontology_results_csv_formatter def main(): #dir = 'C:\\grinstein\\VAST\\2006\\Code\\data\\visualization' dir = os.getcwd() + "\data\\" dir += "visualization\\" ontology_results_csv_formatter.csv_formatter(dir) ontology_results_csv_formatter.csv_crossfilter(dir) df = pd.read_csv(os.path.join(dir, 'ont_res_csv.csv')) df['Filename'] = df['Filename'].astype(str) df['Date'] = df['Date'].astype(str) df['EntityType'] = df['EntityType'].astype(str) df['EntityValue'] = df['EntityValue'].astype(str) SIZES = list(range(6, 22, 3)) print (SIZES) COLORS = Spectral5 print (COLORS) #ORIGINS = ['PER', 'ORG', 'GPE'] columns = sorted(df.columns) print (columns) discrete = [x for x in columns if df[x].dtype == object] #print(discrete) continuous = [x for x in columns if x not in discrete] #print (continuous) quantileable = [x for x in continuous if len(df[x].unique()) > 20] print (quantileable) def create_figure(): xs = df[x.value].values #print (xs) ys = df[y.value].values #print (ys) x_title = x.value.title() #print (x_title) y_title = y.value.title() #print (y_title) kw = dict() #print (kw) if x.value in discrete: kw['x_range'] = sorted(set(xs)) #print (kw) if y.value in discrete: kw['y_range'] = sorted(set(ys)) #print (kw) kw['title'] = "%s vs %s" % (x_title, y_title) #print (kw) p = figure(plot_height=400, plot_width=400, tools='pan,box_zoom,reset', **kw) p.xaxis.axis_label = x_title p.yaxis.axis_label = y_title # if x.value in discrete: # p.xaxis.major_label_orientation = pd.np.pi / 4 # sz = 9 # if size.value != 'None': # groups = pd.qcut(df[size.value].values, len(SIZES)) # sz = [SIZES[xx] for xx in groups.codes] # # c = "#31AADE" # if color.value != 'None': # groups = pd.qcut(df[color.value].values, len(COLORS)) # c = [COLORS[xx] for xx in groups.codes] # p.circle(x=xs, y=ys, color=c, size=sz, line_color="white", alpha=0.6, hover_color='white', hover_alpha=0.5) p.circle(x=xs, y=ys, line_color="white", alpha=0.6, hover_color='white', hover_alpha=0.5) show(p) return p def update(attr, old, new): layout.children[1] = create_figure() x = Select(title='X-Axis', value='Date', options=columns) #x.on_change('value', update) y = Select(title='Y-Axis', value='EntityValue', options=columns) #y.on_change('value', update) # size = Select(title='Size', value='None', options=['None'] + quantileable) # size.on_change('value', update) # # color = Select(title='Color', value='None', options=['None'] + quantileable) # color.on_change('value', update) #controls = widgetbox([x, y, color, size], width=200) controls = widgetbox([x, y], width=200) layout = row(controls, create_figure()) curdoc().add_root(layout) curdoc().title = "Crossfilter New" if __name__ == '__main__': main()