Spaces:
Sleeping
Sleeping
| 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() |