kawaiipeace commited on
Commit
c89b49b
·
1 Parent(s): 0fa83e9

update code

Browse files
.DS_Store CHANGED
Binary files a/.DS_Store and b/.DS_Store differ
 
.gradio/flagged/ Load File MW CSV/02e6bf20c3336738e2c1/Samui_Load_202507171736.csv ADDED
The diff for this file is too large to render. See raw diff
 
.gradio/flagged/ Temperature File MaxTemp CSV/f29000ce64ba7a9a36ca/MAX_TEMP_BY_DAY_202507171739.csv ADDED
@@ -0,0 +1,504 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ year,month,day,MaxTemp
2
+ 2024,3,1,19.0232
3
+ 2024,3,2,18.612
4
+ 2024,3,3,18.8741
5
+ 2024,3,4,18.8638
6
+ 2024,3,5,19.2048
7
+ 2024,3,6,18.891
8
+ 2024,3,7,19.4797
9
+ 2024,3,8,18.9621
10
+ 2024,3,9,18.7149
11
+ 2024,3,10,19.0214
12
+ 2024,3,11,18.5273
13
+ 2024,3,12,18.9358
14
+ 2024,3,13,19.5971
15
+ 2024,3,14,19.7679
16
+ 2024,3,15,18.8543
17
+ 2024,3,16,18.9771
18
+ 2024,3,17,18.7447
19
+ 2024,3,18,18.9183
20
+ 2024,3,19,18.7628
21
+ 2024,3,20,19.2341
22
+ 2024,3,21,18.9056
23
+ 2024,3,22,19.4762
24
+ 2024,3,23,19.2018
25
+ 2024,3,24,19.2111
26
+ 2024,3,25,19.8333
27
+ 2024,3,26,19.5255
28
+ 2024,3,27,19.6389
29
+ 2024,3,28,19.9148
30
+ 2024,3,29,19.728
31
+ 2024,3,30,20.1713
32
+ 2024,3,31,20.0354
33
+ 2024,4,1,20.037
34
+ 2024,4,2,20.4825
35
+ 2024,4,3,20.6726
36
+ 2024,4,4,20.4526
37
+ 2024,4,5,21.2545
38
+ 2024,4,6,20.9674
39
+ 2024,4,7,20.6755
40
+ 2024,4,8,21.1742
41
+ 2024,4,9,21.2685
42
+ 2024,4,10,21.7292
43
+ 2024,4,11,21.0331
44
+ 2024,4,12,21.0622
45
+ 2024,4,13,20.9177
46
+ 2024,4,14,20.9047
47
+ 2024,4,15,20.8135
48
+ 2024,4,16,20.7047
49
+ 2024,4,17,21.3285
50
+ 2024,4,18,20.6
51
+ 2024,4,19,21.1995
52
+ 2024,4,20,21.3305
53
+ 2024,4,21,21.6133
54
+ 2024,4,22,22.1765
55
+ 2024,4,23,21.6728
56
+ 2024,4,24,21.9276
57
+ 2024,4,25,21.7677
58
+ 2024,4,26,22.5882
59
+ 2024,4,27,22.0715
60
+ 2024,4,28,22.2018
61
+ 2024,4,29,22.5913
62
+ 2024,4,30,22.3349
63
+ 2024,5,1,22.5205
64
+ 2024,5,2,22.8777
65
+ 2024,5,3,22.8406
66
+ 2024,5,4,22.9512
67
+ 2024,5,5,22.75
68
+ 2024,5,6,22.9212
69
+ 2024,5,7,22.3235
70
+ 2024,5,8,22.1857
71
+ 2024,5,9,21.7068
72
+ 2024,5,10,21.3361
73
+ 2024,5,11,21.2877
74
+ 2024,5,12,21.9644
75
+ 2024,5,13,21.5385
76
+ 2024,5,14,21.8107
77
+ 2024,5,15,22.0213
78
+ 2024,5,16,22.1477
79
+ 2024,5,17,21.9981
80
+ 2024,5,18,22.3135
81
+ 2024,5,19,21.2259
82
+ 2024,5,20,22.5297
83
+ 2024,5,21,21.6
84
+ 2024,5,22,22.2286
85
+ 2024,5,23,22.0974
86
+ 2024,5,24,22.3097
87
+ 2024,5,25,22.0401
88
+ 2024,5,26,21.4038
89
+ 2024,5,27,22.8277
90
+ 2024,5,28,22.1352
91
+ 2024,5,29,22.1745
92
+ 2024,5,30,22.0982
93
+ 2024,5,31,22.1488
94
+ 2024,6,1,21.5278
95
+ 2024,6,2,21.0547
96
+ 2024,6,3,21.5557
97
+ 2024,6,4,21.4533
98
+ 2024,6,5,21.2177
99
+ 2024,6,6,21.7285
100
+ 2024,6,7,21.8083
101
+ 2024,6,8,21.7429
102
+ 2024,6,9,20.6831
103
+ 2024,6,10,19.9523
104
+ 2024,6,11,20.5826
105
+ 2024,6,12,20.8187
106
+ 2024,6,13,20.9706
107
+ 2024,6,14,21.0881
108
+ 2024,6,15,21.3001
109
+ 2024,6,16,21.8063
110
+ 2024,6,17,20.4407
111
+ 2024,6,18,20.8372
112
+ 2024,6,19,21.6695
113
+ 2024,6,20,20.68
114
+ 2024,6,21,20.6463
115
+ 2024,6,22,20.2246
116
+ 2024,6,23,19.0565
117
+ 2024,6,24,19.6214
118
+ 2024,6,25,19.1639
119
+ 2024,6,26,19.8807
120
+ 2024,6,27,19.0742
121
+ 2024,6,28,19.2886
122
+ 2024,6,29,19.1014
123
+ 2024,6,30,19.5274
124
+ 2024,7,1,20.0451
125
+ 2024,7,2,20.7081
126
+ 2024,7,3,20.0453
127
+ 2024,7,4,19.5101
128
+ 2024,7,5,19.3184
129
+ 2024,7,6,19.6034
130
+ 2024,7,7,19.7735
131
+ 2024,7,8,20.5715
132
+ 2024,7,9,19.9321
133
+ 2024,7,10,19.9143
134
+ 2024,7,11,19.4883
135
+ 2024,7,12,19.6154
136
+ 2024,7,13,19.9989
137
+ 2024,7,14,19.0369
138
+ 2024,7,15,19.4584
139
+ 2024,7,16,18.9481
140
+ 2024,7,17,17.4187
141
+ 2024,7,18,18.7566
142
+ 2024,7,19,19.6097
143
+ 2024,7,20,19.672
144
+ 2024,7,21,18.914
145
+ 2024,7,22,19.3636
146
+ 2024,7,23,18.5778
147
+ 2024,7,24,19.6462
148
+ 2024,7,25,20.1048
149
+ 2024,7,26,19.5165
150
+ 2024,7,27,19.7892
151
+ 2024,7,28,19.1515
152
+ 2024,7,29,19.371
153
+ 2024,7,30,20.0807
154
+ 2024,7,31,20.3211
155
+ 2024,8,1,20.3527
156
+ 2024,8,2,21.2435
157
+ 2024,8,3,20.2625
158
+ 2024,8,4,19.5693
159
+ 2024,8,5,20.7422
160
+ 2024,8,6,19.7344
161
+ 2024,8,7,20.6111
162
+ 2024,8,8,20.6786
163
+ 2024,8,9,20.2316
164
+ 2024,8,10,20.4242
165
+ 2024,8,11,20.7188
166
+ 2024,8,12,20.8871
167
+ 2024,8,13,20.3768
168
+ 2024,8,14,19.8282
169
+ 2024,8,15,20.6359
170
+ 2024,8,16,20.5578
171
+ 2024,8,17,20.6049
172
+ 2024,8,18,20.8793
173
+ 2024,8,19,21.4901
174
+ 2024,8,20,21.3575
175
+ 2024,8,21,21.4018
176
+ 2024,8,22,21.851
177
+ 2024,8,23,21.3726
178
+ 2024,8,24,21.028
179
+ 2024,8,25,20.0644
180
+ 2024,8,26,20.1667
181
+ 2024,8,27,20.3915
182
+ 2024,8,28,20.1775
183
+ 2024,8,29,19.9287
184
+ 2024,8,30,20.2967
185
+ 2024,8,31,20.6579
186
+ 2024,9,1,20.5083
187
+ 2024,9,2,20.4725
188
+ 2024,9,3,19.983
189
+ 2024,9,4,19.065
190
+ 2024,9,5,19.1224
191
+ 2024,9,6,19.3933
192
+ 2024,9,7,18.9966
193
+ 2024,9,8,19.2561
194
+ 2024,9,9,19.5603
195
+ 2024,9,10,20.4565
196
+ 2024,9,11,19.91
197
+ 2024,9,12,19.7954
198
+ 2024,9,13,19.8005
199
+ 2024,9,14,19.5365
200
+ 2024,9,15,20.047
201
+ 2024,9,16,18.8582
202
+ 2024,9,17,19.031
203
+ 2024,9,18,18.3894
204
+ 2024,9,19,17.6527
205
+ 2024,9,20,17.1122
206
+ 2024,9,21,17.2649
207
+ 2024,9,22,17.6337
208
+ 2024,9,23,18.3336
209
+ 2024,9,24,17.8626
210
+ 2024,9,25,18.9511
211
+ 2024,9,26,18.5857
212
+ 2024,9,27,18.9795
213
+ 2024,9,28,19.2632
214
+ 2024,9,29,19.4033
215
+ 2024,9,30,19.5045
216
+ 2024,10,1,19.8561
217
+ 2024,10,2,20.2628
218
+ 2024,10,3,19.825
219
+ 2024,10,4,20.3585
220
+ 2024,10,5,19.8356
221
+ 2024,10,6,20.06
222
+ 2024,10,7,20.1624
223
+ 2024,10,8,20.0363
224
+ 2024,10,9,19.2724
225
+ 2024,10,10,19.314
226
+ 2024,10,11,18.7843
227
+ 2024,10,12,19.2774
228
+ 2024,10,13,19.1887
229
+ 2024,10,14,19.174
230
+ 2024,10,15,19.9084
231
+ 2024,10,16,19.9837
232
+ 2024,10,17,19.7428
233
+ 2024,10,18,20.3179
234
+ 2024,10,19,19.8807
235
+ 2024,10,20,19.2464
236
+ 2024,10,21,19.2617
237
+ 2024,10,22,19.5542
238
+ 2024,10,23,19.204
239
+ 2024,10,24,18.4983
240
+ 2024,10,25,18.3143
241
+ 2024,10,26,18.6299
242
+ 2024,10,27,18.5334
243
+ 2024,10,28,18.4514
244
+ 2024,10,29,18.4703
245
+ 2024,10,30,18.6474
246
+ 2024,10,31,19.3545
247
+ 2024,11,1,19.1008
248
+ 2024,11,2,18.5854
249
+ 2024,11,3,18.402
250
+ 2024,11,4,18.7528
251
+ 2024,11,5,17.979
252
+ 2024,11,6,17.6098
253
+ 2024,11,7,18.3733
254
+ 2024,11,8,18.022
255
+ 2024,11,9,17.9039
256
+ 2024,11,10,18.3958
257
+ 2024,11,11,17.6875
258
+ 2024,11,12,17.5211
259
+ 2024,11,13,17.1317
260
+ 2024,11,14,17.1759
261
+ 2024,11,15,18.4031
262
+ 2024,11,16,18.0314
263
+ 2024,11,17,18.5273
264
+ 2024,11,18,17.7862
265
+ 2024,11,19,17.6859
266
+ 2024,11,20,17.923
267
+ 2024,11,21,18.2226
268
+ 2024,11,22,18.5662
269
+ 2024,11,23,18.1174
270
+ 2024,11,24,17.4485
271
+ 2024,11,25,17.2705
272
+ 2024,11,26,17.1827
273
+ 2024,11,27,17.6516
274
+ 2024,11,28,17.6655
275
+ 2024,11,29,17.6496
276
+ 2024,11,30,17.1112
277
+ 2024,12,1,16.5692
278
+ 2024,12,2,16.5468
279
+ 2024,12,3,15.9805
280
+ 2024,12,4,16.3066
281
+ 2024,12,5,15.9751
282
+ 2024,12,6,16.7778
283
+ 2024,12,7,16.5161
284
+ 2024,12,8,15.7893
285
+ 2024,12,9,15.9611
286
+ 2024,12,10,16.0339
287
+ 2024,12,11,16.374
288
+ 2024,12,12,16.116
289
+ 2024,12,13,16.6485
290
+ 2024,12,14,15.269
291
+ 2024,12,15,15.4699
292
+ 2024,12,16,15.5515
293
+ 2024,12,17,15.9659
294
+ 2024,12,18,16.3422
295
+ 2024,12,19,16.725
296
+ 2024,12,20,17.2483
297
+ 2024,12,21,17.2485
298
+ 2024,12,22,16.0814
299
+ 2024,12,23,15.5986
300
+ 2024,12,24,16.4121
301
+ 2024,12,25,15.6712
302
+ 2024,12,26,16.274
303
+ 2024,12,27,16.4474
304
+ 2024,12,28,16.2663
305
+ 2024,12,29,15.5243
306
+ 2024,12,30,16.1223
307
+ 2024,12,31,16.4763
308
+ 2025,1,1,16.1751
309
+ 2025,1,2,16.2393
310
+ 2025,1,3,16.109
311
+ 2025,1,4,16.5281
312
+ 2025,1,5,15.977
313
+ 2025,1,6,15.925
314
+ 2025,1,7,16.3557
315
+ 2025,1,8,16.609
316
+ 2025,1,9,17.3577
317
+ 2025,1,10,16.4632
318
+ 2025,1,11,16.029
319
+ 2025,1,12,15.5495
320
+ 2025,1,13,15.9846
321
+ 2025,1,14,15.5799
322
+ 2025,1,15,15.6009
323
+ 2025,1,16,15.0935
324
+ 2025,1,17,15.6705
325
+ 2025,1,18,15.7441
326
+ 2025,1,19,15.2331
327
+ 2025,1,20,15.305
328
+ 2025,1,21,16.1735
329
+ 2025,1,22,15.8891
330
+ 2025,1,23,15.822
331
+ 2025,1,24,16.67
332
+ 2025,1,25,16.2097
333
+ 2025,1,26,16.3083
334
+ 2025,1,27,16.705
335
+ 2025,1,28,16.1248
336
+ 2025,1,29,15.6427
337
+ 2025,1,30,15.3452
338
+ 2025,1,31,15.6615
339
+ 2025,2,1,15.7284
340
+ 2025,2,2,16.8565
341
+ 2025,2,3,16.2367
342
+ 2025,2,4,16.1303
343
+ 2025,2,5,16.5334
344
+ 2025,2,6,16.5644
345
+ 2025,2,7,16.3955
346
+ 2025,2,8,16.7075
347
+ 2025,2,9,16.4859
348
+ 2025,2,10,16.6285
349
+ 2025,2,11,16.9642
350
+ 2025,2,12,16.3735
351
+ 2025,2,13,16.5567
352
+ 2025,2,14,16.9783
353
+ 2025,2,15,16.7448
354
+ 2025,2,16,17.0865
355
+ 2025,2,17,17.609
356
+ 2025,2,18,17.0086
357
+ 2025,2,19,17.5353
358
+ 2025,2,20,17.835
359
+ 2025,2,21,17.7809
360
+ 2025,2,22,17.1502
361
+ 2025,2,23,16.7849
362
+ 2025,2,24,17.1615
363
+ 2025,2,25,17.0034
364
+ 2025,2,26,15.9826
365
+ 2025,2,27,17.0907
366
+ 2025,2,28,16.8425
367
+ 2025,3,1,16.9218
368
+ 2025,3,2,17.1861
369
+ 2025,3,3,17.5831
370
+ 2025,3,4,17.7993
371
+ 2025,3,5,17.0974
372
+ 2025,3,6,17.3266
373
+ 2025,3,7,18.5129
374
+ 2025,3,8,18.0217
375
+ 2025,3,9,18.1277
376
+ 2025,3,10,17.503
377
+ 2025,3,11,17.7772
378
+ 2025,3,12,18.3153
379
+ 2025,3,13,18.1879
380
+ 2025,3,14,18.1087
381
+ 2025,3,15,18.1211
382
+ 2025,3,16,18.0639
383
+ 2025,3,17,18.6859
384
+ 2025,3,18,18.5845
385
+ 2025,3,19,18.5279
386
+ 2025,3,20,18.6516
387
+ 2025,3,21,18.416
388
+ 2025,3,22,18.4897
389
+ 2025,3,23,18.7387
390
+ 2025,3,24,18.2419
391
+ 2025,3,25,18.4934
392
+ 2025,3,26,18.6165
393
+ 2025,3,27,18.818
394
+ 2025,3,28,19.0032
395
+ 2025,3,29,18.6945
396
+ 2025,3,30,19.7996
397
+ 2025,3,31,19.558
398
+ 2025,4,1,19.1364
399
+ 2025,4,2,18.6441
400
+ 2025,4,3,18.4268
401
+ 2025,4,4,18.4142
402
+ 2025,4,5,18.6251
403
+ 2025,4,6,18.8096
404
+ 2025,4,7,19.2329
405
+ 2025,4,8,19.2395
406
+ 2025,4,9,20.0564
407
+ 2025,4,10,19.9649
408
+ 2025,4,11,20.0023
409
+ 2025,4,12,20.108
410
+ 2025,4,13,19.9217
411
+ 2025,4,14,20.3082
412
+ 2025,4,15,20.2786
413
+ 2025,4,16,20.3467
414
+ 2025,4,17,20.4018
415
+ 2025,4,18,20.289
416
+ 2025,4,19,21.1202
417
+ 2025,4,20,20.5744
418
+ 2025,4,21,20.9102
419
+ 2025,4,22,20.8714
420
+ 2025,4,23,21.0777
421
+ 2025,4,24,20.8257
422
+ 2025,4,25,21.0135
423
+ 2025,4,26,20.9057
424
+ 2025,4,27,20.6882
425
+ 2025,4,28,21.0894
426
+ 2025,4,29,21.4871
427
+ 2025,4,30,21.0005
428
+ 2025,5,1,21.5205
429
+ 2025,5,2,21.1192
430
+ 2025,5,3,21.2637
431
+ 2025,5,4,20.9549
432
+ 2025,5,5,21.3309
433
+ 2025,5,6,21.1187
434
+ 2025,5,7,20.8863
435
+ 2025,5,8,21.1084
436
+ 2025,5,9,21.0208
437
+ 2025,5,10,20.8259
438
+ 2025,5,11,21.2001
439
+ 2025,5,12,20.8005
440
+ 2025,5,13,21.3461
441
+ 2025,5,14,20.8995
442
+ 2025,5,15,20.407
443
+ 2025,5,16,20.7056
444
+ 2025,5,17,20.2595
445
+ 2025,5,18,19.7436
446
+ 2025,5,19,20.295
447
+ 2025,5,20,20.2213
448
+ 2025,5,21,20.7818
449
+ 2025,5,22,20.8221
450
+ 2025,5,23,20.4743
451
+ 2025,5,24,20.5442
452
+ 2025,5,25,20.1626
453
+ 2025,5,26,20.6483
454
+ 2025,5,27,20.44
455
+ 2025,5,28,21.2855
456
+ 2025,5,29,21.3208
457
+ 2025,5,30,21.015
458
+ 2025,5,31,20.6013
459
+ 2025,6,1,20.2578
460
+ 2025,6,2,20.9214
461
+ 2025,6,3,20.3925
462
+ 2025,6,4,21.2021
463
+ 2025,6,5,20.8154
464
+ 2025,6,6,20.5145
465
+ 2025,6,7,20.3417
466
+ 2025,6,8,20.5785
467
+ 2025,6,9,20.5815
468
+ 2025,6,10,20.2798
469
+ 2025,6,11,19.9082
470
+ 2025,6,12,20.1562
471
+ 2025,6,13,19.5815
472
+ 2025,6,14,20.0905
473
+ 2025,6,15,20.3167
474
+ 2025,6,16,20.7923
475
+ 2025,6,17,19.92
476
+ 2025,6,18,20.4543
477
+ 2025,6,19,20.8143
478
+ 2025,6,20,20.579
479
+ 2025,6,21,20.4229
480
+ 2025,6,22,19.7961
481
+ 2025,6,23,19.1446
482
+ 2025,6,24,19.2591
483
+ 2025,6,25,19.2447
484
+ 2025,6,26,19.2404
485
+ 2025,6,27,19.4259
486
+ 2025,6,28,19.5898
487
+ 2025,6,29,19.2187
488
+ 2025,6,30,19.686
489
+ 2025,7,1,19.308
490
+ 2025,7,2,19.4329
491
+ 2025,7,3,19.1627
492
+ 2025,7,4,19.4158
493
+ 2025,7,5,19.532
494
+ 2025,7,6,19.4917
495
+ 2025,7,7,19.7972
496
+ 2025,7,8,19.6314
497
+ 2025,7,9,19.4692
498
+ 2025,7,10,19.8476
499
+ 2025,7,11,19.8505
500
+ 2025,7,12,19.6295
501
+ 2025,7,13,19.9509
502
+ 2025,7,14,19.4724
503
+ 2025,7,15,19.6658
504
+ 2025,7,16,19.938
.gradio/flagged/dataset2.csv ADDED
@@ -0,0 +1,2 @@
 
 
 
