File size: 4,547 Bytes
fd0472a
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
# -*- 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