RoyAalekh commited on
Commit
e66dc34
·
verified ·
1 Parent(s): a815d8b

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +203 -203
app.py CHANGED
@@ -1,203 +1,203 @@
1
- import panel as pn
2
- import pandas as pd
3
-
4
- from consts import INVERTER_ID_MAPPING, TEMPERATURE_COLUMNS_TO_USE
5
- from plotting import (
6
- create_heatmap,
7
- create_iv_plot_with_power_curves,
8
- create_iv_plot,
9
- create_iv_plot_with_power_and_temperature_curves,
10
- create_iv_plot_with_temperature_curves,
11
- )
12
-
13
- # Read metadata to get the date range
14
- timeseries_data = pd.read_csv(
15
- r"data/multi_index_timeseries_data.csv",
16
- index_col=0,
17
- header=[0, 2],
18
- parse_dates=True,
19
- )
20
- other_features_data = pd.read_csv(
21
- r"data/other_features_data.csv", index_col=0, header=0, parse_dates=True
22
- )
23
- other_features_data = other_features_data[TEMPERATURE_COLUMNS_TO_USE]
24
- kpi_data = pd.read_csv(
25
- r"data/kpi_data.csv", index_col=0, header=0, parse_dates=True
26
- )
27
- daily_timeseries_data = pd.read_csv(
28
- r"data/daily_aggregated_timeseries_data.csv",
29
- index_col=0,
30
- header=0,
31
- parse_dates=True,
32
- )
33
-
34
- # Initialize Panel extension
35
- pn.extension("plotly")
36
-
37
- # Widgets for selecting columns
38
- inverter_ids = pn.widgets.MultiSelect(
39
- name="Inverter IDs",
40
- value=[list(INVERTER_ID_MAPPING.keys())[0]],
41
- options=list(INVERTER_ID_MAPPING.keys()),
42
- size=8,
43
- )
44
- # Line Plots
45
- plot_power_curves = pn.widgets.Checkbox(name="Plot P-dc and P-ac", value=False)
46
- plot_temperature_curves = pn.widgets.Checkbox(name="Plot Temperatures", value=False)
47
-
48
- # Heatmaps
49
- heatmap_pr = pn.widgets.Checkbox(name="Heat Map PR", value=False)
50
- heatmap_sy = pn.widgets.Checkbox(name="Heat Map SY", value=False)
51
- heatmap_current = pn.widgets.Checkbox(name="Heat Map - Current", value=False)
52
- heatmap_voltage = pn.widgets.Checkbox(name="Heat Map - Voltage", value=False)
53
- heatmap_power = pn.widgets.Checkbox(name="Heat Map - Power", value=False)
54
- heatmap_irradiance = pn.widgets.Checkbox(name="Heat Map - Irradiance", value=False)
55
- heatmap_temperature = pn.widgets.Checkbox(
56
- name="Heat Map - Temperature " "Heatsink", value=False
57
- )
58
-
59
- # Create a loading spinner
60
- loading_spinner = pn.indicators.LoadingSpinner(width=50, height=50)
61
-
62
-
63
- # Panel interactive functions
64
- @pn.depends(
65
- inverter_ids.param.value,
66
- plot_power_curves.param.value,
67
- plot_temperature_curves.param.value,
68
- )
69
- def update_iv_plot(inverter_ids, plot_power_curves, plot_temperature_curves):
70
- if not inverter_ids:
71
- return pn.pane.Markdown("No Inverters selected for Plotting.")
72
- else:
73
- # Plot IV + Power + Temperature Curves
74
- if plot_power_curves and plot_temperature_curves:
75
- print("Plotting IV + Power + Temperature Curves")
76
- return create_iv_plot_with_power_and_temperature_curves(
77
- timeseries_data, other_features_data, inverter_ids
78
- )
79
- # Plot IV + Temperature Curves
80
- elif (not plot_power_curves) and plot_temperature_curves:
81
- print("Plot IV + Temperature Curves")
82
- return create_iv_plot_with_temperature_curves(
83
- timeseries_data, other_features_data, inverter_ids
84
- )
85
- # Plot IV + Power Curves
86
- elif plot_power_curves and (not plot_temperature_curves):
87
- print("Plot IV + Power Curves")
88
- return create_iv_plot_with_power_curves(timeseries_data, inverter_ids)
89
- # Plot only IV Curves
90
- else:
91
- print("Plot only IV Curves")
92
- return create_iv_plot(timeseries_data, inverter_ids)
93
-
94
-
95
- @pn.depends(heatmap_pr.param.value)
96
- def update_heatmap_pr(heatmap_pr):
97
- if heatmap_pr:
98
- pr_df = kpi_data.filter(like="pr")
99
- pr_df.columns = [i.split("-")[1] for i in pr_df.columns]
100
- pr_heatmap = create_heatmap(pr_df, "PR Heatmap")
101
- return pn.Row(pr_heatmap)
102
- return pn.pane.Markdown("")
103
-
104
-
105
- @pn.depends(heatmap_sy.param.value)
106
- def update_heatmap_sy(heatmap_sy):
107
- if heatmap_sy:
108
- sy_df = kpi_data.filter(like="daily_specific_yield")
109
- sy_df.columns = [i.split("-")[1] for i in sy_df.columns]
110
- sy_heatmap = create_heatmap(sy_df, "SY Heatmap")
111
- return pn.Row(sy_heatmap)
112
- return pn.pane.Markdown("")
113
-
114
-
115
- @pn.depends(heatmap_current.param.value)
116
- def update_heatmap_current(heatmap_current):
117
- if heatmap_current:
118
- current_df = daily_timeseries_data.filter(like="I")
119
- current_df.columns = [i.split("-")[1] for i in current_df.columns]
120
- current_heatmap = create_heatmap(current_df, "Current Heatmap")
121
- return pn.Row(current_heatmap)
122
- return pn.pane.Markdown("")
123
-
124
-
125
- @pn.depends(heatmap_voltage.param.value)
126
- def update_heatmap_voltage(heatmap_voltage):
127
- if heatmap_voltage:
128
- voltage_df = daily_timeseries_data.filter(like="V")
129
- voltage_df.columns = [i.split("-")[1] for i in voltage_df.columns]
130
- voltage_heatmap = create_heatmap(voltage_df, "Voltage Heatmap")
131
- return pn.Row(voltage_heatmap)
132
- return pn.pane.Markdown("")
133
-
134
-
135
- @pn.depends(heatmap_power.param.value)
136
- def update_heatmap_power(heatmap_power):
137
- if heatmap_power:
138
- power_df = daily_timeseries_data.filter(like="P")
139
- power_df.columns = [i.split("-")[1] for i in power_df.columns]
140
- power_heatmap = create_heatmap(power_df, "Power Heatmap")
141
- return pn.Row(power_heatmap)
142
- return pn.pane.Markdown("")
143
-
144
-
145
- @pn.depends(heatmap_irradiance.param.value)
146
- def update_heatmap_irradiance(heatmap_irradiance):
147
- if heatmap_irradiance:
148
- irradiance_df = daily_timeseries_data.filter(like="G")
149
- irradiance_df.columns = [i.split("-")[1] for i in irradiance_df.columns]
150
- irradiance_heatmap = create_heatmap(irradiance_df, "Irradiance " "Heatmap")
151
- return pn.Row(irradiance_heatmap)
152
- return pn.pane.Markdown("")
153
-
154
-
155
- @pn.depends(heatmap_temperature.param.value)
156
- def update_heatmap_temperature(heatmap_temperature):
157
- if heatmap_temperature:
158
- temp_df = daily_timeseries_data.filter(like="THeatSink")
159
- temp_df.columns = [i.split("-")[1] for i in temp_df.columns]
160
- temp_heatmap = create_heatmap(temp_df, "T-Heatsink Heatmap")
161
- return pn.Row(temp_heatmap)
162
- return pn.pane.Markdown("")
163
-
164
-
165
- # Create dashboard layout
166
- dashboard = pn.Column(
167
- "# ENEL Dashboard",
168
- # IV Plots
169
- pn.Row(
170
- pn.Column(inverter_ids, plot_power_curves, plot_temperature_curves),
171
- pn.panel(update_iv_plot, sizing_mode="stretch_width"),
172
- ),
173
- # Heatmaps
174
- pn.Row(
175
- pn.Column(heatmap_pr), pn.panel(update_heatmap_pr, sizing_mode="stretch_width")
176
- ),
177
- pn.Row(
178
- pn.Column(heatmap_sy), pn.panel(update_heatmap_sy, sizing_mode="stretch_width")
179
- ),
180
- pn.Row(
181
- pn.Column(heatmap_current),
182
- pn.panel(update_heatmap_current, sizing_mode="stretch_width"),
183
- ),
184
- pn.Row(
185
- pn.Column(heatmap_voltage),
186
- pn.panel(update_heatmap_voltage, sizing_mode="stretch_width"),
187
- ),
188
- pn.Row(
189
- pn.Column(heatmap_power),
190
- pn.panel(update_heatmap_power, sizing_mode="stretch_width"),
191
- ),
192
- pn.Row(
193
- pn.Column(heatmap_irradiance),
194
- pn.panel(update_heatmap_irradiance, sizing_mode="stretch_width"),
195
- ),
196
- pn.Row(
197
- pn.Column(heatmap_temperature),
198
- pn.panel(update_heatmap_temperature, sizing_mode="stretch_width"),
199
- ),
200
- )
201
-
202
- # Serve the dashboard
203
- dashboard.servable()
 
