holzdeko / Niederschlag.py
BorowyP
panel app
fd0472a
# -*- coding: utf-8 -*-
"""
Created on Fri Mar 3 12:57:17 2023
@author: BorowyP
"""
import pandas as pd
import numpy as np
import hvplot.pandas # Adds .hvplot and .interactive methods to Pandas dataframes
import panel as pn # Panel is a simple, flexible and enterprise-ready data app framework
import holoviews as hv
from holoviews.operation.timeseries import rolling, rolling_outlier_std
PALETTE = ["#ff6f69", "#ffcc5c", "#88d8b0", ]
df_nied = pd.read_csv('Nied_holzdeko_csv.csv' ,
encoding_errors='ignore',
sep=';',
usecols=[1,2, 3, 4,5,6],
decimal=',')
def createStndrt(stnd_kennz, Stndrt,K_nK):
df = df_nied.loc[df_nied['FNR + NWP'] == stnd_kennz].copy()
df['Standort'] = Stndrt
df['K_nK'] = K_nK
df.index = pd.to_datetime(df_nied.loc[df_nied['FNR + NWP'] == '3NE']['MessDat'], dayfirst=True)
if K_nK == 'K':
df['K'] = df['Menge']
else:
df['nK'] = df['Menge']
return df
glienig_nied_K = createStndrt('3NE', 'Glienig','K')
glienig_nied_nK = createStndrt('3NW', 'Glienig','nK')
grlieb_nied_K = createStndrt('4SE', 'Groß Liebitz','K')
grlieb_nied_nK= createStndrt('4NW', 'Groß Liebitz','nK')
krausnick_nied_K = createStndrt('9NE', 'Krausnick','K')
krausnick_nied_nK = createStndrt('9NW', 'Krausnick','nK')
hberg_nied_K = createStndrt('10SE', 'Hangelsberg','K')
hberg_nied_nK = createStndrt('10SW', 'Hangelsberg','nK')
halbe_nied_K = createStndrt('12NE', 'Halbe','K')
halbe_nied_nK = createStndrt('12NW', 'Halbe','nK')
spreeau_nied_K = createStndrt('19NE', 'Spreeau','K')
spreeau_nied_nK = createStndrt('19NW', 'Spreeau','nK')
nied = pd.concat([glienig_nied_K,glienig_nied_nK,
grlieb_nied_K, grlieb_nied_nK,
krausnick_nied_K, krausnick_nied_nK,
hberg_nied_K, hberg_nied_nK,
halbe_nied_K, halbe_nied_nK,
spreeau_nied_K, spreeau_nied_nK])
nied = nied.drop(nied.columns[[1]], axis=1)
nied_inter = nied.interactive()
yaxis = pn.widgets.ToggleGroup(
name='Kalkung',
options=['K','nK'],
value=['K'],
button_type='success')
nied_date_slider = pn.widgets.DateRangeSlider(name='Date', start=nied.index.min(), end=nied.index.max())
Stndrt = pn.widgets.RadioButtonGroup(name='Standort', options=['Glienig', 'Groß Liebitz', 'Krausnick', 'Halbe', 'Spreeau', 'Hangelsberg'],button_type='success')
nied_pipe = (
nied_inter[
(nied_inter.Standort == Stndrt ) &
(nied_inter.K_nK.isin(yaxis)) &
(nied_inter.index >= nied_date_slider.param.value_start) &
(nied_inter.index <= nied_date_slider.param.value_end)
]
.groupby(['MessDat'])[yaxis].mean()
)
nied_lin_plot = nied_pipe.hvplot(x='MessDat',
xlabel='Datum',
y=yaxis,
#y='Menge',
ylabel= 'Niederschlag [mm]',
title=Stndrt,
#by='origin',
color=PALETTE,
line_width=2)
nied_lin_plot
summe = (
nied_inter[
(nied_inter.index >= nied_date_slider.param.value_start) &
(nied_inter.index <= nied_date_slider.param.value_end)]
.groupby(['Standort', 'K_nK']).sum()
)
summe_plot = summe.hvplot(x='Standort', y=('Menge'), by='K_nK', kind='bar',
title='Summe Niederschlag', xlabel='Standort', ylabel='Menge [mm]')
hd_logo = pn.pane.PNG('HD_Logo.png', width=100)
hd_logo
lfe_logo = pn.pane.PNG('LFE_Logo.png', width=100)
fnr_logo = pn.pane.PNG('fnr_logo.png', width=100)
template = pn.template.FastListTemplate(
title='Holzdeko Dashboard',
sidebar=[hd_logo,
pn.pane.Markdown("## Einstellungen"),
'Standort',Stndrt,
'gekalkt/ungekalkt', yaxis,
lfe_logo,
fnr_logo
#'Boden',
#'Gekalkt/ungekalkt', yaxis,
],
main=[pn.pane.Markdown("## Niederschlag"),
nied_date_slider,
nied_lin_plot.panel(),
summe_plot,#.panel() #NIEDERSCHLAG
#accent_base_color="#88d8b0",
#header_background="#88d8b0",
])
template.servable();
#print('fertig!')
# To launch this dashboard as a web server, we can simply run
# cd C:\Users\BorowyP\Desktop\Dashboard-Preasi\soil_air\
# panel serve 20230303_niederschlag_docker.ipynb --autoreload