CoolFace
Apppublic

kill47bill/build_dashboard

sourceHugging Facemitupdated 2y agoView on Hugging Face
0likes
app.py108 linesDownload Raw Back to root
1import panel as pn2import pandas as pd3import hvplot.pandas4 5pn.extension("tabulator")6 7ACCENT="teal"8 9styles = {10    "box-shadow": "rgba(50, 50, 93, 0.25) 0px 6px 12px -2px, rgba(0, 0, 0, 0.3) 0px 3px 7px -3px",11    "border-radius": "4px",12    "padding": "10px",13}14 15image = pn.pane.JPG("https://assets.holoviz.org/panel/tutorials/wind_turbines_sunset.png")16 17# Extract Data18 19@pn.cache()  # only download data once20def get_data():21    return pd.read_csv("https://assets.holoviz.org/panel/tutorials/turbines.csv.gz")22 23# Transform Data24 25source_data = get_data()26min_year = int(source_data["p_year"].min())27max_year = int(source_data["p_year"].max())28top_manufacturers = (29    source_data.groupby("t_manu").p_cap.sum().sort_values().iloc[-10:].index.to_list()30)31 32def filter_data(t_manu, year):33    data = source_data[(source_data.t_manu == t_manu) & (source_data.p_year <= year)]34    return data35 36# Filters37 38t_manu = pn.widgets.Select(39    name="Manufacturer",40    value="Vestas",41    options=sorted(top_manufacturers),42    description="The name of the manufacturer",43)44p_year = pn.widgets.IntSlider(name="Year", value=max_year, start=min_year, end=max_year)45 46# Transform Data 247 48df = pn.rx(filter_data)(t_manu=t_manu, year=p_year)49count = df.rx.len()50total_capacity = df.t_cap.sum()51avg_capacity = df.t_cap.mean()52avg_rotor_diameter = df.t_rd.mean()53 54# Plot Data55 56fig = (57    df[["p_year", "t_cap"]].groupby("p_year").sum() / 10**658).hvplot.bar(59    title="Capacity Change",60    rot=90,61    ylabel="Capacity (GW)",62    xlabel="Year",63    xlim=(min_year, max_year),64    color=ACCENT, 65)66 67# Display Data68 69indicators = pn.FlexBox(70    pn.indicators.Number(71        value=count, name="Count", format="{value:,.0f}", styles=styles72    ),73    pn.indicators.Number(74        value=total_capacity / 1e6,75        name="Total Capacity (GW)",76        format="{value:,.1f}",77        styles=styles,78    ),79    pn.indicators.Number(80        value=avg_capacity/1e3,81        name="Avg. Capacity (MW)",82        format="{value:,.1f}",83        styles=styles,84    ),85    pn.indicators.Number(86        value=avg_rotor_diameter,87        name="Avg. Rotor Diameter (m)",88        format="{value:,.1f}",89        styles=styles,90    ),91)92 93plot = pn.pane.HoloViews(fig, sizing_mode="stretch_both", name="Plot")94table = pn.widgets.Tabulator(df, sizing_mode="stretch_both", name="Table")95 96# Layout Data97 98tabs = pn.Tabs(99    plot, table, styles=styles, sizing_mode="stretch_width", height=500, margin=10100)101 102pn.template.FastListTemplate(103    title="Wind Turbine Dashboard",104    sidebar=[image, t_manu, p_year],105    main=[pn.Column(indicators, tabs, sizing_mode="stretch_both")],106    main_layout=None,107    accent=ACCENT,108).servable()