In this example, you will learn how to create a web app that can do a pivot table on CSV data uploaded by the user.
To create a pivot table, we will use a custom widget
pivottablejs (opens in a new tab). It is compatible with Jupyter Notebook/Lab and Mercury.
The dataset will be loaded from a CSV file with
File widget from Mercury.
The notebook and web app are presented in the below animation.
You will need the following packages to run this example:
mercury pandas pivottablejs
mercuryis for the file upload widget and for serving notebook as a web app,
pandasis for reading CSV file,
pivottablejsis for displaying the pivot table user interface.
In the first cell, please import the required packages:
import pandas as pd import mercury as mr from pivottablejs import pivot_ui
Let's setup Mercury app properties:
app = mr.App(title="Pivot table", description="Do pivot table on any CSV file")
The file upload widget is added with one line of code:
my_file = mr.File(label="Upload CSV file")
We stop the execution of the notebook until the file is uploaded. We use
Stop widget to stop the execution of the notebook.
if my_file.filepath is None: mr.Markdown("Please upload CSV file") mr.Stop()
We load the dataset with the
# load CSV data df = pd.read_csv(my_file.filepath)
The pivot table for our DataFrame is displayed with the following code:
# display pivot table pivot_ui(df, height="800px")
You can analyze your DataFrame with a pivot table in the Jupyter Notebook. Here is the screenshot with the code in Jupyter Notebook:
You can share your notebook with non-technical users. They will be able to upload their dataset in CSV format and perform analysis with a pivot table (you will make them happy!).
Please start Mercury Server in the same directory as notebook:
You will see the app running at
http://127.0.0.1:8000. You will see a home view with your notebook. Please click on its title.
You should see the web app running. After uploading an example CSV file, you should see an app similar to in the screenshot below:
The notebook from this example is available in the mercury-examples (opens in a new tab) repository.