rufimelo commited on
Commit
3d4f3ff
Β·
1 Parent(s): d7e43f2

more graphs

Browse files
Files changed (30) hide show
  1. .DS_Store +0 -0
  2. app/.DS_Store +0 -0
  3. app/app.py +91 -47
  4. app/dashboard.ipynb +137 -54
  5. app/data/.DS_Store +0 -0
  6. app/data/{16NSJNnjLK4MndjZYaKYGKEV.csv β†’ original/16NSJNnjLK4MndjZYaKYGKEV.csv} +0 -0
  7. app/data/{7uLwefnSt8CgVlmIGY8emqJK.csv β†’ original/7uLwefnSt8CgVlmIGY8emqJK.csv} +0 -0
  8. app/data/{8yS04Ddkk3pPL8e9Rku4LJtc.csv β†’ original/8yS04Ddkk3pPL8e9Rku4LJtc.csv} +0 -0
  9. app/data/{Cwp33jA19hp9VdoNJUlj6USf.csv β†’ original/Cwp33jA19hp9VdoNJUlj6USf.csv} +0 -0
  10. app/data/{KN9Z3gANLftDuUGvgs8O38dI.csv β†’ original/KN9Z3gANLftDuUGvgs8O38dI.csv} +0 -0
  11. app/data/{LzbMafI31IosheUI7YGhj5at.csv β†’ original/LzbMafI31IosheUI7YGhj5at.csv} +0 -0
  12. app/data/{PHqaZDuMTRvCZCvA259Z1vJu.csv β†’ original/PHqaZDuMTRvCZCvA259Z1vJu.csv} +0 -0
  13. app/data/{RZngVU6axOdshmfma0yNAajE.csv β†’ original/RZngVU6axOdshmfma0yNAajE.csv} +0 -0
  14. app/data/{SQUOjMB6zAgYpSJEMy46tKXJ.csv β†’ original/SQUOjMB6zAgYpSJEMy46tKXJ.csv} +0 -0
  15. app/data/{iBFIAuvh7bCNyOQDo0jkjhRV.csv β†’ original/iBFIAuvh7bCNyOQDo0jkjhRV.csv} +0 -0
  16. app/data/{iNVKpGfGW6rU17eOtxpZSFWR.csv β†’ original/iNVKpGfGW6rU17eOtxpZSFWR.csv} +0 -0
  17. app/data/{kaTMmHVh8gXUbHMppzdmdzpv.csv β†’ original/kaTMmHVh8gXUbHMppzdmdzpv.csv} +0 -0
  18. app/data/{UcufQVoJQPbfLzIBnSsUodJP.csv β†’ water_consumption/16NSJNnjLK4MndjZYaKYGKEV_water_consumption.csv} +2 -2
  19. app/data/{VTuh8oxtC6YlOCLeScXfLuY3.csv β†’ water_consumption/7uLwefnSt8CgVlmIGY8emqJK_water_consumption.csv} +2 -2
  20. app/data/{VZTnyVO3TP3ILuYsN5Xw9UR0.csv β†’ water_consumption/8yS04Ddkk3pPL8e9Rku4LJtc_water_consumption.csv} +2 -2
  21. app/data/{WyPRjcmBXJZoC9DIURMXKxn8.csv β†’ water_consumption/Cwp33jA19hp9VdoNJUlj6USf_water_consumption.csv} +2 -2
  22. app/data/water_consumption/KN9Z3gANLftDuUGvgs8O38dI_water_consumption.csv +3 -0
  23. app/data/water_consumption/LzbMafI31IosheUI7YGhj5at_water_consumption.csv +3 -0
  24. app/data/water_consumption/PHqaZDuMTRvCZCvA259Z1vJu_water_consumption.csv +3 -0
  25. app/data/water_consumption/RZngVU6axOdshmfma0yNAajE_water_consumption.csv +3 -0
  26. app/data/water_consumption/SQUOjMB6zAgYpSJEMy46tKXJ_water_consumption.csv +3 -0
  27. app/data/water_consumption/iBFIAuvh7bCNyOQDo0jkjhRV_water_consumption.csv +3 -0
  28. app/data/water_consumption/iNVKpGfGW6rU17eOtxpZSFWR_water_consumption.csv +3 -0
  29. app/data/water_consumption/kaTMmHVh8gXUbHMppzdmdzpv_water_consumption.csv +3 -0
  30. 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