1
+ 📥 Load File (MW) CSV,🌡️ Temperature File (MaxTemp) CSV,Forecast Model,Regression Model,Forecast Horizon (days),ΔTemp (°C),📈 Forecast Load MW,📊 Simulated Load Limit,timestamp
2
+ .gradio/flagged/ Load File MW CSV/02e6bf20c3336738e2c1/Samui_Load_202507171736.csv,.gradio/flagged/ Temperature File MaxTemp CSV/f29000ce64ba7a9a36ca/MAX_TEMP_BY_DAY_202507171739.csv,BiLSTM,mlp,7,1,"{""headers"": [""Step"", ""Forecast Load MW""], ""data"": [[1, 109288087552], [2, 24474480640], [3, 12062349312], [4, -185244057600], [5, -50008150016], [6, -259188015104], [7, 31985971200]], ""metadata"": null}","{""headers"": [""MaxTemp"", ""mw_max"", ""MaxTemp_simulated"", ""Load_simulated""], ""data"": [[19.0232, 72.64, 20.0232, -2648369702.782929], [18.612, 73.09, 19.612, -2058821153.1751406], [18.8741, 74.23, 19.8741, -2434601004.4694114], [18.8638, 72.83, 19.8638, -2419833616.188871], [19.2048, 79.08, 20.2048, -2908734529.166131], [18.891, 69.7, 19.891, -2458830991.0656676], [19.4797, 80.54, 20.4797, -3302866086.284772], [18.9621, 72.03, 19.9621, -2560768982.011924], [18.7149, 71.14, 19.7149, -2206351663.27883], [19.0214, 74.8, 20.0214, -2645788994.151373], [18.5273, 72.25, 19.5273, -1937384474.7904823], [18.9358, 77.33, 19.9358, -2523061961.4509325], [19.5971, 85.27, 20.5971, -3471185638.1426454], [19.7679, 82.2, 20.7679, -3898069002.084642], [18.8543, 69.63, 19.8543, -2406213209.522324], [18.9771, 68.52, 19.9771, -2582274887.2749133], [18.7447, 65.65, 19.7447, -2249076728.4012146], [18.9183, 68.79, 19.9183, -2497971738.6441755], [18.7628, 72.13, 19.7628, -2275027187.4184804], [19.2341, 67.32, 20.2341, -2950742730.779742], [18.9056, 72.83, 19.9056, -2479763405.5215864], [19.4762, 69.62, 20.4762, -3297848041.7234406], [19.2018, 67.57, 20.2018, -2904433348.113566], [19.2111, 69.09, 20.2111, -2917767009.3765893], [19.8333, 70.99, 20.8333, -4064249183.2432103], [19.5255, 69.87, 20.5255, -3368530783.6875763], [19.6389, 69.35, 20.6389, -3531115427.475322], [19.9148, 68.79, 20.9148, -4271339164.3505445], [19.728, 69, 20.728, -3796683845.6897373], [20.1713, 70.27, 21.1713, -4923100884.032149], [20.0354, 68.31, 21.0354, -4577781516.762206], [20.037, 71.13, 21.037, -4581847086.943534], [20.4825, 69.52, 21.4825, -4656438756.966617], [20.6726, 68.8, 21.6726, -4459291473.829349], [20.4526, 69.46, 21.4526, -4687447193.399019], [21.2545, 69.47, 22.2545, -3803416521.902563], [20.9674, 68.47, 21.9674, -4149427137.2269907], [20.6755, 69.35, 21.6755, -4456283966.616842], [21.1742, 68.94, 22.1742, -3900193437.2998095], [21.2685, 68.93, 22.2685, -3786543834.286527], [21.7292, 68.84, 22.7292, -3403758925.6964607], [21.0331, 67.98, 22.0331, -4070246024.629243], [21.0622, 68.19, 22.0622, -4035174938.2274804], [20.9177, 64.42, 21.9177, -4205105260.799661], [20.9047, 67.74, 21.9047, -4218587189.6833143], [20.8135, 68.62, 21.8135, -4313168106.159455], [20.7047, 67.91, 21.7047, -4426001480.20121], [21.3285, 68.71, 22.3285, -3718217526.7597857], [20.6, 72.37, 21.6, -4534582861.287366], [21.1995, 68.27, 22.1995, -3869702080.393799], [21.3305, 70.24, 22.3305, -3716647980.4604545], [21.6133, 70.19, 22.6133, -3494714133.740474], [22.1765, 68.92, 23.1765, -2782209807.9946995], [21.6728, 72.3, 22.6728, -3448020131.3365088], [21.9276, 70.81, 22.9276, -3239925498.8868456], [21.7677, 70.95, 22.7677, -3372224020.619137], [22.5882, 69.66, 23.5882, -1133171973.7014816], [22.0715, 68.61, 23.0715, -3008092944.1807694], [22.2018, 69.17, 23.2018, -2727782728.513743], [22.5913, 71.12, 23.5913, -1119120016.2877626], [22.3349, 70.3, 23.3349, -2281352881.0877304], [22.5205, 69.99, 23.5205, -1440048592.0593321], [22.8777, 71.75, 23.8777, 179099533.16110054], [22.8406, 69.04, 23.8406, 10929333.14514243], [22.9512, 68.34, 23.9512, 512266910.5511306], [22.75, 69.79, 23.75, -399750454.49464214], [22.9212, 72.93, 23.9212, 376280225.90213376], [22.3235, 68.23, 23.3235, -2333027821.2543273], [22.1857, 65.38, 23.1857, -2762418142.7289214], [21.7068, 65.45, 22.7068, -3421337844.248504], [21.3361, 57.09, 22.3361, -3712253250.8224163], [21.2877, 59.55, 22.2877, -3763404148.4132514], [21.9644, 63.01, 22.9644, -3209477809.0823064], [21.5385, 56.4, 22.5385, -3553415165.333974], [21.8107, 63.52, 22.8107, -3336646556.988744], [22.0213, 64.56, 23.0213, -3116086595.9573364], [22.1477, 64.64, 23.1477, -2844166325.3486114], [21.9981, 61.81, 22.9981, -3165996012.714576], [22.3135, 64.15, 23.3135, -2378356716.1372766], [21.2259, 60.09, 22.2259, -3837885012.3179493], [22.5297, 63.61, 23.5297, -1398346008.7669938], [21.6, 67.38, 22.6, -3505151616.630701], [22.2286, 60.56, 23.2286, -2670128747.087241], [22.0974, 65.23, 23.0974, -2952375103.921509], [22.3097, 66.43, 23.3097, -2395581696.192835], [22.0401, 63.91, 23.0401, -3075642758.2401605], [21.4038, 62.03, 22.4038, -3659124108.5913243], [22.8277, 63.56, 23.8277, -47544941.2538186], [22.1352, 65.44, 23.1352, -2871057174.8945894], [22.1745, 65.82, 23.1745, -2786512343.9221015], [22.0982, 63.65, 23.0982, -2950654089.5506134], [22.1488, 64.7, 23.1488, -2841799930.5885367], [21.5278, 65.98, 22.5278, -3561812238.035198], [21.0547, 58.25, 22.0547, -4044213878.0217423], [21.5557, 62.05, 22.5557, -3539917067.160084], [21.4533, 63.61, 22.4533, -3620277837.6838427], [21.2177, 63.45, 22.2177, -3847767586.493002], [21.7285, 60.57, 22.7285, -3404308266.901193], [21.8083, 61.2, 22.8083, -3338632275.889064], [21.7429, 61.6, 22.7429, -3392743115.922155], [20.6831, 58.77, 21.6831, -4448402223.57714], [19.9523, 57.69, 20.9523, -4366625965.473629], [20.5826, 61.99, 21.5826, -4552627904.562421], [20.8187, 70.48, 21.8187, -4307775334.606009], [20.9706, 62.54, 21.9706, -4145570522.914795], [21.0881, 62.68, 22.0881, -4003960466.137961], [21.3001, 66.59, 22.3001, -3748459767.95336], [21.8063, 63.79, 22.8063, -3340287041.639321], [20.4407, 61.31, 21.4407, -4699788343.684878], [20.8372, 62.27, 21.8372, -4288589512.7331204], [21.6695, 63.55, 22.6695, -3450609882.7302985], [20.68, 68.46, 21.68, -4451617145.080181], [20.6463, 61.95, 21.6463, -4486566453.032474], [20.2246, 59.75, 21.2246, -4923899484.589556], [19.0565, 58.51, 20.0565, -2696112812.4666295], [19.6214, 59.62, 20.6214, -3506025204.66858], [19.1639, 63.6, 20.1639, -2850095094.1492133], [19.8807, 63.36, 20.8807, -4184691699.862751], [19.0742, 62.5, 20.0742, -2721489780.6769257], [19.2886, 64.55, 20.2886, -3028880853.2350616], [19.1014, 62.64, 20.1014, -2760487155.5536833], [19.5274, 58.15, 20.5274, -3371254865.020875], [20.0451, 62.68, 21.0451, -4602429035.986058], [20.7081, 4194.3, 21.7081, -4422475437.262413], [20.0453, 65.01, 21.0453, -4602937232.258748], [19.5101, 59.79, 20.5101, -3346451387.61761], [19.3184, 64.09, 20.3184, -3071605918.3574076], [19.6034, 63.82, 20.6034, -3480218118.353041], [19.7735, 65.96, 20.7735, -3912298497.719033], [20.5715, 65.45, 21.5715, -4564139397.686149], [19.9321, 63.44, 20.9321, -4315298141.935315], [19.9143, 63.9, 20.9143, -4270068673.668915], [19.4883, 60.24, 20.4883, -3315196138.6354823], [19.6154, 60.86, 20.6154, -3497422842.563419], [19.9989, 65.35, 20.9989, -4485035697.002514], [19.0369, 62.67, 20.0369, -2668011762.9230657], [19.4584, 61.28, 20.4584, -3272327700.81141], [18.9481, 61.26, 19.9481, -2540696803.766482], [17.4187, 50.56159744408946, 18.4187, -584694992.4711257], [18.7566, 51.545111821086266, 19.7566, -2266138079.909803], [19.6097, 52.52862619808307, 20.6097, -3489250598.563484], [19.672, 53.512140575079876, 20.672, -3646685604.3935385], [18.914, 54.49565495207668, 19.914, -2491806712.4687967], [19.3636, 55.479169329073486, 20.3636, -3136410379.549657], [18.5778, 56.46268370607029, 19.5778, -2009787689.1756427], [19.6462, 57.446198083067095, 20.6462, -3552996162.927796], [20.1048, 58.4297124600639, 21.1048, -4754125623.373954], [19.5165, 69, 20.5165, -3355627240.529811], [19.7892, 71.04, 20.7892, -3952191905.122506], [19.1515, 61.01, 20.1515, -2832316879.1318746], [19.371, 60.64, 20.371, -3147019959.4793897], [20.0807, 63.63, 21.0807, -4692887972.51889], [20.3211, 61.88, 21.3211, -4823822089.414582], [20.3527, 65.05, 21.3527, -4791050631.51275], [21.2435, 62.83, 22.2435, -3816673633.600795], [20.2625, 60.98035051546392, 21.2625, -4884594476.536342], [19.5693, 61.26538144329897, 20.5693, -3431328027.0553403], [20.7422, 61.55041237113402, 21.7422, -4387111300.729105], [19.7344, 61.835443298969075, 20.7344, -3812946126.4147215], [20.6111, 62.07, 21.6111, -4523071368.163599], [20.6786, 66.75, 21.6786, -4453069045.113809], [20.2316, 62.98, 21.2316, -4916639984.421364], [20.4242, 65.84, 21.4242, -4716900022.652628], [20.7188, 66.18, 21.7188, -4411378772.719677], [20.8871, 70.17, 21.8871, -4236839647.248873], [20.3768, 65.07, 21.3768, -4766057209.505345], [19.8282, 61.93, 20.8282, -4051290178.2904496], [20.6359, 65.21, 21.6359, -4497351996.139368], [20.5578, 65.25, 21.5578, -4578347276.586636], [20.6049, 62.18, 21.6049, -4529501211.169689], [20.8793, 65.66, 21.8793, -4244928804.579056], [21.4901, 64.54, 22.4901, -3591398185.7768774], [21.3575, 63.8, 22.3575, -3695459105.4199524], [21.4018, 65.57, 22.4018, -3660693654.890632], [21.851, 66.17, 22.851, -3303303027.1212626], [21.3726, 57.17, 22.3726, -3683609030.8602905], [21.028, 55.91, 22.028, -4076392503.6893344], [20.0644, 55.04, 21.0644, -4651469976.297411], [20.1667, 56.34, 21.1667, -4911412369.761011], [20.3915, 62.53, 21.3915, -4750812259.152254], [20.1775, 67.56, 21.1775, -4938854968.484445], [19.9287, 58.2, 20.9287, -4306658805.30018], [20.2967, 59.27, 21.2967, -4849126632.857805], [20.6579, 63.36, 21.6579, -4474536424.182432], [20.5083, 58.09, 21.5083, -4629682313.489844], [20.4725, 64.51, 21.4725, -4666809471.492504], [19.983, 57.07, 20.983, -4444634093.326312], [19.065, 56.44, 20.065, -2708299492.1156054], [19.1224, 63.02, 20.1224, -2790595422.921748], [19.3933, 64.51, 20.3933, -3178992071.9703465], [18.9966, 59.32, 19.9966, -2610232564.116664], [19.2561, 66.73, 20.2561, -2982284725.1653385], [19.5603, 62.12, 20.5603, -3418424483.8975906], [20.4565, 69.48, 21.4565, -4683402614.733971], [19.91, 62.32, 20.91, -4259142453.8068495], [19.7954, 63.2, 20.7954, -3967945989.574825], [19.8005, 64.01, 20.8005, -3980904994.527609], [19.5365, 60.33, 20.5365, -3384301780.8803906], [20.047, 55.12, 21.047, -4607256900.576335], [18.8582, 59.08, 19.8582, -2411804744.8907647], [19.031, 69.73, 20.031, -2659552773.5196624], [18.3894, 56.01, 19.3894, -1739673519.0732787], [17.6527, 56.13, 18.6527, -797142930.2871407], [17.1122, 52.44, 18.1122, -365700044.0057136], [17.2649, 53.57, 18.2649, -474804541.9850555], [17.6337, 55.77, 18.6337, -776545886.4078361], [18.3336, 65.62, 19.3336, -1659671551.4951687], [17.8626, 54.85, 18.8626, -1024686062.4062442], [18.9511, 62.78, 19.9511, -2544997984.8191094], [18.5857, 58.89, 19.5857, -2021114132.6141572], [18.9795, 60.56, 19.9795, -2585715832.116962], [19.2632, 60.82, 20.2632, -2992464186.989837], [19.4033, 57.96, 20.4033, -3193329342.1455503], [19.5045, 60.68, 20.5045, -3338422516.319473], [19.8561, 61.62, 20.8561, -4122183558.325964], [20.2628, 61.95, 21.2628, -4884283355.100601], [19.825, 60.66, 20.825, -4043159037.9279494], [20.3585, 58.85, 21.3585, -4785035617.087713], [19.8356, 57.28, 20.8356, -4070093440.3786936], [20.06, 57.36, 21.06, -4640289658.29893], [20.1624, 62.63, 21.1624, -4900486149.898907], [20.0363, 58.91, 21.0363, -4580068399.98923], [19.2724, 59.39, 20.2724, -3005654475.551095], [19.314, 56.3, 20.314, -3065297519.4802866], [18.7843, 57.51, 19.7843, -2305852318.2953424], [19.2774, 56.57, 20.2774, -3012823110.638693], [19.1887, 51.95, 20.1887, -2885651524.1839375], [19.174, 55.72495652173913, 20.174, -2864575737.0262294], [19.9084, 63.45, 20.9084, -4255076883.6255445], [19.9837, 65.7, 20.9837, -4446412780.280639], [19.7428, 61.94, 20.7428, -3834290369.866319], [20.3179, 59.4, 21.3179, -4827140718.062868], [19.8807, 60.95, 20.8807, -4184691699.862751], [19.2464, 55.8, 20.2464, -2968377573.0953226], [19.2617, 57.31, 20.2617, -2990313596.4634995], [19.5542, 66.34, 20.5542, -3409678749.0906243], [19.204, 54.72, 20.204, -2907587547.5520988], [18.4983, 48.91, 19.4983, -1895806391.282153], [18.3143, 53.65, 19.3143, -1632000620.0568318], [18.6299, 56.33, 19.6299, -2084484866.7888668], [18.5334, 57.34, 19.5334, -1946130209.5973704], [18.4514, 58.55, 19.4514, -1828564594.1600504], [18.4703, 59.74, 19.4703, -1855662034.7913868], [18.6474, 58.95, 19.6474, -2109575089.5956707], [19.3545, 60.36, 20.3545, -3123363463.6902194], [19.1008, 61.03, 20.1008, -2759626919.3431673], [18.5854, 57.08, 19.5854, -2020684014.5088992], [18.402, 55.06, 19.402, -1757738479.4940863], [18.7528, 50.35, 19.7528, -2260689917.2432137], [17.979, 52.91, 18.979, -1150870057.5403993], [17.6098, 52.25, 18.6098, -749409323.0944229], [18.3733, 59.22, 19.3733, -1716590514.0910697], [18.022, 49.56, 19.022, -1212922212.8332465], [17.9039, 51.21, 18.9039, -1069457531.4701035], [18.3958, 46.48, 19.3958, -1748849371.985456], [17.6875, 46.05, 18.6875, -834868042.2344787], [17.5211, 51.92, 18.5211, -657860025.8246194], [17.1317, 57.36, 18.1317, -379632838.4431779], [17.1759, 63.13, 18.1759, -411213839.168025], [18.4031, 60.81, 19.4031, -1759315579.2134545], [18.0314, 63.33, 19.0314, -1226399246.797989], [18.5273, 59.69, 19.5273, -1937384474.7904823], [17.7862, 58.73, 18.7862, -941864264.9126661], [17.6859, 60.02, 18.6859, -833133554.3288703], [17.923, 64.11, 18.923, -1090162980.8435352], [18.2226, 54.36, 19.2226, -1500527852.5495193], [18.5662, 57, 19.5662, -1993156455.772336], [18.1174, 57.54, 19.1174, -1349699770.3055077], [17.4485, 55.99, 18.4485, -605987160.3805925], [17.2705, 62.87, 18.2705, -478805754.74653155], [17.1827, 53.62, 18.1827, -416072454.66414213], [17.6516, 563000000000, 18.6516, -795950469.8520496], [17.6655, 50.67, 18.6655, -811018833.5321172], [17.6496, 53.18, 18.6496, -793782359.9699727], [17.1112, 52.84, 18.1112, -364985541.72686684], [16.5692, 53.92, 17.5692, 22274693.406058624], [16.5468, 55.47, 17.5468, 38279544.45213466], [15.9805, 53.75, 16.9805, -809176596.0290536], [16.3066, 60.5, 17.3066, -314030114.1539968], [15.9751, 52.96, 16.975099999999998, -804011998.929449], [16.7778, 57.34, 17.7778, -126770481.96058403], [16.5161, 58.19, 17.5161, 26908927.666451648], [15.7893, 56.13, 16.7893, -626311602.4269137], [15.9611, 54.78, 16.961100000000002, -790622302.7451632], [16.0339, 56.19, 17.0339, -810209490.8793029], [16.374, 57.98, 17.374, -204343758.93350285], [16.116, 52.74, 17.116, -659475895.0867743], [16.6485, 51.12, 17.6485, -34385337.30618049], [15.269, 47.52, 16.269, -499944438.61855024], [15.4699, 50.76, 16.469900000000003, -320835248.0517522], [15.5515, 50.78, 16.5515, -398878048.66860276], [15.9659, 62.75, 16.965899999999998, -795213055.7226572], [16.3422, 56.18, 17.3422, -256094887.9544444], [16.725, 59.1, 17.725, -89044761.63768941], [17.2483, 57.11, 18.2483, -462943804.1562499], [17.2485, 57.83, 18.2485, -463086704.6120286], [16.0814, 57.62, 17.0814, -723000650.4390626], [15.5986, 55.24, 16.598599999999998, -443924812.2599312], [16.4121, 63.86, 17.4121, -142340047.7480256], [15.6712, 57.18, 16.6712, -513359951.0440216], [16.274, 58.38, 17.274, -369391752.14857125], [16.4474, 61.77, 17.4474, -84893039.74674386], [16.2663, 55.98, 17.2663, -383528764.1778529], [15.5243, 54.42, 16.5243, -372863781.7963062], [16.1223, 60.33, 17.1223, -647909248.8809935], [16.4763, 61.81, 17.4763, -37861353.30949956], [16.1751, 59.6, 17.1751, -550969737.8231794], [16.2393, 59.98, 17.2393, -433100105.05974746], [16.109, 60.07, 17.109, -672327724.2042626], [16.5281, 59.44, 17.5281, 46437655.5988724], [15.977, 53.22, 16.977, -805829171.9830074], [15.925, 58.42, 16.925, -756096014.7271926], [16.3557, 59.3, 17.3557, -234125069.03043592], [16.609, 59.38, 17.609, -6162497.291859817], [17.3577, 65.7, 18.3577, -541110353.4616629], [16.4632, 61.31, 17.4632, -59180214.63568101], [16.029, 57.22, 17.029, -819205771.261583], [15.5495, 52.56, 16.549500000000002, -396965234.92796594], [15.9846, 54.28, 16.9846, -813097864.1973195], [15.5799, 57.91, 16.579900000000002, -426040003.7852142], [15.6009, 57.21, 16.6009, -446124548.0616077], [15.0935, 53.67, 16.0935, -974149174.0858811], [15.6705, 55.37, 16.6705, -512690466.23475456], [15.7441, 52.59, 16.7441, -583082011.8891828], [15.2331, 53.94, 16.2331, -596947002.7397844], [15.305, 57.15, 16.305, -402671672.36878145], [16.1735, 56.6, 17.1735, -553907298.7643154], [15.8891, 56.91, 16.8891, -721761008.0832694], [15.822, 59.34, 16.822, -657586107.0858462], [16.67, 64.25, 17.67, -49747136.301314786], [16.2097, 55.45, 17.2097, -487444982.470899], [16.3083, 60.92, 17.3083, -311263544.3635541], [16.705, 61.74, 17.705, -74754716.06080176], [16.1248, 61.3, 17.1248, -643319309.9104525], [15.6427, 59.98, 16.642699999999998, -486102355.2403084], [15.3452, 61.23, 16.3452, -294050416.72332233], [15.6615, 59.22, 16.6615, -504082804.4020569], [15.7284, 58.92, 16.7284, -568066424.0254015], [16.8565, 59.94, 17.8565, -183001811.3055339], [16.2367, 64.15, 17.2367, -437873641.5890748], [16.1303, 63.75, 17.1303, -633221444.175306], [16.5334, 64.2, 17.5334, 47853874.98860579], [16.5644, 65.33, 17.5644, 25704304.344497908], [16.3955, 62.66, 17.3955, -169354788.05456284], [16.7075, 64.68, 17.7075, -76540971.75791076], [16.4859, 62.61, 17.4859, -22238370.963541094], [16.6285, 61.66, 17.6285, -20095291.729355354], [16.9642, 60.53, 17.9642, -259953706.73690596], [16.3735, 60.39, 17.3735, -205157455.93069878], [16.5567, 65.36, 17.5567, 31205971.89156457], [16.9783, 64.66, 17.9783, -270028188.86860263], [16.7448, 64.71, 17.7448, -103191906.75874364], [17.0865, 64.04, 18.0865, -347337335.4394449], [17.609, 64.84, 18.609, -748435864.51465], [17.0086, 63.49, 18.0086, -291677607.91753966], [17.5353, 64.45, 18.5353, -668005958.1842133], [17.835, 62.79, 18.835, -994766146.0341829], [17.7809, 55.33, 18.7809, -936118773.7252924], [17.1502, 47.996511156186614, 18.1502, -392851130.6017173], [16.7849, 45.266450304259635, 17.7849, -131843448.14036141], [17.1615, 42.536389452332656, 18.1615, -400925006.3526603], [17.0034, 39.80632860040568, 18.0034, -287962196.0675664], [15.9826, 52.08, 16.982599999999998, -811185050.4567062], [17.0907, 59.71, 18.0907, -350338245.01055586], [16.8425, 60.47, 17.8425, -172998779.40171096], [16.9218, 59.413834586466166, 17.9218, -229658810.1140048], [17.1861, 60.68421052631579, 18.1861, -418501762.4122241], [17.5831, 63.8, 18.5831, -716920142.9962356], [17.7993, 63.07, 18.7993, -956065384.6399529], [17.0974, 64.73, 18.0974, -355125410.27886957], [17.3266, 64.89, 18.3266, -518889332.5896423], [18.5129, 64.42, 19.5129, -1916738805.7380168], [18.0217, 65.83, 19.0217, -1212492094.727996], [18.1277, 63.18, 19.1277, -1364467158.5859852], [17.503, 60.68, 18.503, -644927534.5775515], [17.7772, 64.4, 18.7772, -932107770.4435427], [18.3153, 66.36, 19.3153, -1633434347.074364], [18.1879, 64.38, 19.1879, -1450777525.0412865], [18.1087, 64.68, 19.1087, -1337226345.2529924], [18.1211, 68.61, 19.1211, -1355004560.2703075], [18.0639, 64.05, 19.0639, -1272995374.8677433], [18.6859, 64.74, 19.6859, -2164773579.7705398], [18.5845, 63.92, 19.5845, -2019393660.1931093], [18.5279, 62.61, 19.5279, -1938244711.0010142], [18.6516, 61.27, 19.6516, -2115596743.0692525], [18.416, 61.6, 19.416, -1777810657.7395046], [18.4897, 64.26, 19.4897, -1883476338.931388], [18.7387, 64.71, 19.7387, -2240474366.2960377], [18.2419, 64.35, 19.2419, -1528198783.9878092], [18.4934, 60.47009404388715, 19.4934, -1888781128.8962426], [18.6165, 60.009655172413794, 19.6165, -2065272924.7540429], [18.818, 59.549216300940444, 19.818, -2354168918.7860193], [19.0032, 59.088777429467086, 20.0032, -2619695162.4323964], [18.6945, 58.62833855799373, 19.6945, -2177103632.12125], [19.7996, 58.16789968652038, 20.7996, -3978618111.300639], [19.558, 66.29, 20.558, -3415126911.757276], [19.1364, 57.97, 20.1364, -2810667601.1671896], [18.6441, 56.14, 19.6441, -2104843790.437832], [18.4268, 58.68, 19.4268, -1793294909.5288653], [18.4142, 61.89, 19.4142, -1775229949.1079874], [18.6251, 62.38, 19.6251, -2077602977.1048002], [18.8096, 65.1, 19.8096, -2342125611.838778], [19.2329, 64.21, 20.2329, -2949022258.358686], [19.2395, 64.59, 20.2395, -2958484856.6744184], [20.0564, 50.32, 21.0564, -4631142125.391122], [19.9649, 51.67156133828996, 20.9649, -4398642330.650948], [20.0023, 53.48568773234201, 21.0023, -4493675033.637625], [20.108, 55.299814126394054, 21.108, -4762256763.736445], [19.9217, 57.1139405204461, 20.9217, -4288871935.7572136], [20.3082, 58.928066914498146, 21.3082, -4837200311.153], [20.2786, 60.742193308550185, 21.2786, -4867897626.149662], [20.3467, 62.55631970260223, 21.3467, -4797273060.228306], [20.4018, 64.64, 21.4018, -4740130423.190658], [20.289, 64.01, 21.289, -4857112083.042697], [21.1202, 63.6, 22.1202, -3965273803.818503], [20.5744, 64.66, 21.5744, -4561131890.473658], [20.9102, 64.09, 21.9102, -4212883296.694049], [20.8714, 65.36, 21.8714, -4253121669.0545216], [21.0777, 64.14, 22.0777, -4016494462.652691], [20.8257, 65.74, 21.8257, -4300515834.437887], [21.0135, 65.41, 22.0135, -4093867787.291575], [20.9057, 64.43, 21.9057, -4217550118.2307024], [20.6882, 63.1, 21.6882, -4443113159.168928], [21.0894, 64.85, 22.0894, -4002393716.573676], [21.4871, 64.14, 22.4871, -3593752505.2257805], [21.0005, 65.12, 22.0005, -4109535282.934999], [21.5205, 65.34, 22.5205, -3567541082.027603], [21.1192, 65.01, 22.1192, -3966478995.7910523], [21.2637, 60.8, 22.2637, -3792328755.7548366], [20.9549, 63.71, 21.9549, -4164492036.8841166], [21.3309, 66.51, 22.3309, -3716334071.2006006], [21.1187, 61.19, 22.1187, -3967081591.7773585], [20.8863, 61.027760416666666, 21.8863, -4237669304.4109583], [21.1084, 64.18, 22.1084, -3979495069.0948224], [21.0208, 64.93, 22.0208, -4085069885.891853], [20.8259, 62.89, 21.8259, -4300308420.147337], [21.2001, 65.01, 22.2001, -3868978965.2101955], [20.8005, 58.058749999999996, 21.8005, -4326650035.043133], [21.3461, 63.08, 22.3461, -3704405519.325979], [20.8995, 59.60673913043478, 21.8995, -4223979961.2367773], [20.407, 56.7, 21.407, -4734737651.637172], [20.7056, 54.03822784810127, 21.7056, -4425068115.89392], [20.2595, 53.63, 21.2595, -4887705690.8941]], ""metadata"": null}",2025-07-18 10:24:00.851641
app.py CHANGED
@@ -8,7 +8,7 @@ import os
8
  import numpy as np
