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