- dataset_dfs = {
62
- "16NSJNnjLK4MndjZYaKYGKEV": pd.read_csv('data/16NSJNnjLK4MndjZYaKYGKEV.csv')[:100000],
63
- "7uLwefnSt8CgVlmIGY8emqJK": pd.read_csv('data/7uLwefnSt8CgVlmIGY8emqJK.csv')[:100000],
64
- "8yS04Ddkk3pPL8e9Rku4LJtc": pd.read_csv('data/8yS04Ddkk3pPL8e9Rku4LJtc.csv')[:100000],
65
- "Cwp33jA19hp9VdoNJUlj6USf": pd.read_csv('data/Cwp33jA19hp9VdoNJUlj6USf.csv')[:100000],
66
- "iBFIAuvh7bCNyOQDo0jkjhRV": pd.read_csv('data/iBFIAuvh7bCNyOQDo0jkjhRV.csv')[:100000],
67
- "iNVKpGfGW6rU17eOtxpZSFWR": pd.read_csv('data/iNVKpGfGW6rU17eOtxpZSFWR.csv')[:100000],
68
- "kaTMmHVh8gXUbHMppzdmdzpv": pd.read_csv('data/kaTMmHVh8gXUbHMppzdmdzpv.csv')[:100000],
69
- "KN9Z3gANLftDuUGvgs8O38dI": pd.read_csv('data/KN9Z3gANLftDuUGvgs8O38dI.csv')[:100000],
70
- "LzbMafI31IosheUI7YGhj5at": pd.read_csv('data/LzbMafI31IosheUI7YGhj5at.csv')[:100000],
71
- "PHqaZDuMTRvCZCvA259Z1vJu": pd.read_csv('data/PHqaZDuMTRvCZCvA259Z1vJu.csv')[:100000],
72
- "RZngVU6axOdshmfma0yNAajE": pd.read_csv('data/RZngVU6axOdshmfma0yNAajE.csv')[:100000],
73
- "SQUOjMB6zAgYpSJEMy46tKXJ": pd.read_csv('data/SQUOjMB6zAgYpSJEMy46tKXJ.csv')[:100000],
74
- "UcufQVoJQPbfLzIBnSsUodJP": pd.read_csv('data/UcufQVoJQPbfLzIBnSsUodJP.csv')[:100000],
75
- "VTuh8oxtC6YlOCLeScXfLuY3": pd.read_csv('data/VTuh8oxtC6YlOCLeScXfLuY3.csv')[:100000],
76
- "VZTnyVO3TP3ILuYsN5Xw9UR0": pd.read_csv('data/VZTnyVO3TP3ILuYsN5Xw9UR0.csv')[:100000],
77
- "WyPRjcmBXJZoC9DIURMXKxn8": pd.read_csv('data/WyPRjcmBXJZoC9DIURMXKxn8.csv')[:100000],
78
- "yPtlbyLlDlzeBZQYrPYaByoB": pd.read_csv('data/yPtlbyLlDlzeBZQYrPYaByoB.csv')[:100000],
 
 
 
 
 
 
 
 
 
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
- # Dataset Graph
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
- #Add another line to the plot
245
- dataset_graph.add_scatter(x=dataset_df['ts'], y=dataset_df['ActPow'], mode='lines', name='ActPow')
246
- dataset_graph.add_scatter(x=dataset_df['ts'], y=dataset_df['HwActive'], mode='lines', name='HwActive')
247
- dataset_graph.add_scatter(x=dataset_df['ts'], y=dataset_df['ChActive'], mode='lines', name='ChActive')
248
- dataset_graph.add_scatter(x=dataset_df['ts'], y=dataset_df['HwTSet'], mode='lines', name='HwTSet')
249
- dataset_graph.add_scatter(x=dataset_df['ts'], y=dataset_df['DHW_E21_T3_START_TEMP'], mode='lines', name='START_TEMP')
250
- dataset_graph.add_scatter(x=dataset_df['ts'], y=dataset_df['HwTStor'], mode='lines', name='HwTStor')
251
- dataset_graph.add_scatter(x=dataset_df['ts'], y=dataset_df['HwTAct'], mode='lines', name='HwTAct')
252
- dataset_graph.add_scatter(x=dataset_df['ts'], y=dataset_df['OutTemp'], mode='lines', name='OutTemp')
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": null,
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
- "dataset_dfs = {\n",
70
- " \"16NSJNnjLK4MndjZYaKYGKEV\": pd.read_csv('data/16NSJNnjLK4MndjZYaKYGKEV.csv')[:100000],\n",
71
- " \"7uLwefnSt8CgVlmIGY8emqJK\": pd.read_csv('data/7uLwefnSt8CgVlmIGY8emqJK.csv')[:100000],\n",
72
- " \"8yS04Ddkk3pPL8e9Rku4LJtc\": pd.read_csv('data/8yS04Ddkk3pPL8e9Rku4LJtc.csv')[:100000],\n",
73
- " \"Cwp33jA19hp9VdoNJUlj6USf\": pd.read_csv('data/Cwp33jA19hp9VdoNJUlj6USf.csv')[:100000],\n",
74
- " \"iBFIAuvh7bCNyOQDo0jkjhRV\": pd.read_csv('data/iBFIAuvh7bCNyOQDo0jkjhRV.csv')[:100000],\n",
75
- " \"iNVKpGfGW6rU17eOtxpZSFWR\": pd.read_csv('data/iNVKpGfGW6rU17eOtxpZSFWR.csv')[:100000],\n",
76
- " \"kaTMmHVh8gXUbHMppzdmdzpv\": pd.read_csv('data/kaTMmHVh8gXUbHMppzdmdzpv.csv')[:100000],\n",
77
- " \"KN9Z3gANLftDuUGvgs8O38dI\": pd.read_csv('data/KN9Z3gANLftDuUGvgs8O38dI.csv')[:100000],\n",
78
- " \"LzbMafI31IosheUI7YGhj5at\": pd.read_csv('data/LzbMafI31IosheUI7YGhj5at.csv')[:100000],\n",
79
- " \"PHqaZDuMTRvCZCvA259Z1vJu\": pd.read_csv('data/PHqaZDuMTRvCZCvA259Z1vJu.csv')[:100000],\n",
80
- " \"RZngVU6axOdshmfma0yNAajE\": pd.read_csv('data/RZngVU6axOdshmfma0yNAajE.csv')[:100000],\n",
81
- " \"SQUOjMB6zAgYpSJEMy46tKXJ\": pd.read_csv('data/SQUOjMB6zAgYpSJEMy46tKXJ.csv')[:100000],\n",
82
- " \"UcufQVoJQPbfLzIBnSsUodJP\": pd.read_csv('data/UcufQVoJQPbfLzIBnSsUodJP.csv')[:100000],\n",
83
- " \"VTuh8oxtC6YlOCLeScXfLuY3\": pd.read_csv('data/VTuh8oxtC6YlOCLeScXfLuY3.csv')[:100000],\n",
84
- " \"VZTnyVO3TP3ILuYsN5Xw9UR0\": pd.read_csv('data/VZTnyVO3TP3ILuYsN5Xw9UR0.csv')[:100000],\n",
85
- " \"WyPRjcmBXJZoC9DIURMXKxn8\": pd.read_csv('data/WyPRjcmBXJZoC9DIURMXKxn8.csv')[:100000],\n",
86
- " \"yPtlbyLlDlzeBZQYrPYaByoB\": pd.read_csv('data/yPtlbyLlDlzeBZQYrPYaByoB.csv')[:100000],\n",
 
 
 
 
 
 
 
 
 
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
- " \n",
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
- " # Dataset Graph\n",
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
- " #Add another line to the plot\n",
253
- " dataset_graph.add_scatter(x=dataset_df['ts'], y=dataset_df['ActPow'], mode='lines', name='ActPow')\n",
254
- " dataset_graph.add_scatter(x=dataset_df['ts'], y=dataset_df['HwActive'], mode='lines', name='HwActive')\n",
255
- " dataset_graph.add_scatter(x=dataset_df['ts'], y=dataset_df['ChActive'], mode='lines', name='ChActive')\n",
256
- " dataset_graph.add_scatter(x=dataset_df['ts'], y=dataset_df['HwTSet'], mode='lines', name='HwTSet')\n",
257
- " dataset_graph.add_scatter(x=dataset_df['ts'], y=dataset_df['DHW_E21_T3_START_TEMP'], mode='lines', name='START_TEMP')\n",
258
- " dataset_graph.add_scatter(x=dataset_df['ts'], y=dataset_df['HwTStor'], mode='lines', name='HwTStor')\n",
259
- " dataset_graph.add_scatter(x=dataset_df['ts'], y=dataset_df['HwTAct'], mode='lines', name='HwTAct')\n",
260
- " dataset_graph.add_scatter(x=dataset_df['ts'], y=dataset_df['OutTemp'], mode='lines', name='OutTemp')\n",
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', \n",
280
- " y='energy_consumption', \n",
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', \n",
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=\"127.0.0.1\", port=\"8050\", debug=debug)\n"
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:95715e28a3c42c8681fd0510e50f95a68830d3d788923fdd32e5bcc180402816
3
- size 12493840
 
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:bce301c9c99b36ba4afe247a7cc93fd20071bd9e0fe2bfe0967d105b524de681
3
- size 11698681
 
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:a94f2e2cfdbac3804c9b3fee8467be166edf68ccab447114735011cd0c7b5e56
3
- size 12474901
 
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:6b548e815f656fa34f660c90d93c150cc5ffa8531b12cf01e8907c0b9c83490c
3
- size 11290978
 
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