build_dashboard / app.py
mZichert's picture
Update app.py
827ec23 verified
raw
history blame
3.27 kB
import pandas as pd
import panel as pn
import numpy as np
import hvplot.pandas
from bokeh.models.widgets.tables import NumberFormatter, BooleanFormatter
import matplotlib.pyplot as plt
import seaborn as sns
sns.set(style='whitegrid', context='notebook')
#plt.rcParams["font.family"] = "Latin Modern Sans"
### Data
def load_data(sel_token):
if sel_token == "virtual":
df = pd.read_pickle("server_data/virtual_fulltexts_cossim_all_slice=1.pkl")
df = df.drop("virtual")
elif sel_token == "boson":
df = pd.read_pickle("server_data/cossims_plural_slicewidth=1.pkl")
elif sel_token == "intermediate":
df = pd.read_pickle("server_data/intermediate_fulltexts_cossim_all_slice=1.pkl")
df = df.drop("intermediate")
topn = 1000
df["sum"] = df.sum(axis=1)
df = df.astype("float32")
df = df.round(3)
df = df.sort_values("sum", ascending=False)
df = df.head(topn)
df.index.name = "token"
return df
sel_token = pn.widgets.Select(
name="Select dataset",
value="virtual",
options=["virtual", "intermediate", "boson"],
#description="Select the base token ",
)
df = pn.rx(load_data)(sel_token=sel_token)
### Table
table = pn.widgets.Tabulator(
df,
### functionality
#formatters= {col : NumberFormatter(format='0.000') for col in df.columns}, #tabulator_formatters,
header_filters = {'token': {'type': 'input', 'func': 'like', 'placeholder': 'search'}},
selectable='checkbox',
### style
theme = "modern", # 'default', 'site', 'simple', 'midnight', 'modern', 'bootstrap', 'bootstrap4', 'materialize', 'bulma', 'semantic-ui', or 'fast'
page_size = 8,
page = 1,
frozen_columns = {"token" : "left", "sum" : "right"}, # Must give width, otherwise doesn't work!
width=1800,
### other
disabled = True # Whether the cells are editable
)
### Plot
def make_fig():
fig, ax = plt.subplots(figsize=(12,4))
df_temp = load_data(sel_token.value)
if len(table.selection) > 0:
for i in table.selection:
df_temp.iloc[i][:-1].plot(ax=ax, label=df_temp.iloc[i].name, lw=2.2, marker=".")
#else:
#df.loc["particle"][:-1].plot(ax=ax, label="particle", lw=2.2, marker=".")
#plt.hist(np.random.random(10))
plt.ylabel("Cosine Similarity", fontsize=12)
plt.xlim()
plt.legend()
plt.close()
return fig
def plot_data(event):
# selected rows as indices in table.selection
#token = df.iloc[table.selection[0]].name
#values = df.iloc[table.selection[0]][:-1]
canvas.loading = True
fig = make_fig()
canvas.object = fig
canvas.loading = False
button = pn.widgets.Button(
name='Plot',
button_type='primary',
align="center",
width=100,
icon="snowman",
)
button.on_click(plot_data)
canvas = pn.pane.Matplotlib(
make_fig(),
format="svg",
#width=1000,
sizing_mode='stretch_width',
height=400,
tight=True)
### Serve
ACCENT = "teal"
pn.template.FastListTemplate(
title="Cosine Similarity for selected tokens",
sidebar=[],
main=[pn.Column(
pn.Row(sel_token),
table,
button,
canvas)],
main_layout=None,
accent=ACCENT,
).servable()