1
+ import panel as pn
2
+ import pandas as pd
3
+
4
+ from consts import INVERTER_ID_MAPPING, TEMPERATURE_COLUMNS_TO_USE
5
+ from plotting import (
6
+ create_heatmap,
7
+ create_iv_plot_with_power_curves,
8
+ create_iv_plot,
9
+ create_iv_plot_with_power_and_temperature_curves,
10
+ create_iv_plot_with_temperature_curves,
11
+ )
12
+
13
+ # Read metadata to get the date range
14
+ timeseries_data = pd.read_csv(
15
+ r"multi_index_timeseries_data.csv",
16
+ index_col=0,
17
+ header=[0, 2],
18
+ parse_dates=True,
19
+ )
20
+ other_features_data = pd.read_csv(
21
+ r"other_features_data.csv", index_col=0, header=0, parse_dates=True
22
+ )
23
+ other_features_data = other_features_data[TEMPERATURE_COLUMNS_TO_USE]
24
+ kpi_data = pd.read_csv(
25
+ r"kpi_data.csv", index_col=0, header=0, parse_dates=True
26
+ )
27
+ daily_timeseries_data = pd.read_csv(
28
+ r"daily_aggregated_timeseries_data.csv",
29
+ index_col=0,
30
+ header=0,
31
+ parse_dates=True,
32
+ )
33
+
34
+ # Initialize Panel extension
35
+ pn.extension("plotly")
36
+
37
+ # Widgets for selecting columns
38
+ inverter_ids = pn.widgets.MultiSelect(
39
+ name="Inverter IDs",
40
+ value=[list(INVERTER_ID_MAPPING.keys())[0]],
41
+ options=list(INVERTER_ID_MAPPING.keys()),
42
+ size=8,
43
+ )
44
+ # Line Plots
45
+ plot_power_curves = pn.widgets.Checkbox(name="Plot P-dc and P-ac", value=False)
46
+ plot_temperature_curves = pn.widgets.Checkbox(name="Plot Temperatures", value=False)
47
+
48
+ # Heatmaps
49
+ heatmap_pr = pn.widgets.Checkbox(name="Heat Map PR", value=False)
50
+ heatmap_sy = pn.widgets.Checkbox(name="Heat Map SY", value=False)
51
+ heatmap_current = pn.widgets.Checkbox(name="Heat Map - Current", value=False)
52
+ heatmap_voltage = pn.widgets.Checkbox(name="Heat Map - Voltage", value=False)
53
+ heatmap_power = pn.widgets.Checkbox(name="Heat Map - Power", value=False)
54
+ heatmap_irradiance = pn.widgets.Checkbox(name="Heat Map - Irradiance", value=False)
55
+ heatmap_temperature = pn.widgets.Checkbox(
56
+ name="Heat Map - Temperature " "Heatsink", value=False
57
+ )
58
+
59
+ # Create a loading spinner
60
+ loading_spinner = pn.indicators.LoadingSpinner(width=50, height=50)
61
+
62
+
63
+ # Panel interactive functions
64
+ @pn.depends(
65
+ inverter_ids.param.value,
66
+ plot_power_curves.param.value,
67
+ plot_temperature_curves.param.value,
68
+ )
69
+ def update_iv_plot(inverter_ids, plot_power_curves, plot_temperature_curves):
70
+ if not inverter_ids:
71
+ return pn.pane.Markdown("No Inverters selected for Plotting.")
72
+ else:
73
+ # Plot IV + Power + Temperature Curves
74
+ if plot_power_curves and plot_temperature_curves:
75
+ print("Plotting IV + Power + Temperature Curves")
76
+ return create_iv_plot_with_power_and_temperature_curves(
77
+ timeseries_data, other_features_data, inverter_ids
78
+ )
79
+ # Plot IV + Temperature Curves
80
+ elif (not plot_power_curves) and plot_temperature_curves:
81
+ print("Plot IV + Temperature Curves")
82
+ return create_iv_plot_with_temperature_curves(
83
+ timeseries_data, other_features_data, inverter_ids
84
+ )
85
+ # Plot IV + Power Curves
86
+ elif plot_power_curves and (not plot_temperature_curves):
87
+ print("Plot IV + Power Curves")
88
+ return create_iv_plot_with_power_curves(timeseries_data, inverter_ids)
89
+ # Plot only IV Curves
90
+ else:
91
+ print("Plot only IV Curves")
92
+ return create_iv_plot(timeseries_data, inverter_ids)
93
+
94
+
95
+ @pn.depends(heatmap_pr.param.value)
96
+ def update_heatmap_pr(heatmap_pr):
97
+ if heatmap_pr:
98
+ pr_df = kpi_data.filter(like="pr")
99
+ pr_df.columns = [i.split("-")[1] for i in pr_df.columns]
100
+ pr_heatmap = create_heatmap(pr_df, "PR Heatmap")
101
+ return pn.Row(pr_heatmap)
102
+ return pn.pane.Markdown("")
103
+
104
+
105
+ @pn.depends(heatmap_sy.param.value)
106
+ def update_heatmap_sy(heatmap_sy):
107
+ if heatmap_sy:
108
+ sy_df = kpi_data.filter(like="daily_specific_yield")
109
+ sy_df.columns = [i.split("-")[1] for i in sy_df.columns]
110
+ sy_heatmap = create_heatmap(sy_df, "SY Heatmap")
111
+ return pn.Row(sy_heatmap)
112
+ return pn.pane.Markdown("")
113
+
114
+
115
+ @pn.depends(heatmap_current.param.value)
116
+ def update_heatmap_current(heatmap_current):
117
+ if heatmap_current:
118
+ current_df = daily_timeseries_data.filter(like="I")
119
+ current_df.columns = [i.split("-")[1] for i in current_df.columns]
120
+ current_heatmap = create_heatmap(current_df, "Current Heatmap")
121
+ return pn.Row(current_heatmap)
122
+ return pn.pane.Markdown("")
123
+
124
+
125
+ @pn.depends(heatmap_voltage.param.value)
126
+ def update_heatmap_voltage(heatmap_voltage):
127
+ if heatmap_voltage:
128
+ voltage_df = daily_timeseries_data.filter(like="V")
129
+ voltage_df.columns = [i.split("-")[1] for i in voltage_df.columns]
130
+ voltage_heatmap = create_heatmap(voltage_df, "Voltage Heatmap")
131
+ return pn.Row(voltage_heatmap)
132
+ return pn.pane.Markdown("")
133
+
134
+
135
+ @pn.depends(heatmap_power.param.value)
136
+ def update_heatmap_power(heatmap_power):
137
+ if heatmap_power:
138
+ power_df = daily_timeseries_data.filter(like="P")
139
+ power_df.columns = [i.split("-")[1] for i in power_df.columns]
140
+ power_heatmap = create_heatmap(power_df, "Power Heatmap")
141
+ return pn.Row(power_heatmap)
142
+ return pn.pane.Markdown("")
143
+
144
+
145
+ @pn.depends(heatmap_irradiance.param.value)
146
+ def update_heatmap_irradiance(heatmap_irradiance):
147
+ if heatmap_irradiance:
148
+ irradiance_df = daily_timeseries_data.filter(like="G")
149
+ irradiance_df.columns = [i.split("-")[1] for i in irradiance_df.columns]
150
+ irradiance_heatmap = create_heatmap(irradiance_df, "Irradiance " "Heatmap")
151
+ return pn.Row(irradiance_heatmap)
152
+ return pn.pane.Markdown("")
153
+
154
+
155
+ @pn.depends(heatmap_temperature.param.value)
156
+ def update_heatmap_temperature(heatmap_temperature):
157
+ if heatmap_temperature:
158
+ temp_df = daily_timeseries_data.filter(like="THeatSink")
159
+ temp_df.columns = [i.split("-")[1] for i in temp_df.columns]
160
+ temp_heatmap = create_heatmap(temp_df, "T-Heatsink Heatmap")
161
+ return pn.Row(temp_heatmap)
162
+ return pn.pane.Markdown("")
163
+
164
+
165
+ # Create dashboard layout
166
+ dashboard = pn.Column(
167
+ "# ENEL Dashboard",
168
+ # IV Plots
169
+ pn.Row(
170
+ pn.Column(inverter_ids, plot_power_curves, plot_temperature_curves),
171
+ pn.panel(update_iv_plot, sizing_mode="stretch_width"),
172
+ ),
173
+ # Heatmaps
174
+ pn.Row(
175
+ pn.Column(heatmap_pr), pn.panel(update_heatmap_pr, sizing_mode="stretch_width")
176
+ ),
177
+ pn.Row(
178
+ pn.Column(heatmap_sy), pn.panel(update_heatmap_sy, sizing_mode="stretch_width")
179
+ ),
180
+ pn.Row(
181
+ pn.Column(heatmap_current),
182
+ pn.panel(update_heatmap_current, sizing_mode="stretch_width"),
183
+ ),
184
+ pn.Row(
185
+ pn.Column(heatmap_voltage),
186
+ pn.panel(update_heatmap_voltage, sizing_mode="stretch_width"),
187
+ ),
188
+ pn.Row(
189
+ pn.Column(heatmap_power),
190
+ pn.panel(update_heatmap_power, sizing_mode="stretch_width"),
191
+ ),
192
+ pn.Row(
193
+ pn.Column(heatmap_irradiance),
194
+ pn.panel(update_heatmap_irradiance, sizing_mode="stretch_width"),
195
+ ),
196
+ pn.Row(
197
+ pn.Column(heatmap_temperature),
198
+ pn.panel(update_heatmap_temperature, sizing_mode="stretch_width"),
199
+ ),
200
+ )
201
+
202
+ # Serve the dashboard
203
+ dashboard.servable()