Spaces:
Running
Running
| """Example to show dashboard configuration.""" | |
| from dash import html, get_asset_url | |
| import dash_bootstrap_components as dbc | |
| import pandas as pd | |
| import vizro.models as vm | |
| from utils._charts import COLUMN_DEFS, area, bar, choropleth, pie | |
| from utils._helper import clean_data_and_add_columns, create_data_for_kpi_cards | |
| from vizro import Vizro | |
| from vizro.actions import filter_interaction | |
| from vizro.figures import kpi_card_reference | |
| from vizro.tables import dash_ag_grid | |
| # DATA -------------------------------------------------------------------------------------------- | |
| df_complaints = pd.read_csv("https://query.data.world/s/glbdstahsuw3hjgunz3zssggk7dsfu?dws=00000") | |
| df_complaints = clean_data_and_add_columns(df_complaints) | |
| df_kpi_cards = create_data_for_kpi_cards(df_complaints) | |
| # SUB-SECTIONS ------------------------------------------------------------------------------------ | |
| kpi_banner = vm.Container( | |
| layout=vm.Flex(direction="row"), | |
| components=[ | |
| vm.Figure( | |
| id="kpi-reverse-coloring", | |
| figure=kpi_card_reference( | |
| df_kpi_cards, | |
| value_column="Total Complaints_2019", | |
| reference_column="Total Complaints_2018", | |
| title="Total Complaints", | |
| value_format="{value:.0f}", | |
| reference_format="{delta_relative:+.1%} vs. 2018 ({reference:.0f})", | |
| icon="person", | |
| ), | |
| ), | |
| vm.Figure( | |
| figure=kpi_card_reference( | |
| df_kpi_cards, | |
| value_column="Closed Complaints_2019", | |
| reference_column="Closed Complaints_2018", | |
| title="Closed Complaints", | |
| value_format="{value:.1f}%", | |
| reference_format="{delta:+.1f}pp vs. 2018 ({reference:.1f}%)", | |
| icon="inventory", | |
| ) | |
| ), | |
| vm.Figure( | |
| figure=kpi_card_reference( | |
| df_kpi_cards, | |
| value_column="Timely response_2019", | |
| reference_column="Timely response_2018", | |
| title="Timely Response", | |
| value_format="{value:.1f}%", | |
| reference_format="{delta:+.1f}pp vs. 2018 ({reference:.1f}%)", | |
| icon="timer", | |
| ) | |
| ), | |
| vm.Figure( | |
| figure=kpi_card_reference( | |
| df_kpi_cards, | |
| value_column="Closed w/o cost_2019", | |
| reference_column="Closed w/o cost_2018", | |
| title="Closed w/o cost", | |
| value_format="{value:.1f}%", | |
| reference_format="{delta:.1f}pp vs. 2018 ({reference:.1f}%)", | |
| icon="payments", | |
| ) | |
| ), | |
| vm.Figure( | |
| figure=kpi_card_reference( | |
| df_kpi_cards, | |
| value_column="Consumer disputed_2019", | |
| reference_column="Consumer disputed_2018", | |
| title="Consumer disputed", | |
| value_format="{value:.1f}%", | |
| reference_format="{delta:+.1f}pp vs. 2018 ({reference:.1f}%)", | |
| icon="sentiment_dissatisfied", | |
| ) | |
| ), | |
| ], | |
| ) | |
| bar_charts_tabbed = vm.Tabs( | |
| tabs=[ | |
| vm.Container( | |
| title="By Product", | |
| components=[ | |
| vm.Graph( | |
| figure=bar( | |
| data_frame=df_complaints, | |
| y="Product", | |
| x="Complaint ID", | |
| ), | |
| ) | |
| ], | |
| ), | |
| vm.Container( | |
| title="By Channel", | |
| components=[ | |
| vm.Graph( | |
| figure=bar( | |
| data_frame=df_complaints, | |
| y="Channel", | |
| x="Complaint ID", | |
| ), | |
| ) | |
| ], | |
| ), | |
| vm.Container( | |
| title="By Region", | |
| components=[ | |
| vm.Graph( | |
| figure=bar( | |
| data_frame=df_complaints, | |
| y="Region", | |
| x="Complaint ID", | |
| ), | |
| ) | |
| ], | |
| ), | |
| vm.Container( | |
| title="By Issue", | |
| components=[ | |
| vm.Graph( | |
| figure=bar( | |
| data_frame=df_complaints, | |
| y="Issue", | |
| x="Complaint ID", | |
| ), | |
| ) | |
| ], | |
| ), | |
| ], | |
| ) | |
| # PAGES -------------------------------------------------------------------------------------- | |
| page_exec = vm.Page( | |
| title="Executive View", | |
| layout=vm.Grid( | |
| grid=[ | |
| [0, 0], | |
| [0, 0], | |
| [1, 2], | |
| [1, 2], | |
| [1, 2], | |
| [1, 3], | |
| [1, 3], | |
| [1, 3], | |
| ], | |
| ), | |
| components=[ | |
| kpi_banner, | |
| bar_charts_tabbed, | |
| vm.Graph(figure=area(data_frame=df_complaints, y="Complaint ID", x="Month")), | |
| vm.Graph( | |
| figure=pie( | |
| data_frame=df_complaints[df_complaints["Company response - Closed"] != "Not closed"], | |
| values="Complaint ID", | |
| names="Company response - Closed", | |
| title="Closed company responses", | |
| ) | |
| ), | |
| ], | |
| ) | |
| page_region = vm.Page( | |
| title="Regional View", | |
| layout=vm.Grid(grid=[[0, 1]]), | |
| components=[ | |
| vm.Graph( | |
| figure=choropleth( | |
| data_frame=df_complaints, | |
| locations="State", | |
| color="Complaint ID", | |
| title="Complaints by State <br><sup> ⤵ Click on a state to filter the " | |
| "charts on the right. Refresh the page to deselect.</sup>", | |
| custom_data=["State"], | |
| ), | |
| actions=[ | |
| vm.Action( | |
| function=filter_interaction(targets=["regional-issue", "regional-product"]), | |
| ) | |
| ], | |
| ), | |
| vm.Tabs( | |
| tabs=[ | |
| vm.Container( | |
| title="By Product", | |
| components=[ | |
| vm.Graph( | |
| id="regional-product", | |
| figure=bar( | |
| data_frame=df_complaints, | |
| y="Product", | |
| x="Complaint ID", | |
| ), | |
| ) | |
| ], | |
| ), | |
| vm.Container( | |
| title="By Issue", | |
| components=[ | |
| vm.Graph( | |
| id="regional-issue", | |
| figure=bar( | |
| data_frame=df_complaints, | |
| y="Issue", | |
| x="Complaint ID", | |
| ), | |
| ) | |
| ], | |
| ), | |
| ], | |
| ), | |
| ], | |
| controls=[ | |
| vm.Filter(column="Region", selector=vm.Checklist()), | |
| vm.Filter(column="State"), | |
| vm.Filter(column="Product"), | |
| vm.Filter(column="Issue"), | |
| ], | |
| ) | |
| page_table = vm.Page( | |
| title="List of complaints", | |
| components=[ | |
| vm.AgGrid( | |
| figure=dash_ag_grid( | |
| data_frame=df_complaints, | |
| columnDefs=COLUMN_DEFS, | |
| dashGridOptions={"pagination": True}, | |
| ) | |
| ) | |
| ], | |
| ) | |
| dashboard = vm.Dashboard( | |
| pages=[page_exec, page_region, page_table], | |
| title="Cumulus Financial Corp. - Fiscal Year 2019", | |
| navigation=vm.Navigation( | |
| nav_selector=vm.NavBar( | |
| items=[ | |
| vm.NavLink(label="Executive View", icon="Leaderboard", pages=["Executive View"]), | |
| vm.NavLink(label="Regional View", icon="South America", pages=["Regional View"]), | |
| vm.NavLink(label="Table View", icon="Table View", pages=["List of complaints"]), | |
| ] | |
| ) | |
| ), | |
| ) | |
| app = Vizro().build(dashboard) | |
| app.dash.layout.children.append( | |
| dbc.NavLink( | |
| ["Made with ", html.Img(src=get_asset_url("images/logo.svg"), id="banner", alt="Vizro logo"), "vizro"], | |
| href="https://github.com/mckinsey/vizro", | |
| target="_blank", | |
| external_link=True, | |
| className="anchor-container", | |
| ) | |
| ) | |
| if __name__ == "__main__": | |
| app.run() | |