I am creating dashboard, where user can select file from given directory and dashboard will show aggregated summary. Also user can select aggregation based on his needs. I am running command "panel serve .ipynb to execute the notebook.
import os
import pandas as pd
import bokeh
import hvplot.pandas
import panel as pn
import param
import holoviews as hv
hv.extension('plotly')
pn.extension()
PALETTE=["#ff6f69", "#ffcc5c", "#88d8b0"]
output_dir = r'C:\Users\navee\Desktop\GL' # change to the desired directory
files = pn.widgets.FileSelector(output_dir)
@param.depends('files', watch=True)
def file_rd(files):
if files.value:
df = pd.read_csv(files.value[0])
print(df)
print("File Selected :", files.value[0])
idf = df.interactive()
GroupByOptions = ['agg1', 'agg2', 'agg3', 'agg4', 'agg5']
OtherColumns = [i for i in df.columns if i not in GroupByOptions]
CheckBoxGroup1 = pn.widgets.CheckBoxGroup(name='Groupby Options', value=['agg1'], options=GroupByOptions)
CheckBoxGroup2 = pn.widgets.CheckBoxGroup(name='Other Column Options', value=['amount'], options=OtherColumns)
ipipeline = (idf.groupby(CheckBoxGroup1.value)[CheckBoxGroup2.value].sum().reset_index().reset_index(drop=True))
itable = ipipeline.pipe(pn.widgets.Tabulator, pagination='remote', page_size=20, sizing_mode = 'stretch_width')
# layout template
template = pn.template.FastListTemplate(
site='MY Dashboard',
title='Interactive DataFrame',
main=[files,itable.panel()],
sidebar=[pn.pane.Markdown('## GroupBy Options'),
CheckBoxGroup1,
pn.pane.Markdown('## Aggregated Column Options'),
CheckBoxGroup2])
return template.servable()
pn.Column(files, file_rd)
Pandas: '1.4.4' hvplot: '0.8.0' panel: '0.14.4'
DUMMY data looks like:
Thanks!