Spaces:
Sleeping
Sleeping
more graphs
Browse files- .DS_Store +0 -0
- app/.DS_Store +0 -0
- app/app.py +91 -47
- app/dashboard.ipynb +137 -54
- app/data/.DS_Store +0 -0
- app/data/{16NSJNnjLK4MndjZYaKYGKEV.csv β original/16NSJNnjLK4MndjZYaKYGKEV.csv} +0 -0
- app/data/{7uLwefnSt8CgVlmIGY8emqJK.csv β original/7uLwefnSt8CgVlmIGY8emqJK.csv} +0 -0
- app/data/{8yS04Ddkk3pPL8e9Rku4LJtc.csv β original/8yS04Ddkk3pPL8e9Rku4LJtc.csv} +0 -0
- app/data/{Cwp33jA19hp9VdoNJUlj6USf.csv β original/Cwp33jA19hp9VdoNJUlj6USf.csv} +0 -0
- app/data/{KN9Z3gANLftDuUGvgs8O38dI.csv β original/KN9Z3gANLftDuUGvgs8O38dI.csv} +0 -0
- app/data/{LzbMafI31IosheUI7YGhj5at.csv β original/LzbMafI31IosheUI7YGhj5at.csv} +0 -0
- app/data/{PHqaZDuMTRvCZCvA259Z1vJu.csv β original/PHqaZDuMTRvCZCvA259Z1vJu.csv} +0 -0
- app/data/{RZngVU6axOdshmfma0yNAajE.csv β original/RZngVU6axOdshmfma0yNAajE.csv} +0 -0
- app/data/{SQUOjMB6zAgYpSJEMy46tKXJ.csv β original/SQUOjMB6zAgYpSJEMy46tKXJ.csv} +0 -0
- app/data/{iBFIAuvh7bCNyOQDo0jkjhRV.csv β original/iBFIAuvh7bCNyOQDo0jkjhRV.csv} +0 -0
- app/data/{iNVKpGfGW6rU17eOtxpZSFWR.csv β original/iNVKpGfGW6rU17eOtxpZSFWR.csv} +0 -0
- app/data/{kaTMmHVh8gXUbHMppzdmdzpv.csv β original/kaTMmHVh8gXUbHMppzdmdzpv.csv} +0 -0
- app/data/{UcufQVoJQPbfLzIBnSsUodJP.csv β water_consumption/16NSJNnjLK4MndjZYaKYGKEV_water_consumption.csv} +2 -2
- app/data/{VTuh8oxtC6YlOCLeScXfLuY3.csv β water_consumption/7uLwefnSt8CgVlmIGY8emqJK_water_consumption.csv} +2 -2
- app/data/{VZTnyVO3TP3ILuYsN5Xw9UR0.csv β water_consumption/8yS04Ddkk3pPL8e9Rku4LJtc_water_consumption.csv} +2 -2
- app/data/{WyPRjcmBXJZoC9DIURMXKxn8.csv β water_consumption/Cwp33jA19hp9VdoNJUlj6USf_water_consumption.csv} +2 -2
- app/data/water_consumption/KN9Z3gANLftDuUGvgs8O38dI_water_consumption.csv +3 -0
- app/data/water_consumption/LzbMafI31IosheUI7YGhj5at_water_consumption.csv +3 -0
- app/data/water_consumption/PHqaZDuMTRvCZCvA259Z1vJu_water_consumption.csv +3 -0
- app/data/water_consumption/RZngVU6axOdshmfma0yNAajE_water_consumption.csv +3 -0
- app/data/water_consumption/SQUOjMB6zAgYpSJEMy46tKXJ_water_consumption.csv +3 -0
- app/data/water_consumption/iBFIAuvh7bCNyOQDo0jkjhRV_water_consumption.csv +3 -0
- app/data/water_consumption/iNVKpGfGW6rU17eOtxpZSFWR_water_consumption.csv +3 -0
- app/data/water_consumption/kaTMmHVh8gXUbHMppzdmdzpv_water_consumption.csv +3 -0
- app/data/yPtlbyLlDlzeBZQYrPYaByoB.csv +0 -3
.DS_Store
CHANGED
Binary files a/.DS_Store and b/.DS_Store differ
|
|
app/.DS_Store
CHANGED
Binary files a/app/.DS_Store and b/app/.DS_Store differ
|
|
app/app.py
CHANGED
@@ -7,6 +7,7 @@ import plotly.express as px
|
|
7 |
import numpy as np
|
8 |
import example_data
|
9 |
import core
|
|
|
10 |
|
11 |
outside_temp = example_data.ExampleDailyOutsideTemperature
|
12 |
energy_price = example_data.ExampleDailyEnergyCost
|
@@ -51,31 +52,35 @@ dataset_options = [
|
|
51 |
"PHqaZDuMTRvCZCvA259Z1vJu",
|
52 |
"RZngVU6axOdshmfma0yNAajE",
|
53 |
"SQUOjMB6zAgYpSJEMy46tKXJ",
|
54 |
-
"UcufQVoJQPbfLzIBnSsUodJP",
|
55 |
-
"VTuh8oxtC6YlOCLeScXfLuY3",
|
56 |
-
"VZTnyVO3TP3ILuYsN5Xw9UR0",
|
57 |
-
"WyPRjcmBXJZoC9DIURMXKxn8",
|
58 |
-
"yPtlbyLlDlzeBZQYrPYaByoB",
|
59 |
]
|
60 |
dataset_options_default_value = dataset_options[0]
|
61 |
-
|
62 |
-
"16NSJNnjLK4MndjZYaKYGKEV": pd.read_csv('data/16NSJNnjLK4MndjZYaKYGKEV.csv')
|
63 |
-
"7uLwefnSt8CgVlmIGY8emqJK": pd.read_csv('data/7uLwefnSt8CgVlmIGY8emqJK.csv')
|
64 |
-
"8yS04Ddkk3pPL8e9Rku4LJtc": pd.read_csv('data/8yS04Ddkk3pPL8e9Rku4LJtc.csv')
|
65 |
-
"Cwp33jA19hp9VdoNJUlj6USf": pd.read_csv('data/Cwp33jA19hp9VdoNJUlj6USf.csv')
|
66 |
-
"iBFIAuvh7bCNyOQDo0jkjhRV": pd.read_csv('data/iBFIAuvh7bCNyOQDo0jkjhRV.csv')
|
67 |
-
"iNVKpGfGW6rU17eOtxpZSFWR": pd.read_csv('data/iNVKpGfGW6rU17eOtxpZSFWR.csv')
|
68 |
-
"kaTMmHVh8gXUbHMppzdmdzpv": pd.read_csv('data/kaTMmHVh8gXUbHMppzdmdzpv.csv')
|
69 |
-
"KN9Z3gANLftDuUGvgs8O38dI": pd.read_csv('data/KN9Z3gANLftDuUGvgs8O38dI.csv')
|
70 |
-
"LzbMafI31IosheUI7YGhj5at": pd.read_csv('data/LzbMafI31IosheUI7YGhj5at.csv')
|
71 |
-
"PHqaZDuMTRvCZCvA259Z1vJu": pd.read_csv('data/PHqaZDuMTRvCZCvA259Z1vJu.csv')
|
72 |
-
"RZngVU6axOdshmfma0yNAajE": pd.read_csv('data/RZngVU6axOdshmfma0yNAajE.csv')
|
73 |
-
"SQUOjMB6zAgYpSJEMy46tKXJ": pd.read_csv('data/SQUOjMB6zAgYpSJEMy46tKXJ.csv')
|
74 |
-
|
75 |
-
|
76 |
-
"
|
77 |
-
"
|
78 |
-
"
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
79 |
}
|
80 |
|
81 |
# provide a scalar value to enable the slider to select ideal temperature
|
@@ -133,6 +138,24 @@ dashboard_layout = html.Div([
|
|
133 |
], className='twelve columns',
|
134 |
)
|
135 |
], className='row'),
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
136 |
html.Div(
|
137 |
[
|
138 |
html.Div(
|
@@ -187,15 +210,10 @@ wiki_layout = html.Div([
|
|
187 |
html.P('This project was developed by a team of 3, in the context of the Aveiro Tech City 2023 hackathon.'),
|
188 |
html.P('The team members are:'),
|
189 |
html.H4('Rui Melo'),
|
190 |
-
html.P('Rui Melo is a ....'),
|
191 |
html.H4('AndrΓ© Catarino'),
|
192 |
-
html.P('AndrΓ© Catarino is a ....'),
|
193 |
html.H4('Francisco Petronilho'),
|
194 |
-
html.P('Francisco Petronilho is a ....'),
|
195 |
html.H4('AndrΓ© TomΓ‘s'),
|
196 |
-
html.P('AndrΓ© TomΓ‘s is a ....'),
|
197 |
html.H4('ZΓ© Miguel'),
|
198 |
-
html.P('ZΓ© Miguel is a ....'),
|
199 |
|
200 |
|
201 |
html.H3('References'),
|
@@ -225,6 +243,8 @@ def display_page(pathname):
|
|
225 |
Output('energy-consumption-graph', 'figure'),
|
226 |
Output('comfort-graph', 'figure'),
|
227 |
Output('dataset-graph', 'figure'),
|
|
|
|
|
228 |
Output('solution-status', 'children'),
|
229 |
Input('dataset-dropdown', 'value'),
|
230 |
Input('solution-dropdown', 'value'),
|
@@ -233,29 +253,53 @@ def display_page(pathname):
|
|
233 |
def update_graph(dataset, solution, ideal_temperature):
|
234 |
energy_consumption = data['energy_consumption'].values
|
235 |
comfort_obtained = data['comfort'].values
|
236 |
-
|
237 |
-
|
238 |
-
|
239 |
-
dataset_df = dataset_dfs[dataset]
|
240 |
-
dataset_df['ChActive'] = dataset_df['ChActive'].map({'Yes': 90, 'No': 5})
|
241 |
-
dataset_df['HwActive'] = dataset_df['HwActive'].map({'Yes': 100, 'No': 0})
|
242 |
|
243 |
dataset_graph = px.line()
|
244 |
-
|
245 |
-
dataset_graph.add_scatter(x=
|
246 |
-
dataset_graph.add_scatter(x=
|
247 |
-
dataset_graph.add_scatter(x=
|
248 |
-
dataset_graph.add_scatter(x=
|
249 |
-
dataset_graph.add_scatter(x=
|
250 |
-
dataset_graph.add_scatter(x=
|
251 |
-
dataset_graph.add_scatter(x=
|
252 |
-
|
253 |
-
|
254 |
-
start_time = pd.Timestamp(dataset_df['ts'][0])
|
255 |
-
|
256 |
dataset_graph.update_xaxes(range=[start_time, start_time+pd.Timedelta(days=2)])
|
257 |
|
258 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
259 |
# Policy Graph
|
260 |
policy_readable_graph = px.line(data, x='hour', y='policy_readable',
|
261 |
labels={'hour': 'Hour', 'policy_readable': 'Policy'},
|
@@ -302,7 +346,7 @@ def update_graph(dataset, solution, ideal_temperature):
|
|
302 |
color_discrete_sequence=['green']
|
303 |
).data[0])
|
304 |
result = "No solution found"
|
305 |
-
return policy_readable_graph, energy_consumption_graph, comfort_graph, dataset_graph, result
|
306 |
|
307 |
|
308 |
if __name__ == "__main__":
|
|
|
7 |
import numpy as np
|
8 |
import example_data
|
9 |
import core
|
10 |
+
from plotly.subplots import make_subplots
|
11 |
|
12 |
outside_temp = example_data.ExampleDailyOutsideTemperature
|
13 |
energy_price = example_data.ExampleDailyEnergyCost
|
|
|
52 |
"PHqaZDuMTRvCZCvA259Z1vJu",
|
53 |
"RZngVU6axOdshmfma0yNAajE",
|
54 |
"SQUOjMB6zAgYpSJEMy46tKXJ",
|
|
|
|
|
|
|
|
|
|
|
55 |
]
|
56 |
dataset_options_default_value = dataset_options[0]
|
57 |
+
dataset_original_dfs = {
|
58 |
+
"16NSJNnjLK4MndjZYaKYGKEV": pd.read_csv('data/original/16NSJNnjLK4MndjZYaKYGKEV.csv'),
|
59 |
+
"7uLwefnSt8CgVlmIGY8emqJK": pd.read_csv('data/original/7uLwefnSt8CgVlmIGY8emqJK.csv'),
|
60 |
+
"8yS04Ddkk3pPL8e9Rku4LJtc": pd.read_csv('data/original/8yS04Ddkk3pPL8e9Rku4LJtc.csv'),
|
61 |
+
"Cwp33jA19hp9VdoNJUlj6USf": pd.read_csv('data/original/Cwp33jA19hp9VdoNJUlj6USf.csv'),
|
62 |
+
"iBFIAuvh7bCNyOQDo0jkjhRV": pd.read_csv('data/original/iBFIAuvh7bCNyOQDo0jkjhRV.csv'),
|
63 |
+
"iNVKpGfGW6rU17eOtxpZSFWR": pd.read_csv('data/original/iNVKpGfGW6rU17eOtxpZSFWR.csv'),
|
64 |
+
"kaTMmHVh8gXUbHMppzdmdzpv": pd.read_csv('data/original/kaTMmHVh8gXUbHMppzdmdzpv.csv'),
|
65 |
+
"KN9Z3gANLftDuUGvgs8O38dI": pd.read_csv('data/original/KN9Z3gANLftDuUGvgs8O38dI.csv'),
|
66 |
+
"LzbMafI31IosheUI7YGhj5at": pd.read_csv('data/original/LzbMafI31IosheUI7YGhj5at.csv'),
|
67 |
+
"PHqaZDuMTRvCZCvA259Z1vJu": pd.read_csv('data/original/PHqaZDuMTRvCZCvA259Z1vJu.csv'),
|
68 |
+
"RZngVU6axOdshmfma0yNAajE": pd.read_csv('data/original/RZngVU6axOdshmfma0yNAajE.csv'),
|
69 |
+
"SQUOjMB6zAgYpSJEMy46tKXJ": pd.read_csv('data/original/SQUOjMB6zAgYpSJEMy46tKXJ.csv'),
|
70 |
+
}
|
71 |
+
dataset_water_consumption_dfs = {
|
72 |
+
"16NSJNnjLK4MndjZYaKYGKEV": pd.read_csv('data/water_consumption/16NSJNnjLK4MndjZYaKYGKEV_water_consumption.csv'),
|
73 |
+
"7uLwefnSt8CgVlmIGY8emqJK": pd.read_csv('data/water_consumption/7uLwefnSt8CgVlmIGY8emqJK_water_consumption.csv'),
|
74 |
+
"8yS04Ddkk3pPL8e9Rku4LJtc": pd.read_csv('data/water_consumption/8yS04Ddkk3pPL8e9Rku4LJtc_water_consumption.csv'),
|
75 |
+
"Cwp33jA19hp9VdoNJUlj6USf": pd.read_csv('data/water_consumption/Cwp33jA19hp9VdoNJUlj6USf_water_consumption.csv'),
|
76 |
+
"iBFIAuvh7bCNyOQDo0jkjhRV": pd.read_csv('data/water_consumption/iBFIAuvh7bCNyOQDo0jkjhRV_water_consumption.csv'),
|
77 |
+
"iNVKpGfGW6rU17eOtxpZSFWR": pd.read_csv('data/water_consumption/iNVKpGfGW6rU17eOtxpZSFWR_water_consumption.csv'),
|
78 |
+
"kaTMmHVh8gXUbHMppzdmdzpv": pd.read_csv('data/water_consumption/kaTMmHVh8gXUbHMppzdmdzpv_water_consumption.csv'),
|
79 |
+
"KN9Z3gANLftDuUGvgs8O38dI": pd.read_csv('data/water_consumption/KN9Z3gANLftDuUGvgs8O38dI_water_consumption.csv'),
|
80 |
+
"LzbMafI31IosheUI7YGhj5at": pd.read_csv('data/water_consumption/LzbMafI31IosheUI7YGhj5at_water_consumption.csv'),
|
81 |
+
"PHqaZDuMTRvCZCvA259Z1vJu": pd.read_csv('data/water_consumption/PHqaZDuMTRvCZCvA259Z1vJu_water_consumption.csv'),
|
82 |
+
"RZngVU6axOdshmfma0yNAajE": pd.read_csv('data/water_consumption/RZngVU6axOdshmfma0yNAajE_water_consumption.csv'),
|
83 |
+
"SQUOjMB6zAgYpSJEMy46tKXJ": pd.read_csv('data/water_consumption/SQUOjMB6zAgYpSJEMy46tKXJ_water_consumption.csv'),
|
84 |
}
|
85 |
|
86 |
# provide a scalar value to enable the slider to select ideal temperature
|
|
|
138 |
], className='twelve columns',
|
139 |
)
|
140 |
], className='row'),
|
141 |
+
html.Div(
|
142 |
+
[
|
143 |
+
html.Div(
|
144 |
+
[
|
145 |
+
html.H3('Water Comsumption Patterns'),
|
146 |
+
dcc.Graph(id='water-consumption-graph')
|
147 |
+
], className='twelve columns',
|
148 |
+
)
|
149 |
+
], className='row'),
|
150 |
+
html.Div(
|
151 |
+
[
|
152 |
+
html.Div(
|
153 |
+
[
|
154 |
+
html.H4('Hourly'),
|
155 |
+
dcc.Graph(id='water_consumption_hourly_graph')
|
156 |
+
], className='six columns',
|
157 |
+
)
|
158 |
+
], className='row'),
|
159 |
html.Div(
|
160 |
[
|
161 |
html.Div(
|
|
|
210 |
html.P('This project was developed by a team of 3, in the context of the Aveiro Tech City 2023 hackathon.'),
|
211 |
html.P('The team members are:'),
|
212 |
html.H4('Rui Melo'),
|
|
|
213 |
html.H4('AndrΓ© Catarino'),
|
|
|
214 |
html.H4('Francisco Petronilho'),
|
|
|
215 |
html.H4('AndrΓ© TomΓ‘s'),
|
|
|
216 |
html.H4('ZΓ© Miguel'),
|
|
|
217 |
|
218 |
|
219 |
html.H3('References'),
|
|
|
243 |
Output('energy-consumption-graph', 'figure'),
|
244 |
Output('comfort-graph', 'figure'),
|
245 |
Output('dataset-graph', 'figure'),
|
246 |
+
Output('water-consumption-graph', 'figure'),
|
247 |
+
Output('water_consumption_hourly_graph', 'figure'),
|
248 |
Output('solution-status', 'children'),
|
249 |
Input('dataset-dropdown', 'value'),
|
250 |
Input('solution-dropdown', 'value'),
|
|
|
253 |
def update_graph(dataset, solution, ideal_temperature):
|
254 |
energy_consumption = data['energy_consumption'].values
|
255 |
comfort_obtained = data['comfort'].values
|
256 |
+
|
257 |
+
# Original Dataset Graph
|
258 |
+
original_df = dataset_original_dfs[dataset]
|
|
|
|
|
|
|
259 |
|
260 |
dataset_graph = px.line()
|
261 |
+
dataset_graph.add_scatter(x=original_df['ts'], y=original_df['ActPow'], mode='lines', name='ActPow')
|
262 |
+
dataset_graph.add_scatter(x=original_df['ts'], y=original_df['HwActive'], mode='lines', name='HwActive')
|
263 |
+
dataset_graph.add_scatter(x=original_df['ts'], y=original_df['ChActive'], mode='lines', name='ChActive')
|
264 |
+
dataset_graph.add_scatter(x=original_df['ts'], y=original_df['HwTSet'], mode='lines', name='HwTSet')
|
265 |
+
dataset_graph.add_scatter(x=original_df['ts'], y=original_df['DHW_E21_T3_START_TEMP'], mode='lines', name='START_TEMP')
|
266 |
+
dataset_graph.add_scatter(x=original_df['ts'], y=original_df['HwTStor'], mode='lines', name='HwTStor')
|
267 |
+
dataset_graph.add_scatter(x=original_df['ts'], y=original_df['HwTAct'], mode='lines', name='HwTAct')
|
268 |
+
dataset_graph.add_scatter(x=original_df['ts'], y=original_df['OutTemp'], mode='lines', name='OutTemp')
|
269 |
+
start_time = pd.Timestamp(original_df['ts'][0])
|
|
|
|
|
|
|
270 |
dataset_graph.update_xaxes(range=[start_time, start_time+pd.Timedelta(days=2)])
|
271 |
|
272 |
|
273 |
+
# Water Consumption Graph
|
274 |
+
water_consumption_df = dataset_water_consumption_dfs[dataset]
|
275 |
+
if len(water_consumption_df) / 24 > 365:
|
276 |
+
water_consumption_df = water_consumption_df.head(365* 24)
|
277 |
+
water_consumption_df.index = pd.to_datetime(water_consumption_df["ts"], errors='coerce')
|
278 |
+
water_consumption_graph = go.Figure()
|
279 |
+
water_consumption_graph = make_subplots(specs=[[{"secondary_y": True}]])
|
280 |
+
water_consumption_graph.add_trace(go.Scatter(x=water_consumption_df[:]["ts"], y=water_consumption_df[:]['water_consumption_bool'], mode='lines', name='Water consumption'),
|
281 |
+
secondary_y=False,)
|
282 |
+
water_consumption_graph.add_trace(go.Scatter(x=water_consumption_df[:]["ts"], y=water_consumption_df[:]['HwTStor'], mode='lines', name='Water temperature')
|
283 |
+
,secondary_y=True,)
|
284 |
+
water_consumption_graph.update_layout(
|
285 |
+
title_text="Water consumption"
|
286 |
+
)
|
287 |
+
water_consumption_graph.update_xaxes(title_text="time")
|
288 |
+
water_consumption_graph.update_yaxes(title_text="water consumption", secondary_y=False)
|
289 |
+
water_consumption_graph.update_yaxes(title_text="water temperature", secondary_y=True)
|
290 |
+
|
291 |
+
# Water Consumption Hourly Graph
|
292 |
+
water_consumption_df["ts_hour"] = water_consumption_df["ts"].apply(lambda x: x.split(" ")[1].split(":")[0])
|
293 |
+
hour_series = water_consumption_df.groupby("ts_hour")["water_consumption_bool"].sum()
|
294 |
+
water_consumption_hourly_graph = go.Figure()
|
295 |
+
water_consumption_hourly_graph.add_trace(go.Bar(x=hour_series.index, y=hour_series.values, name='Water consumption per hour'))
|
296 |
+
water_consumption_hourly_graph.update_layout(
|
297 |
+
title_text="Water consumption per hour"
|
298 |
+
)
|
299 |
+
water_consumption_hourly_graph.update_xaxes(title_text="Hour of day")
|
300 |
+
water_consumption_hourly_graph.update_yaxes(title_text="Number of water usages")
|
301 |
+
|
302 |
+
|
303 |
# Policy Graph
|
304 |
policy_readable_graph = px.line(data, x='hour', y='policy_readable',
|
305 |
labels={'hour': 'Hour', 'policy_readable': 'Policy'},
|
|
|
346 |
color_discrete_sequence=['green']
|
347 |
).data[0])
|
348 |
result = "No solution found"
|
349 |
+
return policy_readable_graph, energy_consumption_graph, comfort_graph, dataset_graph, water_consumption_graph, water_consumption_hourly_graph, result
|
350 |
|
351 |
|
352 |
if __name__ == "__main__":
|
app/dashboard.ipynb
CHANGED
@@ -2,9 +2,41 @@
|
|
2 |
"cells": [
|
3 |
{
|
4 |
"cell_type": "code",
|
5 |
-
"execution_count":
|
6 |
"metadata": {},
|
7 |
-
"outputs": [
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
8 |
"source": [
|
9 |
"import os\n",
|
10 |
"import plotly.express as px\n",
|
@@ -15,6 +47,7 @@
|
|
15 |
"import numpy as np\n",
|
16 |
"import example_data\n",
|
17 |
"import core\n",
|
|
|
18 |
"\n",
|
19 |
"outside_temp = example_data.ExampleDailyOutsideTemperature\n",
|
20 |
"energy_price = example_data.ExampleDailyEnergyCost\n",
|
@@ -59,31 +92,35 @@
|
|
59 |
" \"PHqaZDuMTRvCZCvA259Z1vJu\",\n",
|
60 |
" \"RZngVU6axOdshmfma0yNAajE\",\n",
|
61 |
" \"SQUOjMB6zAgYpSJEMy46tKXJ\",\n",
|
62 |
-
" \"UcufQVoJQPbfLzIBnSsUodJP\",\n",
|
63 |
-
" \"VTuh8oxtC6YlOCLeScXfLuY3\",\n",
|
64 |
-
" \"VZTnyVO3TP3ILuYsN5Xw9UR0\",\n",
|
65 |
-
" \"WyPRjcmBXJZoC9DIURMXKxn8\",\n",
|
66 |
-
" \"yPtlbyLlDlzeBZQYrPYaByoB\",\n",
|
67 |
"]\n",
|
68 |
"dataset_options_default_value = dataset_options[0]\n",
|
69 |
-
"
|
70 |
-
" \"16NSJNnjLK4MndjZYaKYGKEV\": pd.read_csv('data/16NSJNnjLK4MndjZYaKYGKEV.csv')
|
71 |
-
" \"7uLwefnSt8CgVlmIGY8emqJK\": pd.read_csv('data/7uLwefnSt8CgVlmIGY8emqJK.csv')
|
72 |
-
" \"8yS04Ddkk3pPL8e9Rku4LJtc\": pd.read_csv('data/8yS04Ddkk3pPL8e9Rku4LJtc.csv')
|
73 |
-
" \"Cwp33jA19hp9VdoNJUlj6USf\": pd.read_csv('data/Cwp33jA19hp9VdoNJUlj6USf.csv')
|
74 |
-
" \"iBFIAuvh7bCNyOQDo0jkjhRV\": pd.read_csv('data/iBFIAuvh7bCNyOQDo0jkjhRV.csv')
|
75 |
-
" \"iNVKpGfGW6rU17eOtxpZSFWR\": pd.read_csv('data/iNVKpGfGW6rU17eOtxpZSFWR.csv')
|
76 |
-
" \"kaTMmHVh8gXUbHMppzdmdzpv\": pd.read_csv('data/kaTMmHVh8gXUbHMppzdmdzpv.csv')
|
77 |
-
" \"KN9Z3gANLftDuUGvgs8O38dI\": pd.read_csv('data/KN9Z3gANLftDuUGvgs8O38dI.csv')
|
78 |
-
" \"LzbMafI31IosheUI7YGhj5at\": pd.read_csv('data/LzbMafI31IosheUI7YGhj5at.csv')
|
79 |
-
" \"PHqaZDuMTRvCZCvA259Z1vJu\": pd.read_csv('data/PHqaZDuMTRvCZCvA259Z1vJu.csv')
|
80 |
-
" \"RZngVU6axOdshmfma0yNAajE\": pd.read_csv('data/RZngVU6axOdshmfma0yNAajE.csv')
|
81 |
-
" \"SQUOjMB6zAgYpSJEMy46tKXJ\": pd.read_csv('data/SQUOjMB6zAgYpSJEMy46tKXJ.csv')
|
82 |
-
"
|
83 |
-
"
|
84 |
-
" \"
|
85 |
-
" \"
|
86 |
-
" \"
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
87 |
"}\n",
|
88 |
"\n",
|
89 |
"# provide a scalar value to enable the slider to select ideal temperature\n",
|
@@ -145,6 +182,24 @@
|
|
145 |
" [\n",
|
146 |
" html.Div(\n",
|
147 |
" [\n",
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
148 |
" html.H3('Policy'),\n",
|
149 |
" dcc.Graph(id='policy_readable-graph')\n",
|
150 |
" ], className='six columns',\n",
|
@@ -180,7 +235,7 @@
|
|
180 |
"\n",
|
181 |
" html.Div([\n",
|
182 |
" html.Div([\n",
|
183 |
-
"
|
184 |
" html.H3('What is this project about?'),\n",
|
185 |
"\n",
|
186 |
" html.P('This project is a simulation of a shower system. The goal is to find the best policy for the boiler to heat the water for the shower. The policy is a function that takes the current hour of the day and the current temperature of the water in the boiler and returns the temperature that the boiler should heat the water to.'),\n",
|
@@ -195,15 +250,10 @@
|
|
195 |
" html.P('This project was developed by a team of 3, in the context of the Aveiro Tech City 2023 hackathon.'),\n",
|
196 |
" html.P('The team members are:'),\n",
|
197 |
" html.H4('Rui Melo'),\n",
|
198 |
-
" html.P('Rui Melo is a ....'),\n",
|
199 |
" html.H4('AndrΓ© Catarino'),\n",
|
200 |
-
" html.P('AndrΓ© Catarino is a ....'),\n",
|
201 |
" html.H4('Francisco Petronilho'),\n",
|
202 |
-
" html.P('Francisco Petronilho is a ....'),\n",
|
203 |
" html.H4('AndrΓ© TomΓ‘s'),\n",
|
204 |
-
" html.P('AndrΓ© TomΓ‘s is a ....'),\n",
|
205 |
" html.H4('ZΓ© Miguel'),\n",
|
206 |
-
" html.P('ZΓ© Miguel is a ....'),\n",
|
207 |
"\n",
|
208 |
"\n",
|
209 |
" html.H3('References'),\n",
|
@@ -233,6 +283,8 @@
|
|
233 |
" Output('energy-consumption-graph', 'figure'),\n",
|
234 |
" Output('comfort-graph', 'figure'),\n",
|
235 |
" Output('dataset-graph', 'figure'),\n",
|
|
|
|
|
236 |
" Output('solution-status', 'children'),\n",
|
237 |
" Input('dataset-dropdown', 'value'),\n",
|
238 |
" Input('solution-dropdown', 'value'),\n",
|
@@ -241,29 +293,53 @@
|
|
241 |
"def update_graph(dataset, solution, ideal_temperature):\n",
|
242 |
" energy_consumption = data['energy_consumption'].values\n",
|
243 |
" comfort_obtained = data['comfort'].values\n",
|
244 |
-
"\n",
|
245 |
-
"\n",
|
246 |
-
"
|
247 |
-
" dataset_df = dataset_dfs[dataset]\n",
|
248 |
-
" dataset_df['ChActive'] = dataset_df['ChActive'].map({'Yes': 90, 'No': 5})\n",
|
249 |
-
" dataset_df['HwActive'] = dataset_df['HwActive'].map({'Yes': 100, 'No': 0})\n",
|
250 |
"\n",
|
251 |
" dataset_graph = px.line()\n",
|
252 |
-
"
|
253 |
-
" dataset_graph.add_scatter(x=
|
254 |
-
" dataset_graph.add_scatter(x=
|
255 |
-
" dataset_graph.add_scatter(x=
|
256 |
-
" dataset_graph.add_scatter(x=
|
257 |
-
" dataset_graph.add_scatter(x=
|
258 |
-
" dataset_graph.add_scatter(x=
|
259 |
-
" dataset_graph.add_scatter(x=
|
260 |
-
"
|
261 |
-
" \n",
|
262 |
-
" start_time = pd.Timestamp(dataset_df['ts'][0])\n",
|
263 |
-
" \n",
|
264 |
" dataset_graph.update_xaxes(range=[start_time, start_time+pd.Timedelta(days=2)])\n",
|
265 |
"\n",
|
266 |
"\n",
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
267 |
" # Policy Graph\n",
|
268 |
" policy_readable_graph = px.line(data, x='hour', y='policy_readable',\n",
|
269 |
" labels={'hour': 'Hour', 'policy_readable': 'Policy'},\n",
|
@@ -276,8 +352,8 @@
|
|
276 |
"\n",
|
277 |
"\n",
|
278 |
" # Energy Consumption Graph\n",
|
279 |
-
" energy_consumption_graph = px.line(data, x='hour'
|
280 |
-
" y='energy_consumption'
|
281 |
" labels={'hour': 'Hour', 'energy_consumption': 'Energy Consumption (kWh)'},\n",
|
282 |
" color_discrete_sequence=['lightgreen'])\n",
|
283 |
" energy_consumption_graph.update_layout(\n",
|
@@ -287,7 +363,7 @@
|
|
287 |
" )\n",
|
288 |
" #add accumulated energy consumption\n",
|
289 |
" energy_consumption = np.cumsum(energy_consumption)\n",
|
290 |
-
" energy_consumption_graph.add_trace(px.line(data, x='hour'
|
291 |
" y=energy_consumption,\n",
|
292 |
" labels={'y': 'Acc. Energy Consumption (kWh)'},\n",
|
293 |
" color_discrete_sequence=['green']).data[0])\n",
|
@@ -310,12 +386,19 @@
|
|
310 |
" color_discrete_sequence=['green']\n",
|
311 |
" ).data[0])\n",
|
312 |
" result = \"No solution found\"\n",
|
313 |
-
" return policy_readable_graph, energy_consumption_graph, comfort_graph, dataset_graph, result\n",
|
314 |
"\n",
|
315 |
"\n",
|
316 |
"if __name__ == \"__main__\":\n",
|
317 |
-
" app.run_server(host=\"
|
318 |
]
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
319 |
}
|
320 |
],
|
321 |
"metadata": {
|
|
|
2 |
"cells": [
|
3 |
{
|
4 |
"cell_type": "code",
|
5 |
+
"execution_count": 30,
|
6 |
"metadata": {},
|
7 |
+
"outputs": [
|
8 |
+
{
|
9 |
+
"name": "stderr",
|
10 |
+
"output_type": "stream",
|
11 |
+
"text": [
|
12 |
+
"/var/folders/b4/lwfgccm95kqd2skcwvrt2fr00000gn/T/ipykernel_34004/98337313.py:17: FutureWarning:\n",
|
13 |
+
"\n",
|
14 |
+
"The behavior of DataFrame concatenation with empty or all-NA entries is deprecated. In a future version, this will no longer exclude empty or all-NA columns when determining the result dtypes. To retain the old behavior, exclude the relevant entries before the concat operation.\n",
|
15 |
+
"\n"
|
16 |
+
]
|
17 |
+
},
|
18 |
+
{
|
19 |
+
"data": {
|
20 |
+
"text/html": [
|
21 |
+
"\n",
|
22 |
+
" <iframe\n",
|
23 |
+
" width=\"100%\"\n",
|
24 |
+
" height=\"650\"\n",
|
25 |
+
" src=\"http://0.0.0.0:8050/\"\n",
|
26 |
+
" frameborder=\"0\"\n",
|
27 |
+
" allowfullscreen\n",
|
28 |
+
" \n",
|
29 |
+
" ></iframe>\n",
|
30 |
+
" "
|
31 |
+
],
|
32 |
+
"text/plain": [
|
33 |
+
"<IPython.lib.display.IFrame at 0x15e45a110>"
|
34 |
+
]
|
35 |
+
},
|
36 |
+
"metadata": {},
|
37 |
+
"output_type": "display_data"
|
38 |
+
}
|
39 |
+
],
|
40 |
"source": [
|
41 |
"import os\n",
|
42 |
"import plotly.express as px\n",
|
|
|
47 |
"import numpy as np\n",
|
48 |
"import example_data\n",
|
49 |
"import core\n",
|
50 |
+
"from plotly.subplots import make_subplots\n",
|
51 |
"\n",
|
52 |
"outside_temp = example_data.ExampleDailyOutsideTemperature\n",
|
53 |
"energy_price = example_data.ExampleDailyEnergyCost\n",
|
|
|
92 |
" \"PHqaZDuMTRvCZCvA259Z1vJu\",\n",
|
93 |
" \"RZngVU6axOdshmfma0yNAajE\",\n",
|
94 |
" \"SQUOjMB6zAgYpSJEMy46tKXJ\",\n",
|
|
|
|
|
|
|
|
|
|
|
95 |
"]\n",
|
96 |
"dataset_options_default_value = dataset_options[0]\n",
|
97 |
+
"dataset_original_dfs = {\n",
|
98 |
+
" \"16NSJNnjLK4MndjZYaKYGKEV\": pd.read_csv('data/original/16NSJNnjLK4MndjZYaKYGKEV.csv'),\n",
|
99 |
+
" \"7uLwefnSt8CgVlmIGY8emqJK\": pd.read_csv('data/original/7uLwefnSt8CgVlmIGY8emqJK.csv'),\n",
|
100 |
+
" \"8yS04Ddkk3pPL8e9Rku4LJtc\": pd.read_csv('data/original/8yS04Ddkk3pPL8e9Rku4LJtc.csv'),\n",
|
101 |
+
" \"Cwp33jA19hp9VdoNJUlj6USf\": pd.read_csv('data/original/Cwp33jA19hp9VdoNJUlj6USf.csv'),\n",
|
102 |
+
" \"iBFIAuvh7bCNyOQDo0jkjhRV\": pd.read_csv('data/original/iBFIAuvh7bCNyOQDo0jkjhRV.csv'),\n",
|
103 |
+
" \"iNVKpGfGW6rU17eOtxpZSFWR\": pd.read_csv('data/original/iNVKpGfGW6rU17eOtxpZSFWR.csv'),\n",
|
104 |
+
" \"kaTMmHVh8gXUbHMppzdmdzpv\": pd.read_csv('data/original/kaTMmHVh8gXUbHMppzdmdzpv.csv'),\n",
|
105 |
+
" \"KN9Z3gANLftDuUGvgs8O38dI\": pd.read_csv('data/original/KN9Z3gANLftDuUGvgs8O38dI.csv'),\n",
|
106 |
+
" \"LzbMafI31IosheUI7YGhj5at\": pd.read_csv('data/original/LzbMafI31IosheUI7YGhj5at.csv'),\n",
|
107 |
+
" \"PHqaZDuMTRvCZCvA259Z1vJu\": pd.read_csv('data/original/PHqaZDuMTRvCZCvA259Z1vJu.csv'),\n",
|
108 |
+
" \"RZngVU6axOdshmfma0yNAajE\": pd.read_csv('data/original/RZngVU6axOdshmfma0yNAajE.csv'),\n",
|
109 |
+
" \"SQUOjMB6zAgYpSJEMy46tKXJ\": pd.read_csv('data/original/SQUOjMB6zAgYpSJEMy46tKXJ.csv'),\n",
|
110 |
+
"}\n",
|
111 |
+
"dataset_water_consumption_dfs = {\n",
|
112 |
+
" \"16NSJNnjLK4MndjZYaKYGKEV\": pd.read_csv('data/water_consumption/16NSJNnjLK4MndjZYaKYGKEV_water_consumption.csv'),\n",
|
113 |
+
" \"7uLwefnSt8CgVlmIGY8emqJK\": pd.read_csv('data/water_consumption/7uLwefnSt8CgVlmIGY8emqJK_water_consumption.csv'),\n",
|
114 |
+
" \"8yS04Ddkk3pPL8e9Rku4LJtc\": pd.read_csv('data/water_consumption/8yS04Ddkk3pPL8e9Rku4LJtc_water_consumption.csv'),\n",
|
115 |
+
" \"Cwp33jA19hp9VdoNJUlj6USf\": pd.read_csv('data/water_consumption/Cwp33jA19hp9VdoNJUlj6USf_water_consumption.csv'),\n",
|
116 |
+
" \"iBFIAuvh7bCNyOQDo0jkjhRV\": pd.read_csv('data/water_consumption/iBFIAuvh7bCNyOQDo0jkjhRV_water_consumption.csv'),\n",
|
117 |
+
" \"iNVKpGfGW6rU17eOtxpZSFWR\": pd.read_csv('data/water_consumption/iNVKpGfGW6rU17eOtxpZSFWR_water_consumption.csv'),\n",
|
118 |
+
" \"kaTMmHVh8gXUbHMppzdmdzpv\": pd.read_csv('data/water_consumption/kaTMmHVh8gXUbHMppzdmdzpv_water_consumption.csv'),\n",
|
119 |
+
" \"KN9Z3gANLftDuUGvgs8O38dI\": pd.read_csv('data/water_consumption/KN9Z3gANLftDuUGvgs8O38dI_water_consumption.csv'),\n",
|
120 |
+
" \"LzbMafI31IosheUI7YGhj5at\": pd.read_csv('data/water_consumption/LzbMafI31IosheUI7YGhj5at_water_consumption.csv'),\n",
|
121 |
+
" \"PHqaZDuMTRvCZCvA259Z1vJu\": pd.read_csv('data/water_consumption/PHqaZDuMTRvCZCvA259Z1vJu_water_consumption.csv'),\n",
|
122 |
+
" \"RZngVU6axOdshmfma0yNAajE\": pd.read_csv('data/water_consumption/RZngVU6axOdshmfma0yNAajE_water_consumption.csv'),\n",
|
123 |
+
" \"SQUOjMB6zAgYpSJEMy46tKXJ\": pd.read_csv('data/water_consumption/SQUOjMB6zAgYpSJEMy46tKXJ_water_consumption.csv'),\n",
|
124 |
"}\n",
|
125 |
"\n",
|
126 |
"# provide a scalar value to enable the slider to select ideal temperature\n",
|
|
|
182 |
" [\n",
|
183 |
" html.Div(\n",
|
184 |
" [\n",
|
185 |
+
" html.H3('Water Comsumption Patterns'),\n",
|
186 |
+
" dcc.Graph(id='water-consumption-graph')\n",
|
187 |
+
" ], className='twelve columns',\n",
|
188 |
+
" )\n",
|
189 |
+
" ], className='row'),\n",
|
190 |
+
" html.Div(\n",
|
191 |
+
" [\n",
|
192 |
+
" html.Div(\n",
|
193 |
+
" [\n",
|
194 |
+
" html.H4('Hourly'),\n",
|
195 |
+
" dcc.Graph(id='water_consumption_hourly_graph')\n",
|
196 |
+
" ], className='six columns',\n",
|
197 |
+
" )\n",
|
198 |
+
" ], className='row'),\n",
|
199 |
+
" html.Div(\n",
|
200 |
+
" [\n",
|
201 |
+
" html.Div(\n",
|
202 |
+
" [\n",
|
203 |
" html.H3('Policy'),\n",
|
204 |
" dcc.Graph(id='policy_readable-graph')\n",
|
205 |
" ], className='six columns',\n",
|
|
|
235 |
"\n",
|
236 |
" html.Div([\n",
|
237 |
" html.Div([\n",
|
238 |
+
"\n",
|
239 |
" html.H3('What is this project about?'),\n",
|
240 |
"\n",
|
241 |
" html.P('This project is a simulation of a shower system. The goal is to find the best policy for the boiler to heat the water for the shower. The policy is a function that takes the current hour of the day and the current temperature of the water in the boiler and returns the temperature that the boiler should heat the water to.'),\n",
|
|
|
250 |
" html.P('This project was developed by a team of 3, in the context of the Aveiro Tech City 2023 hackathon.'),\n",
|
251 |
" html.P('The team members are:'),\n",
|
252 |
" html.H4('Rui Melo'),\n",
|
|
|
253 |
" html.H4('AndrΓ© Catarino'),\n",
|
|
|
254 |
" html.H4('Francisco Petronilho'),\n",
|
|
|
255 |
" html.H4('AndrΓ© TomΓ‘s'),\n",
|
|
|
256 |
" html.H4('ZΓ© Miguel'),\n",
|
|
|
257 |
"\n",
|
258 |
"\n",
|
259 |
" html.H3('References'),\n",
|
|
|
283 |
" Output('energy-consumption-graph', 'figure'),\n",
|
284 |
" Output('comfort-graph', 'figure'),\n",
|
285 |
" Output('dataset-graph', 'figure'),\n",
|
286 |
+
" Output('water-consumption-graph', 'figure'),\n",
|
287 |
+
" Output('water_consumption_hourly_graph', 'figure'),\n",
|
288 |
" Output('solution-status', 'children'),\n",
|
289 |
" Input('dataset-dropdown', 'value'),\n",
|
290 |
" Input('solution-dropdown', 'value'),\n",
|
|
|
293 |
"def update_graph(dataset, solution, ideal_temperature):\n",
|
294 |
" energy_consumption = data['energy_consumption'].values\n",
|
295 |
" comfort_obtained = data['comfort'].values\n",
|
296 |
+
" \n",
|
297 |
+
" # Original Dataset Graph\n",
|
298 |
+
" original_df = dataset_original_dfs[dataset]\n",
|
|
|
|
|
|
|
299 |
"\n",
|
300 |
" dataset_graph = px.line()\n",
|
301 |
+
" dataset_graph.add_scatter(x=original_df['ts'], y=original_df['ActPow'], mode='lines', name='ActPow')\n",
|
302 |
+
" dataset_graph.add_scatter(x=original_df['ts'], y=original_df['HwActive'], mode='lines', name='HwActive')\n",
|
303 |
+
" dataset_graph.add_scatter(x=original_df['ts'], y=original_df['ChActive'], mode='lines', name='ChActive')\n",
|
304 |
+
" dataset_graph.add_scatter(x=original_df['ts'], y=original_df['HwTSet'], mode='lines', name='HwTSet')\n",
|
305 |
+
" dataset_graph.add_scatter(x=original_df['ts'], y=original_df['DHW_E21_T3_START_TEMP'], mode='lines', name='START_TEMP')\n",
|
306 |
+
" dataset_graph.add_scatter(x=original_df['ts'], y=original_df['HwTStor'], mode='lines', name='HwTStor')\n",
|
307 |
+
" dataset_graph.add_scatter(x=original_df['ts'], y=original_df['HwTAct'], mode='lines', name='HwTAct')\n",
|
308 |
+
" dataset_graph.add_scatter(x=original_df['ts'], y=original_df['OutTemp'], mode='lines', name='OutTemp')\n",
|
309 |
+
" start_time = pd.Timestamp(original_df['ts'][0])\n",
|
|
|
|
|
|
|
310 |
" dataset_graph.update_xaxes(range=[start_time, start_time+pd.Timedelta(days=2)])\n",
|
311 |
"\n",
|
312 |
"\n",
|
313 |
+
" # Water Consumption Graph\n",
|
314 |
+
" water_consumption_df = dataset_water_consumption_dfs[dataset]\n",
|
315 |
+
" if len(water_consumption_df) / 24 > 365:\n",
|
316 |
+
" water_consumption_df = water_consumption_df.head(365* 24)\n",
|
317 |
+
" water_consumption_df.index = pd.to_datetime(water_consumption_df[\"ts\"], errors='coerce')\n",
|
318 |
+
" water_consumption_graph = go.Figure()\n",
|
319 |
+
" water_consumption_graph = make_subplots(specs=[[{\"secondary_y\": True}]])\n",
|
320 |
+
" water_consumption_graph.add_trace(go.Scatter(x=water_consumption_df[:][\"ts\"], y=water_consumption_df[:]['water_consumption_bool'], mode='lines', name='Water consumption'),\n",
|
321 |
+
" secondary_y=False,)\n",
|
322 |
+
" water_consumption_graph.add_trace(go.Scatter(x=water_consumption_df[:][\"ts\"], y=water_consumption_df[:]['HwTStor'], mode='lines', name='Water temperature')\n",
|
323 |
+
" ,secondary_y=True,)\n",
|
324 |
+
" water_consumption_graph.update_layout(\n",
|
325 |
+
" title_text=\"Water consumption\"\n",
|
326 |
+
" )\n",
|
327 |
+
" water_consumption_graph.update_xaxes(title_text=\"time\")\n",
|
328 |
+
" water_consumption_graph.update_yaxes(title_text=\"water consumption\", secondary_y=False)\n",
|
329 |
+
" water_consumption_graph.update_yaxes(title_text=\"water temperature\", secondary_y=True)\n",
|
330 |
+
"\n",
|
331 |
+
" # Water Consumption Hourly Graph\n",
|
332 |
+
" water_consumption_df[\"ts_hour\"] = water_consumption_df[\"ts\"].apply(lambda x: x.split(\" \")[1].split(\":\")[0])\n",
|
333 |
+
" hour_series = water_consumption_df.groupby(\"ts_hour\")[\"water_consumption_bool\"].sum()\n",
|
334 |
+
" water_consumption_hourly_graph = go.Figure()\n",
|
335 |
+
" water_consumption_hourly_graph.add_trace(go.Bar(x=hour_series.index, y=hour_series.values, name='Water consumption per hour'))\n",
|
336 |
+
" water_consumption_hourly_graph.update_layout(\n",
|
337 |
+
" title_text=\"Water consumption per hour\"\n",
|
338 |
+
" )\n",
|
339 |
+
" water_consumption_hourly_graph.update_xaxes(title_text=\"Hour of day\")\n",
|
340 |
+
" water_consumption_hourly_graph.update_yaxes(title_text=\"Number of water usages\")\n",
|
341 |
+
"\n",
|
342 |
+
"\n",
|
343 |
" # Policy Graph\n",
|
344 |
" policy_readable_graph = px.line(data, x='hour', y='policy_readable',\n",
|
345 |
" labels={'hour': 'Hour', 'policy_readable': 'Policy'},\n",
|
|
|
352 |
"\n",
|
353 |
"\n",
|
354 |
" # Energy Consumption Graph\n",
|
355 |
+
" energy_consumption_graph = px.line(data, x='hour',\n",
|
356 |
+
" y='energy_consumption',\n",
|
357 |
" labels={'hour': 'Hour', 'energy_consumption': 'Energy Consumption (kWh)'},\n",
|
358 |
" color_discrete_sequence=['lightgreen'])\n",
|
359 |
" energy_consumption_graph.update_layout(\n",
|
|
|
363 |
" )\n",
|
364 |
" #add accumulated energy consumption\n",
|
365 |
" energy_consumption = np.cumsum(energy_consumption)\n",
|
366 |
+
" energy_consumption_graph.add_trace(px.line(data, x='hour',\n",
|
367 |
" y=energy_consumption,\n",
|
368 |
" labels={'y': 'Acc. Energy Consumption (kWh)'},\n",
|
369 |
" color_discrete_sequence=['green']).data[0])\n",
|
|
|
386 |
" color_discrete_sequence=['green']\n",
|
387 |
" ).data[0])\n",
|
388 |
" result = \"No solution found\"\n",
|
389 |
+
" return policy_readable_graph, energy_consumption_graph, comfort_graph, dataset_graph, water_consumption_graph, water_consumption_hourly_graph, result\n",
|
390 |
"\n",
|
391 |
"\n",
|
392 |
"if __name__ == \"__main__\":\n",
|
393 |
+
" app.run_server(host=\"0.0.0.0\", port=\"8050\", debug=debug)"
|
394 |
]
|
395 |
+
},
|
396 |
+
{
|
397 |
+
"cell_type": "code",
|
398 |
+
"execution_count": null,
|
399 |
+
"metadata": {},
|
400 |
+
"outputs": [],
|
401 |
+
"source": []
|
402 |
}
|
403 |
],
|
404 |
"metadata": {
|
app/data/.DS_Store
ADDED
Binary file (6.15 kB). View file
|
|
app/data/{16NSJNnjLK4MndjZYaKYGKEV.csv β original/16NSJNnjLK4MndjZYaKYGKEV.csv}
RENAMED
File without changes
|
app/data/{7uLwefnSt8CgVlmIGY8emqJK.csv β original/7uLwefnSt8CgVlmIGY8emqJK.csv}
RENAMED
File without changes
|
app/data/{8yS04Ddkk3pPL8e9Rku4LJtc.csv β original/8yS04Ddkk3pPL8e9Rku4LJtc.csv}
RENAMED
File without changes
|
app/data/{Cwp33jA19hp9VdoNJUlj6USf.csv β original/Cwp33jA19hp9VdoNJUlj6USf.csv}
RENAMED
File without changes
|
app/data/{KN9Z3gANLftDuUGvgs8O38dI.csv β original/KN9Z3gANLftDuUGvgs8O38dI.csv}
RENAMED
File without changes
|
app/data/{LzbMafI31IosheUI7YGhj5at.csv β original/LzbMafI31IosheUI7YGhj5at.csv}
RENAMED
File without changes
|
app/data/{PHqaZDuMTRvCZCvA259Z1vJu.csv β original/PHqaZDuMTRvCZCvA259Z1vJu.csv}
RENAMED
File without changes
|
app/data/{RZngVU6axOdshmfma0yNAajE.csv β original/RZngVU6axOdshmfma0yNAajE.csv}
RENAMED
File without changes
|
app/data/{SQUOjMB6zAgYpSJEMy46tKXJ.csv β original/SQUOjMB6zAgYpSJEMy46tKXJ.csv}
RENAMED
File without changes
|
app/data/{iBFIAuvh7bCNyOQDo0jkjhRV.csv β original/iBFIAuvh7bCNyOQDo0jkjhRV.csv}
RENAMED
File without changes
|
app/data/{iNVKpGfGW6rU17eOtxpZSFWR.csv β original/iNVKpGfGW6rU17eOtxpZSFWR.csv}
RENAMED
File without changes
|
app/data/{kaTMmHVh8gXUbHMppzdmdzpv.csv β original/kaTMmHVh8gXUbHMppzdmdzpv.csv}
RENAMED
File without changes
|
app/data/{UcufQVoJQPbfLzIBnSsUodJP.csv β water_consumption/16NSJNnjLK4MndjZYaKYGKEV_water_consumption.csv}
RENAMED
@@ -1,3 +1,3 @@
|
|
1 |
version https://git-lfs.github.com/spec/v1
|
2 |
-
oid sha256:
|
3 |
-
size
|
|
|
1 |
version https://git-lfs.github.com/spec/v1
|
2 |
+
oid sha256:41cf701c1902caa084d02bf1530219d9eb70b627113329b04ea853a44b2b4f02
|
3 |
+
size 633107
|
app/data/{VTuh8oxtC6YlOCLeScXfLuY3.csv β water_consumption/7uLwefnSt8CgVlmIGY8emqJK_water_consumption.csv}
RENAMED
@@ -1,3 +1,3 @@
|
|
1 |
version https://git-lfs.github.com/spec/v1
|
2 |
-
oid sha256:
|
3 |
-
size
|
|
|
1 |
version https://git-lfs.github.com/spec/v1
|
2 |
+
oid sha256:52efb1bc0156d7b7b14e0235150a54472dfa233c481db4e184a4f312198d4ef4
|
3 |
+
size 1523185
|
app/data/{VZTnyVO3TP3ILuYsN5Xw9UR0.csv β water_consumption/8yS04Ddkk3pPL8e9Rku4LJtc_water_consumption.csv}
RENAMED
@@ -1,3 +1,3 @@
|
|
1 |
version https://git-lfs.github.com/spec/v1
|
2 |
-
oid sha256:
|
3 |
-
size
|
|
|
1 |
version https://git-lfs.github.com/spec/v1
|
2 |
+
oid sha256:8df5fc0354804f8b29acef8fbb8f0e17ad3fce492c7639c40ab8f297f83aa3de
|
3 |
+
size 580124
|
app/data/{WyPRjcmBXJZoC9DIURMXKxn8.csv β water_consumption/Cwp33jA19hp9VdoNJUlj6USf_water_consumption.csv}
RENAMED
@@ -1,3 +1,3 @@
|
|
1 |
version https://git-lfs.github.com/spec/v1
|
2 |
-
oid sha256:
|
3 |
-
size
|
|
|
1 |
version https://git-lfs.github.com/spec/v1
|
2 |
+
oid sha256:6070930c5c9656eef96e3c6826f7ed5e3fede4390dec5eece646da14ab90f1b3
|
3 |
+
size 446301
|
app/data/water_consumption/KN9Z3gANLftDuUGvgs8O38dI_water_consumption.csv
ADDED
@@ -0,0 +1,3 @@
|
|
|
|
|
|
|
|
|
1 |
+
version https://git-lfs.github.com/spec/v1
|
2 |
+
oid sha256:f7a98efb799c34129d8bbd1d867ddc87cb5c58ead1eee7e8700d4a4a7e82974c
|
3 |
+
size 1115376
|
app/data/water_consumption/LzbMafI31IosheUI7YGhj5at_water_consumption.csv
ADDED
@@ -0,0 +1,3 @@
|
|
|
|
|
|
|
|
|
1 |
+
version https://git-lfs.github.com/spec/v1
|
2 |
+
oid sha256:4d4e0678c691bde46e41387001bf4a3bd445416a5a3b009ffc84cb3d39dd8c80
|
3 |
+
size 723023
|
app/data/water_consumption/PHqaZDuMTRvCZCvA259Z1vJu_water_consumption.csv
ADDED
@@ -0,0 +1,3 @@
|
|
|
|
|
|
|
|
|
1 |
+
version https://git-lfs.github.com/spec/v1
|
2 |
+
oid sha256:c9cf1f9bf5bfa5c0326ee613d12fb55af300f2d320bda3bf9aef6ecf64f73b7d
|
3 |
+
size 979500
|
app/data/water_consumption/RZngVU6axOdshmfma0yNAajE_water_consumption.csv
ADDED
@@ -0,0 +1,3 @@
|
|
|
|
|
|
|
|
|
1 |
+
version https://git-lfs.github.com/spec/v1
|
2 |
+
oid sha256:c002c36808783f7aa882fe17ea3466129e5a25475ee5c914c5a9d15cb6f125eb
|
3 |
+
size 1669367
|
app/data/water_consumption/SQUOjMB6zAgYpSJEMy46tKXJ_water_consumption.csv
ADDED
@@ -0,0 +1,3 @@
|
|
|
|
|
|
|
|
|
1 |
+
version https://git-lfs.github.com/spec/v1
|
2 |
+
oid sha256:fb78d87ea302d7d75634aec3796e5e13b51c0a30452edb050b8e603c7a205a7f
|
3 |
+
size 691401
|
app/data/water_consumption/iBFIAuvh7bCNyOQDo0jkjhRV_water_consumption.csv
ADDED
@@ -0,0 +1,3 @@
|
|
|
|
|
|
|
|
|
1 |
+
version https://git-lfs.github.com/spec/v1
|
2 |
+
oid sha256:380ab047c448034592d8f1df73cb13b1e39633770addad9e67ec344d34f4dd22
|
3 |
+
size 578560
|
app/data/water_consumption/iNVKpGfGW6rU17eOtxpZSFWR_water_consumption.csv
ADDED
@@ -0,0 +1,3 @@
|
|
|
|
|
|
|
|
|
1 |
+
version https://git-lfs.github.com/spec/v1
|
2 |
+
oid sha256:8949b88c743ad9b4bd4a3fb50f6d4f30ec8407a77c878f59ab05ff671d50c0af
|
3 |
+
size 507497
|
app/data/water_consumption/kaTMmHVh8gXUbHMppzdmdzpv_water_consumption.csv
ADDED
@@ -0,0 +1,3 @@
|
|
|
|
|
|
|
|
|
1 |
+
version https://git-lfs.github.com/spec/v1
|
2 |
+
oid sha256:5db7205867b4966c55b5ebb025e846d8f509d5dba92f8b797a19fa24094f41b6
|
3 |
+
size 624588
|
app/data/yPtlbyLlDlzeBZQYrPYaByoB.csv
DELETED
@@ -1,3 +0,0 @@
|
|
1 |
-
version https://git-lfs.github.com/spec/v1
|
2 |
-
oid sha256:8c4ce91c7f791bc315773f91ccba4b0a38eeeceab87c83351641ede6261a2a8e
|
3 |
-
size 11395071
|
|
|
|
|
|
|
|