In this tutorial, we will learn how to deploy a Python dashboard to the Web for Free. The tutorial uses a website named "Pythonanywhere.com" which lets us deploy one Web App for free. Dashboard created using Plotly & Dash is deployed on pythonanywhere.
Dash Code:
import pandas as pd
import plotly.express as px
from sklearn.datasets import load_wine
from dash import Dash, html, dcc, callback
from dash.dependencies import Input, Output
### Load Data
def load_data():
wine = load_wine()
wine_df = pd.DataFrame(wine.data, columns=wine.feature_names)
wine_df["WineType"] = [wine.target_names[t] for t in wine.target]
return wine_df
wine_df = load_data()
ingredients = wine_df.drop(columns=["WineType"]).columns
avg_wine_df = wine_df.groupby("WineType").mean().reset_index()
## Charts
def create_scatter_chart(x_axis="alcohol", y_axis="malic_acid", color_encode=False):
scatter_fig = px.scatter(wine_df, x=x_axis, y=y_axis, color="WineType" if color_encode else None,
title="{} vs{}".format(x_axis.capitalize(), y_axis.capitalize()))
scatter_fig.update_layout(height=600)
return scatter_fig
def create_bar_chart(ingredients=["alcohol", "malic_acid", "ash"]):
bar_fig= px.bar(avg_wine_df, x="WineType", y=ingredients, title="Avg. Ingredients per Wine Type")
bar_fig.update_layout(height=600)
return bar_fig
## Widgets
x_axis = dcc.Dropdown(id="x_axis", options=ingredients, value="alcohol", clearable=False, style={"display": "inline-block", "width": "48%"})
y_axis = dcc.Dropdown(id="y_axis", options=ingredients, value="malic_acid", clearable=False, style={"display": "inline-block", "width": "48%"})
color_encode = dcc.Checklist(id="color_encode", options=["Color-Encode",])
multi_select = dcc.Dropdown(id="multi_select", options=ingredients, value=["alcohol", "malic_acid", "ash"], clearable=False, multi=True)
## Web App Layout
app = Dash(title="Wine Analysis")
app.layout = html.Div(
children=[
html.H1("Wine Dataset Analysis", style={"text-align": "center"}),
html.Div("Explore relationship between various ingredients used in creation of three different types of Wines (class_0, class_1 & class_2)", style={"text-align": "center"}),
html.Br(),
html.Div(
children=[
x_axis, y_axis, color_encode,
dcc.Graph(id="scatter_chart", figure=create_scatter_chart())
],
style={"display": "inline-block", "width": "48%"}
),
html.Div(
children=[
multi_select, html.Br(),
dcc.Graph(id="bar_chart", figure=create_bar_chart())
],
style={"display": "inline-block", "width": "48%"}
)
],
style={"padding": "50px"}
)
## Callbacks
@callback(Output("scatter_chart", "figure"), [Input("x_axis", "value"), Input("y_axis", "value"), Input("color_encode", "value")])
def update_scatter_chart(x_axis, y_axis, color_encode):
return create_scatter_chart(x_axis, y_axis, color_encode)
@callback(Output("bar_chart", "figure"), [Input("multi_select", "value"), ])
def update_bar_chart(ingredients):
return create_bar_chart(ingredients)
if __name__ == "__main__":
app.run_server(debug=True)