Spaces:
Runtime error
Runtime error
init
Browse files- .gitattributes +2 -0
- data/Bangkalan 1th hourly.csv +0 -0
- data/Sby 1th hourly.csv +0 -0
- data/cluster/climate_data_clustered.csv +0 -0
- data/forecast/bkl_temp_forecast.csv +722 -0
- data/forecast/sby_temp_forecast.csv +722 -0
- data/model/cnn.ipynb +0 -0
- data/model/cnnModel.keras +3 -0
- data/model/wp_CNN_test_preprocess.ipynb +114 -0
- data/model/wp_EDA_preprocessing.ipynb +0 -0
- data/model/wp_confusion_matrix.ipynb +225 -0
- data/model/wp_prediction_and_log-loss.ipynb +138 -0
- data/predict/3526.json +0 -0
- data/predict/3578.json +0 -0
- data/predict/clear-day.png +0 -0
- data/predict/label_encoder.pkl +3 -0
- data/predict/label_encoder_bgkln.pkl +3 -0
- data/predict/model_rf.pkl +3 -0
- data/predict/model_rf_bgkln.pkl +3 -0
- data/predict/rain.png +0 -0
- data/predict/sun-cloudy.png +0 -0
- data/predict/sun.png +0 -0
- main.py +183 -0
- programs/load_data.py +61 -0
- programs/map.py +31 -0
- programs/predict_cuaca.py +130 -0
- requirements.txt +8 -0
- static/cloudicon.png +0 -0
- static/clouds.png +0 -0
- static/feelslike.png +0 -0
- static/humidity.png +0 -0
- static/low-visibility.png +0 -0
- static/meteorology.png +0 -0
- static/rain.png +0 -0
- static/storm.png +0 -0
- static/sun-cloudy.png +0 -0
- static/sun.png +0 -0
- static/temp.png +0 -0
- static/weather-forecast.png +0 -0
- static/wind.png +0 -0
- templates/index.html +250 -0
- templates/index_cluster.html +0 -0
- templates/peta_persebaran.html +0 -0
- templates/prediksi_cuaca.html +289 -0
.gitattributes
CHANGED
|
@@ -33,3 +33,5 @@ saved_model/**/* filter=lfs diff=lfs merge=lfs -text
|
|
| 33 |
*.zip filter=lfs diff=lfs merge=lfs -text
|
| 34 |
*.zst filter=lfs diff=lfs merge=lfs -text
|
| 35 |
*tfevents* filter=lfs diff=lfs merge=lfs -text
|
|
|
|
|
|
|
|
|
| 33 |
*.zip filter=lfs diff=lfs merge=lfs -text
|
| 34 |
*.zst filter=lfs diff=lfs merge=lfs -text
|
| 35 |
*tfevents* filter=lfs diff=lfs merge=lfs -text
|
| 36 |
+
*.keras filter=lfs diff=lfs merge=lfs -text
|
| 37 |
+
*.xlsx filter=lfs diff=lfs merge=lfs -text
|
data/Bangkalan 1th hourly.csv
ADDED
|
The diff for this file is too large to render.
See raw diff
|
|
|
data/Sby 1th hourly.csv
ADDED
|
The diff for this file is too large to render.
See raw diff
|
|
|
data/cluster/climate_data_clustered.csv
ADDED
|
The diff for this file is too large to render.
See raw diff
|
|
|
data/forecast/bkl_temp_forecast.csv
ADDED
|
@@ -0,0 +1,722 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
,predicted_mean
|
| 2 |
+
2024-12-01 00:00:00,25.75564011224913
|
| 3 |
+
2024-12-01 01:00:00,25.804853419179715
|
| 4 |
+
2024-12-01 02:00:00,25.646551777811514
|
| 5 |
+
2024-12-01 03:00:00,25.357466408591787
|
| 6 |
+
2024-12-01 04:00:00,25.039106142017793
|
| 7 |
+
2024-12-01 05:00:00,25.060145566221884
|
| 8 |
+
2024-12-01 06:00:00,25.431559908821033
|
| 9 |
+
2024-12-01 07:00:00,27.217842477791805
|
| 10 |
+
2024-12-01 08:00:00,28.915450202255908
|
| 11 |
+
2024-12-01 09:00:00,30.28317559989064
|
| 12 |
+
2024-12-01 10:00:00,31.50871587345861
|
| 13 |
+
2024-12-01 11:00:00,32.110298901969585
|
| 14 |
+
2024-12-01 12:00:00,32.57832860540959
|
| 15 |
+
2024-12-01 13:00:00,32.61997978622767
|
| 16 |
+
2024-12-01 14:00:00,32.414577149692654
|
| 17 |
+
2024-12-01 15:00:00,31.40735268649523
|
| 18 |
+
2024-12-01 16:00:00,30.48877350167867
|
| 19 |
+
2024-12-01 17:00:00,29.630934798247864
|
| 20 |
+
2024-12-01 18:00:00,28.71068438775244
|
| 21 |
+
2024-12-01 19:00:00,28.30099404598097
|
| 22 |
+
2024-12-01 20:00:00,27.757692572441766
|
| 23 |
+
2024-12-01 21:00:00,27.424700999785802
|
| 24 |
+
2024-12-01 22:00:00,27.183282635975903
|
| 25 |
+
2024-12-01 23:00:00,26.839623594744555
|
| 26 |
+
2024-12-02 00:00:00,26.46699626804185
|
| 27 |
+
2024-12-02 01:00:00,26.30607273187693
|
| 28 |
+
2024-12-02 02:00:00,26.052969158023206
|
| 29 |
+
2024-12-02 03:00:00,25.697366037048187
|
| 30 |
+
2024-12-02 04:00:00,25.34465261066593
|
| 31 |
+
2024-12-02 05:00:00,25.236522782644407
|
| 32 |
+
2024-12-02 06:00:00,25.561901884452226
|
| 33 |
+
2024-12-02 07:00:00,27.2432081208362
|
| 34 |
+
2024-12-02 08:00:00,28.953927739512203
|
| 35 |
+
2024-12-02 09:00:00,30.26854234379021
|
| 36 |
+
2024-12-02 10:00:00,31.52377199153433
|
| 37 |
+
2024-12-02 11:00:00,32.1318417538884
|
| 38 |
+
2024-12-02 12:00:00,32.55536592644389
|
| 39 |
+
2024-12-02 13:00:00,32.56424655911457
|
| 40 |
+
2024-12-02 14:00:00,32.35114201118766
|
| 41 |
+
2024-12-02 15:00:00,31.449286176209487
|
| 42 |
+
2024-12-02 16:00:00,30.500966156255796
|
| 43 |
+
2024-12-02 17:00:00,29.720265799283457
|
| 44 |
+
2024-12-02 18:00:00,28.79890097711376
|
| 45 |
+
2024-12-02 19:00:00,28.363350434011416
|
| 46 |
+
2024-12-02 20:00:00,27.76806696607173
|
| 47 |
+
2024-12-02 21:00:00,27.422346415186095
|
| 48 |
+
2024-12-02 22:00:00,27.172102735117228
|
| 49 |
+
2024-12-02 23:00:00,26.78629648112922
|
| 50 |
+
2024-12-03 00:00:00,26.438570965092307
|
| 51 |
+
2024-12-03 01:00:00,26.25623412434445
|
| 52 |
+
2024-12-03 02:00:00,26.019244872056003
|
| 53 |
+
2024-12-03 03:00:00,25.671784710749847
|
| 54 |
+
2024-12-03 04:00:00,25.318535684630337
|
| 55 |
+
2024-12-03 05:00:00,25.198352792274264
|
| 56 |
+
2024-12-03 06:00:00,25.535303821607446
|
| 57 |
+
2024-12-03 07:00:00,27.19301270908241
|
| 58 |
+
2024-12-03 08:00:00,28.906352576122504
|
| 59 |
+
2024-12-03 09:00:00,30.20372133810071
|
| 60 |
+
2024-12-03 10:00:00,31.486308566892465
|
| 61 |
+
2024-12-03 11:00:00,32.05686445195554
|
| 62 |
+
2024-12-03 12:00:00,32.523271704091
|
| 63 |
+
2024-12-03 13:00:00,32.49624459343999
|
| 64 |
+
2024-12-03 14:00:00,32.32219156141258
|
| 65 |
+
2024-12-03 15:00:00,31.447771362649842
|
| 66 |
+
2024-12-03 16:00:00,30.46756218352439
|
| 67 |
+
2024-12-03 17:00:00,29.691165243443244
|
| 68 |
+
2024-12-03 18:00:00,28.77177994085518
|
| 69 |
+
2024-12-03 19:00:00,28.329944844312024
|
| 70 |
+
2024-12-03 20:00:00,27.73914229641467
|
| 71 |
+
2024-12-03 21:00:00,27.38323848874745
|
| 72 |
+
2024-12-03 22:00:00,27.176464372479014
|
| 73 |
+
2024-12-03 23:00:00,26.799783237673786
|
| 74 |
+
2024-12-04 00:00:00,26.428340693468357
|
| 75 |
+
2024-12-04 01:00:00,26.248682118612358
|
| 76 |
+
2024-12-04 02:00:00,25.995738625060596
|
| 77 |
+
2024-12-04 03:00:00,25.63911050742803
|
| 78 |
+
2024-12-04 04:00:00,25.284124386199938
|
| 79 |
+
2024-12-04 05:00:00,25.16497946060392
|
| 80 |
+
2024-12-04 06:00:00,25.491752741915157
|
| 81 |
+
2024-12-04 07:00:00,27.159419142988455
|
| 82 |
+
2024-12-04 08:00:00,28.871569884937117
|
| 83 |
+
2024-12-04 09:00:00,30.17743966374689
|
| 84 |
+
2024-12-04 10:00:00,31.443478006628812
|
| 85 |
+
2024-12-04 11:00:00,32.03894826722654
|
| 86 |
+
2024-12-04 12:00:00,32.474833018768415
|
| 87 |
+
2024-12-04 13:00:00,32.469678716659786
|
| 88 |
+
2024-12-04 14:00:00,32.269527632194524
|
| 89 |
+
2024-12-04 15:00:00,31.38244442966596
|
| 90 |
+
2024-12-04 16:00:00,30.421644724056883
|
| 91 |
+
2024-12-04 17:00:00,29.64635196002715
|
| 92 |
+
2024-12-04 18:00:00,28.725592493956384
|
| 93 |
+
2024-12-04 19:00:00,28.286549717649013
|
| 94 |
+
2024-12-04 20:00:00,27.690128325242135
|
| 95 |
+
2024-12-04 21:00:00,27.340256491134486
|
| 96 |
+
2024-12-04 22:00:00,27.10445445697995
|
| 97 |
+
2024-12-04 23:00:00,26.71961112449321
|
| 98 |
+
2024-12-05 00:00:00,26.365027316730966
|
| 99 |
+
2024-12-05 01:00:00,26.182507806912717
|
| 100 |
+
2024-12-05 02:00:00,25.940872507573978
|
| 101 |
+
2024-12-05 03:00:00,25.590684642504293
|
| 102 |
+
2024-12-05 04:00:00,25.23681086252373
|
| 103 |
+
2024-12-05 05:00:00,25.116364690217516
|
| 104 |
+
2024-12-05 06:00:00,25.45041867083695
|
| 105 |
+
2024-12-05 07:00:00,27.110330768340855
|
| 106 |
+
2024-12-05 08:00:00,28.82339649263209
|
| 107 |
+
2024-12-05 09:00:00,30.122794982564752
|
| 108 |
+
2024-12-05 10:00:00,31.401110769363857
|
| 109 |
+
2024-12-05 11:00:00,31.97828433280794
|
| 110 |
+
2024-12-05 12:00:00,32.43642589873153
|
| 111 |
+
2024-12-05 13:00:00,32.41505630820907
|
| 112 |
+
2024-12-05 14:00:00,32.23405801069165
|
| 113 |
+
2024-12-05 15:00:00,31.356702721337765
|
| 114 |
+
2024-12-05 16:00:00,30.38151270452293
|
| 115 |
+
2024-12-05 17:00:00,29.60571464264385
|
| 116 |
+
2024-12-05 18:00:00,28.68595963549169
|
| 117 |
+
2024-12-05 19:00:00,28.244759617677246
|
| 118 |
+
2024-12-05 20:00:00,27.652260559042272
|
| 119 |
+
2024-12-05 21:00:00,27.297902592459764
|
| 120 |
+
2024-12-05 22:00:00,27.083405451746508
|
| 121 |
+
2024-12-05 23:00:00,26.704393975422892
|
| 122 |
+
2024-12-06 00:00:00,26.337515082909572
|
| 123 |
+
2024-12-06 01:00:00,26.15701303675241
|
| 124 |
+
2024-12-06 02:00:00,25.907128321303777
|
| 125 |
+
2024-12-06 03:00:00,25.552238052505725
|
| 126 |
+
2024-12-06 04:00:00,25.197544207207955
|
| 127 |
+
2024-12-06 05:00:00,25.078006411072636
|
| 128 |
+
2024-12-06 06:00:00,25.406753898684254
|
| 129 |
+
2024-12-06 07:00:00,27.072272453161577
|
| 130 |
+
2024-12-06 08:00:00,28.784675902733998
|
| 131 |
+
2024-12-06 09:00:00,30.088763004644658
|
| 132 |
+
2024-12-06 10:00:00,31.358161912990386
|
| 133 |
+
2024-12-06 11:00:00,31.94863693561403
|
| 134 |
+
2024-12-06 12:00:00,32.39058703302546
|
| 135 |
+
2024-12-06 13:00:00,32.380995121674935
|
| 136 |
+
2024-12-06 14:00:00,32.186072075492696
|
| 137 |
+
2024-12-06 15:00:00,31.301674609136903
|
| 138 |
+
2024-12-06 16:00:00,30.33693664997764
|
| 139 |
+
2024-12-06 17:00:00,29.561527253517745
|
| 140 |
+
2024-12-06 18:00:00,28.641041689074992
|
| 141 |
+
2024-12-06 19:00:00,28.201402519343773
|
| 142 |
+
2024-12-06 20:00:00,27.606037737943563
|
| 143 |
+
2024-12-06 21:00:00,27.25493719946918
|
| 144 |
+
2024-12-06 22:00:00,27.024950789874104
|
| 145 |
+
2024-12-06 23:00:00,26.64168830421194
|
| 146 |
+
2024-12-07 00:00:00,26.283753757085915
|
| 147 |
+
2024-12-07 01:00:00,26.10177921099894
|
| 148 |
+
2024-12-07 02:00:00,25.857895560466865
|
| 149 |
+
2024-12-07 03:00:00,25.506425776496812
|
| 150 |
+
2024-12-07 04:00:00,25.152327886072733
|
| 151 |
+
2024-12-07 05:00:00,25.03212641643171
|
| 152 |
+
2024-12-07 06:00:00,25.3647344694057
|
| 153 |
+
2024-12-07 07:00:00,27.02617105052551
|
| 154 |
+
2024-12-07 08:00:00,28.739056640081223
|
| 155 |
+
2024-12-07 09:00:00,30.03973073100246
|
| 156 |
+
2024-12-07 10:00:00,31.315619034294425
|
| 157 |
+
2024-12-07 11:00:00,31.89641462685448
|
| 158 |
+
2024-12-07 12:00:00,32.35014642579155
|
| 159 |
+
2024-12-07 13:00:00,32.33198318558916
|
| 160 |
+
2024-12-07 14:00:00,32.14719307016787
|
| 161 |
+
2024-12-07 15:00:00,31.267922280420326
|
| 162 |
+
2024-12-07 16:00:00,30.295577721470384
|
| 163 |
+
2024-12-07 17:00:00,29.51988699707019
|
| 164 |
+
2024-12-07 18:00:00,28.59993303369465
|
| 165 |
+
2024-12-07 19:00:00,28.159157515468777
|
| 166 |
+
2024-12-07 20:00:00,27.565877108061215
|
| 167 |
+
2024-12-07 21:00:00,27.212405872298447
|
| 168 |
+
2024-12-07 22:00:00,26.993690892242963
|
| 169 |
+
2024-12-07 23:00:00,26.61352105444182
|
| 170 |
+
2024-12-08 00:00:00,26.24907815673775
|
| 171 |
+
2024-12-08 01:00:00,26.068174733305003
|
| 172 |
+
2024-12-08 02:00:00,25.81992439785708
|
| 173 |
+
2024-12-08 03:00:00,25.465965671659852
|
| 174 |
+
2024-12-08 04:00:00,25.111434091108972
|
| 175 |
+
2024-12-08 05:00:00,24.991715342295674
|
| 176 |
+
2024-12-08 06:00:00,25.32151427234786
|
| 177 |
+
2024-12-08 07:00:00,26.985920859020883
|
| 178 |
+
2024-12-08 08:00:00,28.69845564439508
|
| 179 |
+
2024-12-08 09:00:00,30.001613058948188
|
| 180 |
+
2024-12-08 10:00:00,31.27277953913668
|
| 181 |
+
2024-12-08 11:00:00,31.860618156965398
|
| 182 |
+
2024-12-08 12:00:00,32.30577720398419
|
| 183 |
+
2024-12-08 13:00:00,32.29385065075769
|
| 184 |
+
2024-12-08 14:00:00,32.10168752563461
|
| 185 |
+
2024-12-08 15:00:00,31.21868657026998
|
| 186 |
+
2024-12-08 16:00:00,30.25187673984948
|
| 187 |
+
2024-12-08 17:00:00,29.476390823367222
|
| 188 |
+
2024-12-08 18:00:00,28.556050050487208
|
| 189 |
+
2024-12-08 19:00:00,28.11610133444015
|
| 190 |
+
2024-12-08 20:00:00,27.521304207297753
|
| 191 |
+
2024-12-08 21:00:00,27.169557937979455
|
| 192 |
+
2024-12-08 22:00:00,26.942641544687607
|
| 193 |
+
2024-12-08 23:00:00,26.5602213532034
|
| 194 |
+
2024-12-09 00:00:00,26.200514143915193
|
| 195 |
+
2024-12-09 01:00:00,26.018831312611514
|
| 196 |
+
2024-12-09 02:00:00,25.77375831888895
|
| 197 |
+
2024-12-09 03:00:00,25.42161062640954
|
| 198 |
+
2024-12-09 04:00:00,25.067394609878896
|
| 199 |
+
2024-12-09 05:00:00,24.947324603472406
|
| 200 |
+
2024-12-09 06:00:00,25.27916754425514
|
| 201 |
+
2024-12-09 07:00:00,26.941413040909097
|
| 202 |
+
2024-12-09 08:00:00,28.654203084611456
|
| 203 |
+
2024-12-09 09:00:00,29.955553541027125
|
| 204 |
+
2024-12-09 10:00:00,31.230155786816834
|
| 205 |
+
2024-12-09 11:00:00,31.812869654713776
|
| 206 |
+
2024-12-09 12:00:00,32.264266530069165
|
| 207 |
+
2024-12-09 13:00:00,32.24780194296083
|
| 208 |
+
2024-12-09 14:00:00,32.06100367558728
|
| 209 |
+
2024-12-09 15:00:00,31.18071692879408
|
| 210 |
+
2024-12-09 16:00:00,30.209879834239516
|
| 211 |
+
2024-12-09 17:00:00,29.43424489984957
|
| 212 |
+
2024-12-09 18:00:00,28.51418558289178
|
| 213 |
+
2024-12-09 19:00:00,28.07363525424858
|
| 214 |
+
2024-12-09 20:00:00,27.479941740116143
|
| 215 |
+
2024-12-09 21:00:00,27.12694032389613
|
| 216 |
+
2024-12-09 22:00:00,26.905991563564285
|
| 217 |
+
2024-12-09 23:00:00,26.525208803661993
|
| 218 |
+
2024-12-10 00:00:00,26.162055745006157
|
| 219 |
+
2024-12-10 01:00:00,25.980940035916497
|
| 220 |
+
2024-12-10 02:00:00,25.733555099285947
|
| 221 |
+
2024-12-10 03:00:00,25.380089636403326
|
| 222 |
+
2024-12-10 04:00:00,25.025644004448125
|
| 223 |
+
2024-12-10 05:00:00,24.905829584120923
|
| 224 |
+
2024-12-10 06:00:00,25.236185232649934
|
| 225 |
+
2024-12-10 07:00:00,26.90000321134994
|
| 226 |
+
2024-12-10 08:00:00,28.61260752045832
|
| 227 |
+
2024-12-10 09:00:00,29.915272780851275
|
| 228 |
+
2024-12-10 10:00:00,31.187375046621742
|
| 229 |
+
2024-12-10 11:00:00,31.77381785735485
|
| 230 |
+
2024-12-10 12:00:00,32.22067587579176
|
| 231 |
+
2024-12-10 13:00:00,32.207513316649596
|
| 232 |
+
2024-12-10 14:00:00,32.01681139577978
|
| 233 |
+
2024-12-10 15:00:00,31.134549698994118
|
| 234 |
+
2024-12-10 16:00:00,30.1666429789442
|
| 235 |
+
2024-12-10 17:00:00,29.39111647559097
|
| 236 |
+
2024-12-10 18:00:00,28.470852361696686
|
| 237 |
+
2024-12-10 19:00:00,28.03073978671413
|
| 238 |
+
2024-12-10 20:00:00,27.436243245765233
|
| 239 |
+
2024-12-10 21:00:00,27.08415511714247
|
| 240 |
+
2024-12-10 22:00:00,26.858864103513657
|
| 241 |
+
2024-12-10 23:00:00,26.47688989226706
|
| 242 |
+
2024-12-11 00:00:00,26.11624415128313
|
| 243 |
+
2024-12-11 01:00:00,25.934715784584686
|
| 244 |
+
2024-12-11 02:00:00,25.689013096560288
|
| 245 |
+
2024-12-11 03:00:00,25.336506488413924
|
| 246 |
+
2024-12-11 04:00:00,24.982227932467485
|
| 247 |
+
2024-12-11 05:00:00,24.862227538910812
|
| 248 |
+
2024-12-11 06:00:00,25.193665392078795
|
| 249 |
+
2024-12-11 07:00:00,26.85633917905929
|
| 250 |
+
2024-12-11 08:00:00,28.569078635009557
|
| 251 |
+
2024-12-11 09:00:00,29.87078719907612
|
| 252 |
+
2024-12-11 10:00:00,31.144708535744243
|
| 253 |
+
2024-12-11 11:00:00,31.728438040257256
|
| 254 |
+
2024-12-11 12:00:00,32.17859868605497
|
| 255 |
+
2024-12-11 13:00:00,32.16303345852076
|
| 256 |
+
2024-12-11 14:00:00,31.975171969315333
|
| 257 |
+
2024-12-11 15:00:00,31.094347313677115
|
| 258 |
+
2024-12-11 16:00:00,30.124308352994547
|
| 259 |
+
2024-12-11 17:00:00,29.348702951551015
|
| 260 |
+
2024-12-11 18:00:00,28.428587854904766
|
| 261 |
+
2024-12-11 19:00:00,27.988156755388438
|
| 262 |
+
2024-12-11 20:00:00,27.394244524164773
|
| 263 |
+
2024-12-11 21:00:00,27.04149185627374
|
| 264 |
+
2024-12-11 22:00:00,26.819360414510676
|
| 265 |
+
2024-12-11 23:00:00,26.43825314395271
|
| 266 |
+
2024-12-12 00:00:00,26.075782992969703
|
| 267 |
+
2024-12-12 01:00:00,25.894554890037213
|
| 268 |
+
2024-12-12 02:00:00,25.647628140453683
|
| 269 |
+
2024-12-12 03:00:00,25.294423836841847
|
| 270 |
+
2024-12-12 04:00:00,24.940023710682308
|
| 271 |
+
2024-12-12 05:00:00,24.820158637596112
|
| 272 |
+
2024-12-12 06:00:00,25.150809041696316
|
| 273 |
+
2024-12-12 07:00:00,26.814315381656616
|
| 274 |
+
2024-12-12 08:00:00,28.526956500148128
|
| 275 |
+
2024-12-12 09:00:00,29.82936118914297
|
| 276 |
+
2024-12-12 10:00:00,31.101958907683002
|
| 277 |
+
2024-12-12 11:00:00,31.687662706495082
|
| 278 |
+
2024-12-12 12:00:00,32.135420247797725
|
| 279 |
+
2024-12-12 13:00:00,32.12160328386542
|
| 280 |
+
2024-12-12 14:00:00,31.93167499954463
|
| 281 |
+
2024-12-12 15:00:00,31.049804703678255
|
| 282 |
+
2024-12-12 16:00:00,30.081317234121514
|
| 283 |
+
2024-12-12 17:00:00,29.305769241626443
|
| 284 |
+
2024-12-12 18:00:00,28.38554571493968
|
| 285 |
+
2024-12-12 19:00:00,27.945346384754814
|
| 286 |
+
2024-12-12 20:00:00,27.351008989811852
|
| 287 |
+
2024-12-12 21:00:00,26.998739863394256
|
| 288 |
+
2024-12-12 22:00:00,26.77430940920269
|
| 289 |
+
2024-12-12 23:00:00,26.392571322981436
|
| 290 |
+
2024-12-13 00:00:00,26.031428675040896
|
| 291 |
+
2024-12-13 01:00:00,25.849982089933828
|
| 292 |
+
2024-12-13 02:00:00,25.60394600935819
|
| 293 |
+
2024-12-13 03:00:00,25.251249372802285
|
| 294 |
+
2024-12-13 04:00:00,24.89693770528291
|
| 295 |
+
2024-12-13 05:00:00,24.776974168399114
|
| 296 |
+
2024-12-13 06:00:00,25.108197547342606
|
| 297 |
+
2024-12-13 07:00:00,26.771098093311956
|
| 298 |
+
2024-12-13 08:00:00,28.483810765498
|
| 299 |
+
2024-12-13 09:00:00,29.78570893021311
|
| 300 |
+
2024-12-13 10:00:00,31.059269758522095
|
| 301 |
+
2024-12-13 11:00:00,31.643536993354193
|
| 302 |
+
2024-12-13 12:00:00,32.09304311558481
|
| 303 |
+
2024-12-13 13:00:00,32.07795405532959
|
| 304 |
+
2024-12-13 14:00:00,31.88952964174283
|
| 305 |
+
2024-12-13 15:00:00,31.008420189429014
|
| 306 |
+
2024-12-13 16:00:00,30.038803801925315
|
| 307 |
+
2024-12-13 17:00:00,29.263214036718264
|
| 308 |
+
2024-12-13 18:00:00,28.34306940743328
|
| 309 |
+
2024-12-13 19:00:00,27.902701433964822
|
| 310 |
+
2024-12-13 20:00:00,27.308673402668802
|
| 311 |
+
2024-12-13 21:00:00,26.956052434955833
|
| 312 |
+
2024-12-13 22:00:00,26.733294820748593
|
| 313 |
+
2024-12-13 23:00:00,26.352015737554456
|
| 314 |
+
2024-12-14 00:00:00,25.98990715304867
|
| 315 |
+
2024-12-14 01:00:00,25.8086195430358
|
| 316 |
+
2024-12-14 02:00:00,25.56193538126205
|
| 317 |
+
2024-12-14 03:00:00,25.2088693488128
|
| 318 |
+
2024-12-14 04:00:00,24.85449331576482
|
| 319 |
+
2024-12-14 05:00:00,24.73460142450396
|
| 320 |
+
2024-12-14 06:00:00,25.06540788737691
|
| 321 |
+
2024-12-14 07:00:00,26.728749229749816
|
| 322 |
+
2024-12-14 08:00:00,28.441409837023226
|
| 323 |
+
2024-12-14 09:00:00,29.743676566108658
|
| 324 |
+
2024-12-14 10:00:00,31.016536602847015
|
| 325 |
+
2024-12-14 11:00:00,31.60184913070832
|
| 326 |
+
2024-12-14 12:00:00,32.05008292571892
|
| 327 |
+
2024-12-14 13:00:00,32.03591948620691
|
| 328 |
+
2024-12-14 14:00:00,31.84640080489729
|
| 329 |
+
2024-12-14 15:00:00,30.96473773682193
|
| 330 |
+
2024-12-14 16:00:00,29.995942788583687
|
| 331 |
+
2024-12-14 17:00:00,29.22038341862897
|
| 332 |
+
2024-12-14 18:00:00,28.30018138089908
|
| 333 |
+
2024-12-14 19:00:00,27.859936118045123
|
| 334 |
+
2024-12-14 20:00:00,27.26568298319078
|
| 335 |
+
2024-12-14 21:00:00,26.913318027224285
|
| 336 |
+
2024-12-14 22:00:00,26.68934319749517
|
| 337 |
+
2024-12-14 23:00:00,26.307730128017564
|
| 338 |
+
2024-12-15 00:00:00,25.94632439195597
|
| 339 |
+
2024-12-15 01:00:00,25.764921106233487
|
| 340 |
+
2024-12-15 02:00:00,25.518708510479904
|
| 341 |
+
2024-12-15 03:00:00,25.165911263102334
|
| 342 |
+
2024-12-15 04:00:00,24.81158206461189
|
| 343 |
+
2024-12-15 05:00:00,24.691638041548142
|
| 344 |
+
2024-12-15 06:00:00,25.022747866797133
|
| 345 |
+
2024-12-15 07:00:00,26.68576847064787
|
| 346 |
+
2024-12-15 08:00:00,28.398466962130403
|
| 347 |
+
2024-12-15 09:00:00,29.700465511188714
|
| 348 |
+
2024-12-15 10:00:00,30.973835467815025
|
| 349 |
+
2024-12-15 11:00:00,31.558387404757898
|
| 350 |
+
2024-12-15 12:00:00,32.00754698852034
|
| 351 |
+
2024-12-15 13:00:00,31.99271003573356
|
| 352 |
+
2024-12-15 14:00:00,31.803987581002595
|
| 353 |
+
2024-12-15 15:00:00,30.92272734266853
|
| 354 |
+
2024-12-15 16:00:00,29.953334687157884
|
| 355 |
+
2024-12-15 17:00:00,29.177753200579176
|
| 356 |
+
2024-12-15 18:00:00,28.257592935195046
|
| 357 |
+
2024-12-15 19:00:00,27.81725838390581
|
| 358 |
+
2024-12-15 20:00:00,27.22316904209072
|
| 359 |
+
2024-12-15 21:00:00,26.870617803231355
|
| 360 |
+
2024-12-15 22:00:00,26.647528661099727
|
| 361 |
+
2024-12-15 23:00:00,26.26615861145196
|
| 362 |
+
2024-12-16 00:00:00,25.904241458850937
|
| 363 |
+
2024-12-16 01:00:00,25.722922342726605
|
| 364 |
+
2024-12-16 02:00:00,25.476366619426628
|
| 365 |
+
2024-12-16 03:00:00,25.123373794848384
|
| 366 |
+
2024-12-16 04:00:00,24.769010517933864
|
| 367 |
+
2024-12-16 05:00:00,24.64910442775088
|
| 368 |
+
2024-12-16 06:00:00,24.979993516171287
|
| 369 |
+
2024-12-16 07:00:00,26.643247500328155
|
| 370 |
+
2024-12-16 08:00:00,28.355918425965896
|
| 371 |
+
2024-12-16 09:00:00,29.658112111973786
|
| 372 |
+
2024-12-16 10:00:00,30.931111033469215
|
| 373 |
+
2024-12-16 11:00:00,31.516216402348427
|
| 374 |
+
2024-12-16 12:00:00,31.964702350587277
|
| 375 |
+
2024-12-16 13:00:00,31.950355469068477
|
| 376 |
+
2024-12-16 14:00:00,31.76105365267737
|
| 377 |
+
2024-12-16 15:00:00,30.87950030166165
|
| 378 |
+
2024-12-16 16:00:00,29.910542558381895
|
| 379 |
+
2024-12-16 17:00:00,29.134977164614376
|
| 380 |
+
2024-12-16 18:00:00,28.2147865042444
|
| 381 |
+
2024-12-16 19:00:00,27.774516922271037
|
| 382 |
+
2024-12-16 20:00:00,27.18030839904492
|
| 383 |
+
2024-12-16 21:00:00,26.827892705982393
|
| 384 |
+
2024-12-16 22:00:00,26.604159107297065
|
| 385 |
+
2024-12-16 23:00:00,26.222612228118813
|
| 386 |
+
2024-12-17 00:00:00,25.86106719966342
|
| 387 |
+
2024-12-17 01:00:00,25.67968683886398
|
| 388 |
+
2024-12-17 02:00:00,25.433380786889032
|
| 389 |
+
2024-12-17 03:00:00,25.080530270963514
|
| 390 |
+
2024-12-17 04:00:00,24.726191790674573
|
| 391 |
+
2024-12-17 05:00:00,24.606258099231646
|
| 392 |
+
2024-12-17 06:00:00,24.937307803309572
|
| 393 |
+
2024-12-17 07:00:00,26.600391971982717
|
| 394 |
+
2024-12-17 08:00:00,28.31308295547086
|
| 395 |
+
2024-12-17 09:00:00,29.615134653167768
|
| 396 |
+
2024-12-17 10:00:00,30.888403552500108
|
| 397 |
+
2024-12-17 11:00:00,31.473106225395533
|
| 398 |
+
2024-12-17 12:00:00,31.92208233385478
|
| 399 |
+
2024-12-17 13:00:00,31.907378859739076
|
| 400 |
+
2024-12-17 14:00:00,31.71849860668464
|
| 401 |
+
2024-12-17 15:00:00,30.83715853446971
|
| 402 |
+
2024-12-17 16:00:00,29.867884334192844
|
| 403 |
+
2024-12-17 17:00:00,29.09230723074612
|
| 404 |
+
2024-12-17 18:00:00,28.17213868680623
|
| 405 |
+
2024-12-17 19:00:00,27.731821830939086
|
| 406 |
+
2024-12-17 20:00:00,27.137700028179236
|
| 407 |
+
2024-12-17 21:00:00,26.78518570736427
|
| 408 |
+
2024-12-17 22:00:00,26.561921037284005
|
| 409 |
+
2024-12-17 23:00:00,26.180502825313166
|
| 410 |
+
2024-12-18 00:00:00,25.818687026616523
|
| 411 |
+
2024-12-18 01:00:00,25.637351229534993
|
| 412 |
+
2024-12-18 02:00:00,25.390863508174423
|
| 413 |
+
2024-12-18 03:00:00,25.03790944361149
|
| 414 |
+
2024-12-18 04:00:00,24.683552920450648
|
| 415 |
+
2024-12-18 05:00:00,24.5636393126274
|
| 416 |
+
2024-12-18 06:00:00,24.894572147265794
|
| 417 |
+
2024-12-18 07:00:00,26.55777987948631
|
| 418 |
+
2024-12-18 08:00:00,28.27045626819726
|
| 419 |
+
2024-12-18 09:00:00,29.57261128143999
|
| 420 |
+
2024-12-18 10:00:00,30.845683735674932
|
| 421 |
+
2024-12-18 11:00:00,31.43067942392548
|
| 422 |
+
2024-12-18 12:00:00,31.879298875063007
|
| 423 |
+
2024-12-18 13:00:00,31.864854869903095
|
| 424 |
+
2024-12-18 14:00:00,31.67566787296301
|
| 425 |
+
2024-12-18 15:00:00,30.79417261180638
|
| 426 |
+
2024-12-18 16:00:00,29.825128676451744
|
| 427 |
+
2024-12-18 17:00:00,29.049560093367646
|
| 428 |
+
2024-12-18 18:00:00,28.12937545675766
|
| 429 |
+
2024-12-18 19:00:00,27.68909299899065
|
| 430 |
+
2024-12-18 20:00:00,27.094908095456915
|
| 431 |
+
2024-12-18 21:00:00,26.742465539564048
|
| 432 |
+
2024-12-18 22:00:00,26.518859661010715
|
| 433 |
+
2024-12-18 23:00:00,26.1373478263841
|
| 434 |
+
2024-12-19 00:00:00,25.77572904936532
|
| 435 |
+
2024-12-19 01:00:00,25.594360826200212
|
| 436 |
+
2024-12-19 02:00:00,25.348005293691003
|
| 437 |
+
2024-12-19 03:00:00,24.995126574654186
|
| 438 |
+
2024-12-19 04:00:00,24.64078318010334
|
| 439 |
+
2024-12-19 05:00:00,24.520854958752295
|
| 440 |
+
2024-12-19 06:00:00,24.851872831587507
|
| 441 |
+
2024-12-19 07:00:00,26.514990654749653
|
| 442 |
+
2024-12-19 08:00:00,28.22767766311909
|
| 443 |
+
2024-12-19 09:00:00,29.529757500441104
|
| 444 |
+
2024-12-19 10:00:00,30.802972894840075
|
| 445 |
+
2024-12-19 11:00:00,31.38775537510794
|
| 446 |
+
2024-12-19 12:00:00,31.83663434229725
|
| 447 |
+
2024-12-19 13:00:00,31.82200153866085
|
| 448 |
+
2024-12-19 14:00:00,31.633037739051268
|
| 449 |
+
2024-12-19 15:00:00,30.751655398670344
|
| 450 |
+
2024-12-19 16:00:00,29.782443914691743
|
| 451 |
+
2024-12-19 17:00:00,29.006869131900718
|
| 452 |
+
2024-12-19 18:00:00,28.086696204867273
|
| 453 |
+
2024-12-19 19:00:00,27.646388717867467
|
| 454 |
+
2024-12-19 20:00:00,27.05224972861252
|
| 455 |
+
2024-12-19 21:00:00,26.699754954110627
|
| 456 |
+
2024-12-19 22:00:00,26.476397350499017
|
| 457 |
+
2024-12-19 23:00:00,26.094953638915175
|
| 458 |
+
2024-12-20 00:00:00,25.733191502192728
|
| 459 |
+
2024-12-20 01:00:00,25.551846873353803
|
| 460 |
+
2024-12-20 02:00:00,25.305395155720365
|
| 461 |
+
2024-12-20 03:00:00,24.952461612704713
|
| 462 |
+
2024-12-20 04:00:00,24.598108665328724
|
| 463 |
+
2024-12-20 05:00:00,24.478191077279742
|
| 464 |
+
2024-12-20 06:00:00,24.80914707341779
|
| 465 |
+
2024-12-20 07:00:00,26.472330317482367
|
| 466 |
+
2024-12-20 08:00:00,28.185009598625495
|
| 467 |
+
2024-12-20 09:00:00,29.48714413651566
|
| 468 |
+
2024-12-20 10:00:00,30.760255522768013
|
| 469 |
+
2024-12-20 11:00:00,31.345193140447908
|
| 470 |
+
2024-12-20 12:00:00,31.79388327489208
|
| 471 |
+
2024-12-20 13:00:00,31.779387847477107
|
| 472 |
+
2024-12-20 14:00:00,31.590261641864757
|
| 473 |
+
2024-12-20 15:00:00,30.708797136469713
|
| 474 |
+
2024-12-20 16:00:00,29.73970756659388
|
| 475 |
+
2024-12-20 17:00:00,28.964137294921414
|
| 476 |
+
2024-12-20 18:00:00,28.043955847600042
|
| 477 |
+
2024-12-20 19:00:00,27.60366657272509
|
| 478 |
+
2024-12-20 20:00:00,27.009494174672323
|
| 479 |
+
2024-12-20 21:00:00,26.657037396214303
|
| 480 |
+
2024-12-20 22:00:00,26.43349913927327
|
| 481 |
+
2024-12-20 23:00:00,26.052005859036218
|
| 482 |
+
2024-12-21 00:00:00,25.69034803573176
|
| 483 |
+
2024-12-21 01:00:00,25.50898623885505
|
| 484 |
+
2024-12-21 02:00:00,25.262604508803975
|
| 485 |
+
2024-12-21 03:00:00,24.90971085758828
|
| 486 |
+
2024-12-21 04:00:00,24.55536486117422
|
| 487 |
+
2024-12-21 05:00:00,24.43543953597139
|
| 488 |
+
2024-12-21 06:00:00,24.766440555708186
|
| 489 |
+
2024-12-21 07:00:00,26.42957619728918
|
| 490 |
+
2024-12-21 08:00:00,28.142261101026154
|
| 491 |
+
2024-12-21 09:00:00,29.444355836914195
|
| 492 |
+
2024-12-21 10:00:00,30.717542903047256
|
| 493 |
+
2024-12-21 11:00:00,31.302367637446192
|
| 494 |
+
2024-12-21 12:00:00,31.751195173046824
|
| 495 |
+
2024-12-21 13:00:00,31.736599785999957
|
| 496 |
+
2024-12-21 14:00:00,31.5475917525435
|
| 497 |
+
2024-12-21 15:00:00,30.666187033219735
|
| 498 |
+
2024-12-21 16:00:00,29.69700875447777
|
| 499 |
+
2024-12-21 17:00:00,28.92143520036133
|
| 500 |
+
2024-12-21 18:00:00,28.00125995269253
|
| 501 |
+
2024-12-21 19:00:00,27.56095742605335
|
| 502 |
+
2024-12-21 20:00:00,26.966809337383225
|
| 503 |
+
2024-12-21 21:00:00,26.614324911705623
|
| 504 |
+
2024-12-21 22:00:00,26.39091810429874
|
| 505 |
+
2024-12-21 23:00:00,26.00946089190718
|
| 506 |
+
2024-12-22 00:00:00,25.64772716659613
|
| 507 |
+
2024-12-22 01:00:00,25.466377861770226
|
| 508 |
+
2024-12-22 02:00:00,25.219945206363242
|
| 509 |
+
2024-12-22 03:00:00,24.867022528511068
|
| 510 |
+
2024-12-22 04:00:00,24.512671474339644
|
| 511 |
+
2024-12-22 05:00:00,24.39275177895428
|
| 512 |
+
2024-12-22 06:00:00,24.723720037982485
|
| 513 |
+
2024-12-22 07:00:00,26.38689031675678
|
| 514 |
+
2024-12-22 08:00:00,28.099571129302383
|
| 515 |
+
2024-12-22 09:00:00,29.401694826486924
|
| 516 |
+
2024-12-22 10:00:00,30.67482682535333
|
| 517 |
+
2024-12-22 11:00:00,31.259733697483924
|
| 518 |
+
2024-12-22 12:00:00,31.70846125530908
|
| 519 |
+
2024-12-22 13:00:00,31.6939386023053
|
| 520 |
+
2024-12-22 14:00:00,31.504844582751094
|
| 521 |
+
2024-12-22 15:00:00,30.623396361039394
|
| 522 |
+
2024-12-22 16:00:00,29.654282629898987
|
| 523 |
+
2024-12-22 17:00:00,28.878711464200922
|
| 524 |
+
2024-12-22 18:00:00,27.95853170545311
|
| 525 |
+
2024-12-22 19:00:00,27.518238821250307
|
| 526 |
+
2024-12-22 20:00:00,26.924073044242892
|
| 527 |
+
2024-12-22 21:00:00,26.571608735626768
|
| 528 |
+
2024-12-22 22:00:00,26.34810628104812
|
| 529 |
+
2024-12-22 23:00:00,25.966622824459993
|
| 530 |
+
2024-12-23 00:00:00,25.60494432804198
|
| 531 |
+
2024-12-23 01:00:00,25.423585933573147
|
| 532 |
+
2024-12-23 02:00:00,25.177190333194886
|
| 533 |
+
2024-12-23 03:00:00,24.824288776115054
|
| 534 |
+
2024-12-23 04:00:00,24.46994140214067
|
| 535 |
+
2024-12-23 05:00:00,24.350017610307788
|
| 536 |
+
2024-12-23 06:00:00,24.68100970714677
|
| 537 |
+
2024-12-23 07:00:00,26.344154782715908
|
| 538 |
+
2024-12-23 08:00:00,28.05683857215212
|
| 539 |
+
2024-12-23 09:00:00,29.358941196107924
|
| 540 |
+
2024-12-23 10:00:00,30.632113263798814
|
| 541 |
+
2024-12-23 11:00:00,31.21696036970978
|
| 542 |
+
2024-12-23 12:00:00,31.665760674779918
|
| 543 |
+
2024-12-23 13:00:00,31.651185098001573
|
| 544 |
+
2024-12-23 14:00:00,31.46215364486963
|
| 545 |
+
2024-12-23 15:00:00,30.580737076981567
|
| 546 |
+
2024-12-23 16:00:00,29.611576378801125
|
| 547 |
+
2024-12-23 17:00:00,28.836003475208255
|
| 548 |
+
2024-12-23 18:00:00,27.915826998875644
|
| 549 |
+
2024-12-23 19:00:00,27.47552709850672
|
| 550 |
+
2024-12-23 20:00:00,26.8813741921378
|
| 551 |
+
2024-12-23 21:00:00,26.528895245660493
|
| 552 |
+
2024-12-23 22:00:00,26.305462387231618
|
| 553 |
+
2024-12-23 23:00:00,25.923998026817497
|
| 554 |
+
2024-12-24 00:00:00,25.56227934397013
|
| 555 |
+
2024-12-24 01:00:00,25.380927563436018
|
| 556 |
+
2024-12-24 02:00:00,25.134505000552945
|
| 557 |
+
2024-12-24 03:00:00,24.78158807527761
|
| 558 |
+
2024-12-24 04:00:00,24.42723802346613
|
| 559 |
+
2024-12-24 05:00:00,24.307317212348412
|
| 560 |
+
2024-12-24 06:00:00,24.6382919639819
|
| 561 |
+
2024-12-24 07:00:00,26.301455378264126
|
| 562 |
+
2024-12-24 08:00:00,28.014137001613033
|
| 563 |
+
2024-12-24 09:00:00,29.316254959169992
|
| 564 |
+
2024-12-24 10:00:00,30.58939787141531
|
| 565 |
+
2024-12-24 11:00:00,31.17428846526948
|
| 566 |
+
2024-12-24 12:00:00,31.623035836958902
|
| 567 |
+
2024-12-24 13:00:00,31.608498769326964
|
| 568 |
+
2024-12-24 14:00:00,31.419421790728723
|
| 569 |
+
2024-12-24 15:00:00,30.537982190437194
|
| 570 |
+
2024-12-24 16:00:00,29.568855667079617
|
| 571 |
+
2024-12-24 17:00:00,28.793284028038382
|
| 572 |
+
2024-12-24 18:00:00,27.873105163308335
|
| 573 |
+
2024-12-24 19:00:00,27.432810368141574
|
| 574 |
+
2024-12-24 20:00:00,26.83864809665638
|
| 575 |
+
2024-12-24 21:00:00,26.486179801186946
|
| 576 |
+
2024-12-24 22:00:00,26.262696302221883
|
| 577 |
+
2024-12-24 23:00:00,25.881218046779175
|
| 578 |
+
2024-12-25 00:00:00,25.519528604950693
|
| 579 |
+
2024-12-25 01:00:00,25.33817201189172
|
| 580 |
+
2024-12-25 02:00:00,25.091769067848276
|
| 581 |
+
2024-12-25 03:00:00,24.738863324997013
|
| 582 |
+
2024-12-25 04:00:00,24.38451522167129
|
| 583 |
+
2024-12-25 05:00:00,24.26459224168339
|
| 584 |
+
2024-12-25 06:00:00,24.595579614280958
|
| 585 |
+
2024-12-25 07:00:00,26.258729684689033
|
| 586 |
+
2024-12-25 08:00:00,27.971412884157065
|
| 587 |
+
2024-12-25 09:00:00,29.27351968446198
|
| 588 |
+
2024-12-25 10:00:00,30.54668381120554
|
| 589 |
+
2024-12-25 11:00:00,31.13154276174655
|
| 590 |
+
2024-12-25 12:00:00,31.580328649572145
|
| 591 |
+
2024-12-25 13:00:00,31.56576356136969
|
| 592 |
+
2024-12-25 14:00:00,31.376719708656022
|
| 593 |
+
2024-12-25 15:00:00,30.49529686752811
|
| 594 |
+
2024-12-25 16:00:00,29.526145477401904
|
| 595 |
+
2024-12-25 17:00:00,28.750572918229697
|
| 596 |
+
2024-12-25 18:00:00,27.830395791379217
|
| 597 |
+
2024-12-25 19:00:00,27.390097281492956
|
| 598 |
+
2024-12-25 20:00:00,26.795941824386308
|
| 599 |
+
2024-12-25 21:00:00,26.44346577887967
|
| 600 |
+
2024-12-25 22:00:00,26.220019127698773
|
| 601 |
+
2024-12-25 23:00:00,25.83855098275356
|
| 602 |
+
2024-12-26 00:00:00,25.47684026416077
|
| 603 |
+
2024-12-26 01:00:00,25.2954871728593
|
| 604 |
+
2024-12-26 02:00:00,25.0490699534779
|
| 605 |
+
2024-12-26 03:00:00,24.69615607391286
|
| 606 |
+
2024-12-26 04:00:00,24.341806552802332
|
| 607 |
+
2024-12-26 05:00:00,24.22188515095847
|
| 608 |
+
2024-12-26 06:00:00,24.552863340111404
|
| 609 |
+
2024-12-26 07:00:00,26.21602311997818
|
| 610 |
+
2024-12-26 08:00:00,27.92870517260809
|
| 611 |
+
2024-12-26 09:00:00,29.230820091310758
|
| 612 |
+
2024-12-26 10:00:00,30.503968781660646
|
| 613 |
+
2024-12-26 11:00:00,31.088850756957342
|
| 614 |
+
2024-12-26 12:00:00,31.537608619126424
|
| 615 |
+
2024-12-26 13:00:00,31.52306391964835
|
| 616 |
+
2024-12-26 14:00:00,31.33399596340939
|
| 617 |
+
2024-12-26 15:00:00,30.452560927741484
|
| 618 |
+
2024-12-26 16:00:00,29.483427631525657
|
| 619 |
+
2024-12-26 17:00:00,28.707855741872176
|
| 620 |
+
2024-12-26 18:00:00,27.787677350481154
|
| 621 |
+
2024-12-26 19:00:00,27.347381543551705
|
| 622 |
+
2024-12-26 20:00:00,26.753221128070432
|
| 623 |
+
2024-12-26 21:00:00,26.400750721755625
|
| 624 |
+
2024-12-26 22:00:00,26.177277258868138
|
| 625 |
+
2024-12-26 23:00:00,25.79580175717954
|
| 626 |
+
2024-12-27 00:00:00,25.43410652028734
|
| 627 |
+
2024-12-27 01:00:00,25.252750880987485
|
| 628 |
+
2024-12-27 02:00:00,25.006344048829664
|
| 629 |
+
2024-12-27 03:00:00,24.65343608981554
|
| 630 |
+
2024-12-27 04:00:00,24.299087600333674
|
| 631 |
+
2024-12-27 05:00:00,24.179165050178295
|
| 632 |
+
2024-12-27 06:00:00,24.51014992151928
|
| 633 |
+
2024-12-27 07:00:00,26.1733026364522
|
| 634 |
+
2024-12-27 08:00:00,27.885985523560706
|
| 635 |
+
2024-12-27 09:00:00,29.18809453503982
|
| 636 |
+
2024-12-27 10:00:00,30.461254457437093
|
| 637 |
+
2024-12-27 11:00:00,31.04611967913496
|
| 638 |
+
2024-12-27 12:00:00,31.494897933729167
|
| 639 |
+
2024-12-27 13:00:00,31.48033839871869
|
| 640 |
+
2024-12-27 14:00:00,31.29128798102818
|
| 641 |
+
2024-12-27 15:00:00,30.409861818524178
|
| 642 |
+
2024-12-27 16:00:00,29.440715356561014
|
| 643 |
+
2024-12-27 17:00:00,28.665142979742836
|
| 644 |
+
2024-12-27 18:00:00,27.744965508474714
|
| 645 |
+
2024-12-27 19:00:00,27.304667734781546
|
| 646 |
+
2024-12-27 20:00:00,26.710510927183037
|
| 647 |
+
2024-12-27 21:00:00,26.358036417599603
|
| 648 |
+
2024-12-27 22:00:00,26.1345824638258
|
| 649 |
+
2024-12-27 23:00:00,25.75311231515502
|
| 650 |
+
2024-12-28 00:00:00,25.39140581324857
|
| 651 |
+
2024-12-28 01:00:00,25.210052027959385
|
| 652 |
+
2024-12-28 02:00:00,24.963637637702828
|
| 653 |
+
2024-12-28 03:00:00,24.610725370693597
|
| 654 |
+
2024-12-28 04:00:00,24.25637613056347
|
| 655 |
+
2024-12-28 05:00:00,24.13645441595878
|
| 656 |
+
2024-12-28 06:00:00,24.467434425111456
|
| 657 |
+
2024-12-28 07:00:00,26.13059228073161
|
| 658 |
+
2024-12-28 08:00:00,27.843274560644982
|
| 659 |
+
2024-12-28 09:00:00,29.145387870421764
|
| 660 |
+
2024-12-28 10:00:00,30.41853961999764
|
| 661 |
+
2024-12-28 11:00:00,31.003417032186366
|
| 662 |
+
2024-12-28 12:00:00,31.452180448555392
|
| 663 |
+
2024-12-28 13:00:00,31.437631708385116
|
| 664 |
+
2024-12-28 14:00:00,31.24856852904758
|
| 665 |
+
2024-12-28 15:00:00,30.367135910126386
|
| 666 |
+
2024-12-28 16:00:00,29.397999028010766
|
| 667 |
+
2024-12-28 17:00:00,28.622427005670264
|
| 668 |
+
2024-12-28 18:00:00,27.702248864889285
|
| 669 |
+
2024-12-28 19:00:00,27.261952522280588
|
| 670 |
+
2024-12-28 20:00:00,26.667793089463323
|
| 671 |
+
2024-12-28 21:00:00,26.315321565558325
|
| 672 |
+
2024-12-28 22:00:00,26.091853416286913
|
| 673 |
+
2024-12-28 23:00:00,25.710379372577492
|
| 674 |
+
2024-12-29 00:00:00,25.34868106748026
|
| 675 |
+
2024-12-29 01:00:00,25.16732593314957
|
| 676 |
+
2024-12-29 02:00:00,24.920917042423863
|
| 677 |
+
2024-12-29 03:00:00,24.568007910059045
|
| 678 |
+
2024-12-29 04:00:00,24.213659216126235
|
| 679 |
+
2024-12-29 05:00:00,24.09373689354632
|
| 680 |
+
2024-12-29 06:00:00,24.42472044059332
|
| 681 |
+
2024-12-29 07:00:00,26.08787455567382
|
| 682 |
+
2024-12-29 08:00:00,27.80055727740312
|
| 683 |
+
2024-12-29 09:00:00,29.10266745959167
|
| 684 |
+
2024-12-29 10:00:00,30.375825155991606
|
| 685 |
+
2024-12-29 11:00:00,30.960693697962718
|
| 686 |
+
2024-12-29 12:00:00,31.4094679111313
|
| 687 |
+
2024-12-29 13:00:00,31.394911316266512
|
| 688 |
+
2024-12-29 14:00:00,31.205857422739328
|
| 689 |
+
2024-12-29 15:00:00,30.32442950172785
|
| 690 |
+
2024-12-29 16:00:00,29.355285648987884
|
| 691 |
+
2024-12-29 17:00:00,28.579713368717314
|
| 692 |
+
2024-12-29 18:00:00,27.659535715096762
|
| 693 |
+
2024-12-29 19:00:00,27.219238331182112
|
| 694 |
+
2024-12-29 20:00:00,26.625080808563702
|
| 695 |
+
2024-12-29 21:00:00,26.272607112177074
|
| 696 |
+
2024-12-29 22:00:00,26.049149292034684
|
| 697 |
+
2024-12-29 23:00:00,25.667678082488443
|
| 698 |
+
2024-12-30 00:00:00,25.305973813112796
|
| 699 |
+
2024-12-30 01:00:00,25.124619660390792
|
| 700 |
+
2024-12-30 02:00:00,24.878206768018558
|
| 701 |
+
2024-12-30 03:00:00,24.52529535477937
|
| 702 |
+
2024-12-30 04:00:00,24.17094626341474
|
| 703 |
+
2024-12-30 05:00:00,24.05102438321837
|
| 704 |
+
2024-12-30 06:00:00,24.38200535597259
|
| 705 |
+
2024-12-30 07:00:00,26.04516219279753
|
| 706 |
+
2024-12-30 08:00:00,27.757844593046464
|
| 707 |
+
2024-12-30 09:00:00,29.059957050975065
|
| 708 |
+
2024-12-30 10:00:00,30.333110420262653
|
| 709 |
+
2024-12-30 11:00:00,30.917985416507136
|
| 710 |
+
2024-12-30 12:00:00,31.366751773555507
|
| 711 |
+
2024-12-30 13:00:00,31.352200894034784
|
| 712 |
+
2024-12-30 14:00:00,31.163140243834757
|
| 713 |
+
2024-12-30 15:00:00,30.281708904463677
|
| 714 |
+
2024-12-30 16:00:00,29.312570123788124
|
| 715 |
+
2024-12-30 17:00:00,28.536998031196283
|
| 716 |
+
2024-12-30 18:00:00,27.616820023101162
|
| 717 |
+
2024-12-30 19:00:00,27.1765233968763
|
| 718 |
+
2024-12-30 20:00:00,26.582364484331944
|
| 719 |
+
2024-12-30 21:00:00,26.229892368717167
|
| 720 |
+
2024-12-30 22:00:00,26.006427032747627
|
| 721 |
+
2024-12-30 23:00:00,25.624953760967433
|
| 722 |
+
2024-12-31 00:00:00,25.26325383140452
|
data/forecast/sby_temp_forecast.csv
ADDED
|
@@ -0,0 +1,722 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
,predicted_mean
|
| 2 |
+
2024-12-01 00:00:00,25.755652109608953
|
| 3 |
+
2024-12-01 01:00:00,25.84705944621293
|
| 4 |
+
2024-12-01 02:00:00,25.70474014499642
|
| 5 |
+
2024-12-01 03:00:00,25.408997792246417
|
| 6 |
+
2024-12-01 04:00:00,25.086473995360915
|
| 7 |
+
2024-12-01 05:00:00,25.115547838103215
|
| 8 |
+
2024-12-01 06:00:00,25.483763000596884
|
| 9 |
+
2024-12-01 07:00:00,27.27305755920862
|
| 10 |
+
2024-12-01 08:00:00,28.915858364554964
|
| 11 |
+
2024-12-01 09:00:00,30.260484855601433
|
| 12 |
+
2024-12-01 10:00:00,31.493251719574204
|
| 13 |
+
2024-12-01 11:00:00,32.063534660795824
|
| 14 |
+
2024-12-01 12:00:00,32.650418799086864
|
| 15 |
+
2024-12-01 13:00:00,32.57755304666795
|
| 16 |
+
2024-12-01 14:00:00,32.38069361878522
|
| 17 |
+
2024-12-01 15:00:00,31.398621301384463
|
| 18 |
+
2024-12-01 16:00:00,30.368548718918472
|
| 19 |
+
2024-12-01 17:00:00,29.602711326091537
|
| 20 |
+
2024-12-01 18:00:00,28.63104454751469
|
| 21 |
+
2024-12-01 19:00:00,28.274348664686787
|
| 22 |
+
2024-12-01 20:00:00,27.669378927907953
|
| 23 |
+
2024-12-01 21:00:00,27.356794119699128
|
| 24 |
+
2024-12-01 22:00:00,27.146871463913783
|
| 25 |
+
2024-12-01 23:00:00,26.78948141393262
|
| 26 |
+
2024-12-02 00:00:00,26.429367987578786
|
| 27 |
+
2024-12-02 01:00:00,26.311968820044957
|
| 28 |
+
2024-12-02 02:00:00,26.08247724707548
|
| 29 |
+
2024-12-02 03:00:00,25.72772915654309
|
| 30 |
+
2024-12-02 04:00:00,25.379599076258224
|
| 31 |
+
2024-12-02 05:00:00,25.279645990853385
|
| 32 |
+
2024-12-02 06:00:00,25.605352479091263
|
| 33 |
+
2024-12-02 07:00:00,27.289793821954156
|
| 34 |
+
2024-12-02 08:00:00,28.93966188441016
|
| 35 |
+
2024-12-02 09:00:00,30.224304427096627
|
| 36 |
+
2024-12-02 10:00:00,31.495749011645785
|
| 37 |
+
2024-12-02 11:00:00,32.08020659428269
|
| 38 |
+
2024-12-02 12:00:00,32.625401513679904
|
| 39 |
+
2024-12-02 13:00:00,32.50044402662706
|
| 40 |
+
2024-12-02 14:00:00,32.28903951870856
|
| 41 |
+
2024-12-02 15:00:00,31.42867438933968
|
| 42 |
+
2024-12-02 16:00:00,30.34287719051351
|
| 43 |
+
2024-12-02 17:00:00,29.674119170067602
|
| 44 |
+
2024-12-02 18:00:00,28.702936781162656
|
| 45 |
+
2024-12-02 19:00:00,28.323657573294803
|
| 46 |
+
2024-12-02 20:00:00,27.666695999368805
|
| 47 |
+
2024-12-02 21:00:00,27.35112723054397
|
| 48 |
+
2024-12-02 22:00:00,27.140543422182795
|
| 49 |
+
2024-12-02 23:00:00,26.73351435903267
|
| 50 |
+
2024-12-03 00:00:00,26.391666392058177
|
| 51 |
+
2024-12-03 01:00:00,26.25980433599441
|
| 52 |
+
2024-12-03 02:00:00,26.046810892736016
|
| 53 |
+
2024-12-03 03:00:00,25.69738107753806
|
| 54 |
+
2024-12-03 04:00:00,25.34284719817384
|
| 55 |
+
2024-12-03 05:00:00,25.23469388388523
|
| 56 |
+
2024-12-03 06:00:00,25.57204633737897
|
| 57 |
+
2024-12-03 07:00:00,27.234239292831948
|
| 58 |
+
2024-12-03 08:00:00,28.88793951917211
|
| 59 |
+
2024-12-03 09:00:00,30.15932163095859
|
| 60 |
+
2024-12-03 10:00:00,31.45348637408567
|
| 61 |
+
2024-12-03 11:00:00,31.98810866411552
|
| 62 |
+
2024-12-03 12:00:00,32.58736206131052
|
| 63 |
+
2024-12-03 13:00:00,32.43198329292393
|
| 64 |
+
2024-12-03 14:00:00,32.27010392763684
|
| 65 |
+
2024-12-03 15:00:00,31.424998820356958
|
| 66 |
+
2024-12-03 16:00:00,30.318470395361786
|
| 67 |
+
2024-12-03 17:00:00,29.64134899461026
|
| 68 |
+
2024-12-03 18:00:00,28.668222897713786
|
| 69 |
+
2024-12-03 19:00:00,28.283426425211086
|
| 70 |
+
2024-12-03 20:00:00,27.62995078961191
|
| 71 |
+
2024-12-03 21:00:00,27.297167856890155
|
| 72 |
+
2024-12-03 22:00:00,27.13084698648436
|
| 73 |
+
2024-12-03 23:00:00,26.740608269594766
|
| 74 |
+
2024-12-04 00:00:00,26.37719012352379
|
| 75 |
+
2024-12-04 01:00:00,26.24385457776717
|
| 76 |
+
2024-12-04 02:00:00,26.012592580445332
|
| 77 |
+
2024-12-04 03:00:00,25.655233673797742
|
| 78 |
+
2024-12-04 04:00:00,25.303805647915144
|
| 79 |
+
2024-12-04 05:00:00,25.194311550683764
|
| 80 |
+
2024-12-04 06:00:00,25.520015707190193
|
| 81 |
+
2024-12-04 07:00:00,27.1931854625111
|
| 82 |
+
2024-12-04 08:00:00,28.844177237026877
|
| 83 |
+
2024-12-04 09:00:00,30.122234472140654
|
| 84 |
+
2024-12-04 10:00:00,31.400984731177182
|
| 85 |
+
2024-12-04 11:00:00,31.974764018580583
|
| 86 |
+
2024-12-04 12:00:00,32.529884619824564
|
| 87 |
+
2024-12-04 13:00:00,32.39493788095019
|
| 88 |
+
2024-12-04 14:00:00,32.19399424497279
|
| 89 |
+
2024-12-04 15:00:00,31.344034321090025
|
| 90 |
+
2024-12-04 16:00:00,30.250283566463704
|
| 91 |
+
2024-12-04 17:00:00,29.585130618820422
|
| 92 |
+
2024-12-04 18:00:00,28.613512819459007
|
| 93 |
+
2024-12-04 19:00:00,28.231667084859073
|
| 94 |
+
2024-12-04 20:00:00,27.572523528165306
|
| 95 |
+
2024-12-04 21:00:00,27.252835249402285
|
| 96 |
+
2024-12-04 22:00:00,27.052335959604143
|
| 97 |
+
2024-12-04 23:00:00,26.646309692406955
|
| 98 |
+
2024-12-05 00:00:00,26.300562856972153
|
| 99 |
+
2024-12-05 01:00:00,26.167533933861527
|
| 100 |
+
2024-12-05 02:00:00,25.95129809443231
|
| 101 |
+
2024-12-05 03:00:00,25.600354597842394
|
| 102 |
+
2024-12-05 04:00:00,25.246163844770976
|
| 103 |
+
2024-12-05 05:00:00,25.13723386679373
|
| 104 |
+
2024-12-05 06:00:00,25.472583927457148
|
| 105 |
+
2024-12-05 07:00:00,27.136017875975472
|
| 106 |
+
2024-12-05 08:00:00,28.789316109177182
|
| 107 |
+
2024-12-05 09:00:00,30.061468197048992
|
| 108 |
+
2024-12-05 10:00:00,31.353401580035243
|
| 109 |
+
2024-12-05 11:00:00,31.894140014193987
|
| 110 |
+
2024-12-05 12:00:00,32.48637874007479
|
| 111 |
+
2024-12-05 13:00:00,32.33393914002703
|
| 112 |
+
2024-12-05 14:00:00,32.16594643078811
|
| 113 |
+
2024-12-05 15:00:00,31.32060116462225
|
| 114 |
+
2024-12-05 16:00:00,30.21581343521147
|
| 115 |
+
2024-12-05 17:00:00,29.54095357447607
|
| 116 |
+
2024-12-05 18:00:00,28.56806160544649
|
| 117 |
+
2024-12-05 19:00:00,28.183625402286015
|
| 118 |
+
2024-12-05 20:00:00,27.52905153709105
|
| 119 |
+
2024-12-05 21:00:00,27.198282719170187
|
| 120 |
+
2024-12-05 22:00:00,27.026666488442075
|
| 121 |
+
2024-12-05 23:00:00,26.633773079910842
|
| 122 |
+
2024-12-06 00:00:00,26.273167823136536
|
| 123 |
+
2024-12-06 01:00:00,26.139818314445634
|
| 124 |
+
2024-12-06 02:00:00,25.91095232067805
|
| 125 |
+
2024-12-06 03:00:00,25.554608995987806
|
| 126 |
+
2024-12-06 04:00:00,25.20272597877771
|
| 127 |
+
2024-12-06 05:00:00,25.09328443781548
|
| 128 |
+
2024-12-06 06:00:00,25.420531202477754
|
| 129 |
+
2024-12-06 07:00:00,27.09209942843409
|
| 130 |
+
2024-12-06 08:00:00,28.743464441323727
|
| 131 |
+
2024-12-06 09:00:00,30.020551271599665
|
| 132 |
+
2024-12-06 10:00:00,31.30143867738706
|
| 133 |
+
2024-12-06 11:00:00,31.86989151888708
|
| 134 |
+
2024-12-06 12:00:00,32.43098764100468
|
| 135 |
+
2024-12-06 13:00:00,32.29320385168861
|
| 136 |
+
2024-12-06 14:00:00,32.09757137027512
|
| 137 |
+
2024-12-06 15:00:00,31.24839041689951
|
| 138 |
+
2024-12-06 16:00:00,30.152843155922472
|
| 139 |
+
2024-12-06 17:00:00,29.4861519049574
|
| 140 |
+
2024-12-06 18:00:00,28.514328600052966
|
| 141 |
+
2024-12-06 19:00:00,28.132058454019038
|
| 142 |
+
2024-12-06 20:00:00,27.473637162150865
|
| 143 |
+
2024-12-06 21:00:00,27.15216050233661
|
| 144 |
+
2024-12-06 22:00:00,26.95632030598209
|
| 145 |
+
2024-12-06 23:00:00,26.552398388778787
|
| 146 |
+
2024-12-07 00:00:00,26.20425982576245
|
| 147 |
+
2024-12-07 01:00:00,26.071175036997776
|
| 148 |
+
2024-12-07 02:00:00,25.852906432064202
|
| 149 |
+
2024-12-07 03:00:00,25.50109335591521
|
| 150 |
+
2024-12-07 04:00:00,25.147273040294312
|
| 151 |
+
2024-12-07 05:00:00,25.038258188876434
|
| 152 |
+
2024-12-07 06:00:00,25.372304367853122
|
| 153 |
+
2024-12-07 07:00:00,27.037044156323763
|
| 154 |
+
2024-12-07 08:00:00,28.690031617421017
|
| 155 |
+
2024-12-07 09:00:00,29.96297597374124
|
| 156 |
+
2024-12-07 10:00:00,31.253133936030427
|
| 157 |
+
2024-12-07 11:00:00,31.798328944696
|
| 158 |
+
2024-12-07 12:00:00,32.38555927099761
|
| 159 |
+
2024-12-07 13:00:00,32.23547521578059
|
| 160 |
+
2024-12-07 14:00:00,32.06303787954116
|
| 161 |
+
2024-12-07 15:00:00,31.21707820675764
|
| 162 |
+
2024-12-07 16:00:00,30.11377520271047
|
| 163 |
+
2024-12-07 17:00:00,29.440230688597087
|
| 164 |
+
2024-12-07 18:00:00,28.467510557765973
|
| 165 |
+
2024-12-07 19:00:00,28.08342220094785
|
| 166 |
+
2024-12-07 20:00:00,27.428228675593097
|
| 167 |
+
2024-12-07 21:00:00,27.098953925838927
|
| 168 |
+
2024-12-07 22:00:00,26.92344259443369
|
| 169 |
+
2024-12-07 23:00:00,26.52877489369203
|
| 170 |
+
2024-12-08 00:00:00,26.170174568030962
|
| 171 |
+
2024-12-08 01:00:00,26.03686734244427
|
| 172 |
+
2024-12-08 02:00:00,25.809705671802263
|
| 173 |
+
2024-12-08 03:00:00,25.454090889356877
|
| 174 |
+
2024-12-08 04:00:00,25.101896239668697
|
| 175 |
+
2024-12-08 05:00:00,24.992523148186702
|
| 176 |
+
2024-12-08 06:00:00,25.32086344828147
|
| 177 |
+
2024-12-08 07:00:00,26.991333265147674
|
| 178 |
+
2024-12-08 08:00:00,28.642959233204774
|
| 179 |
+
2024-12-08 09:00:00,29.919379717804997
|
| 180 |
+
2024-12-08 10:00:00,31.20175822098681
|
| 181 |
+
2024-12-08 11:00:00,31.766470358223323
|
| 182 |
+
2024-12-08 12:00:00,32.331769771565554
|
| 183 |
+
2024-12-08 13:00:00,32.19200757374511
|
| 184 |
+
2024-12-08 14:00:00,32.00010571046286
|
| 185 |
+
2024-12-08 15:00:00,31.151443018268555
|
| 186 |
+
2024-12-08 16:00:00,30.05464827221349
|
| 187 |
+
2024-12-08 17:00:00,29.386854890422093
|
| 188 |
+
2024-12-08 18:00:00,28.414887342875048
|
| 189 |
+
2024-12-08 19:00:00,28.032324730994063
|
| 190 |
+
2024-12-08 20:00:00,27.374422514528874
|
| 191 |
+
2024-12-08 21:00:00,27.051691628847806
|
| 192 |
+
2024-12-08 22:00:00,26.859121065839624
|
| 193 |
+
2024-12-08 23:00:00,26.45668750364599
|
| 194 |
+
2024-12-09 00:00:00,26.10686632572977
|
| 195 |
+
2024-12-09 01:00:00,25.973745741672587
|
| 196 |
+
2024-12-09 02:00:00,25.75404682411566
|
| 197 |
+
2024-12-09 03:00:00,25.40162229975035
|
| 198 |
+
2024-12-09 04:00:00,25.048063442906656
|
| 199 |
+
2024-12-09 05:00:00,24.938990962339304
|
| 200 |
+
2024-12-09 06:00:00,25.272119440015125
|
| 201 |
+
2024-12-09 07:00:00,26.9377807998501
|
| 202 |
+
2024-12-09 08:00:00,28.590549287481647
|
| 203 |
+
2024-12-09 09:00:00,29.86405271643552
|
| 204 |
+
2024-12-09 10:00:00,31.152959483577074
|
| 205 |
+
2024-12-09 11:00:00,31.70129350351659
|
| 206 |
+
2024-12-09 12:00:00,32.284996598173436
|
| 207 |
+
2024-12-09 13:00:00,32.13657263971421
|
| 208 |
+
2024-12-09 14:00:00,31.96100475204696
|
| 209 |
+
2024-12-09 15:00:00,31.114610353789132
|
| 210 |
+
2024-12-09 16:00:00,30.012354091277757
|
| 211 |
+
2024-12-09 17:00:00,29.339734561194312
|
| 212 |
+
2024-12-09 18:00:00,28.367135471057978
|
| 213 |
+
2024-12-09 19:00:00,27.98329250324273
|
| 214 |
+
2024-12-09 20:00:00,27.327663324639065
|
| 215 |
+
2024-12-09 21:00:00,26.99944104784745
|
| 216 |
+
2024-12-09 22:00:00,26.82118601865866
|
| 217 |
+
2024-12-09 23:00:00,26.425269301953936
|
| 218 |
+
2024-12-10 00:00:00,26.068080959903597
|
| 219 |
+
2024-12-10 01:00:00,25.9348037512399
|
| 220 |
+
2024-12-10 02:00:00,25.708842343554497
|
| 221 |
+
2024-12-10 03:00:00,25.35374066228941
|
| 222 |
+
2024-12-10 04:00:00,25.00132660166769
|
| 223 |
+
2024-12-10 05:00:00,24.89200185778265
|
| 224 |
+
2024-12-10 06:00:00,25.2211122587819
|
| 225 |
+
2024-12-10 07:00:00,26.890808712169246
|
| 226 |
+
2024-12-10 08:00:00,28.54261843611081
|
| 227 |
+
2024-12-10 09:00:00,29.818569758943305
|
| 228 |
+
2024-12-10 10:00:00,31.101998228391075
|
| 229 |
+
2024-12-10 11:00:00,31.66407620950512
|
| 230 |
+
2024-12-10 12:00:00,32.232335558110364
|
| 231 |
+
2024-12-10 13:00:00,32.09118025536882
|
| 232 |
+
2024-12-10 14:00:00,31.90190544871411
|
| 233 |
+
2024-12-10 15:00:00,31.053607575781367
|
| 234 |
+
2024-12-10 16:00:00,29.95593443248407
|
| 235 |
+
2024-12-10 17:00:00,29.287364843114364
|
| 236 |
+
2024-12-10 18:00:00,28.315295722121313
|
| 237 |
+
2024-12-10 19:00:00,27.93252718548412
|
| 238 |
+
2024-12-10 20:00:00,27.2749905502049
|
| 239 |
+
2024-12-10 21:00:00,26.951376462749604
|
| 240 |
+
2024-12-10 22:00:00,26.761108322626555
|
| 241 |
+
2024-12-10 23:00:00,26.35972288969296
|
| 242 |
+
2024-12-11 00:00:00,26.008716822274135
|
| 243 |
+
2024-12-11 01:00:00,25.875571047584423
|
| 244 |
+
2024-12-11 02:00:00,25.654864909523965
|
| 245 |
+
2024-12-11 03:00:00,25.302009807651526
|
| 246 |
+
2024-12-11 04:00:00,24.948635072789948
|
| 247 |
+
2024-12-11 05:00:00,24.839522019683354
|
| 248 |
+
2024-12-11 06:00:00,25.172004254556512
|
| 249 |
+
2024-12-11 07:00:00,26.838314594019238
|
| 250 |
+
2024-12-11 08:00:00,28.490928879987067
|
| 251 |
+
2024-12-11 09:00:00,29.76482601313721
|
| 252 |
+
2024-12-11 10:00:00,31.052851684527813
|
| 253 |
+
2024-12-11 11:00:00,31.60339619880478
|
| 254 |
+
2024-12-11 12:00:00,32.18461541614802
|
| 255 |
+
2024-12-11 13:00:00,32.03736050362532
|
| 256 |
+
2024-12-11 14:00:00,31.859588079257424
|
| 257 |
+
2024-12-11 15:00:00,31.0128875378699
|
| 258 |
+
2024-12-11 16:00:00,29.911368396090772
|
| 259 |
+
2024-12-11 17:00:00,29.239400233646712
|
| 260 |
+
2024-12-11 18:00:00,28.266886380493617
|
| 261 |
+
2024-12-11 19:00:00,27.883216217582905
|
| 262 |
+
2024-12-11 20:00:00,27.22728025533694
|
| 263 |
+
2024-12-11 21:00:00,26.89979913142419
|
| 264 |
+
2024-12-11 22:00:00,26.719611987228692
|
| 265 |
+
2024-12-11 23:00:00,26.32281571576102
|
| 266 |
+
2024-12-12 00:00:00,25.96662169281297
|
| 267 |
+
2024-12-12 01:00:00,25.83336562317664
|
| 268 |
+
2024-12-12 02:00:00,25.608249440799035
|
| 269 |
+
2024-12-12 03:00:00,25.25350908557244
|
| 270 |
+
2024-12-12 04:00:00,24.9009405160015
|
| 271 |
+
2024-12-12 05:00:00,24.791649819158135
|
| 272 |
+
2024-12-12 06:00:00,25.121302525220617
|
| 273 |
+
2024-12-12 07:00:00,26.79045437682462
|
| 274 |
+
2024-12-12 08:00:00,28.44239350158435
|
| 275 |
+
2024-12-12 09:00:00,29.718014441154814
|
| 276 |
+
2024-12-12 10:00:00,31.002182296347303
|
| 277 |
+
2024-12-12 11:00:00,31.562405305445985
|
| 278 |
+
2024-12-12 12:00:00,32.13274903979247
|
| 279 |
+
2024-12-12 13:00:00,31.990612713250542
|
| 280 |
+
2024-12-12 14:00:00,31.803187879162845
|
| 281 |
+
2024-12-12 15:00:00,30.955146911235122
|
| 282 |
+
2024-12-12 16:00:00,29.856855201146466
|
| 283 |
+
2024-12-12 17:00:00,29.187739006146057
|
| 284 |
+
2024-12-12 18:00:00,28.215598357162065
|
| 285 |
+
2024-12-12 19:00:00,27.832684808488413
|
| 286 |
+
2024-12-12 20:00:00,27.17540561563374
|
| 287 |
+
2024-12-12 21:00:00,26.851169577769713
|
| 288 |
+
2024-12-12 22:00:00,26.662522803156282
|
| 289 |
+
2024-12-12 23:00:00,26.261875462784
|
| 290 |
+
2024-12-13 00:00:00,25.910034996441112
|
| 291 |
+
2024-12-13 01:00:00,25.77687148258875
|
| 292 |
+
2024-12-13 02:00:00,25.55545606006885
|
| 293 |
+
2024-12-13 03:00:00,25.202297745618424
|
| 294 |
+
2024-12-13 04:00:00,24.849052669433913
|
| 295 |
+
2024-12-13 05:00:00,24.73991104519881
|
| 296 |
+
2024-12-13 06:00:00,25.07193819602553
|
| 297 |
+
2024-12-13 07:00:00,26.738705546859734
|
| 298 |
+
2024-12-13 08:00:00,28.391211244042974
|
| 299 |
+
2024-12-13 09:00:00,29.665385623636976
|
| 300 |
+
2024-12-13 10:00:00,30.9527908275495
|
| 301 |
+
2024-12-13 11:00:00,31.504891971527307
|
| 302 |
+
2024-12-13 12:00:00,32.08436204293865
|
| 303 |
+
2024-12-13 13:00:00,31.93793037236728
|
| 304 |
+
2024-12-13 14:00:00,31.758605513666218
|
| 305 |
+
2024-12-13 15:00:00,30.911689386301695
|
| 306 |
+
2024-12-13 16:00:00,29.810689324825677
|
| 307 |
+
2024-12-13 17:00:00,29.139179855320148
|
| 308 |
+
2024-12-13 18:00:00,28.166726026034898
|
| 309 |
+
2024-12-13 19:00:00,27.78317755231396
|
| 310 |
+
2024-12-13 20:00:00,27.127025553101493
|
| 311 |
+
2024-12-13 21:00:00,26.800066348910576
|
| 312 |
+
2024-12-13 22:00:00,26.61851860968361
|
| 313 |
+
2024-12-13 23:00:00,26.221102955930967
|
| 314 |
+
2024-12-14 00:00:00,25.86560913230533
|
| 315 |
+
2024-12-14 01:00:00,25.732367948773163
|
| 316 |
+
2024-12-14 02:00:00,25.50784697389595
|
| 317 |
+
2024-12-14 03:00:00,25.153361064397288
|
| 318 |
+
2024-12-14 04:00:00,24.80068368965499
|
| 319 |
+
2024-12-14 05:00:00,24.691416968734917
|
| 320 |
+
2024-12-14 06:00:00,25.021451565919037
|
| 321 |
+
2024-12-14 07:00:00,26.690219909055166
|
| 322 |
+
2024-12-14 08:00:00,28.342250157845896
|
| 323 |
+
2024-12-14 09:00:00,29.617638441588664
|
| 324 |
+
2024-12-14 10:00:00,30.902326972078583
|
| 325 |
+
2024-12-14 11:00:00,31.46124371024289
|
| 326 |
+
2024-12-14 12:00:00,32.033055268625816
|
| 327 |
+
2024-12-14 13:00:00,31.890228105314822
|
| 328 |
+
2024-12-14 14:00:00,31.704106021551002
|
| 329 |
+
2024-12-14 15:00:00,30.856245966075257
|
| 330 |
+
2024-12-14 16:00:00,29.757518661373194
|
| 331 |
+
2024-12-14 17:00:00,29.08801754679121
|
| 332 |
+
2024-12-14 18:00:00,28.11582652780986
|
| 333 |
+
2024-12-14 19:00:00,27.732810861688737
|
| 334 |
+
2024-12-14 20:00:00,27.075712959740798
|
| 335 |
+
2024-12-14 21:00:00,26.751038944519433
|
| 336 |
+
2024-12-14 22:00:00,26.56353393518398
|
| 337 |
+
2024-12-14 23:00:00,26.163406359451645
|
| 338 |
+
2024-12-15 00:00:00,25.81097830954755
|
| 339 |
+
2024-12-15 01:00:00,25.677802303780616
|
| 340 |
+
2024-12-15 02:00:00,25.455887403281316
|
| 341 |
+
2024-12-15 03:00:00,25.102515566592054
|
| 342 |
+
2024-12-15 04:00:00,24.74936179602298
|
| 343 |
+
2024-12-15 05:00:00,24.6402000520049
|
| 344 |
+
2024-12-15 06:00:00,24.971906732733956
|
| 345 |
+
2024-12-15 07:00:00,26.638995910887996
|
| 346 |
+
2024-12-15 08:00:00,28.291425139870064
|
| 347 |
+
2024-12-15 09:00:00,29.565794756356457
|
| 348 |
+
2024-12-15 10:00:00,30.85276302719052
|
| 349 |
+
2024-12-15 11:00:00,31.405960349503452
|
| 350 |
+
2024-12-15 12:00:00,31.984198672686933
|
| 351 |
+
2024-12-15 13:00:00,31.838346728939005
|
| 352 |
+
2024-12-15 14:00:00,31.65792864627993
|
| 353 |
+
2024-12-15 15:00:00,30.810860703311793
|
| 354 |
+
2024-12-15 16:00:00,29.71022617808521
|
| 355 |
+
2024-12-15 17:00:00,29.039039720058394
|
| 356 |
+
2024-12-15 18:00:00,28.066628159569298
|
| 357 |
+
2024-12-15 19:00:00,27.68316537935236
|
| 358 |
+
2024-12-15 20:00:00,27.02686124694983
|
| 359 |
+
2024-12-15 21:00:00,26.700269578526385
|
| 360 |
+
2024-12-15 22:00:00,26.517763708540645
|
| 361 |
+
2024-12-15 23:00:00,26.119911885902457
|
| 362 |
+
2024-12-16 00:00:00,25.764911142504594
|
| 363 |
+
2024-12-16 01:00:00,25.63168044176413
|
| 364 |
+
2024-12-16 02:00:00,25.407578611893882
|
| 365 |
+
2024-12-16 03:00:00,25.05327188302775
|
| 366 |
+
2024-12-16 04:00:00,24.70051788770477
|
| 367 |
+
2024-12-16 05:00:00,24.59126805062527
|
| 368 |
+
2024-12-16 06:00:00,24.921571575463577
|
| 369 |
+
2024-12-16 07:00:00,26.590069852010636
|
| 370 |
+
2024-12-16 08:00:00,28.242164270326413
|
| 371 |
+
2024-12-16 09:00:00,29.517388717880205
|
| 372 |
+
2024-12-16 10:00:00,30.802443907814126
|
| 373 |
+
2024-12-16 11:00:00,31.360440770238434
|
| 374 |
+
2024-12-16 12:00:00,31.933285970024663
|
| 375 |
+
2024-12-16 13:00:00,31.78997231959417
|
| 376 |
+
2024-12-16 14:00:00,31.604767632357117
|
| 377 |
+
2024-12-16 15:00:00,30.757034975395143
|
| 378 |
+
2024-12-16 16:00:00,29.65800092505036
|
| 379 |
+
2024-12-16 17:00:00,28.98822875017327
|
| 380 |
+
2024-12-16 18:00:00,28.016002260649486
|
| 381 |
+
2024-12-16 19:00:00,27.632914683441562
|
| 382 |
+
2024-12-16 20:00:00,26.97594444651519
|
| 383 |
+
2024-12-16 21:00:00,26.650962007723276
|
| 384 |
+
2024-12-16 22:00:00,26.464261029276322
|
| 385 |
+
2024-12-16 23:00:00,26.064499471703172
|
| 386 |
+
2024-12-17 00:00:00,25.711657645568625
|
| 387 |
+
2024-12-17 01:00:00,25.578472842997865
|
| 388 |
+
2024-12-17 02:00:00,25.356206210201822
|
| 389 |
+
2024-12-17 03:00:00,25.002684011193164
|
| 390 |
+
2024-12-17 04:00:00,24.64959453802087
|
| 391 |
+
2024-12-17 05:00:00,24.540418625655505
|
| 392 |
+
2024-12-17 06:00:00,24.871899631403604
|
| 393 |
+
2024-12-17 07:00:00,26.53921544029419
|
| 394 |
+
2024-12-17 08:00:00,28.19159082038375
|
| 395 |
+
2024-12-17 09:00:00,29.466097922652107
|
| 396 |
+
2024-12-17 10:00:00,30.7527585052966
|
| 397 |
+
2024-12-17 11:00:00,31.30672775618167
|
| 398 |
+
2024-12-17 12:00:00,31.884098682500703
|
| 399 |
+
2024-12-17 13:00:00,31.738654982270013
|
| 400 |
+
2024-12-17 14:00:00,31.557467051510596
|
| 401 |
+
2024-12-17 15:00:00,30.71029220002368
|
| 402 |
+
2024-12-17 16:00:00,29.609915085353435
|
| 403 |
+
2024-12-17 17:00:00,28.938956091947606
|
| 404 |
+
2024-12-17 18:00:00,27.966574297136617
|
| 405 |
+
2024-12-17 19:00:00,27.583171862268667
|
| 406 |
+
2024-12-17 20:00:00,26.926760597703048
|
| 407 |
+
2024-12-17 21:00:00,26.60042774789615
|
| 408 |
+
2024-12-17 22:00:00,26.41724716241491
|
| 409 |
+
2024-12-17 23:00:00,26.019088189731654
|
| 410 |
+
2024-12-18 00:00:00,25.664434673335084
|
| 411 |
+
2024-12-18 01:00:00,25.53121135457451
|
| 412 |
+
2024-12-18 02:00:00,25.30740468653732
|
| 413 |
+
2024-12-18 03:00:00,24.953224136638056
|
| 414 |
+
2024-12-18 04:00:00,24.60041618511694
|
| 415 |
+
2024-12-18 05:00:00,24.491178237634717
|
| 416 |
+
2024-12-18 06:00:00,24.821671141275225
|
| 417 |
+
2024-12-18 07:00:00,26.489979236982354
|
| 418 |
+
2024-12-18 08:00:00,28.142118843465298
|
| 419 |
+
2024-12-18 09:00:00,29.417227917606414
|
| 420 |
+
2024-12-18 10:00:00,30.702541309050066
|
| 421 |
+
2024-12-18 11:00:00,31.25989039515571
|
| 422 |
+
2024-12-18 12:00:00,31.83346348501876
|
| 423 |
+
2024-12-18 13:00:00,31.689807250452564
|
| 424 |
+
2024-12-18 14:00:00,31.50524859367269
|
| 425 |
+
2024-12-18 15:00:00,30.657605650719532
|
| 426 |
+
2024-12-18 16:00:00,29.55835559015231
|
| 427 |
+
2024-12-18 17:00:00,28.888392534667705
|
| 428 |
+
2024-12-18 18:00:00,27.916141066794786
|
| 429 |
+
2024-12-18 19:00:00,27.533002849813407
|
| 430 |
+
2024-12-18 20:00:00,26.876122514570586
|
| 431 |
+
2024-12-18 21:00:00,26.55092288395979
|
| 432 |
+
2024-12-18 22:00:00,26.364788103909415
|
| 433 |
+
2024-12-18 23:00:00,25.965284296253355
|
| 434 |
+
2024-12-19 00:00:00,25.612151088977146
|
| 435 |
+
2024-12-19 01:00:00,25.478960091698827
|
| 436 |
+
2024-12-19 02:00:00,25.25644576908727
|
| 437 |
+
2024-12-19 03:00:00,24.902817684962297
|
| 438 |
+
2024-12-19 04:00:00,24.54977349000441
|
| 439 |
+
2024-12-19 05:00:00,24.440587600291618
|
| 440 |
+
2024-12-19 06:00:00,24.77190968576166
|
| 441 |
+
2024-12-19 07:00:00,26.439385087973207
|
| 442 |
+
2024-12-19 08:00:00,28.091722547683048
|
| 443 |
+
2024-12-19 09:00:00,29.366326467412538
|
| 444 |
+
2024-12-19 10:00:00,30.652770376093297
|
| 445 |
+
2024-12-19 11:00:00,31.20728321892996
|
| 446 |
+
2024-12-19 12:00:00,31.78404332454437
|
| 447 |
+
2024-12-19 13:00:00,31.638887109319764
|
| 448 |
+
2024-12-19 14:00:00,31.457157051676596
|
| 449 |
+
2024-12-19 15:00:00,30.609906915231377
|
| 450 |
+
2024-12-19 16:00:00,29.50971106902525
|
| 451 |
+
2024-12-19 17:00:00,28.83891225616165
|
| 452 |
+
2024-12-19 18:00:00,27.86655142233544
|
| 453 |
+
2024-12-19 19:00:00,27.483191482650604
|
| 454 |
+
2024-12-19 20:00:00,26.8267047756364
|
| 455 |
+
2024-12-19 21:00:00,26.500554185849357
|
| 456 |
+
2024-12-19 22:00:00,26.31689846584634
|
| 457 |
+
2024-12-19 23:00:00,25.9185231981606
|
| 458 |
+
2024-12-20 00:00:00,25.564114198951355
|
| 459 |
+
2024-12-20 01:00:00,25.4308960785796
|
| 460 |
+
2024-12-20 02:00:00,25.207297263448304
|
| 461 |
+
2024-12-20 03:00:00,24.853205568753165
|
| 462 |
+
2024-12-20 04:00:00,24.50035962128773
|
| 463 |
+
2024-12-20 05:00:00,24.39113004645761
|
| 464 |
+
2024-12-20 06:00:00,24.7217563106141
|
| 465 |
+
2024-12-20 07:00:00,26.389930481010435
|
| 466 |
+
2024-12-20 08:00:00,28.04210190899198
|
| 467 |
+
2024-12-20 09:00:00,29.317129737198147
|
| 468 |
+
2024-12-20 10:00:00,30.602624954095152
|
| 469 |
+
2024-12-20 11:00:00,31.15951787624216
|
| 470 |
+
2024-12-20 12:00:00,31.733603546156885
|
| 471 |
+
2024-12-20 13:00:00,31.58970606390841
|
| 472 |
+
2024-12-20 14:00:00,31.405602341651857
|
| 473 |
+
2024-12-20 15:00:00,30.558022575286408
|
| 474 |
+
2024-12-20 16:00:00,29.458620400362225
|
| 475 |
+
2024-12-20 17:00:00,28.788522926790623
|
| 476 |
+
2024-12-20 18:00:00,27.81625386916906
|
| 477 |
+
2024-12-20 19:00:00,27.433079991668983
|
| 478 |
+
2024-12-20 20:00:00,26.776262965174382
|
| 479 |
+
2024-12-20 21:00:00,26.450910388126623
|
| 480 |
+
2024-12-20 22:00:00,26.265174324877897
|
| 481 |
+
2024-12-20 23:00:00,25.865852024663738
|
| 482 |
+
2024-12-21 00:00:00,25.512513626843777
|
| 483 |
+
2024-12-21 01:00:00,25.379318267253588
|
| 484 |
+
2024-12-21 02:00:00,25.156629521521726
|
| 485 |
+
2024-12-21 03:00:00,24.802926873118267
|
| 486 |
+
2024-12-21 04:00:00,24.44991456307023
|
| 487 |
+
2024-12-21 05:00:00,24.340721647311305
|
| 488 |
+
2024-12-21 06:00:00,24.6719318211522
|
| 489 |
+
2024-12-21 07:00:00,26.339519608949576
|
| 490 |
+
2024-12-21 08:00:00,27.991830365135332
|
| 491 |
+
2024-12-21 09:00:00,29.26650246370228
|
| 492 |
+
2024-12-21 10:00:00,30.55279379061957
|
| 493 |
+
2024-12-21 11:00:00,31.107689430803674
|
| 494 |
+
2024-12-21 12:00:00,31.684019396595726
|
| 495 |
+
2024-12-21 13:00:00,31.53906562825695
|
| 496 |
+
2024-12-21 14:00:00,31.35695380496682
|
| 497 |
+
2024-12-21 15:00:00,30.509650652868483
|
| 498 |
+
2024-12-21 16:00:00,29.40958245587982
|
| 499 |
+
2024-12-21 17:00:00,28.738896442123156
|
| 500 |
+
2024-12-21 18:00:00,27.76655036901838
|
| 501 |
+
2024-12-21 19:00:00,27.383220354433302
|
| 502 |
+
2024-12-21 20:00:00,26.726680520861358
|
| 503 |
+
2024-12-21 21:00:00,26.40065827854513
|
| 504 |
+
2024-12-21 22:00:00,26.216667968903533
|
| 505 |
+
2024-12-21 23:00:00,25.818140386318767
|
| 506 |
+
2024-12-22 00:00:00,25.46390357606567
|
| 507 |
+
2024-12-22 01:00:00,25.330689116398315
|
| 508 |
+
2024-12-22 02:00:00,25.107236671243253
|
| 509 |
+
2024-12-22 03:00:00,24.75320754836572
|
| 510 |
+
2024-12-22 04:00:00,24.400334844163627
|
| 511 |
+
2024-12-22 05:00:00,24.29111116535351
|
| 512 |
+
2024-12-22 06:00:00,24.621831341959624
|
| 513 |
+
2024-12-22 07:00:00,26.289911202177933
|
| 514 |
+
2024-12-22 08:00:00,27.942105038852656
|
| 515 |
+
2024-12-22 09:00:00,29.217075653687107
|
| 516 |
+
2024-12-22 10:00:00,30.502698912033278
|
| 517 |
+
2024-12-22 11:00:00,31.05927060360861
|
| 518 |
+
2024-12-22 12:00:00,31.63371723229685
|
| 519 |
+
2024-12-22 13:00:00,31.489649863477045
|
| 520 |
+
2024-12-22 14:00:00,31.305866506024064
|
| 521 |
+
2024-12-22 15:00:00,30.458331228599494
|
| 522 |
+
2024-12-22 16:00:00,29.35882193477447
|
| 523 |
+
2024-12-22 17:00:00,28.688629804011935
|
| 524 |
+
2024-12-22 18:00:00,27.716348359692773
|
| 525 |
+
2024-12-22 19:00:00,27.33314937006231
|
| 526 |
+
2024-12-22 20:00:00,26.676376925575987
|
| 527 |
+
2024-12-22 21:00:00,26.350916643676825
|
| 528 |
+
2024-12-22 22:00:00,26.16546135672291
|
| 529 |
+
2024-12-22 23:00:00,25.766266874014317
|
| 530 |
+
2024-12-23 00:00:00,25.41278398105303
|
| 531 |
+
2024-12-23 01:00:00,25.279585549523663
|
| 532 |
+
2024-12-23 02:00:00,25.056773975064132
|
| 533 |
+
2024-12-23 03:00:00,24.70301881851015
|
| 534 |
+
2024-12-23 04:00:00,24.35002896180948
|
| 535 |
+
2024-12-23 05:00:00,24.240831098310224
|
| 536 |
+
2024-12-23 06:00:00,24.571962464003455
|
| 537 |
+
2024-12-23 07:00:00,26.239629393708693
|
| 538 |
+
2024-12-23 08:00:00,27.891921345277943
|
| 539 |
+
2024-12-23 09:00:00,29.166641455369074
|
| 540 |
+
2024-12-23 10:00:00,30.452825334237964
|
| 541 |
+
2024-12-23 11:00:00,31.0079905402403
|
| 542 |
+
2024-12-23 12:00:00,31.58401760165242
|
| 543 |
+
2024-12-23 13:00:00,31.439206396371596
|
| 544 |
+
2024-12-23 14:00:00,31.256825733786513
|
| 545 |
+
2024-12-23 15:00:00,30.40948524807548
|
| 546 |
+
2024-12-23 16:00:00,29.309506941641136
|
| 547 |
+
2024-12-23 17:00:00,28.638900360993812
|
| 548 |
+
2024-12-23 18:00:00,27.666564682386223
|
| 549 |
+
2024-12-23 19:00:00,27.28325574105062
|
| 550 |
+
2024-12-23 20:00:00,26.626678495766964
|
| 551 |
+
2024-12-23 21:00:00,26.300746635714926
|
| 552 |
+
2024-12-23 22:00:00,26.11652070811439
|
| 553 |
+
2024-12-23 23:00:00,25.71788586540711
|
| 554 |
+
2024-12-24 00:00:00,25.36377031058371
|
| 555 |
+
2024-12-24 01:00:00,25.23055842878369
|
| 556 |
+
2024-12-24 02:00:00,25.007209057337665
|
| 557 |
+
2024-12-24 03:00:00,24.653223997522012
|
| 558 |
+
2024-12-24 04:00:00,24.300332451231128
|
| 559 |
+
2024-12-24 05:00:00,24.191112924397153
|
| 560 |
+
2024-12-24 06:00:00,24.52189923413218
|
| 561 |
+
2024-12-24 07:00:00,26.18991268114132
|
| 562 |
+
2024-12-24 08:00:00,27.84212229801345
|
| 563 |
+
2024-12-24 09:00:00,29.11705262320257
|
| 564 |
+
2024-12-24 10:00:00,30.402766048312554
|
| 565 |
+
2024-12-24 11:00:00,30.95911152938127
|
| 566 |
+
2024-12-24 12:00:00,31.53381234516819
|
| 567 |
+
2024-12-24 13:00:00,31.389625342257634
|
| 568 |
+
2024-12-24 14:00:00,31.20606758563752
|
| 569 |
+
2024-12-24 15:00:00,30.358563637316532
|
| 570 |
+
2024-12-24 16:00:00,29.258978910382208
|
| 571 |
+
2024-12-24 17:00:00,28.588720122044084
|
| 572 |
+
2024-12-24 18:00:00,27.61642995501486
|
| 573 |
+
2024-12-24 19:00:00,27.23321328142702
|
| 574 |
+
2024-12-24 20:00:00,26.576472231582326
|
| 575 |
+
2024-12-24 21:00:00,26.250936103947584
|
| 576 |
+
2024-12-24 22:00:00,26.065678539606306
|
| 577 |
+
2024-12-24 23:00:00,25.66657406596048
|
| 578 |
+
2024-12-25 00:00:00,25.31298941954854
|
| 579 |
+
2024-12-25 01:00:00,25.1797888247602
|
| 580 |
+
2024-12-25 02:00:00,24.95689075433434
|
| 581 |
+
2024-12-25 03:00:00,24.60309862155089
|
| 582 |
+
2024-12-25 04:00:00,24.2501245764931
|
| 583 |
+
2024-12-25 05:00:00,24.140923228796062
|
| 584 |
+
2024-12-25 06:00:00,24.471999097806915
|
| 585 |
+
2024-12-25 07:00:00,26.1397217592284
|
| 586 |
+
2024-12-25 08:00:00,27.792000468590338
|
| 587 |
+
2024-12-25 09:00:00,29.066754388387537
|
| 588 |
+
2024-12-25 10:00:00,30.352862602361466
|
| 589 |
+
2024-12-25 11:00:00,30.908217636561
|
| 590 |
+
2024-12-25 12:00:00,31.484031392767204
|
| 591 |
+
2024-12-25 13:00:00,31.339320580364284
|
| 592 |
+
2024-12-25 14:00:00,31.156750601199565
|
| 593 |
+
2024-12-25 15:00:00,30.309383825165675
|
| 594 |
+
2024-12-25 16:00:00,29.20946881964234
|
| 595 |
+
2024-12-25 17:00:00,28.53891817577529
|
| 596 |
+
2024-12-25 18:00:00,27.56658981697062
|
| 597 |
+
2024-12-25 19:00:00,27.18329571541323
|
| 598 |
+
2024-12-25 20:00:00,26.5266921248094
|
| 599 |
+
2024-12-25 21:00:00,26.20082391193037
|
| 600 |
+
2024-12-25 22:00:00,26.016432062208597
|
| 601 |
+
2024-12-25 23:00:00,25.617721686943735
|
| 602 |
+
2024-12-26 00:00:00,25.263691520170543
|
| 603 |
+
2024-12-26 01:00:00,25.130481453704203
|
| 604 |
+
2024-12-26 02:00:00,24.907204666744192
|
| 605 |
+
2024-12-26 03:00:00,24.553250636128226
|
| 606 |
+
2024-12-26 04:00:00,24.200345821242042
|
| 607 |
+
2024-12-26 05:00:00,24.09112921822887
|
| 608 |
+
2024-12-26 06:00:00,24.421962098900515
|
| 609 |
+
2024-12-26 07:00:00,26.089928777740568
|
| 610 |
+
2024-12-26 08:00:00,27.742149507024667
|
| 611 |
+
2024-12-26 09:00:00,29.017051460253324
|
| 612 |
+
2024-12-26 10:00:00,30.302828380780984
|
| 613 |
+
2024-12-26 11:00:00,30.85901456445459
|
| 614 |
+
2024-12-26 12:00:00,31.43389437874736
|
| 615 |
+
2024-12-26 13:00:00,31.289623129533176
|
| 616 |
+
2024-12-26 14:00:00,31.106224240976047
|
| 617 |
+
2024-12-26 15:00:00,30.258742354603758
|
| 618 |
+
2024-12-26 16:00:00,29.15910450768841
|
| 619 |
+
2024-12-26 17:00:00,28.48879877909841
|
| 620 |
+
2024-12-26 18:00:00,27.51650246953844
|
| 621 |
+
2024-12-26 19:00:00,27.133273342911227
|
| 622 |
+
2024-12-26 20:00:00,26.476554401167117
|
| 623 |
+
2024-12-26 21:00:00,26.150964862980008
|
| 624 |
+
2024-12-26 22:00:00,25.96584653486441
|
| 625 |
+
2024-12-26 23:00:00,25.566805445583217
|
| 626 |
+
2024-12-27 00:00:00,25.21314914441096
|
| 627 |
+
2024-12-27 01:00:00,25.079947026256068
|
| 628 |
+
2024-12-27 02:00:00,24.8569880453874
|
| 629 |
+
2024-12-27 03:00:00,24.503169873950284
|
| 630 |
+
2024-12-27 04:00:00,24.15020696344837
|
| 631 |
+
2024-12-27 05:00:00,24.041003162179912
|
| 632 |
+
2024-12-27 06:00:00,24.372039950437742
|
| 633 |
+
2024-12-27 07:00:00,26.039801858123063
|
| 634 |
+
2024-12-27 08:00:00,27.692071242325156
|
| 635 |
+
2024-12-27 09:00:00,28.96684897091085
|
| 636 |
+
2024-12-27 10:00:00,30.252903901680348
|
| 637 |
+
2024-12-27 11:00:00,30.80839261285973
|
| 638 |
+
2024-12-27 12:00:00,31.384056159581075
|
| 639 |
+
2024-12-27 13:00:00,31.239416043823407
|
| 640 |
+
2024-12-27 14:00:00,31.05671274795983
|
| 641 |
+
2024-12-27 15:00:00,30.209327458285653
|
| 642 |
+
2024-12-27 16:00:00,29.109457029251637
|
| 643 |
+
2024-12-27 17:00:00,28.438945776054467
|
| 644 |
+
2024-12-27 18:00:00,27.4666225718536
|
| 645 |
+
2024-12-27 19:00:00,27.083338920465167
|
| 646 |
+
2024-12-27 20:00:00,26.426716777491954
|
| 647 |
+
2024-12-27 21:00:00,26.10089338493988
|
| 648 |
+
2024-12-27 22:00:00,25.91638469289234
|
| 649 |
+
2024-12-27 23:00:00,25.517621127615
|
| 650 |
+
2024-12-28 00:00:00,25.16365109109029
|
| 651 |
+
2024-12-28 01:00:00,25.03044230298158
|
| 652 |
+
2024-12-28 02:00:00,24.807216630002618
|
| 653 |
+
2024-12-28 03:00:00,24.453284450143077
|
| 654 |
+
2024-12-28 04:00:00,24.100370291514647
|
| 655 |
+
2024-12-28 05:00:00,23.991155747455522
|
| 656 |
+
2024-12-28 06:00:00,24.322021423371755
|
| 657 |
+
2024-12-28 07:00:00,25.989955168076158
|
| 658 |
+
2024-12-28 08:00:00,27.642183722718627
|
| 659 |
+
2024-12-28 09:00:00,28.91706569641819
|
| 660 |
+
2024-12-28 10:00:00,30.202887330406735
|
| 661 |
+
2024-12-28 11:00:00,30.758961336885424
|
| 662 |
+
2024-12-28 12:00:00,31.333967201891493
|
| 663 |
+
2024-12-28 13:00:00,31.189636626446543
|
| 664 |
+
2024-12-28 14:00:00,31.006349612748725
|
| 665 |
+
2024-12-28 15:00:00,30.158883262396454
|
| 666 |
+
2024-12-28 16:00:00,29.05920800840072
|
| 667 |
+
2024-12-28 17:00:00,28.388869224494403
|
| 668 |
+
2024-12-28 18:00:00,27.41656858936547
|
| 669 |
+
2024-12-28 19:00:00,27.033330693310333
|
| 670 |
+
2024-12-28 20:00:00,26.376627320086385
|
| 671 |
+
2024-12-28 21:00:00,26.051000170198606
|
| 672 |
+
2024-12-28 22:00:00,25.865979892206276
|
| 673 |
+
2024-12-28 23:00:00,25.46698343818243
|
| 674 |
+
2024-12-29 00:00:00,25.11327667774178
|
| 675 |
+
2024-12-29 01:00:00,24.980073486832456
|
| 676 |
+
2024-12-29 02:00:00,24.75707161284171
|
| 677 |
+
2024-12-29 03:00:00,24.403235104989715
|
| 678 |
+
2024-12-29 04:00:00,24.050280035439894
|
| 679 |
+
2024-12-29 05:00:00,23.941074506366927
|
| 680 |
+
2024-12-29 06:00:00,24.272083773966013
|
| 681 |
+
2024-12-29 07:00:00,25.939873318862755
|
| 682 |
+
2024-12-29 08:00:00,27.59213613628909
|
| 683 |
+
2024-12-29 09:00:00,28.86693063101904
|
| 684 |
+
2024-12-29 10:00:00,30.152948039766258
|
| 685 |
+
2024-12-29 11:00:00,30.70853088624907
|
| 686 |
+
2024-12-29 12:00:00,31.284088655480147
|
| 687 |
+
2024-12-29 13:00:00,31.139498324286432
|
| 688 |
+
2024-12-29 14:00:00,30.95670114682923
|
| 689 |
+
2024-12-29 15:00:00,30.109302819853134
|
| 690 |
+
2024-12-29 16:00:00,29.0094637815743
|
| 691 |
+
2024-12-29 17:00:00,28.33898026727926
|
| 692 |
+
2024-12-29 18:00:00,27.366660692949395
|
| 693 |
+
2024-12-29 19:00:00,26.983384400567925
|
| 694 |
+
2024-12-29 20:00:00,26.326749193019776
|
| 695 |
+
2024-12-29 21:00:00,26.000957362933296
|
| 696 |
+
2024-12-29 22:00:00,25.816366390542488
|
| 697 |
+
2024-12-29 23:00:00,25.417565368868622
|
| 698 |
+
2024-12-30 00:00:00,25.063637676053293
|
| 699 |
+
2024-12-30 01:00:00,24.930429788163774
|
| 700 |
+
2024-12-30 02:00:00,24.707240109640413
|
| 701 |
+
2024-12-30 03:00:00,24.35332331707933
|
| 702 |
+
2024-12-30 04:00:00,24.00040257858942
|
| 703 |
+
2024-12-30 05:00:00,23.89118948444533
|
| 704 |
+
2024-12-30 06:00:00,24.222078254766473
|
| 705 |
+
2024-12-30 07:00:00,25.889988807258902
|
| 706 |
+
2024-12-30 08:00:00,27.542222872517225
|
| 707 |
+
2024-12-30 09:00:00,28.817090776636263
|
| 708 |
+
2024-12-30 10:00:00,30.10294389783533
|
| 709 |
+
2024-12-30 11:00:00,30.658938909154998
|
| 710 |
+
2024-12-30 12:00:00,31.234033539049054
|
| 711 |
+
2024-12-30 13:00:00,31.08966118608384
|
| 712 |
+
2024-12-30 14:00:00,30.906452954640372
|
| 713 |
+
2024-12-30 15:00:00,30.0589975447504
|
| 714 |
+
2024-12-30 16:00:00,28.959295948695875
|
| 715 |
+
2024-12-30 17:00:00,28.288933887242187
|
| 716 |
+
2024-12-30 18:00:00,27.316630206048423
|
| 717 |
+
2024-12-30 19:00:00,26.933386134563833
|
| 718 |
+
2024-12-30 20:00:00,26.276693724688787
|
| 719 |
+
2024-12-30 21:00:00,25.951040088648647
|
| 720 |
+
2024-12-30 22:00:00,25.766088857534207
|
| 721 |
+
2024-12-30 23:00:00,25.367123835649974
|
| 722 |
+
2024-12-31 00:00:00,25.01338154180225
|
data/model/cnn.ipynb
ADDED
|
The diff for this file is too large to render.
See raw diff
|
|
|
data/model/cnnModel.keras
ADDED
|
@@ -0,0 +1,3 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
version https://git-lfs.github.com/spec/v1
|
| 2 |
+
oid sha256:7191af5a3ad7e8eb103508a9ac5a9dd8ae9c7a19cabb7e9c1d5ede8444851737
|
| 3 |
+
size 38517504
|
data/model/wp_CNN_test_preprocess.ipynb
ADDED
|
@@ -0,0 +1,114 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
{
|
| 2 |
+
"cells": [
|
| 3 |
+
{
|
| 4 |
+
"cell_type": "code",
|
| 5 |
+
"execution_count": 1,
|
| 6 |
+
"metadata": {},
|
| 7 |
+
"outputs": [],
|
| 8 |
+
"source": [
|
| 9 |
+
"import numpy as np\n",
|
| 10 |
+
"import pandas as pd"
|
| 11 |
+
]
|
| 12 |
+
},
|
| 13 |
+
{
|
| 14 |
+
"cell_type": "code",
|
| 15 |
+
"execution_count": 2,
|
| 16 |
+
"metadata": {},
|
| 17 |
+
"outputs": [],
|
| 18 |
+
"source": [
|
| 19 |
+
"from keras.preprocessing.image import load_img, img_to_array"
|
| 20 |
+
]
|
| 21 |
+
},
|
| 22 |
+
{
|
| 23 |
+
"cell_type": "code",
|
| 24 |
+
"execution_count": 3,
|
| 25 |
+
"metadata": {},
|
| 26 |
+
"outputs": [],
|
| 27 |
+
"source": [
|
| 28 |
+
"img_width, img_height = 256, 256"
|
| 29 |
+
]
|
| 30 |
+
},
|
| 31 |
+
{
|
| 32 |
+
"cell_type": "code",
|
| 33 |
+
"execution_count": 4,
|
| 34 |
+
"metadata": {},
|
| 35 |
+
"outputs": [],
|
| 36 |
+
"source": [
|
| 37 |
+
"def preprocess_image(path):\n",
|
| 38 |
+
" img = load_img(path, target_size = (img_height, img_width))\n",
|
| 39 |
+
" a = img_to_array(img)\n",
|
| 40 |
+
" a = np.expand_dims(a, axis = 0)\n",
|
| 41 |
+
" a /= 255.\n",
|
| 42 |
+
" return a"
|
| 43 |
+
]
|
| 44 |
+
},
|
| 45 |
+
{
|
| 46 |
+
"cell_type": "code",
|
| 47 |
+
"execution_count": 5,
|
| 48 |
+
"metadata": {},
|
| 49 |
+
"outputs": [],
|
| 50 |
+
"source": [
|
| 51 |
+
"test_images_dir = '../dataset/alien_test/'"
|
| 52 |
+
]
|
| 53 |
+
},
|
| 54 |
+
{
|
| 55 |
+
"cell_type": "code",
|
| 56 |
+
"execution_count": 6,
|
| 57 |
+
"metadata": {},
|
| 58 |
+
"outputs": [],
|
| 59 |
+
"source": [
|
| 60 |
+
"test_df = pd.read_csv('../dataset/test.csv')\n",
|
| 61 |
+
"\n",
|
| 62 |
+
"test_dfToList = test_df['Image_id'].tolist()\n",
|
| 63 |
+
"test_ids = [str(item) for item in test_dfToList]"
|
| 64 |
+
]
|
| 65 |
+
},
|
| 66 |
+
{
|
| 67 |
+
"cell_type": "code",
|
| 68 |
+
"execution_count": 7,
|
| 69 |
+
"metadata": {},
|
| 70 |
+
"outputs": [],
|
| 71 |
+
"source": [
|
| 72 |
+
"test_images = [test_images_dir+item for item in test_ids]\n",
|
| 73 |
+
"test_preprocessed_images = np.vstack([preprocess_image(fn) for fn in test_images])"
|
| 74 |
+
]
|
| 75 |
+
},
|
| 76 |
+
{
|
| 77 |
+
"cell_type": "code",
|
| 78 |
+
"execution_count": 8,
|
| 79 |
+
"metadata": {},
|
| 80 |
+
"outputs": [],
|
| 81 |
+
"source": [
|
| 82 |
+
"np.save('../test_preproc_CNN.npy', test_preprocessed_images)"
|
| 83 |
+
]
|
| 84 |
+
},
|
| 85 |
+
{
|
| 86 |
+
"cell_type": "code",
|
| 87 |
+
"execution_count": null,
|
| 88 |
+
"metadata": {},
|
| 89 |
+
"outputs": [],
|
| 90 |
+
"source": []
|
| 91 |
+
}
|
| 92 |
+
],
|
| 93 |
+
"metadata": {
|
| 94 |
+
"kernelspec": {
|
| 95 |
+
"display_name": "Python 3 (ipykernel)",
|
| 96 |
+
"language": "python",
|
| 97 |
+
"name": "python3"
|
| 98 |
+
},
|
| 99 |
+
"language_info": {
|
| 100 |
+
"codemirror_mode": {
|
| 101 |
+
"name": "ipython",
|
| 102 |
+
"version": 3
|
| 103 |
+
},
|
| 104 |
+
"file_extension": ".py",
|
| 105 |
+
"mimetype": "text/x-python",
|
| 106 |
+
"name": "python",
|
| 107 |
+
"nbconvert_exporter": "python",
|
| 108 |
+
"pygments_lexer": "ipython3",
|
| 109 |
+
"version": "3.11.9"
|
| 110 |
+
}
|
| 111 |
+
},
|
| 112 |
+
"nbformat": 4,
|
| 113 |
+
"nbformat_minor": 4
|
| 114 |
+
}
|
data/model/wp_EDA_preprocessing.ipynb
ADDED
|
The diff for this file is too large to render.
See raw diff
|
|
|
data/model/wp_confusion_matrix.ipynb
ADDED
|
@@ -0,0 +1,225 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
{
|
| 2 |
+
"cells": [
|
| 3 |
+
{
|
| 4 |
+
"cell_type": "code",
|
| 5 |
+
"execution_count": 1,
|
| 6 |
+
"metadata": {},
|
| 7 |
+
"outputs": [],
|
| 8 |
+
"source": [
|
| 9 |
+
"import os\n",
|
| 10 |
+
"import numpy as np\n",
|
| 11 |
+
"import pandas as pd\n",
|
| 12 |
+
"import matplotlib.pyplot as plt\n",
|
| 13 |
+
"\n",
|
| 14 |
+
"import warnings\n",
|
| 15 |
+
"warnings.filterwarnings(\"ignore\")"
|
| 16 |
+
]
|
| 17 |
+
},
|
| 18 |
+
{
|
| 19 |
+
"cell_type": "code",
|
| 20 |
+
"execution_count": 2,
|
| 21 |
+
"metadata": {},
|
| 22 |
+
"outputs": [],
|
| 23 |
+
"source": [
|
| 24 |
+
"from tensorflow.keras.models import load_model"
|
| 25 |
+
]
|
| 26 |
+
},
|
| 27 |
+
{
|
| 28 |
+
"cell_type": "code",
|
| 29 |
+
"execution_count": 3,
|
| 30 |
+
"metadata": {},
|
| 31 |
+
"outputs": [],
|
| 32 |
+
"source": [
|
| 33 |
+
"test_preprocessed_images = np.load('../test_preproc_CNN.npy')"
|
| 34 |
+
]
|
| 35 |
+
},
|
| 36 |
+
{
|
| 37 |
+
"cell_type": "code",
|
| 38 |
+
"execution_count": 4,
|
| 39 |
+
"metadata": {},
|
| 40 |
+
"outputs": [],
|
| 41 |
+
"source": [
|
| 42 |
+
"model_path = '../scripts/cnnModel.keras'"
|
| 43 |
+
]
|
| 44 |
+
},
|
| 45 |
+
{
|
| 46 |
+
"cell_type": "code",
|
| 47 |
+
"execution_count": 5,
|
| 48 |
+
"metadata": {},
|
| 49 |
+
"outputs": [],
|
| 50 |
+
"source": [
|
| 51 |
+
"model = load_model(model_path)"
|
| 52 |
+
]
|
| 53 |
+
},
|
| 54 |
+
{
|
| 55 |
+
"cell_type": "code",
|
| 56 |
+
"execution_count": 6,
|
| 57 |
+
"metadata": {},
|
| 58 |
+
"outputs": [
|
| 59 |
+
{
|
| 60 |
+
"name": "stdout",
|
| 61 |
+
"output_type": "stream",
|
| 62 |
+
"text": [
|
| 63 |
+
"\u001b[1m30/30\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m1s\u001b[0m 14ms/step\n"
|
| 64 |
+
]
|
| 65 |
+
}
|
| 66 |
+
],
|
| 67 |
+
"source": [
|
| 68 |
+
"#Prediction Function\n",
|
| 69 |
+
"array = model.predict(test_preprocessed_images, batch_size=1, verbose=1)\n",
|
| 70 |
+
"y_pred = np.argmax(array, axis=1)"
|
| 71 |
+
]
|
| 72 |
+
},
|
| 73 |
+
{
|
| 74 |
+
"cell_type": "code",
|
| 75 |
+
"execution_count": 7,
|
| 76 |
+
"metadata": {},
|
| 77 |
+
"outputs": [],
|
| 78 |
+
"source": [
|
| 79 |
+
"test_df = pd.read_csv('../dataset/test.csv')\n",
|
| 80 |
+
"y_true = test_df['labels']"
|
| 81 |
+
]
|
| 82 |
+
},
|
| 83 |
+
{
|
| 84 |
+
"cell_type": "code",
|
| 85 |
+
"execution_count": 8,
|
| 86 |
+
"metadata": {},
|
| 87 |
+
"outputs": [],
|
| 88 |
+
"source": [
|
| 89 |
+
"from sklearn.metrics import confusion_matrix\n",
|
| 90 |
+
"conf_mat = confusion_matrix(y_true, y_pred)"
|
| 91 |
+
]
|
| 92 |
+
},
|
| 93 |
+
{
|
| 94 |
+
"cell_type": "code",
|
| 95 |
+
"execution_count": 9,
|
| 96 |
+
"metadata": {},
|
| 97 |
+
"outputs": [],
|
| 98 |
+
"source": [
|
| 99 |
+
"train_dir = '../weather_pred/Data/training/'\n",
|
| 100 |
+
"classes = os.listdir(train_dir)"
|
| 101 |
+
]
|
| 102 |
+
},
|
| 103 |
+
{
|
| 104 |
+
"cell_type": "code",
|
| 105 |
+
"execution_count": 10,
|
| 106 |
+
"metadata": {},
|
| 107 |
+
"outputs": [],
|
| 108 |
+
"source": [
|
| 109 |
+
"import itertools\n",
|
| 110 |
+
"def plot_confusion_matrix(cm, classes,\n",
|
| 111 |
+
" normalize=False,\n",
|
| 112 |
+
" title='Confusion matrix',\n",
|
| 113 |
+
" cmap=plt.cm.Reds):\n",
|
| 114 |
+
" \"\"\"\n",
|
| 115 |
+
" This function prints and plots the confusion matrix.\n",
|
| 116 |
+
" Normalization can be applied by setting `normalize=True`.\n",
|
| 117 |
+
" \"\"\"\n",
|
| 118 |
+
" plt.imshow(cm, interpolation='nearest', cmap=cmap)\n",
|
| 119 |
+
" plt.title(title)\n",
|
| 120 |
+
" plt.colorbar()\n",
|
| 121 |
+
" tick_marks = np.arange(len(classes))\n",
|
| 122 |
+
" plt.xticks(tick_marks, classes, rotation=45)\n",
|
| 123 |
+
" plt.yticks(tick_marks, classes)\n",
|
| 124 |
+
"\n",
|
| 125 |
+
" if normalize:\n",
|
| 126 |
+
" cm = cm.astype('float') / cm.sum(axis=1)[:, np.newaxis]\n",
|
| 127 |
+
" cm = cm.round(2)\n",
|
| 128 |
+
" #print(\"Normalized confusion matrix\")\n",
|
| 129 |
+
" else:\n",
|
| 130 |
+
" cm=cm\n",
|
| 131 |
+
" #print('Confusion matrix, without normalization')\n",
|
| 132 |
+
"\n",
|
| 133 |
+
" #print(cm)\n",
|
| 134 |
+
"\n",
|
| 135 |
+
" thresh = cm.max() / 2.\n",
|
| 136 |
+
" for i, j in itertools.product(range(cm.shape[0]), range(cm.shape[1])):\n",
|
| 137 |
+
" plt.text(j, i, cm[i, j],\n",
|
| 138 |
+
" horizontalalignment=\"center\",\n",
|
| 139 |
+
" color=\"white\" if cm[i, j] > thresh else \"black\")\n",
|
| 140 |
+
"\n",
|
| 141 |
+
" plt.tight_layout()\n",
|
| 142 |
+
" plt.ylabel('True label')\n",
|
| 143 |
+
" plt.xlabel('Predicted label')"
|
| 144 |
+
]
|
| 145 |
+
},
|
| 146 |
+
{
|
| 147 |
+
"cell_type": "code",
|
| 148 |
+
"execution_count": 11,
|
| 149 |
+
"metadata": {},
|
| 150 |
+
"outputs": [
|
| 151 |
+
{
|
| 152 |
+
"data": {
|
| 153 |
+
"image/png": "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kFlXhadX1apVsX37dmzYsAHlypXDlClT8Pvvv8PLyyvdbfBUOBEREREBAJo2bYqmTZt+9euZWBIRERHJQAHdnjqW47Q0T4UTERERkVawYklEREQkA0lKWnTWvu6aThMrlkRERESkFaxYEhEREclA+v//dNl+ZmPFkoiIiIi0ghVLIiIiIhlk1r3CMxMrlkRERESkFUwsiYiIiEgreCqciIiISAY8FU5ERERElAZWLImIiIhkoACg0GFZUSF013aa+8z8XRIRERFRdsSKJREREZEMOEE6EREREVEaWLEkIiIikokcV27rEiuWRERERKQVrFgSERERyUCSkhZdtp/ZWLEkIiIiIq1gxZKIiIhIBrzzDhERERFRGlixJCIiIpKBAhIUOqwr6rLttPdJRERERKQFrFgSERERyYBjLImIiIiI0sCKJREREZEMOI8lEREREVEaWLEkIiIikgHHWBIRERERpYEVSyIiIiIZSP//ny7bz2ysWBIRERGRVrBiSURERCQDhZS06LL9zMaKJRERERFpBSuWZDCiO/4gdwgGT+nqLHcIBEDxUz+5QyAAiX+vkTsEg5b4PkbuEHhVOBERERFRWlixJCIiIpIBK5ZERERERGlgxZKIiIhIBpzHkoiIiIgoDaxYEhEREclAkpIWXbaf2VixJCIiIiKtYMWSiIiISAYK6LbCJ0f1kBVLIiIiItIKViyJiIiIZMB5LImIiIiI0sCKJREREZEcJAlSNrssnBVLIiIiItIKViyJiIiIZMAxlkREREREaWDFkoiIiEgGrFgSEREREaWBFUsiIiIiGUg6vipcp1ecp4EVSyIiIiLSClYsiYiIiGSgkJIWXbaf2VixJCIiIiKtYMWSiIiISAaSQoKkw7KiJMN14axYEhEREZFWsGJJREREJANJ0u3tvGW4KJwVSyIiIiLSDlYsiYiIiGTAiiURERERURpYsSQiIiKSAe+8Q0RERESUBiaWRERERDJIHmOpyyUjJk2apK6iJi+lS5fOUBs8FU5EREREAICyZcvi8OHD6sfGxhlLFZlYEhEREclAH8dYGhsbI3/+/F+9T54KJyIiIiIAwL1791CwYEEUK1YMXl5eePz4cYZez4olERERUTYWERGh8VipVEKpVKbYrnr16li1ahWcnJzw7NkzTJ48GbVr18b169dhaWmZrn2xYklEREQkg8y6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DDjGkoiIiIgoDaxYEhEREclAUiQtumw/s7FiSURERERawYolERERkQw4xpKIiIiIKA2sWBIRERHJQSElLbpsP5OxYklEREREWsGKJREREZEcJB3feodjLImIiIgoq2LFkoiIiEgGvCqciIiIiCgNrFgSERERyYFXhRMRERERpY6JJRERERFpBU+FExEREcmB0w0REREREaWOFUsiIiIiGUgKCZIOL7DRZdtpYWKZSRL//QuJOc3kDsOgmW84IHcIBi+64w9yh0AAzIeXlDsEAoCC7Ac5GUVEABgpdxjZDhNLIiIiIjlwjCURERERUepYsSQiIiKSgSTpeIwlK5ZERERElFWxYklEREQkB46xJCIiIiJKHSuWRERERHJQANDlXJMylA9ZsSQiIiIiDdOmTYMkSfD19c3Q61ixJCIiIpKBJEk6vXL7a9s+f/48lixZgvLly2f4taxYEhEREREAICoqCl5eXli2bBly586d4dczsSQiIiKSg0LS/QIgIiJCY4mLi0szpP79++PHH3+Eu7v71x3SV72KiIiIiLIEe3t7WFtbqxd/f/9Ut/vrr79w8eLFNJ9PD46xJCIiIpJDJs1jGRoaCisrK/VqpVKZYtPQ0FAMHjwYhw4dgqmp6VfvkoklERERUTZmZWWlkVim5sKFCwgLC0PlypXV6xITE3H8+HH88ccfiIuLg5GR0Rf3xcSSiIiISAaSImnRZfvp1aBBA1y7dk1jXdeuXVG6dGmMGjUqXUklwMSSiIiIyOBZWlqiXLlyGuvMzc1hY2OTYv3npCux3LVrV7obbN68ebq3JSIiIjJY2fBe4elKLFu2bJmuxiRJQmJi4rfEQ0RERER64OjRoxl+TboSS5VKleGGiYiIiChtkkKCpMN7heuy7bR805DR2NhYbcVBRERERFlchhPLxMRETJkyBYUKFYKFhQUePnwIABg/fjyWL1+u9QCJiIiIsqXkMZa6XDJZhhPLqVOnYtWqVZgxYwZMTEzU68uVK4c///xTq8ERERERUdaR4cRy9erVWLp0Kby8vDTmNKpQoQJu376t1eCIiIiIsq1Muld4ph5SRl/w9OlTlChRIsV6lUqFhIQErQRFRERERFlPhhPLMmXKIDAwMMX6LVu2oFKlSloJioiIiCi7kyRJ50tmy/CddyZMmABvb288ffoUKpUK27Ztw507d7B69Wrs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d4iIiIiIUpelKpZERERE2UY2vCqcFUsiIiIi0gomlkRERERykKT/jbPUyZKxiqW/vz+qVq0KS0tL2NraomXLlrhz506G2mBiSUREREQ4duwY+vfvjzNnzuDQoUNISEhAo0aNEB0dne42OMaSiIiISA66nmsyg21/OvPOqlWrYGtriwsXLqBOnTrpaoOJJREREVE2FhERofE4vbefDg8PBwDkyZMn3fviqXAiIiIiOeh0fOX/5si0t7eHtbW1evH39/9iaCqVCr6+vqhZsybKlSuX7kNixZKIiIgoGwsNDYWVlZX6cXqqlf3798f169dx4sSJDO2LiSURERGRHDJpHksrKyuNxPJLBgwYgD179uD48eMoXLhwhnbJxJKIiIiIIITAwIEDsX37dhw9ehRFixbNcBtMLImIiIjkoGf3Cu/fvz/Wr1+PnTt3wtLSEs+fPwcAWFtbw8zMLF1t8OIdIiIiIsKiRYsQHh6OunXrokCBAupl48aN6W6DFUsiIiIiOejZPJZCiG/eJSuWRERERKQVrFgSERERyUGhSFp02X4mY8WSiIiIiLSCFUsiIiIiWeh4jCV02XbqWLEkIiIiIq1gxZKIiIhIDno2j6U2sGJJRERERFrBxJKIiIiItIKnwomIiIjkoGcTpGsDK5ZEREREpBWsWBIRERHJgROkExERERGljhVLIiIiIjlwjCURERERUepYsSQiIiKSgyTpeIJ0ViyJiIiIKItixZKIiIhIDhxjSURERESUOlYsiYiIiOQgKXQ8xpLzWBIRERFRFsWKJREREZEcFFLSosv2MxkrlkRERESkFaxYEhEREcmBYyyJiIiIiFLHiiURERGRHDiPJRERERFR6lixJCIiIpIDx1gSEREREaWOFUsiIgNjPHyO3CEQgD7mheUOwaDFQ8gdAiRJgqTDcZC6bDstrFgSERERkVawYklEREQkB46xJCIiIiJKHSuWRERERHJgxZKIiIiIKHWsWBIRERHJQZIABe+8Q0RERESUAiuWRERERHLgGEsiIiIiotSxYklEREQkB0nS7ThIjrEkIiIioqyKFUsiIiIiOUiSjsdYsmJJRERERFkUK5ZEREREcuAYSyIiIiKi1LFiSURERCQHzmNJRERERJQ6ViyJiIiI5KDQ8b3Cddl2WrvM9D0SERERUbbEiiURERGRHDjGkoiIiIgodaxY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",
|
| 154 |
+
"text/plain": [
|
| 155 |
+
"<Figure size 700x600 with 2 Axes>"
|
| 156 |
+
]
|
| 157 |
+
},
|
| 158 |
+
"metadata": {},
|
| 159 |
+
"output_type": "display_data"
|
| 160 |
+
}
|
| 161 |
+
],
|
| 162 |
+
"source": [
|
| 163 |
+
"np.set_printoptions(precision=2)\n",
|
| 164 |
+
"\n",
|
| 165 |
+
"fig1 = plt.figure(figsize=(7,6))\n",
|
| 166 |
+
"plot_confusion_matrix(conf_mat, classes=classes, title='Confusion matrix, without normalization')\n",
|
| 167 |
+
"#fig1.savefig('../cm_wo_norm.jpg')\n",
|
| 168 |
+
"plt.show()"
|
| 169 |
+
]
|
| 170 |
+
},
|
| 171 |
+
{
|
| 172 |
+
"cell_type": "code",
|
| 173 |
+
"execution_count": 12,
|
| 174 |
+
"metadata": {},
|
| 175 |
+
"outputs": [
|
| 176 |
+
{
|
| 177 |
+
"data": {
|
| 178 |
+
"image/png": "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vx7Lli0DANW0/n79+mH37t2YNm0a7t69iwULFuCvv/5KNe3fxcUF3377LYYPH44OHTrA1DT9ZUeIiIiIcrJs17EEgMmTJ6NNmzbo1KkTKlWqhHv37mHv3r2wsbEBABQrVgwbN27E5s2bUb58ecybN081K9zYOPl5yjVq1MD8+fMxbdo0uLm5Yc+ePRg0aBBMTFKv/detWzfEx8d/9jY4ERERUUYpJEnrm87PSedH/AIDBw5EaGio6rWJiQlmzZqFV69e4cOHDzh27BgqV66stk+LFi1w9+5dfPjwAYcOHcKbN29QpEgRtY5j9+7d8eTJE7x//x5btmxBaGgoSpQoker4T58+haura6pjEBEREdG/svxyQ19q7ty5qFy5MvLmzYvjx4/jt99+Q9++fdXq/P7772jQoAHMzMzw119/Yfny5Zg7d67q/ejoaISGhuKPP/7AhAkTdH0KREREpMe0PQ6S61hq0N27dzFhwgS8ffsWRYsWxc8//wx/f3+1OmfOnMGUKVMQFRWF4sWLY9asWfDz81O937dvX6xZswZeXl68DU5ERET0GXrbsZw+fTqmT5/+yTrr16//5PvLli1TTfohIiIi0iRJy88K1+pzyNORLcZYEhEREVHWp7cZSyIiIqKsTB/HWDJjSUREREQawYwlERERkQyYsSQiIiIiSgczlkREREQykBQSJIUWZ4ULzgonIiIiomyKGUsiIiIiGXCMJRERERFROpixJCIiIpKBQpKg0GJaUZttp3tMnR+RiIiIiPQSM5ZEREREMuAYSyIiIiKidDBjSURERCQDSZIgaTGtqM2208OMJRERERFpBDOWRERERDKQoOUxltprOl3MWBIRERGRRjBjSURERCQDjrEkIiIiIkoHM5ZEREREctDyOpZyDLJkxpKIiIiINIIZSyIiIiIZcIwlEREREVE6mLEkIiIikoGkSN602b6uMWNJRERERBrBjCURERGRDDjGkoiIiIgoHcxYEhEREclBISVv2mxfx5ixJCIiIiKNYMaSiIiISA6Slh+9wzGWRERERJRdMWNJREREJAPOCiciIiIiSgczlkRERERy4KxwIiIiIqK0sWNJRERERBrBW+FEREREcuByQ0REREREaWPGkoiIiEgGkkKCpMUJNtpsOz3sWOpI0sG1SMptKncYOZrZmj1yh5DjxXT4Tu4QCIDZkJJy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",
|
| 179 |
+
"text/plain": [
|
| 180 |
+
"<Figure size 700x600 with 2 Axes>"
|
| 181 |
+
]
|
| 182 |
+
},
|
| 183 |
+
"metadata": {},
|
| 184 |
+
"output_type": "display_data"
|
| 185 |
+
}
|
| 186 |
+
],
|
| 187 |
+
"source": [
|
| 188 |
+
"np.set_printoptions(precision=2)\n",
|
| 189 |
+
"\n",
|
| 190 |
+
"fig2 = plt.figure(figsize=(7,6))\n",
|
| 191 |
+
"plot_confusion_matrix(conf_mat, classes=classes, normalize = True, title='Normalized Confusion matrix')\n",
|
| 192 |
+
"fig2.savefig('../cm_norm.jpg')\n",
|
| 193 |
+
"plt.show()"
|
| 194 |
+
]
|
| 195 |
+
},
|
| 196 |
+
{
|
| 197 |
+
"cell_type": "code",
|
| 198 |
+
"execution_count": null,
|
| 199 |
+
"metadata": {},
|
| 200 |
+
"outputs": [],
|
| 201 |
+
"source": []
|
| 202 |
+
}
|
| 203 |
+
],
|
| 204 |
+
"metadata": {
|
| 205 |
+
"kernelspec": {
|
| 206 |
+
"display_name": "Python 3 (ipykernel)",
|
| 207 |
+
"language": "python",
|
| 208 |
+
"name": "python3"
|
| 209 |
+
},
|
| 210 |
+
"language_info": {
|
| 211 |
+
"codemirror_mode": {
|
| 212 |
+
"name": "ipython",
|
| 213 |
+
"version": 3
|
| 214 |
+
},
|
| 215 |
+
"file_extension": ".py",
|
| 216 |
+
"mimetype": "text/x-python",
|
| 217 |
+
"name": "python",
|
| 218 |
+
"nbconvert_exporter": "python",
|
| 219 |
+
"pygments_lexer": "ipython3",
|
| 220 |
+
"version": "3.11.9"
|
| 221 |
+
}
|
| 222 |
+
},
|
| 223 |
+
"nbformat": 4,
|
| 224 |
+
"nbformat_minor": 4
|
| 225 |
+
}
|
data/model/wp_prediction_and_log-loss.ipynb
ADDED
|
@@ -0,0 +1,138 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
{
|
| 2 |
+
"cells": [
|
| 3 |
+
{
|
| 4 |
+
"cell_type": "code",
|
| 5 |
+
"execution_count": 2,
|
| 6 |
+
"metadata": {},
|
| 7 |
+
"outputs": [],
|
| 8 |
+
"source": [
|
| 9 |
+
"import numpy as np\n",
|
| 10 |
+
"import pandas as pd"
|
| 11 |
+
]
|
| 12 |
+
},
|
| 13 |
+
{
|
| 14 |
+
"cell_type": "code",
|
| 15 |
+
"execution_count": 3,
|
| 16 |
+
"metadata": {},
|
| 17 |
+
"outputs": [],
|
| 18 |
+
"source": [
|
| 19 |
+
"from tensorflow.keras.models import load_model"
|
| 20 |
+
]
|
| 21 |
+
},
|
| 22 |
+
{
|
| 23 |
+
"cell_type": "code",
|
| 24 |
+
"execution_count": 4,
|
| 25 |
+
"metadata": {},
|
| 26 |
+
"outputs": [],
|
| 27 |
+
"source": [
|
| 28 |
+
"img_width, img_height = 256, 256"
|
| 29 |
+
]
|
| 30 |
+
},
|
| 31 |
+
{
|
| 32 |
+
"cell_type": "code",
|
| 33 |
+
"execution_count": 5,
|
| 34 |
+
"metadata": {},
|
| 35 |
+
"outputs": [],
|
| 36 |
+
"source": [
|
| 37 |
+
"test_preprocessed_images = np.load('../test_preproc_CNN.npy')"
|
| 38 |
+
]
|
| 39 |
+
},
|
| 40 |
+
{
|
| 41 |
+
"cell_type": "code",
|
| 42 |
+
"execution_count": 6,
|
| 43 |
+
"metadata": {},
|
| 44 |
+
"outputs": [],
|
| 45 |
+
"source": [
|
| 46 |
+
"model_path = '../scripts/cnnModel.keras'"
|
| 47 |
+
]
|
| 48 |
+
},
|
| 49 |
+
{
|
| 50 |
+
"cell_type": "code",
|
| 51 |
+
"execution_count": 7,
|
| 52 |
+
"metadata": {},
|
| 53 |
+
"outputs": [
|
| 54 |
+
{
|
| 55 |
+
"name": "stderr",
|
| 56 |
+
"output_type": "stream",
|
| 57 |
+
"text": [
|
| 58 |
+
"C:\\Users\\akhyar\\AppData\\Roaming\\Python\\Python311\\site-packages\\keras\\src\\saving\\saving_lib.py:719: UserWarning: Skipping variable loading for optimizer 'rmsprop', because it has 26 variables whereas the saved optimizer has 50 variables. \n",
|
| 59 |
+
" saveable.load_own_variables(weights_store.get(inner_path))\n"
|
| 60 |
+
]
|
| 61 |
+
}
|
| 62 |
+
],
|
| 63 |
+
"source": [
|
| 64 |
+
"#Load the pre-trained models\n",
|
| 65 |
+
"model = load_model(model_path)"
|
| 66 |
+
]
|
| 67 |
+
},
|
| 68 |
+
{
|
| 69 |
+
"cell_type": "code",
|
| 70 |
+
"execution_count": 8,
|
| 71 |
+
"metadata": {},
|
| 72 |
+
"outputs": [
|
| 73 |
+
{
|
| 74 |
+
"name": "stdout",
|
| 75 |
+
"output_type": "stream",
|
| 76 |
+
"text": [
|
| 77 |
+
"\u001b[1m30/30\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m1s\u001b[0m 13ms/step\n"
|
| 78 |
+
]
|
| 79 |
+
}
|
| 80 |
+
],
|
| 81 |
+
"source": [
|
| 82 |
+
"#Prediction Function\n",
|
| 83 |
+
"y_pred = model.predict(test_preprocessed_images, batch_size=1, verbose=1)\n",
|
| 84 |
+
"#y_pred = np.argmax(array, axis=1)"
|
| 85 |
+
]
|
| 86 |
+
},
|
| 87 |
+
{
|
| 88 |
+
"cell_type": "code",
|
| 89 |
+
"execution_count": 9,
|
| 90 |
+
"metadata": {},
|
| 91 |
+
"outputs": [],
|
| 92 |
+
"source": [
|
| 93 |
+
"test_df = pd.read_csv('../dataset/test.csv')\n",
|
| 94 |
+
"y_true = test_df['labels']"
|
| 95 |
+
]
|
| 96 |
+
},
|
| 97 |
+
{
|
| 98 |
+
"cell_type": "code",
|
| 99 |
+
"execution_count": 10,
|
| 100 |
+
"metadata": {},
|
| 101 |
+
"outputs": [
|
| 102 |
+
{
|
| 103 |
+
"name": "stdout",
|
| 104 |
+
"output_type": "stream",
|
| 105 |
+
"text": [
|
| 106 |
+
"0.8849632600653125\n"
|
| 107 |
+
]
|
| 108 |
+
}
|
| 109 |
+
],
|
| 110 |
+
"source": [
|
| 111 |
+
"from sklearn.metrics import log_loss\n",
|
| 112 |
+
"loss = log_loss(y_true, y_pred, normalize=True, sample_weight=None, labels=None)\n",
|
| 113 |
+
"print(loss)"
|
| 114 |
+
]
|
| 115 |
+
}
|
| 116 |
+
],
|
| 117 |
+
"metadata": {
|
| 118 |
+
"kernelspec": {
|
| 119 |
+
"display_name": "Python 3 (ipykernel)",
|
| 120 |
+
"language": "python",
|
| 121 |
+
"name": "python3"
|
| 122 |
+
},
|
| 123 |
+
"language_info": {
|
| 124 |
+
"codemirror_mode": {
|
| 125 |
+
"name": "ipython",
|
| 126 |
+
"version": 3
|
| 127 |
+
},
|
| 128 |
+
"file_extension": ".py",
|
| 129 |
+
"mimetype": "text/x-python",
|
| 130 |
+
"name": "python",
|
| 131 |
+
"nbconvert_exporter": "python",
|
| 132 |
+
"pygments_lexer": "ipython3",
|
| 133 |
+
"version": "3.11.9"
|
| 134 |
+
}
|
| 135 |
+
},
|
| 136 |
+
"nbformat": 4,
|
| 137 |
+
"nbformat_minor": 4
|
| 138 |
+
}
|
data/predict/3526.json
ADDED
|
The diff for this file is too large to render.
See raw diff
|
|
|
data/predict/3578.json
ADDED
|
The diff for this file is too large to render.
See raw diff
|
|
|
data/predict/clear-day.png
ADDED
|
data/predict/label_encoder.pkl
ADDED
|
@@ -0,0 +1,3 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
version https://git-lfs.github.com/spec/v1
|
| 2 |
+
oid sha256:27b30c4ed02896818303f36a2cc0ceed60a4718b0b739a1bf452f7c1c3fc968d
|
| 3 |
+
size 554
|
data/predict/label_encoder_bgkln.pkl
ADDED
|
@@ -0,0 +1,3 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
version https://git-lfs.github.com/spec/v1
|
| 2 |
+
oid sha256:27b30c4ed02896818303f36a2cc0ceed60a4718b0b739a1bf452f7c1c3fc968d
|
| 3 |
+
size 554
|
data/predict/model_rf.pkl
ADDED
|
@@ -0,0 +1,3 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
version https://git-lfs.github.com/spec/v1
|
| 2 |
+
oid sha256:8fd4bde0e3feb4885329a9af1a1fe93a1232f487186da4aea061723bd3c3a370
|
| 3 |
+
size 66745009
|
data/predict/model_rf_bgkln.pkl
ADDED
|
@@ -0,0 +1,3 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
version https://git-lfs.github.com/spec/v1
|
| 2 |
+
oid sha256:f083207178f1a0bc9592b15f172f5532a225da1b0ce4bb2ae382b3be862e857f
|
| 3 |
+
size 22559217
|
data/predict/rain.png
ADDED
|
data/predict/sun-cloudy.png
ADDED
|
data/predict/sun.png
ADDED
|
main.py
ADDED
|
@@ -0,0 +1,183 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
from flask import Flask, render_template, request, redirect
|
| 2 |
+
from werkzeug.utils import secure_filename
|
| 3 |
+
from programs.map import *
|
| 4 |
+
from programs.predict_cuaca import *
|
| 5 |
+
from datetime import datetime
|
| 6 |
+
import os
|
| 7 |
+
import numpy as np
|
| 8 |
+
from tensorflow.keras.models import load_model
|
| 9 |
+
from PIL import Image
|
| 10 |
+
import requests
|
| 11 |
+
import sys
|
| 12 |
+
import pandas as pd
|
| 13 |
+
import json
|
| 14 |
+
import joblib
|
| 15 |
+
|
| 16 |
+
app = Flask(__name__)
|
| 17 |
+
|
| 18 |
+
|
| 19 |
+
model = load_model('data/model/cnnModel.keras')
|
| 20 |
+
|
| 21 |
+
# Tentukan ukuran gambar yang dibutuhkan oleh model
|
| 22 |
+
img_width, img_height = 256, 256
|
| 23 |
+
|
| 24 |
+
# Tentukan direktori penyimpanan gambar yang diupload
|
| 25 |
+
app.config['UPLOAD_FOLDER'] = 'static/uploads'
|
| 26 |
+
if not os.path.exists(app.config['UPLOAD_FOLDER']):
|
| 27 |
+
os.makedirs(app.config['UPLOAD_FOLDER'])
|
| 28 |
+
|
| 29 |
+
|
| 30 |
+
@app.route('/', methods=['POST', 'GET'])
|
| 31 |
+
def home():
|
| 32 |
+
sby_timeseries, sby_temp, bkl_timeseries, bkl_temp = get_forecast_data()
|
| 33 |
+
sby_data, bkl_data = get_combined_data()
|
| 34 |
+
|
| 35 |
+
filename = ''
|
| 36 |
+
predicted_class = ''
|
| 37 |
+
if request.method == 'POST':
|
| 38 |
+
if 'file' not in request.files:
|
| 39 |
+
return redirect(request.url)
|
| 40 |
+
|
| 41 |
+
file = request.files['file']
|
| 42 |
+
if file.filename == '':
|
| 43 |
+
return redirect(request.url)
|
| 44 |
+
|
| 45 |
+
if file:
|
| 46 |
+
# Simpan gambar yang diupload
|
| 47 |
+
filename = secure_filename(file.filename)
|
| 48 |
+
file_path = os.path.join(app.config['UPLOAD_FOLDER'], file.filename)
|
| 49 |
+
file.save(file_path)
|
| 50 |
+
|
| 51 |
+
# Proses gambar untuk prediksi
|
| 52 |
+
img = Image.open(file_path).convert('RGB')
|
| 53 |
+
img = img.resize((img_width, img_height))
|
| 54 |
+
img_array = np.array(img) / 255.0 # Normalisasi gambar
|
| 55 |
+
img_array = np.expand_dims(img_array, axis=0) # Tambahkan dimensi batch
|
| 56 |
+
|
| 57 |
+
prediction = model.predict(img_array)
|
| 58 |
+
class_idx = np.argmax(prediction, axis=1)[0]
|
| 59 |
+
|
| 60 |
+
class_names = ['Berawan', 'Berkabut', 'Hujan', 'Cerah', 'Sunrise']
|
| 61 |
+
predicted_class = class_names[class_idx]
|
| 62 |
+
|
| 63 |
+
return render_template('index.html',
|
| 64 |
+
h_now=datetime.now().strftime('%H'),
|
| 65 |
+
d_now=datetime.now().strftime('%d'),
|
| 66 |
+
dname_now=datetime.now().strftime('%A'),
|
| 67 |
+
|
| 68 |
+
sby_timeseries=sby_timeseries,
|
| 69 |
+
sby_temp=sby_temp,
|
| 70 |
+
bkl_timeseries=bkl_timeseries,
|
| 71 |
+
bkl_temp=bkl_temp,
|
| 72 |
+
|
| 73 |
+
sby_data=sby_data,
|
| 74 |
+
bkl_data=bkl_data,
|
| 75 |
+
|
| 76 |
+
filename=filename, predicted_class=predicted_class
|
| 77 |
+
)
|
| 78 |
+
|
| 79 |
+
@app.route('/cuaca', methods=['POST', 'GET'])
|
| 80 |
+
def prediksi_cuaca():
|
| 81 |
+
wilayah = request.args.get('wilayah')
|
| 82 |
+
filename = ''
|
| 83 |
+
predicted_class = ''
|
| 84 |
+
if request.method == 'POST':
|
| 85 |
+
if 'file' not in request.files:
|
| 86 |
+
return redirect(request.url)
|
| 87 |
+
|
| 88 |
+
file = request.files['file']
|
| 89 |
+
if file.filename == '':
|
| 90 |
+
return redirect(request.url)
|
| 91 |
+
|
| 92 |
+
if file:
|
| 93 |
+
# Simpan gambar yang diupload
|
| 94 |
+
filename = secure_filename(file.filename)
|
| 95 |
+
file_path = os.path.join(app.config['UPLOAD_FOLDER'], file.filename)
|
| 96 |
+
file.save(file_path)
|
| 97 |
+
|
| 98 |
+
# Proses gambar untuk prediksi
|
| 99 |
+
img = Image.open(file_path).convert('RGB')
|
| 100 |
+
img = img.resize((img_width, img_height))
|
| 101 |
+
img_array = np.array(img) / 255.0 # Normalisasi gambar
|
| 102 |
+
img_array = np.expand_dims(img_array, axis=0) # Tambahkan dimensi batch
|
| 103 |
+
|
| 104 |
+
prediction = model.predict(img_array)
|
| 105 |
+
class_idx = np.argmax(prediction, axis=1)[0]
|
| 106 |
+
|
| 107 |
+
class_names = ['Berawan', 'Berkabut', 'Hujan', 'Cerah', 'Sunrise']
|
| 108 |
+
predicted_class = class_names[class_idx]
|
| 109 |
+
|
| 110 |
+
|
| 111 |
+
if request.method == 'GET':
|
| 112 |
+
if not wilayah:
|
| 113 |
+
return redirect('/cuaca?wilayah=surabaya')
|
| 114 |
+
if wilayah.lower() == "surabaya":
|
| 115 |
+
pred_class_weather, pred_logo_weather, pred_color_weather, pred_rgb_weather , df_weather, pred_icon_weather = predict_sby()
|
| 116 |
+
json_sby = 'data/predict/3578.json'
|
| 117 |
+
with open(json_sby) as f:
|
| 118 |
+
json_geo = json.load(f)
|
| 119 |
+
json_coor1 = -7.2890784
|
| 120 |
+
json_coor2 = 112.7786537
|
| 121 |
+
|
| 122 |
+
if wilayah.lower() == "bangkalan":
|
| 123 |
+
pred_class_weather, pred_logo_weather, pred_color_weather, pred_rgb_weather , df_weather, pred_icon_weather = predict_bangkalan()
|
| 124 |
+
json_bkl = 'data/predict/3526.json'
|
| 125 |
+
with open(json_bkl) as f:
|
| 126 |
+
json_geo = json.load(f)
|
| 127 |
+
json_coor1 = -7.0416324
|
| 128 |
+
json_coor2 = 112.9204642
|
| 129 |
+
|
| 130 |
+
if wilayah.lower() not in ['surabaya', 'bangkalan']:
|
| 131 |
+
return redirect('/cuaca?wilayah=surabaya')
|
| 132 |
+
|
| 133 |
+
|
| 134 |
+
|
| 135 |
+
return render_template('prediksi_cuaca.html',
|
| 136 |
+
h_now=datetime.now().strftime('%H'),
|
| 137 |
+
d_now=datetime.now().strftime('%d'),
|
| 138 |
+
dname_now=datetime.now().strftime('%A'),
|
| 139 |
+
pred_class_weather=pred_class_weather,
|
| 140 |
+
pred_logo_weather=pred_logo_weather,
|
| 141 |
+
pred_color_weather=pred_color_weather,
|
| 142 |
+
pred_rgb_weather=pred_rgb_weather,
|
| 143 |
+
df_weather=df_weather,
|
| 144 |
+
pred_icon_weather=pred_icon_weather,
|
| 145 |
+
json_geo=json_geo,
|
| 146 |
+
json_coor1=json_coor1,
|
| 147 |
+
json_coor2=json_coor2,
|
| 148 |
+
filename=filename, predicted_class=predicted_class
|
| 149 |
+
)
|
| 150 |
+
|
| 151 |
+
@app.route("/cluster", methods=['POST', 'GET'])
|
| 152 |
+
def hello():
|
| 153 |
+
peta_persebaran = folium.Map(location=[-2.5, 118], zoom_start=5)
|
| 154 |
+
|
| 155 |
+
df = pd.read_csv('data/cluster/climate_data_clustered.csv')
|
| 156 |
+
|
| 157 |
+
colors = ['red', 'yellow', 'green']
|
| 158 |
+
|
| 159 |
+
risk_mapping = {'low risk': 0 , 'medium risk': 1, 'high risk': 2 }
|
| 160 |
+
|
| 161 |
+
y_kmeans = df['cluster'].map(risk_mapping)
|
| 162 |
+
|
| 163 |
+
# Tambahkan kluster ke peta
|
| 164 |
+
for i in range(len(y_kmeans)):
|
| 165 |
+
clusternya = y_kmeans[i]
|
| 166 |
+
|
| 167 |
+
folium.CircleMarker(
|
| 168 |
+
location=[-7.2053, 112.7353],
|
| 169 |
+
radius=13,
|
| 170 |
+
color=colors[clusternya],
|
| 171 |
+
fill=True,
|
| 172 |
+
fill_color=colors[clusternya],
|
| 173 |
+
fill_opacity=0.1,
|
| 174 |
+
).add_to(peta_persebaran)
|
| 175 |
+
|
| 176 |
+
peta_persebaran.save('./templates/peta_persebaran.html')
|
| 177 |
+
data = df.to_html(classes='table table-striped')
|
| 178 |
+
return render_template('index_cluster.html', dataframe=data)
|
| 179 |
+
|
| 180 |
+
if __name__ == '__main__':
|
| 181 |
+
import os
|
| 182 |
+
os.environ['FLASK_ENV'] = 'development'
|
| 183 |
+
app.run(host='0.0.0.0', port=8001, debug=True)
|
programs/load_data.py
ADDED
|
@@ -0,0 +1,61 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
import pandas as pd
|
| 2 |
+
import datetime
|
| 3 |
+
|
| 4 |
+
def get_time(data, time=datetime.datetime.now()):
|
| 5 |
+
current_date = time.strftime("%Y-%m-%d %H")
|
| 6 |
+
return data[data['date'] == current_date]
|
| 7 |
+
|
| 8 |
+
def get_data(data):
|
| 9 |
+
df = pd.read_csv(data, parse_dates=[0])
|
| 10 |
+
df.rename(columns={df.columns[0]: 'date'}, inplace=True)
|
| 11 |
+
df['date'] = df['date'].dt.strftime("%Y-%m-%d %H")
|
| 12 |
+
df = get_time(df)
|
| 13 |
+
timeseries = df.date.values
|
| 14 |
+
temp = df.predicted_mean.values
|
| 15 |
+
return timeseries, temp
|
| 16 |
+
|
| 17 |
+
def get_data_all(data):
|
| 18 |
+
df = pd.read_csv(data, parse_dates=[0])
|
| 19 |
+
df.rename(columns={df.columns[0]: 'date'}, inplace=True)
|
| 20 |
+
df['years'] = df['date'].dt.strftime("%Y")
|
| 21 |
+
df['months'] = df['date'].dt.strftime("%m")
|
| 22 |
+
df['days'] = df['date'].dt.strftime("%A")
|
| 23 |
+
df['daysn'] = df['date'].dt.strftime("%d")
|
| 24 |
+
df['hours'] = df['date'].dt.strftime("%H").astype(int)
|
| 25 |
+
df['temp'] = df.predicted_mean.values.astype(int)
|
| 26 |
+
df = df[df['hours'] % 3 == 0]
|
| 27 |
+
return df.drop(columns=['predicted_mean'])
|
| 28 |
+
|
| 29 |
+
def to_dict(df):
|
| 30 |
+
data_dict = {}
|
| 31 |
+
|
| 32 |
+
# Loop through years
|
| 33 |
+
for year in df['years'].unique():
|
| 34 |
+
data_dict[year] = {}
|
| 35 |
+
|
| 36 |
+
# Filter data for the current year
|
| 37 |
+
year_data = df[df['years'] == year]
|
| 38 |
+
|
| 39 |
+
# Loop through months
|
| 40 |
+
for month in year_data['months'].unique():
|
| 41 |
+
data_dict[year][month] = {}
|
| 42 |
+
|
| 43 |
+
# Filter data for the current month
|
| 44 |
+
month_data = year_data[year_data['months'] == month]
|
| 45 |
+
|
| 46 |
+
# Loop through unique dates
|
| 47 |
+
for date in month_data['daysn'].unique():
|
| 48 |
+
data_dict[year][month][date] = {}
|
| 49 |
+
|
| 50 |
+
# Filter data for the current date
|
| 51 |
+
date_data = month_data[month_data['daysn'] == date]
|
| 52 |
+
# Get the name of the day
|
| 53 |
+
day_name = date_data['days'].values[0]
|
| 54 |
+
data_dict[year][month][date]['day_name'] = day_name
|
| 55 |
+
|
| 56 |
+
# Loop through the hours and store the corresponding temperature
|
| 57 |
+
for hour in date_data['hours'].unique():
|
| 58 |
+
temp = date_data[date_data['hours'] == hour]['temp'].values[0]
|
| 59 |
+
data_dict[year][month][date][hour] = temp
|
| 60 |
+
|
| 61 |
+
return data_dict
|
programs/map.py
ADDED
|
@@ -0,0 +1,31 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
import folium
|
| 2 |
+
from .load_data import *
|
| 3 |
+
|
| 4 |
+
|
| 5 |
+
# Data Forecast
|
| 6 |
+
bkl_data = 'data/forecast/bkl_temp_forecast.csv'
|
| 7 |
+
sby_data = 'data/forecast/sby_temp_forecast.csv'
|
| 8 |
+
|
| 9 |
+
|
| 10 |
+
# Generate map
|
| 11 |
+
sby_coords = [-7.246, 112.738]
|
| 12 |
+
bkl_coords = [-7.030, 112.747]
|
| 13 |
+
|
| 14 |
+
map = folium.Map(location=[-7.169,112.779], zoom_start=11, max_zoom=16, min_zoom=10,
|
| 15 |
+
tiles="https://{s}.basemaps.cartocdn.com/light_nolabels/{z}/{x}/{y}.png",
|
| 16 |
+
attr='© <a href="https://www.openstreetmap.org/copyright">OpenStreetMap</a> contributors & <a href="https://carto.com/attributions">CARTO</a>'
|
| 17 |
+
)
|
| 18 |
+
|
| 19 |
+
def get_forecast_data():
|
| 20 |
+
sby_timeseries, sby_temp = get_data(sby_data)
|
| 21 |
+
bkl_timeseries, bkl_temp = get_data(bkl_data)
|
| 22 |
+
return\
|
| 23 |
+
sby_timeseries, sby_temp,\
|
| 24 |
+
bkl_timeseries, bkl_temp
|
| 25 |
+
|
| 26 |
+
def get_combined_data():
|
| 27 |
+
sby_data_all = to_dict(get_data_all(bkl_data))
|
| 28 |
+
bkl_data_all = to_dict(get_data_all(bkl_data))
|
| 29 |
+
return\
|
| 30 |
+
sby_data_all, \
|
| 31 |
+
bkl_data_all
|
programs/predict_cuaca.py
ADDED
|
@@ -0,0 +1,130 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
import requests
|
| 2 |
+
from datetime import datetime
|
| 3 |
+
import pandas as pd
|
| 4 |
+
import joblib
|
| 5 |
+
|
| 6 |
+
|
| 7 |
+
|
| 8 |
+
def predict_sby():
|
| 9 |
+
api = 'https://weather.visualcrossing.com/VisualCrossingWebServices/rest/services/timeline/Surabaya,ID/today?unitGroup=metric&include=hours&key=AQCL3EG5SNW9XDN44A67J95UB'
|
| 10 |
+
|
| 11 |
+
response = requests.get(api)
|
| 12 |
+
|
| 13 |
+
if response.status_code == 200:
|
| 14 |
+
weather_data = response.json()
|
| 15 |
+
else:
|
| 16 |
+
print(f"Error: {response.status_code}")
|
| 17 |
+
print(response.text)
|
| 18 |
+
|
| 19 |
+
|
| 20 |
+
rounded_current_hour = datetime.now().replace(minute=0, second=0, microsecond=0).strftime('%H:%M:%S') # Misal: '01:00:00'
|
| 21 |
+
|
| 22 |
+
print(f"Rounded current hour: {rounded_current_hour}")
|
| 23 |
+
selected_hour = next((hour for hour in weather_data['days'][0]['hours'] if hour['datetime'] == rounded_current_hour), None)
|
| 24 |
+
|
| 25 |
+
sby_weather = pd.DataFrame(selected_hour, index=[0])
|
| 26 |
+
df_tes = sby_weather.copy()
|
| 27 |
+
df_tes.drop(columns=['snowdepth', 'snow', 'preciptype', 'precipprob', 'precip', 'datetime', 'icon', 'stations', 'source', 'datetime', 'datetimeEpoch', 'solarradiation', 'solarenergy', 'uvindex' , 'severerisk', 'pressure'], inplace=True)
|
| 28 |
+
label_mapping = {
|
| 29 |
+
'Partially cloudy': 'Cloudy',
|
| 30 |
+
'Rain, Partially cloudy': 'Rain',
|
| 31 |
+
'Overcast': 'Cloudy',
|
| 32 |
+
'Rain, Overcast': 'Rain',
|
| 33 |
+
'Clear': 'Clear',
|
| 34 |
+
'Rain': 'Rain'
|
| 35 |
+
}
|
| 36 |
+
# Mengganti label pada kolom 'conditions'
|
| 37 |
+
df_tes['conditions'] = df_tes['conditions'].map(label_mapping)
|
| 38 |
+
|
| 39 |
+
label_encoder = joblib.load('data/predict/label_encoder.pkl')
|
| 40 |
+
model = joblib.load('data/predict/model_rf.pkl')
|
| 41 |
+
df_tes['conditions'] = label_encoder.transform(df_tes['conditions'])
|
| 42 |
+
|
| 43 |
+
df_tes = df_tes[['temp', 'feelslike', 'dew', 'humidity', 'windgust', 'windspeed',
|
| 44 |
+
'winddir', 'cloudcover', 'visibility']]
|
| 45 |
+
|
| 46 |
+
predicted_class_origin = model.predict(df_tes)
|
| 47 |
+
|
| 48 |
+
predicted_class_decode = label_encoder.inverse_transform(predicted_class_origin.reshape(-1))
|
| 49 |
+
|
| 50 |
+
if predicted_class_decode[0] == 'Cloudy':
|
| 51 |
+
pred_logo = 'static/sun-cloudy.png'
|
| 52 |
+
pred_color = '#BCCCDC'
|
| 53 |
+
pred_rgb = 'rgba(188, 204, 220, 0.2)'
|
| 54 |
+
pred_icon = 'fa-solid fa-cloud'
|
| 55 |
+
elif predicted_class_decode[0] == 'Clear':
|
| 56 |
+
pred_logo = 'static/sun.png'
|
| 57 |
+
pred_color = '#B1F0F7'
|
| 58 |
+
pred_rgb = 'rgba(177, 240, 247, 0.2)'
|
| 59 |
+
pred_icon = 'fa-solid fa-sun'
|
| 60 |
+
elif predicted_class_decode[0] == 'Rain':
|
| 61 |
+
pred_logo = 'static/rain.png'
|
| 62 |
+
pred_color = '#63839c'
|
| 63 |
+
pred_rgb = 'rgba(99, 131, 156, 0.2)'
|
| 64 |
+
pred_icon = 'fa-solid fa-cloud-showers-heavy'
|
| 65 |
+
|
| 66 |
+
|
| 67 |
+
return predicted_class_decode[0], pred_logo, pred_color, pred_rgb, df_tes, pred_icon
|
| 68 |
+
|
| 69 |
+
|
| 70 |
+
def predict_bangkalan():
|
| 71 |
+
api = 'https://weather.visualcrossing.com/VisualCrossingWebServices/rest/services/timeline/Bangkalan,ID/today?unitGroup=metric&include=hours&key=AQCL3EG5SNW9XDN44A67J95UB'
|
| 72 |
+
|
| 73 |
+
response = requests.get(api)
|
| 74 |
+
|
| 75 |
+
if response.status_code == 200:
|
| 76 |
+
weather_data = response.json()
|
| 77 |
+
else:
|
| 78 |
+
print(f"Error: {response.status_code}")
|
| 79 |
+
print(response.text)
|
| 80 |
+
|
| 81 |
+
|
| 82 |
+
rounded_current_hour = datetime.now().replace(minute=0, second=0, microsecond=0).strftime('%H:%M:%S') # Misal: '01:00:00'
|
| 83 |
+
|
| 84 |
+
print(f"Rounded current hour: {rounded_current_hour}")
|
| 85 |
+
selected_hour = next((hour for hour in weather_data['days'][0]['hours'] if hour['datetime'] == rounded_current_hour), None)
|
| 86 |
+
|
| 87 |
+
sby_weather = pd.DataFrame(selected_hour, index=[0])
|
| 88 |
+
df_tes = sby_weather.copy()
|
| 89 |
+
df_tes.drop(columns=['snowdepth', 'snow', 'preciptype', 'precipprob', 'precip', 'datetime', 'icon', 'stations', 'source', 'datetime', 'datetimeEpoch', 'solarradiation', 'solarenergy', 'uvindex' , 'severerisk', 'pressure'], inplace=True)
|
| 90 |
+
label_mapping = {
|
| 91 |
+
'Partially cloudy': 'Cloudy',
|
| 92 |
+
'Rain, Partially cloudy': 'Rain',
|
| 93 |
+
'Overcast': 'Cloudy',
|
| 94 |
+
'Rain, Overcast': 'Rain',
|
| 95 |
+
'Clear': 'Clear',
|
| 96 |
+
'Rain': 'Rain'
|
| 97 |
+
}
|
| 98 |
+
# Mengganti label pada kolom 'conditions'
|
| 99 |
+
df_tes['conditions'] = df_tes['conditions'].map(label_mapping)
|
| 100 |
+
|
| 101 |
+
label_encoder = joblib.load('data/predict/label_encoder_bgkln.pkl')
|
| 102 |
+
model = joblib.load('data/predict/model_rf_bgkln.pkl')
|
| 103 |
+
df_tes['conditions'] = label_encoder.transform(df_tes['conditions'])
|
| 104 |
+
|
| 105 |
+
df_tes = df_tes[['temp', 'feelslike', 'dew', 'humidity', 'windgust', 'windspeed',
|
| 106 |
+
'winddir', 'cloudcover', 'visibility']]
|
| 107 |
+
|
| 108 |
+
predicted_class_origin = model.predict(df_tes)
|
| 109 |
+
|
| 110 |
+
predicted_class_decode = label_encoder.inverse_transform(predicted_class_origin.reshape(-1))
|
| 111 |
+
|
| 112 |
+
if predicted_class_decode[0] == 'Cloudy':
|
| 113 |
+
pred_logo = 'static/sun-cloudy.png'
|
| 114 |
+
pred_color = '#BCCCDC'
|
| 115 |
+
pred_rgb = 'rgba(188, 204, 220, 0.2)'
|
| 116 |
+
pred_icon = 'fa-solid fa-cloud'
|
| 117 |
+
elif predicted_class_decode[0] == 'Clear':
|
| 118 |
+
pred_logo = 'static/sun.png'
|
| 119 |
+
pred_color = '#B1F0F7'
|
| 120 |
+
pred_rgb = 'rgba(177, 240, 247, 0.2)'
|
| 121 |
+
pred_icon = 'fa-solid fa-sun'
|
| 122 |
+
elif predicted_class_decode[0] == 'Rain':
|
| 123 |
+
pred_logo = 'static/rain.png'
|
| 124 |
+
pred_color = '#63839c'
|
| 125 |
+
pred_rgb = 'rgba(99, 131, 156, 0.2)'
|
| 126 |
+
pred_icon = 'fa-solid fa-cloud-showers-heavy'
|
| 127 |
+
|
| 128 |
+
|
| 129 |
+
return predicted_class_decode[0], pred_logo, pred_color, pred_rgb, df_tes, pred_icon
|
| 130 |
+
|
requirements.txt
ADDED
|
@@ -0,0 +1,8 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
folium
|
| 2 |
+
jinja2
|
| 3 |
+
requests
|
| 4 |
+
pandas
|
| 5 |
+
flask
|
| 6 |
+
tensorflow
|
| 7 |
+
pillow
|
| 8 |
+
numpy
|
static/cloudicon.png
ADDED
|
|
static/clouds.png
ADDED
|
static/feelslike.png
ADDED
|
static/humidity.png
ADDED
|
static/low-visibility.png
ADDED
|
static/meteorology.png
ADDED
|
static/rain.png
ADDED
|
static/storm.png
ADDED
|
static/sun-cloudy.png
ADDED
|
static/sun.png
ADDED
|
static/temp.png
ADDED
|
static/weather-forecast.png
ADDED
|
static/wind.png
ADDED
|
templates/index.html
ADDED
|
@@ -0,0 +1,250 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
<!DOCTYPE html>
|
| 2 |
+
<html>
|
| 3 |
+
<head>
|
| 4 |
+
|
| 5 |
+
<meta http-equiv="content-type" content="text/html; charset=UTF-8" />
|
| 6 |
+
|
| 7 |
+
<script>
|
| 8 |
+
L_NO_TOUCH = false;
|
| 9 |
+
L_DISABLE_3D = false;
|
| 10 |
+
</script>
|
| 11 |
+
|
| 12 |
+
<style>html, body {width: 100%;height: 100%;margin: 0;padding: 0;}</style>
|
| 13 |
+
<style>#map {position:absolute;top:0;bottom:0;right:0;left:0;}</style>
|
| 14 |
+
<script src="https://cdn.jsdelivr.net/npm/[email protected]/dist/leaflet.js"></script>
|
| 15 |
+
<script src="https://code.jquery.com/jquery-3.7.1.min.js"></script>
|
| 16 |
+
<script src="https://cdn.jsdelivr.net/npm/[email protected]/dist/js/bootstrap.bundle.min.js"></script>
|
| 17 |
+
<script src="https://cdnjs.cloudflare.com/ajax/libs/Leaflet.awesome-markers/2.0.2/leaflet.awesome-markers.js"></script>
|
| 18 |
+
<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/[email protected]/dist/leaflet.css"/>
|
| 19 |
+
<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/[email protected]/dist/css/bootstrap.min.css"/>
|
| 20 |
+
<link rel="stylesheet" href="https://netdna.bootstrapcdn.com/bootstrap/3.0.0/css/bootstrap-glyphicons.css"/>
|
| 21 |
+
<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/@fortawesome/[email protected]/css/all.min.css"/>
|
| 22 |
+
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/Leaflet.awesome-markers/2.0.2/leaflet.awesome-markers.css"/>
|
| 23 |
+
<link rel="stylesheet" href="https://cdn.jsdelivr.net/gh/python-visualization/folium/folium/templates/leaflet.awesome.rotate.min.css"/>
|
| 24 |
+
<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/[email protected]/font/bootstrap-icons.min.css">
|
| 25 |
+
|
| 26 |
+
<meta name="viewport" content="width=device-width,
|
| 27 |
+
initial-scale=1.0, maximum-scale=1.0, user-scalable=no" />
|
| 28 |
+
<style>
|
| 29 |
+
#map_38eb5ea6a30ae8bbf12217ea861d0106 {
|
| 30 |
+
position: relative;
|
| 31 |
+
width: 100.0%;
|
| 32 |
+
height: 100.0%;
|
| 33 |
+
left: 0.0%;
|
| 34 |
+
top: 0.0%;
|
| 35 |
+
}
|
| 36 |
+
.leaflet-container { font-size: 1rem; }
|
| 37 |
+
</style>
|
| 38 |
+
|
| 39 |
+
</head>
|
| 40 |
+
<body>
|
| 41 |
+
|
| 42 |
+
<div class="info-time position-absolute fw-bold p-3 rounded font-size-1.2rem" style="top: 12px; left: 50px; z-index: 9999; background-color: #d49500; color:white;">
|
| 43 |
+
<span>{{ d_now }} {{ dname_now }} - {{ h_now }}:00</span>
|
| 44 |
+
</div>
|
| 45 |
+
|
| 46 |
+
<div data-bs-toggle="modal" data-bs-target="#klasifikasiCuaca" class="position-absolute shadow bg-body-tertiary fw-bold rounded p-1 border-1" style="top: 60px; right: 20px; z-index: 999; cursor: pointer;">
|
| 47 |
+
<span>Klasifikasi Cuaca</span>
|
| 48 |
+
<img src="{{ url_for('static', filename='cloudicon.png') }}" alt="icon cuaca" style="height: 50px;">
|
| 49 |
+
</div>
|
| 50 |
+
<a href="/" class="position-absolute shadow bg-body-tertiary fw-bold rounded p-1 mt-4" style="top: 120px; right: 20px; z-index: 999">
|
| 51 |
+
<span class="me-2 text-dark" >Peramalan Cuaca</span>
|
| 52 |
+
<img src="{{ url_for('static', filename='weather-forecast.png') }}" alt="icon cuaca" style="height: 50px" />
|
| 53 |
+
</a>
|
| 54 |
+
<a href="/cuaca" class="position-absolute shadow bg-body-tertiary fw-bold rounded p-1 mt-4" style="top: 190px; right: 20px; z-index: 999">
|
| 55 |
+
<span class="me-2 text-dark" >Prediksi Cuaca</span>
|
| 56 |
+
<img src="{{ url_for('static', filename='meteorology.png') }}" alt="icon cuaca" style="height: 50px" />
|
| 57 |
+
</a>
|
| 58 |
+
<a href="/cluster" class="position-absolute shadow bg-body-tertiary fw-bold rounded p-1 mt-4" style="top: 260px; right: 20px; z-index: 999">
|
| 59 |
+
<span class="me-2 text-dark" >Tingkat Resiko Cuaca Ekstrim</span>
|
| 60 |
+
<img src="{{ url_for('static', filename='storm.png') }}" alt="icon cuaca" style="height: 50px" />
|
| 61 |
+
</a>
|
| 62 |
+
|
| 63 |
+
<!-- Modal -->
|
| 64 |
+
<div class="modal fade" id="klasifikasiCuaca" data-bs-backdrop="static" data-bs-keyboard="false" tabindex="-1" aria-labelledby="staticBackdropLabel" aria-hidden="true">
|
| 65 |
+
<div class="modal-dialog modal-dialog-centered">
|
| 66 |
+
<div class="modal-content">
|
| 67 |
+
<div class="modal-header">
|
| 68 |
+
<h1 class="modal-title fs-5" id="staticBackdropLabel">Klasifikasi Cuaca</h1>
|
| 69 |
+
<button type="button" class="btn-close" data-bs-dismiss="modal" aria-label="Close"></button>
|
| 70 |
+
</div>
|
| 71 |
+
<div class="modal-body">
|
| 72 |
+
Masukkan gambar yang ingin diklasifikasikan:
|
| 73 |
+
<p>
|
| 74 |
+
<form action="{{ url_for('home') }}" method="POST" enctype="multipart/form-data">
|
| 75 |
+
<label for="file">Pilih Gambar:</label>
|
| 76 |
+
<input type="file" class="form-control" name="file" required>
|
| 77 |
+
<hr>
|
| 78 |
+
{% if predicted_class %}
|
| 79 |
+
Hasil prediksi dari: <img src="{{ url_for('static', filename='uploads/' + filename) }}" alt="Uploaded Image" style="max-width: 100%; height: auto;"><br>
|
| 80 |
+
dengan cuaca: <b>{{ predicted_class }}</b>
|
| 81 |
+
{% endif %}
|
| 82 |
+
</div>
|
| 83 |
+
<div class="modal-footer">
|
| 84 |
+
<button type="button" class="btn btn-secondary" data-bs-dismiss="modal">Close</button>
|
| 85 |
+
<button type="submit" class="btn btn-primary">Prediksi</button>
|
| 86 |
+
</form>
|
| 87 |
+
</div>
|
| 88 |
+
</div>
|
| 89 |
+
</div>
|
| 90 |
+
</div>
|
| 91 |
+
|
| 92 |
+
|
| 93 |
+
<!-- Map Canvas -->
|
| 94 |
+
<div class="folium-map" id="map_38eb5ea6a30ae8bbf12217ea861d0106" ></div>
|
| 95 |
+
|
| 96 |
+
|
| 97 |
+
<!-- Surabaya Temperature Forecasting -->
|
| 98 |
+
<div class="offcanvas offcanvas-bottom h-30" style="opacity: 0.8;" tabindex="-1" id="surabayaOffCanvas" aria-labelledby="offcanvasBottomLabel" data-bs-backdrop='false' >
|
| 99 |
+
<div class="offcanvas-header">
|
| 100 |
+
<h5 class="offcanvas-title" id="offcanvasBottomLabel"><b>Peramalan suhu Surabaya 2024</b></h5>
|
| 101 |
+
<button type="button" class="btn-close" data-bs-dismiss="offcanvas" aria-label="Close"></button>
|
| 102 |
+
</div>
|
| 103 |
+
|
| 104 |
+
<div class="offcanvas-body">
|
| 105 |
+
<div class="d-flex ps-5">
|
| 106 |
+
<div class="row flex-nowrap">
|
| 107 |
+
<div class="col-auto">
|
| 108 |
+
<div class="hourly-weather sticky-top" style="top: 0;">
|
| 109 |
+
<div>Days</div>
|
| 110 |
+
<div>Hours</div>
|
| 111 |
+
<div>Celsius</div>
|
| 112 |
+
</div>
|
| 113 |
+
</div>
|
| 114 |
+
<div class="d-flex flex-nowrap gap-5 ">
|
| 115 |
+
{% for year, months in sby_data.items() %}
|
| 116 |
+
{% for month, days in months.items() %}
|
| 117 |
+
{% for day, data in days.items() %}
|
| 118 |
+
<div class="day-column" style="display: inline-block; width: 240px; vertical-align: top;">
|
| 119 |
+
<h5 class="text-center fw-bold">{{ data['day_name'] }} {{ day }}</h5>
|
| 120 |
+
<div class="d-flex flex-wrap gap-3">
|
| 121 |
+
{% for hour, temp in data.items() if hour != 'day_name' %}
|
| 122 |
+
{% set current_hour = h_now | int %}
|
| 123 |
+
<div class="hourly-weather {% if day == d_now and hour == current_hour %}bg-warning rounded text-white'{% endif %}">
|
| 124 |
+
<div class="fw-bold">{{ hour }}</div>
|
| 125 |
+
<div>{{ temp }}°</div>
|
| 126 |
+
</div>
|
| 127 |
+
{% endfor %}
|
| 128 |
+
</div>
|
| 129 |
+
<div class="temperature-line"></div>
|
| 130 |
+
</div>
|
| 131 |
+
{% endfor %}
|
| 132 |
+
{% endfor %}
|
| 133 |
+
{% endfor %}
|
| 134 |
+
</div>
|
| 135 |
+
</div>
|
| 136 |
+
</div>
|
| 137 |
+
</div>
|
| 138 |
+
</div>
|
| 139 |
+
|
| 140 |
+
<!-- Bangkalan Temperature Forecasting -->
|
| 141 |
+
<div class="offcanvas offcanvas-bottom h-30" style="opacity: 0.8;" tabindex="-1" id="bangkalanOffCanvas" aria-labelledby="offcanvasBottomLabel" data-bs-backdrop='false' >
|
| 142 |
+
<div class="offcanvas-header">
|
| 143 |
+
<h5 class="offcanvas-title" id="offcanvasBottomLabel"><b>Peramalan suhu Bangkalan 2024</b></h5>
|
| 144 |
+
<button type="button" class="btn-close" data-bs-dismiss="offcanvas" aria-label="Close"></button>
|
| 145 |
+
</div>
|
| 146 |
+
|
| 147 |
+
<div class="offcanvas-body">
|
| 148 |
+
<div class="d-flex ps-5">
|
| 149 |
+
<div class="row flex-nowrap">
|
| 150 |
+
<div class="col-auto">
|
| 151 |
+
<div class="hourly-weather sticky-top" style="top: 0;">
|
| 152 |
+
<div>Days</div>
|
| 153 |
+
<div>Hours</div>
|
| 154 |
+
<div>Celsius</div>
|
| 155 |
+
</div>
|
| 156 |
+
</div>
|
| 157 |
+
<div class="d-flex flex-nowrap gap-5 ">
|
| 158 |
+
{% for year, months in bkl_data.items() %}
|
| 159 |
+
{% for month, days in months.items() %}
|
| 160 |
+
{% for day, data in days.items() %}
|
| 161 |
+
<div class="day-column" style="display: inline-block; width: 240px; vertical-align: top;">
|
| 162 |
+
<h5 class="text-center fw-bold">{{ data['day_name'] }} {{ day }}</h5>
|
| 163 |
+
<div class="d-flex flex-wrap gap-3">
|
| 164 |
+
{% for hour, temp in data.items() if hour != 'day_name' %}
|
| 165 |
+
{% set current_hour = h_now | int %}
|
| 166 |
+
<div class="hourly-weather {% if day == d_now and hour == current_hour %}bg-warning rounded text-white{% endif %}">
|
| 167 |
+
<div class="fw-bold">{{ hour }}</div>
|
| 168 |
+
<div>{{ temp }}°</div>
|
| 169 |
+
</div>
|
| 170 |
+
{% endfor %}
|
| 171 |
+
</div>
|
| 172 |
+
<div class="temperature-line"></div>
|
| 173 |
+
</div>
|
| 174 |
+
{% endfor %}
|
| 175 |
+
{% endfor %}
|
| 176 |
+
{% endfor %}
|
| 177 |
+
</div>
|
| 178 |
+
</div>
|
| 179 |
+
</div>
|
| 180 |
+
</div>
|
| 181 |
+
</div>
|
| 182 |
+
|
| 183 |
+
</body>
|
| 184 |
+
<script>
|
| 185 |
+
|
| 186 |
+
if ( window.history.replaceState ) {
|
| 187 |
+
window.history.replaceState( null, null, window.location.href );
|
| 188 |
+
}
|
| 189 |
+
|
| 190 |
+
let predicted = "{{ predicted_class }}"
|
| 191 |
+
document.addEventListener("DOMContentLoaded", function() {
|
| 192 |
+
if(predicted){
|
| 193 |
+
var myModal = new bootstrap.Modal(document.getElementById('klasifikasiCuaca'), {
|
| 194 |
+
keyboard: false
|
| 195 |
+
});
|
| 196 |
+
myModal.show();
|
| 197 |
+
}
|
| 198 |
+
});
|
| 199 |
+
|
| 200 |
+
// Control map
|
| 201 |
+
var map_38eb5ea6a30ae8bbf12217ea861d0106 = L.map(
|
| 202 |
+
"map_38eb5ea6a30ae8bbf12217ea861d0106",
|
| 203 |
+
{
|
| 204 |
+
center: [-7.169, 112.779],
|
| 205 |
+
crs: L.CRS.EPSG3857,
|
| 206 |
+
zoom: 11,
|
| 207 |
+
zoomControl: true,
|
| 208 |
+
preferCanvas: false,
|
| 209 |
+
}
|
| 210 |
+
);
|
| 211 |
+
|
| 212 |
+
|
| 213 |
+
// Source map layout
|
| 214 |
+
var tile_layer_4fb0ad090cde9f05f658f5dc4c7863ec = L.tileLayer(
|
| 215 |
+
"https://{s}.basemaps.cartocdn.com/light_nolabels/{z}/{x}/{y}.png",
|
| 216 |
+
{"attribution": "\u0026copy; \u003ca href=\"https://www.openstreetmap.org/copyright\"\u003eOpenStreetMap\u003c/a\u003e contributors \u0026 \u003ca href=\"https://carto.com/attributions\"\u003eCARTO\u003c/a\u003e", "detectRetina": false, "maxZoom": 16, "minZoom": 10, "noWrap": false, "opacity": 1, "subdomains": "abc", "tms": false}
|
| 217 |
+
);
|
| 218 |
+
tile_layer_4fb0ad090cde9f05f658f5dc4c7863ec.addTo(map_38eb5ea6a30ae8bbf12217ea861d0106);
|
| 219 |
+
|
| 220 |
+
|
| 221 |
+
|
| 222 |
+
// Marker Surabaya Coordinate
|
| 223 |
+
var marker = L.marker(
|
| 224 |
+
[-7.246, 112.738],
|
| 225 |
+
{}
|
| 226 |
+
).addTo(map_38eb5ea6a30ae8bbf12217ea861d0106);
|
| 227 |
+
|
| 228 |
+
var div_icon = L.divIcon({"className": "empty", "html": "<div data-bs-toggle='offcanvas' data-bs-target='#surabayaOffCanvas' style='font-size: 14px; color: black;'><b>Surabaya {{ sby_temp[0].round(2) }}℃</b></div>"});
|
| 229 |
+
marker.setIcon(div_icon);
|
| 230 |
+
|
| 231 |
+
marker.on('click', function() {
|
| 232 |
+
$('#tempModal').modal('show');
|
| 233 |
+
});
|
| 234 |
+
|
| 235 |
+
|
| 236 |
+
// Marker Bangkalan Coordinate
|
| 237 |
+
var marker = L.marker(
|
| 238 |
+
[-7.03, 112.747],
|
| 239 |
+
{}
|
| 240 |
+
).addTo(map_38eb5ea6a30ae8bbf12217ea861d0106);
|
| 241 |
+
|
| 242 |
+
var div_icon = L.divIcon({"className": "empty", "html": "<div data-bs-toggle='offcanvas' data-bs-target='#bangkalanOffCanvas' style='font-size: 14px; color: black;'><b>Bangkalan {{ bkl_temp[0].round(2) }}℃</b></div>"});
|
| 243 |
+
marker.setIcon(div_icon);
|
| 244 |
+
|
| 245 |
+
marker.on('click', function() {
|
| 246 |
+
$('#tempModal').modal('show');
|
| 247 |
+
});
|
| 248 |
+
|
| 249 |
+
</script>
|
| 250 |
+
</html>
|
templates/index_cluster.html
ADDED
|
The diff for this file is too large to render.
See raw diff
|
|
|
templates/peta_persebaran.html
ADDED
|
The diff for this file is too large to render.
See raw diff
|
|
|
templates/prediksi_cuaca.html
ADDED
|
@@ -0,0 +1,289 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
<!DOCTYPE html>
|
| 2 |
+
<html>
|
| 3 |
+
<head>
|
| 4 |
+
|
| 5 |
+
<meta http-equiv="content-type" content="text/html; charset=UTF-8" />
|
| 6 |
+
|
| 7 |
+
<script>
|
| 8 |
+
L_NO_TOUCH = false;
|
| 9 |
+
L_DISABLE_3D = false;
|
| 10 |
+
</script>
|
| 11 |
+
|
| 12 |
+
<style>html, body {width: 100%;height: 100%;margin: 0;padding: 0;}</style>
|
| 13 |
+
<style>#map {position:absolute;top:0;bottom:0;right:0;left:0;}</style>
|
| 14 |
+
<script src="https://cdn.jsdelivr.net/npm/[email protected]/dist/leaflet.js"></script>
|
| 15 |
+
<script src="https://code.jquery.com/jquery-3.7.1.min.js"></script>
|
| 16 |
+
<script src="https://cdn.jsdelivr.net/npm/[email protected]/dist/js/bootstrap.bundle.min.js"></script>
|
| 17 |
+
<script src="https://cdnjs.cloudflare.com/ajax/libs/Leaflet.awesome-markers/2.0.2/leaflet.awesome-markers.js"></script>
|
| 18 |
+
<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/[email protected]/dist/leaflet.css"/>
|
| 19 |
+
<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/[email protected]/dist/css/bootstrap.min.css"/>
|
| 20 |
+
<link rel="stylesheet" href="https://netdna.bootstrapcdn.com/bootstrap/3.0.0/css/bootstrap-glyphicons.css"/>
|
| 21 |
+
<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/@fortawesome/[email protected]/css/all.min.css"/>
|
| 22 |
+
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/Leaflet.awesome-markers/2.0.2/leaflet.awesome-markers.css"/>
|
| 23 |
+
<link rel="stylesheet" href="https://cdn.jsdelivr.net/gh/python-visualization/folium/folium/templates/leaflet.awesome.rotate.min.css"/>
|
| 24 |
+
<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/[email protected]/font/bootstrap-icons.min.css">
|
| 25 |
+
<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/leaflet-draw/dist/leaflet.draw.css" />
|
| 26 |
+
<script src="https://cdn.jsdelivr.net/npm/leaflet-draw/dist/leaflet.draw.js"></script>
|
| 27 |
+
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.7.1/css/all.min.css">
|
| 28 |
+
|
| 29 |
+
|
| 30 |
+
|
| 31 |
+
<meta name="viewport" content="width=device-width,
|
| 32 |
+
initial-scale=1.0, maximum-scale=1.0, user-scalable=no" />
|
| 33 |
+
<style>
|
| 34 |
+
#map_38eb5ea6a30ae8bbf12217ea861d0106 {
|
| 35 |
+
position: relative;
|
| 36 |
+
width: 100.0%;
|
| 37 |
+
height: 100.0%;
|
| 38 |
+
left: 0.0%;
|
| 39 |
+
top: 0.0%;
|
| 40 |
+
}
|
| 41 |
+
.leaflet-container { font-size: 1rem; }
|
| 42 |
+
|
| 43 |
+
.weather-marker {
|
| 44 |
+
font-size: 14px;
|
| 45 |
+
color: white;
|
| 46 |
+
background: rgba(0, 123, 255, 0.8);
|
| 47 |
+
border-radius: 10px;
|
| 48 |
+
padding: 5px;
|
| 49 |
+
}
|
| 50 |
+
</style>
|
| 51 |
+
|
| 52 |
+
</head>
|
| 53 |
+
<body>
|
| 54 |
+
|
| 55 |
+
<!-- <div class="info-time position-absolute fw-bold p-3 rounded font-size-1.2rem" style="top: 12px; left: 50px; z-index: 9999; background-color: #d49500; color:white;">
|
| 56 |
+
<span>{{ d_now }} {{ dname_now }} - {{ h_now }}:00</span>
|
| 57 |
+
</div> -->
|
| 58 |
+
|
| 59 |
+
<div data-bs-toggle="modal" data-bs-target="#klasifikasiCuaca" class="position-absolute shadow bg-body-tertiary fw-bold rounded p-1 border-1" style="top: 60px; right: 20px; z-index: 999; cursor: pointer;">
|
| 60 |
+
<span class="me-2" >Klasifikasi Cuaca</span>
|
| 61 |
+
<img src="{{ url_for('static', filename='cloudicon.png') }}" alt="icon cuaca" style="height: 50px;">
|
| 62 |
+
</div>
|
| 63 |
+
<a href="/" class="position-absolute shadow bg-body-tertiary fw-bold rounded p-1 mt-4" style="top: 120px; right: 20px; z-index: 999">
|
| 64 |
+
<span class="me-2 text-dark" >Peramalan Cuaca</span>
|
| 65 |
+
<img src="{{ url_for('static', filename='weather-forecast.png') }}" alt="icon cuaca" style="height: 50px" />
|
| 66 |
+
</a>
|
| 67 |
+
<a href="/cuaca" class="position-absolute shadow bg-body-tertiary fw-bold rounded p-1 mt-4" style="top: 190px; right: 20px; z-index: 999">
|
| 68 |
+
<span class="me-2 text-dark" >Prediksi Cuaca</span>
|
| 69 |
+
<img src="{{ url_for('static', filename='meteorology.png') }}" alt="icon cuaca" style="height: 50px" />
|
| 70 |
+
</a>
|
| 71 |
+
<a href="/cluster" class="position-absolute shadow bg-body-tertiary fw-bold rounded p-1 mt-4" style="top: 260px; right: 20px; z-index: 999">
|
| 72 |
+
<span class="me-2 text-dark" >Tingkat Resiko Cuaca Ekstrim</span>
|
| 73 |
+
<img src="{{ url_for('static', filename='storm.png') }}" alt="icon cuaca" style="height: 50px" />
|
| 74 |
+
</a>
|
| 75 |
+
<!-- Modal -->
|
| 76 |
+
<div class="modal fade" id="klasifikasiCuaca" data-bs-backdrop="static" data-bs-keyboard="false" tabindex="-1" aria-labelledby="staticBackdropLabel" aria-hidden="true">
|
| 77 |
+
<div class="modal-dialog modal-dialog-centered">
|
| 78 |
+
<div class="modal-content">
|
| 79 |
+
<div class="modal-header">
|
| 80 |
+
<h1 class="modal-title fs-5" id="staticBackdropLabel">Klasifikasi Cuaca</h1>
|
| 81 |
+
<button type="button" class="btn-close" data-bs-dismiss="modal" aria-label="Close"></button>
|
| 82 |
+
</div>
|
| 83 |
+
<div class="modal-body">
|
| 84 |
+
Masukkan gambar yang ingin diklasifikasikan:
|
| 85 |
+
<p>
|
| 86 |
+
<form action="{{ url_for('home') }}" method="POST" enctype="multipart/form-data">
|
| 87 |
+
<label for="file">Pilih Gambar:</label>
|
| 88 |
+
<input type="file" class="form-control" name="file" required>
|
| 89 |
+
<hr>
|
| 90 |
+
{% if predicted_class %}
|
| 91 |
+
Hasil prediksi dari: <img src="{{ url_for('static', filename='uploads/' + filename) }}" alt="Uploaded Image" style="max-width: 100%; height: auto;"><br>
|
| 92 |
+
dengan cuaca: <b>{{ predicted_class }}</b>
|
| 93 |
+
{% endif %}
|
| 94 |
+
</div>
|
| 95 |
+
<div class="modal-footer">
|
| 96 |
+
<button type="button" class="btn btn-secondary" data-bs-dismiss="modal">Close</button>
|
| 97 |
+
<button type="submit" class="btn btn-primary">Prediksi</button>
|
| 98 |
+
</form>
|
| 99 |
+
</div>
|
| 100 |
+
</div>
|
| 101 |
+
</div>
|
| 102 |
+
</div>
|
| 103 |
+
|
| 104 |
+
|
| 105 |
+
<!-- Map Canvas -->
|
| 106 |
+
<!-- <div class="folium-map" id="map_38eb5ea6a30ae8bbf12217ea861d0106" ></div> -->
|
| 107 |
+
|
| 108 |
+
<div class="container-fluid py-2 sticky-top bg-body-tertiary">
|
| 109 |
+
<nav class="navbar navbar-expand-lg bg-body-tertiary">
|
| 110 |
+
<div class="container-fluid">
|
| 111 |
+
<div class="me-5 info-time fw-bold p-3 rounded font-size-1.2rem" style=" background-color: #d49500; color:white;">
|
| 112 |
+
<span>{{ d_now }} {{ dname_now }} - {{ h_now }}:00</span>
|
| 113 |
+
</div>
|
| 114 |
+
<button class="navbar-toggler" type="button" data-bs-toggle="collapse" data-bs-target="#navbarNavAltMarkup" aria-controls="navbarNavAltMarkup" aria-expanded="false" aria-label="Toggle navigation">
|
| 115 |
+
<span class="navbar-toggler-icon"></span>
|
| 116 |
+
</button>
|
| 117 |
+
<div class="collapse navbar-collapse" id="navbarNavAltMarkup">
|
| 118 |
+
<div class="navbar-nav gap-3">
|
| 119 |
+
<a href="/cuaca?wilayah=surabaya" class="me-2 info-time fw-bold p-3 border border-1 border-light rounded font-size-1.2rem" style=" background-color: #213b5e; color:white;">
|
| 120 |
+
Surabaya <i class="{{pred_icon_sby}} ms-2"></i>
|
| 121 |
+
</a>
|
| 122 |
+
<a href="/cuaca?wilayah=bangkalan" class="info-time fw-bold p-3 border border-1 border-light rounded font-size-1.2rem" style=" background-color: #213b5e; color:white;">
|
| 123 |
+
Bangkalan <i class="{{pred_icon_bkl}} ms-2"></i>
|
| 124 |
+
</a>
|
| 125 |
+
</div>
|
| 126 |
+
</div>
|
| 127 |
+
</div>
|
| 128 |
+
</nav>
|
| 129 |
+
</div>
|
| 130 |
+
|
| 131 |
+
<div style="max-height: 300px;" class="container mt-4">
|
| 132 |
+
<div style="background-color: #213b5e; max-height: 300px;" class="row align-items-start w-75 rounded">
|
| 133 |
+
<div style="background-color: #213b5e;" class="col-6 rounded">
|
| 134 |
+
<div style="background-color: #213b5e;" class="h1 p-3 text-light" >
|
| 135 |
+
{{request.args.get('wilayah')}}
|
| 136 |
+
</div>
|
| 137 |
+
|
| 138 |
+
<div class="d-flex flex-row row mt-3">
|
| 139 |
+
<div class="col-3" ><img style="height: 100px; width: 100px;" src="{{pred_logo_weather}}" alt="" srcset=""></div>
|
| 140 |
+
<div class="col-9 text-light" ><h2>{{pred_class_weather}}</h2>
|
| 141 |
+
<h2>{{df_weather['temp'][0]}} °C</h2></div>
|
| 142 |
+
</div>
|
| 143 |
+
</div>
|
| 144 |
+
<div class="col-6 p-0 rounded">
|
| 145 |
+
<div class="folium-map" id="map_38eb5ea6a30ae8bbf12217ea861d0106" style="height: 300px;"></div>
|
| 146 |
+
</div>
|
| 147 |
+
</div>
|
| 148 |
+
</div>
|
| 149 |
+
|
| 150 |
+
<div class="container mt-4 mb-4">
|
| 151 |
+
<h1>Weather Detail</h1>
|
| 152 |
+
<div style="background-color: #213b5e;" class="row align-items-start w-75 rounded text-light gap-3 p-3">
|
| 153 |
+
<div style="height: 200px; background-color: rgba(255, 255, 255, 0.15);" class="col rounded p-3">
|
| 154 |
+
<div class="h2">Temperature</div>
|
| 155 |
+
<div class="flex-row row mt-5" >
|
| 156 |
+
<img class="col-6" style="height: 80px; width: 80px;" src="static/temp.png" alt="" srcset="">
|
| 157 |
+
<div class="col-8 fs-1 d-flex align-items-center" >
|
| 158 |
+
<div style="font-size: 4rem;">{{df_weather['temp'][0]}} °c</div>
|
| 159 |
+
</div>
|
| 160 |
+
</div>
|
| 161 |
+
</div>
|
| 162 |
+
<div style="height: 200px; background-color: rgba(255, 255, 255, 0.15);" class="col rounded p-3">
|
| 163 |
+
<div class="h2">Feels Like</div>
|
| 164 |
+
<div class="flex-row row mt-5" >
|
| 165 |
+
<img class="col-6" style="height: 80px; width: 80px;" src="static/feelslike.png" alt="" srcset="">
|
| 166 |
+
<div class="col-8 fs-1 d-flex align-items-center" >
|
| 167 |
+
<div style="font-size: 4rem;">{{df_weather['feelslike'][0]}} °c</div>
|
| 168 |
+
</div>
|
| 169 |
+
</div>
|
| 170 |
+
</div>
|
| 171 |
+
<div style="height: 200px; background-color: rgba(255, 255, 255, 0.15);" class="col rounded p-3">
|
| 172 |
+
<div class="h2">Humidity</div>
|
| 173 |
+
<div class="flex-row row mt-5" >
|
| 174 |
+
<img class="col-6" style="height: 80px; width: 80px;" src="static/humidity.png" alt="" srcset="">
|
| 175 |
+
<div class="col-8 fs-1 d-flex align-items-center" >
|
| 176 |
+
<div style="font-size: 4rem;">{{df_weather['humidity'][0]}} %</div>
|
| 177 |
+
</div>
|
| 178 |
+
</div>
|
| 179 |
+
</div>
|
| 180 |
+
</div>
|
| 181 |
+
<div style="background-color: #213b5e;" class="row align-items-start w-75 rounded text-light gap-3 mt-2 p-3">
|
| 182 |
+
<div style="height: 200px; background-color: rgba(255, 255, 255, 0.15);" class="col rounded p-3">
|
| 183 |
+
<div class="h2">Wind</div>
|
| 184 |
+
<div class="flex-row row mt-5" >
|
| 185 |
+
<img class="col-6" style="height: 80px; width: 80px;" src="static/wind.png" alt="" srcset="">
|
| 186 |
+
<div class="col-8 fs-1 d-flex align-items-center" >
|
| 187 |
+
<div style="font-size: 4rem;">3{{df_weather['windspeed'][0]}} kph</div>
|
| 188 |
+
</div>
|
| 189 |
+
</div>
|
| 190 |
+
</div>
|
| 191 |
+
<div style="height: 200px; background-color: rgba(255, 255, 255, 0.15);" class="col rounded p-3">
|
| 192 |
+
<div class="h2">Cloud Cover</div>
|
| 193 |
+
<div class="flex-row row mt-5" >
|
| 194 |
+
<img class="col-6" style="height: 80px; width: 80px;" src="static/clouds.png" alt="" srcset="">
|
| 195 |
+
<div class="col-8 fs-1 d-flex align-items-center" >
|
| 196 |
+
<div style="font-size: 4rem;">{{df_weather['cloudcover'][0]}} %</div>
|
| 197 |
+
</div>
|
| 198 |
+
</div>
|
| 199 |
+
</div>
|
| 200 |
+
<div style="height: 200px; background-color: rgba(255, 255, 255, 0.15);" class="col rounded p-3">
|
| 201 |
+
<div class="h2">Visibility</div>
|
| 202 |
+
<div class="flex-row row mt-5" >
|
| 203 |
+
<img class="col-6" style="height: 80px; width: 80px;" src="static/low-visibility.png" alt="" srcset="">
|
| 204 |
+
<div class="col-8 fs-1 d-flex align-items-center" >
|
| 205 |
+
<div style="font-size: 4rem;">{{df_weather['visibility'][0]}} km</div>
|
| 206 |
+
</div>
|
| 207 |
+
</div>
|
| 208 |
+
</div>
|
| 209 |
+
</div>
|
| 210 |
+
</div>
|
| 211 |
+
</div>
|
| 212 |
+
|
| 213 |
+
<div class="h-25" ></div>
|
| 214 |
+
|
| 215 |
+
|
| 216 |
+
|
| 217 |
+
</body>
|
| 218 |
+
<script>
|
| 219 |
+
|
| 220 |
+
if ( window.history.replaceState ) {
|
| 221 |
+
window.history.replaceState( null, null, window.location.href );
|
| 222 |
+
}
|
| 223 |
+
let predicted = "{{ predicted_class }}"
|
| 224 |
+
document.addEventListener("DOMContentLoaded", function() {
|
| 225 |
+
if(predicted){
|
| 226 |
+
var myModal = new bootstrap.Modal(document.getElementById('klasifikasiCuaca'), {
|
| 227 |
+
keyboard: false
|
| 228 |
+
});
|
| 229 |
+
myModal.show();
|
| 230 |
+
}
|
| 231 |
+
});
|
| 232 |
+
var map_38eb5ea6a30ae8bbf12217ea861d0106 = L.map(
|
| 233 |
+
"map_38eb5ea6a30ae8bbf12217ea861d0106",
|
| 234 |
+
{
|
| 235 |
+
center: ['{{json_coor1}}', '{{json_coor2}}'],
|
| 236 |
+
crs: L.CRS.EPSG3857,
|
| 237 |
+
zoom: 10,
|
| 238 |
+
zoomControl: true,
|
| 239 |
+
preferCanvas: false,
|
| 240 |
+
}
|
| 241 |
+
);
|
| 242 |
+
|
| 243 |
+
|
| 244 |
+
|
| 245 |
+
// Source map layout
|
| 246 |
+
var tile_layer_colored = L.tileLayer(
|
| 247 |
+
"https://{s}.basemaps.cartocdn.com/rastertiles/voyager/{z}/{x}/{y}{r}.png",
|
| 248 |
+
{
|
| 249 |
+
attribution: "\u0026copy; \u003ca href=\"https://www.openstreetmap.org/copyright\"\u003eOpenStreetMap\u003c/a\u003e contributors \u0026 \u003ca href=\"https://carto.com/attributions\"\u003eCARTO\u003c/a\u003e",
|
| 250 |
+
detectRetina: false,
|
| 251 |
+
maxZoom: 16,
|
| 252 |
+
minZoom: 10,
|
| 253 |
+
noWrap: false,
|
| 254 |
+
opacity: 1,
|
| 255 |
+
subdomains: "abc",
|
| 256 |
+
tms: false
|
| 257 |
+
}
|
| 258 |
+
);
|
| 259 |
+
tile_layer_colored.addTo(map_38eb5ea6a30ae8bbf12217ea861d0106);
|
| 260 |
+
|
| 261 |
+
var wilayahGeoJSON = JSON.parse('{{ json_geo | tojson | safe }}');
|
| 262 |
+
|
| 263 |
+
// Tambahkan GeoJSON untuk wilayah Surabaya
|
| 264 |
+
var wilayahLayer = L.geoJSON(wilayahGeoJSON, {
|
| 265 |
+
style: {
|
| 266 |
+
color: "{{ pred_color_weather }}",
|
| 267 |
+
weight: 2,
|
| 268 |
+
fillColor: "{{ pred_color_weather }}",
|
| 269 |
+
fillOpacity: 0.5
|
| 270 |
+
}
|
| 271 |
+
}).addTo(map_38eb5ea6a30ae8bbf12217ea861d0106);
|
| 272 |
+
|
| 273 |
+
var wilayahCenter = wilayahLayer.getBounds().getCenter();
|
| 274 |
+
var surabayaMarker = L.marker(wilayahCenter, {
|
| 275 |
+
icon: L.divIcon({
|
| 276 |
+
className: "weather-marker",
|
| 277 |
+
html: `<div style="text-align:center;">
|
| 278 |
+
<b>{{request.args.get('wilayah')}}</b><br>
|
| 279 |
+
<b><i class="{{pred_icon_weather}} me-2"></i></b>{{pred_class_weather}}
|
| 280 |
+
</div>`,
|
| 281 |
+
iconSize: [80, 50]
|
| 282 |
+
})
|
| 283 |
+
});
|
| 284 |
+
wilayahLayer.addLayer(surabayaMarker);
|
| 285 |
+
|
| 286 |
+
|
| 287 |
+
|
| 288 |
+
</script>
|
| 289 |
+
</html>
|