# -*- 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