Spaces:
Running
Running
# -*- coding: utf-8 -*- | |
""" | |
Created on Fri Mar 3 12:57:34 2023 | |
@author: BorowyP | |
""" | |
import pandas as pd | |
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 | |
hv.extension('bokeh') | |
#pn.extension('tabulator') | |
pn.extension(sizing_mode="stretch_width") | |
#pd.set_option("precision", 0) | |
PALETTE = ["#ff6f69", "#ffcc5c", "#88d8b0", ] | |
import numpy as np | |
from bokeh.models.formatters import DatetimeTickFormatter | |
formatter = DatetimeTickFormatter(months='%b %Y') # wird in .hvplot benötigt für x-achse! | |
soil_temp = pd.read_csv('df_soil_temp.csv',header=0,sep=',') | |
soil_temp.index = pd.to_datetime(soil_temp['Date'], format='%Y.%m.%d %H:%M:%S') | |
soil_temp.index.names = ['Date'] | |
soil_temp = soil_temp.drop(['Date'], axis=1) | |
soil_temp = soil_temp.drop(['Unnamed: 0'], axis=1) | |
soil_hum = pd.read_csv('df_soil_hum.csv',header=0,sep=',') | |
soil_hum.index = pd.to_datetime(soil_hum['Date'], format='%Y.%m.%d %H:%M:%S') | |
soil_hum.index.names = ['Date'] | |
soil_hum = soil_hum.drop(['Date'], axis=1) | |
soil_hum = soil_hum.drop(['Unnamed: 0'], axis=1) | |
Stndrt = pn.widgets.RadioButtonGroup(name='Standort', options=['Glienig', 'Groß Liebitz', 'Krausnick', 'Halbe', 'Spreeau', 'Hangelsberg'],button_type='success') | |
soilhumbtn = pn.widgets.ToggleGroup( | |
name='soilhumidity', | |
options=['Prof100', 'Prof200', 'Prof300', 'Prof400', 'Prof600', 'Prof1000'], | |
value=['Prof100'], | |
button_type='success') | |
soiltempbtn = pn.widgets.ToggleGroup( | |
name='soiltemperature', | |
options=['Temp05', 'Temp10', 'Temp20', 'Temp30', 'Temp50', 'Temp100'], | |
value=['Temp05'], | |
button_type='success') | |
soil_date_slider = pn.widgets.DateRangeSlider(name='Date', start=soil_temp.index.min(), end=soil_temp.index.max()) | |
soil_temp_i= soil_temp.interactive() | |
soil_temp_i = ( | |
soil_temp_i[ | |
(soil_temp_i.Standort == Stndrt) & | |
(soil_temp_i.index >= soil_date_slider.param.value_start) & | |
(soil_temp_i.index <= soil_date_slider.param.value_end) | |
] | |
) | |
soil_hum_i = soil_hum.interactive() | |
soil_hum_i = ( soil_hum_i[ | |
(soil_hum_i.Standort == Stndrt) & | |
(soil_hum_i.index >= soil_date_slider.param.value_start) & | |
(soil_hum_i.index <= soil_date_slider.param.value_end) ]) | |
soiltempplot = soil_temp_i.hvplot(x='Date',xlabel='Datum',title=Stndrt, y=soiltempbtn, color=PALETTE, line_width=1, xformatter=formatter, ylabel='Bodentemperatur [°C]') | |
soilhumplot = soil_hum_i.hvplot(x='Date',xlabel='Datum',title=Stndrt, y=soilhumbtn, color=PALETTE, line_width=1, xformatter=formatter, ylabel='Bodenfeuchte[%]') | |
soiltemp_box = soil_temp_i[['Temp05', 'Temp10', 'Temp20', 'Temp30', 'Temp50', 'Temp100']].fillna(0) | |
soiltemp_box_plot = soiltemp_box.hvplot(kind='box', legend=False, xlabel=Stndrt, ylabel='Bodentemperatur [°C]') | |
soilhum_box = soil_hum_i[['Prof100', 'Prof200', 'Prof300', 'Prof400', 'Prof600', 'Prof1000']].fillna(0) | |
soilhum_box_plot = soilhum_box.hvplot(kind='box', legend=False, xlabel=Stndrt, ylabel='Bodenfeuchte [%]') | |
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, | |
lfe_logo, | |
fnr_logo | |
#'Boden', | |
#'Gekalkt/ungekalkt', yaxis, | |
], | |
main=[pn.pane.Markdown("## Boden"), | |
soiltempbtn, | |
soil_date_slider, | |
soiltempplot.panel(), | |
soiltemp_box_plot.panel(), | |
soilhumbtn, | |
soil_date_slider, | |
soilhumplot.panel(), | |
soilhum_box_plot.panel() | |
#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_soil_temp_hum_docker.ipynb --autoreload |