9
 
10
  from utils.preprocessing import preprocess_load_data, preprocess_temperature_data
11
- from utils.merge_data import merge_load_temp
12
  from models.forecast import TimeSeriesForecaster
13
  from models.regression import LoadLimitRegressor
14
  from utils.simulate import simulate_with_model
@@ -37,9 +37,13 @@ def forecast_ui(load_file, temp_file,
37
  # 2. preprocess
38
  df_load = preprocess_load_data(df_load_raw)
39
  df_temp = preprocess_temperature_data(df_temp_raw)
 
 
 
40
 
41
- # 3. merge
42
- df_merged = merge_load_temp(df_load, df_temp)
 
43
 
44
  # 4. สร้างและ train forecasting model (forecast max load)
45
  forecast_model = TimeSeriesForecaster(model_type=forecast_model_type, horizon=forecast_horizon)
 
8
  import numpy as np
9
 
10
  from utils.preprocessing import preprocess_load_data, preprocess_temperature_data
11
+ from utils.merge_data import aggregate_daily_max, merge_load_temp
12
  from models.forecast import TimeSeriesForecaster
13
  from models.regression import LoadLimitRegressor
14
  from utils.simulate import simulate_with_model
 
37
  # 2. preprocess
38
  df_load = preprocess_load_data(df_load_raw)
39
  df_temp = preprocess_temperature_data(df_temp_raw)
40
+
41
+ print("df_load:", df_load)
42
+ print("df_temp:", df_temp)
43
 
44
+ # 3. aggregate และ merge
45
+ df_daily = aggregate_daily_max(df_load) # ✅ ต้องสรุป daily ก่อน
46
+ df_merged = merge_load_temp(df_daily, df_temp) # ✅ ถึงจะ merge ได้
47
 
48
  # 4. สร้างและ train forecasting model (forecast max load)
49
  forecast_model = TimeSeriesForecaster(model_type=forecast_model_type, horizon=forecast_horizon)
models/forecast.py CHANGED
@@ -33,7 +33,8 @@ class TimeSeriesForecaster:
33
  """
34
  if self.model_type in ['PatchTST', 'LSTM', 'BiLSTM', 'GRU', 'RNN']:
35
  X, y = self.preprocess(df, value_col)
36
- self.dls = get_ts_dls(X, y, bs=32, splits=TSStandardSplit()(X))
 
37
  if self.model_type == 'PatchTST':
38
  self.model = PatchTST(self.dls.vars, self.dls.len, self.dls.c)
39
  elif self.model_type == 'LSTM':
@@ -66,7 +67,8 @@ class TimeSeriesForecaster:
66
  future_steps = self.horizon
67
 
68
  if self.model_type in ['PatchTST', 'LSTM', 'BiLSTM', 'GRU', 'RNN']:
69
- x_last = self.dls.items[-1][None, :]
 
70
  pred = self.learn.model(x_last).detach().cpu().numpy().flatten()
71
  pred = self.scaler.inverse_transform(pred.reshape(-1, 1)).flatten()
72
  return pred[:future_steps]
 
33
  """
34
  if self.model_type in ['PatchTST', 'LSTM', 'BiLSTM', 'GRU', 'RNN']:
35
  X, y = self.preprocess(df, value_col)
36
+ splits = get_splits(y, valid_size=0.2, shuffle=False)
37
+ self.dls = get_ts_dls(X, y, bs=32, splits=splits)
38
  if self.model_type == 'PatchTST':
39
  self.model = PatchTST(self.dls.vars, self.dls.len, self.dls.c)
40
  elif self.model_type == 'LSTM':
 
67
  future_steps = self.horizon
68
 
69
  if self.model_type in ['PatchTST', 'LSTM', 'BiLSTM', 'GRU', 'RNN']:
70
+ device = next(self.learn.model.parameters()).device # 👈 เอา device ที่โมเดลอยู่
71
+ x_last = torch.tensor(self.dls.items[-1][None, :]).to(device) # 👈 ย้าย input ไป device เดียวกัน
72
  pred = self.learn.model(x_last).detach().cpu().numpy().flatten()
73
  pred = self.scaler.inverse_transform(pred.reshape(-1, 1)).flatten()
74
  return pred[:future_steps]
utils/merge_data.py CHANGED
@@ -1,31 +1,44 @@
1
- # utils/merge_data.py
2
  import pandas as pd
3
 
4
  def aggregate_daily_max(df_load_15min: pd.DataFrame) -> pd.DataFrame:
5
  """
6
- จากข้อมูลที่ resample มาแ้ว (ทุก 15 นาที) รวมใ้เหลือแค่ daily max load
7
  """
8
  df = df_load_15min.copy()
9
- df['date'] = df['datetime'].dt.date # เป็น datetime.date ไม่เอาเวลา
 
 
 
 
 
10
  df_daily = df.groupby('date')['mw'].agg(['max', 'mean']).reset_index()
11
  df_daily = df_daily.rename(columns={'max': 'mw_max', 'mean': 'mw_mean'})
12
  return df_daily
13
 
 
14
  def merge_load_temp(df_daily_load: pd.DataFrame, df_temp: pd.DataFrame) -> pd.DataFrame:
15
  """
16
- รวมข้อมูล Load (daily) กับ Temperature (daily) โดยใช้ date เป็น key
17
- df_temp ต้องมีคอลัมน์ 'date' ที่เป็น datetime64[ns] หรือ datetime.date
18
  """
19
  df_temp = df_temp.copy()
20
- # ถ้าไม่มี 'date' คอลัมน์ ให้สร้างจาก year,month,day
 
21
  if 'date' not in df_temp.columns:
22
- df_temp['date'] = pd.to_datetime(df_temp[['year', 'month', 'day']]).dt.date
 
 
 
23
 
24
- # มึงย่าไปแปลงเป็ datetime แลวเาเวาออกอีกที ให้มมี datatype เดียวกันระหว่าง 2 df นี่แหละดีีุ่ด
 
 
 
25
 
 
26
  df_merged = pd.merge(df_daily_load, df_temp[['date', 'MaxTemp']], on='date', how='inner')
27
  return df_merged
28
 
 
29
  # ตัวอย่างใช้
30
  if __name__ == '__main__':
31
  load_fp = 'load_15min.csv'
 
 
1
  import pandas as pd
2
 
3
  def aggregate_daily_max(df_load_15min: pd.DataFrame) -> pd.DataFrame:
4
  """
5
+ จากข้อมูลโห 15 นาที หาค่าสูงสุดต่วัน ละค่าเฉลี่ย
6
  """
7
  df = df_load_15min.copy()
8
+
9
+ # datetime ต้องเป็น datetime64 ก่อน
10
+ if not pd.api.types.is_datetime64_any_dtype(df['datetime']):
11
+ df['datetime'] = pd.to_datetime(df['datetime'])
12
+
13
+ df['date'] = df['datetime'].dt.date # datetime.date type
14
  df_daily = df.groupby('date')['mw'].agg(['max', 'mean']).reset_index()
15
  df_daily = df_daily.rename(columns={'max': 'mw_max', 'mean': 'mw_mean'})
16
  return df_daily
17
 
18
+
19
  def merge_load_temp(df_daily_load: pd.DataFrame, df_temp: pd.DataFrame) -> pd.DataFrame:
20
  """
21
+ รวม daily load กับอุณหภูมิ โดยใช้ 'date' เป็น key
 
22
  """
23
  df_temp = df_temp.copy()
24
+
25
+ # สร้าง date ถ้ายังไม่มี
26
  if 'date' not in df_temp.columns:
27
+ if {'year', 'month', 'day'}.issubset(df_temp.columns):
28
+ df_temp['date'] = pd.to_datetime(df_temp[['year', 'month', 'day']]).dt.date
29
+ else:
30
+ raise ValueError("❌ df_temp ไม่มีคอลัมน์ 'date' หรือ [year, month, day]")
31
 
32
+ # ตรวจสบชิดข้อมูdate ให้เหือนกันทั้งองฝั่ง
33
+ if df_daily_load['date'].dtype != df_temp['date'].dtype:
34
+ df_temp['date'] = pd.to_datetime(df_temp['date']).dt.date
35
+ df_daily_load['date'] = pd.to_datetime(df_daily_load['date']).dt.date
36
 
37
+ # Merge
38
  df_merged = pd.merge(df_daily_load, df_temp[['date', 'MaxTemp']], on='date', how='inner')
39
  return df_merged
40
 
41
+
42
  # ตัวอย่างใช้
43
  if __name__ == '__main__':
44
  load_fp = 'load_15min.csv'
utils/preprocessing.py CHANGED
@@ -3,34 +3,37 @@ import pandas as pd
3
 
4
  def preprocess_load_data(df_load: pd.DataFrame) -> pd.DataFrame:
5
  """
6
- รับ DataFrame load ดิบ แปลง datetime, sort, resample 15 นาที เติม missing
7
  """
8
  df_load = df_load.copy()
9
 
10
- # ลบ space รคอลัมน์เผื่อมีมั่ว
11
  df_load.columns = df_load.columns.str.strip()
12
 
13
- # รวม date + time เป็น datetime พร้อม dayfirst=True (วน/เือน/ปี)
14
- df_load['datetime'] = pd.to_datetime(df_load['date'].astype(str) + ' ' + df_load['time'].astype(str), dayfirst=True)
 
15
 
16
- # Drop อลัน์เิม
 
 
 
 
17
  df_load = df_load.drop(columns=['date', 'time'])
18
 
19
- # Sort และตั้ง index เป็น datetime
20
  df_load = df_load.sort_values('datetime').set_index('datetime')
21
 
22
- # ้าfull range datetime ทุก 15 นาที ตั้งแต่วันแรกถึงวันสุดท้าย
23
- start = df_load.index.min().normalize()
24
- end = df_load.index.max().normalize() + pd.Timedelta(days=1) - pd.Timedelta(minutes=15)
25
  full_idx = pd.date_range(start=start, end=end, freq='15T')
26
 
27
- # Reindex เติมช่วงเวลาทั้งหมด
28
  df_load = df_load.reindex(full_idx)
29
-
30
- # เติม missing ด้วย linear interpolation แล้ว forward fill / back fill อีกที
31
  df_load['mw'] = df_load['mw'].interpolate(method='time').fillna(method='ffill').fillna(method='bfill')
32
 
33
- # Reset index กลับเป็นคอลัมน์ datetime
34
  df_load = df_load.reset_index().rename(columns={'index': 'datetime'})
35
 
36
  return df_load
 
3
 
4
  def preprocess_load_data(df_load: pd.DataFrame) -> pd.DataFrame:
5
  """
6
+ รับ DataFrame load ดิบ แปลง datetime จาก 'd/m/yyyy', sort, resample 15 นาที เติม missing
7
  """
8
  df_load = df_load.copy()
9
 
10
+ # ล้างชื่อคอลัมน์
11
  df_load.columns = df_load.columns.str.strip()
12
 
13
+ # รวม date + time เป็น datetime — ฟร์แ d/m/yyyy รองร้วย dayfirst=True
14
+ datetime_str = df_load['date'].astype(str) + ' ' + df_load['time'].astype(str)
15
+ df_load['datetime'] = pd.to_datetime(datetime_str, dayfirst=True, errors='coerce')
16
 
17
+ # เช็พวก parse ไ่ไ
18
+ if df_load['datetime'].isna().any():
19
+ raise ValueError("❌ บางแถวแปลง datetime ไม่ได้ — ตรวจ format 'date' กับ 'time' ให้ชัวร์ว่าเป็น d/m/yyyy!")
20
+
21
+ # ทิ้ง date, time เดิม
22
  df_load = df_load.drop(columns=['date', 'time'])
23
 
24
+ # Sort & set index
25
  df_load = df_load.sort_values('datetime').set_index('datetime')
26
 
27
+ # เตียมช่วเวลา 15 นาที
28
+ start = df_load.index.min().floor('D')
29
+ end = df_load.index.max().ceil('D')
30
  full_idx = pd.date_range(start=start, end=end, freq='15T')
31
 
32
+ # Reindex + fill
33
  df_load = df_load.reindex(full_idx)
 
 
34
  df_load['mw'] = df_load['mw'].interpolate(method='time').fillna(method='ffill').fillna(method='bfill')
35
 
36
+ # Reset index
37
  df_load = df_load.reset_index().rename(columns={'index': 'datetime'})
38
 
39
  return df_load