gabcares commited on
Commit
8f44d6d
·
verified ·
1 Parent(s): 6c26a58

Upload 28 files

Browse files
Dockerfile ADDED
@@ -0,0 +1,28 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ FROM python:3.11.9-slim
2
+
3
+ # Copy requirements file
4
+ COPY requirements.txt .
5
+
6
+ # Update pip
7
+ RUN pip --timeout=3000 install --no-cache-dir --upgrade pip
8
+
9
+ # Install dependecies
10
+ RUN pip --timeout=3000 install --no-cache-dir -r requirements.txt
11
+
12
+ # Make project directory
13
+ RUN mkdir -p /client/
14
+
15
+ # Set working directory
16
+ WORKDIR /client
17
+
18
+ # Copy client frontend
19
+ COPY . .
20
+
21
+ # # Expose app port Huggingface
22
+ # EXPOSE 7860
23
+
24
+ # Expose app port
25
+ EXPOSE 3939
26
+
27
+ # Start application
28
+ CMD ["shiny", "run", "app.py", "--host", "0.0.0.0", "--port", "3939"]
app.py ADDED
@@ -0,0 +1,52 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ from functools import partial
2
+
3
+ from shiny.ui import page_navbar
4
+ from shiny.express import ui
5
+
6
+ from utils.utils import footer
7
+ from utils.config import BRANDCOLORS
8
+ from utils.home import home_page
9
+ from utils.dashboard import dashboard_page
10
+ from utils.predict import predict_page
11
+ from utils.history import history_page
12
+
13
+
14
+
15
+
16
+
17
+ ui.page_opts(
18
+ title=ui.img(src="logo-yassir-forward-light.svg",
19
+ alt="Yassir logo", height="50px"),
20
+ window_title="Yassir Home",
21
+ page_fn=partial(page_navbar, id="page"),
22
+ inverse=True,
23
+ bg=BRANDCOLORS["purple-dark"],
24
+ fillable=True,
25
+ lang="en",
26
+ footer=footer,
27
+ )
28
+
29
+ # Add Yassir favicon
30
+ ui.head_content(ui.tags.link(rel="icon", type="image/png",
31
+ sizes="32x32", href="favicon-yassir-forward.png"))
32
+
33
+
34
+ with ui.nav_panel("Home"):
35
+ home_page("home")
36
+
37
+
38
+ with ui.nav_panel("Dashboard"):
39
+ dashboard_page("dashboard")
40
+
41
+
42
+ with ui.nav_panel("Predict"):
43
+ predict_page("predict")
44
+
45
+
46
+ with ui.nav_panel("History"):
47
+ history_page("history")
48
+
49
+
50
+ with ui.nav_control():
51
+ # Mode Switcher
52
+ ui.input_dark_mode(mode="light")
data/Test.csv ADDED
The diff for this file is too large to render. See raw diff
 
data/Train.csv ADDED
The diff for this file is too large to render. See raw diff
 
data/Weather.csv ADDED
@@ -0,0 +1,62 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ "date","dewpoint_2m_temperature","maximum_2m_air_temperature","mean_2m_air_temperature","mean_sea_level_pressure","minimum_2m_air_temperature","surface_pressure","total_precipitation","u_component_of_wind_10m","v_component_of_wind_10m"
2
+ 2019-11-01,290.630523681641,296.434661865234,294.125061035156,101853.6171875,292.503997802734,100806.3515625,0.004297100007534,3.56132316589355,0.941694676876068
3
+ 2019-11-02,289.135284423828,298.432403564453,295.551666259766,101225.1640625,293.337921142578,100187.25,0.001766970381141,5.31859302520752,3.2582368850708
4
+ 2019-11-03,287.667694091797,296.612121582031,295.182830810547,100806.6171875,293.67431640625,99771.4140625,0.000797010026872,8.4476490020752,3.17298221588135
5
+ 2019-11-04,287.634643554687,297.173736572266,294.368133544922,101240.9296875,292.376220703125,100200.84375,0.000393278896809,5.99142837524414,2.23669981956482
6
+ 2019-11-05,286.413787841797,294.284851074219,292.496978759766,101131.75,289.14306640625,100088.5,0.004657875746489,6.96272993087769,2.65536379814148
7
+ 2019-11-06,283.408782958984,292.336120605469,289.727630615234,101370.9375,287.188354492188,100318.9765625,0.005435148254037,5.76258993148804,0.564044535160065
8
+ 2019-11-07,283.211395263672,293.419891357422,290.415191650391,101249.84375,286.82373046875,100201.875,0.000247925519943,4.00305700302124,2.68575859069824
9
+ 2019-11-08,281.389923095703,290.577392578125,288.396331787109,101331.3515625,286.591522216797,100274.3046875,0.005571857094765,6.60480737686157,0.676896631717682
10
+ 2019-11-09,280.681365966797,291.216400146484,289.184478759766,101801.1953125,286.891204833984,100742.28125,0.000360472127795,7.45922040939331,0.228752419352531
11
+ 2019-11-10,282.495880126953,287.458679199219,286.003326416016,101158.3046875,283.836639404297,100094.7109375,0.029922166839242,4.83168601989746,0.762373924255371
12
+ 2019-11-11,281.025604248047,288.555297851562,286.935089111328,101095.0859375,284.143981933594,100033.6171875,0.004549514502287,6.18370389938355,-1.88874566555023
13
+ 2019-11-12,282.531280517578,287.975402832031,287.462615966797,101044.1875,286.898010253906,99988.8828125,0.009929362684488,3.17873740196228,-2.04183602333069
14
+ 2019-11-13,284.286773681641,289.910339355469,288.380340576172,100997.6328125,286.113128662109,99946.8984375,0.009136160835624,5.44643640518189,2.58233404159546
15
+ 2019-11-14,284.291259765625,293.278839111328,289.770050048828,100674.53125,286.158020019531,99632.1484375,0.003291759639978,4.69763612747192,3.18607401847839
16
+ 2019-11-15,281.382629394531,288.264526367188,286.137908935547,100623.2734375,283.950164794922,99567.3046875,0.004061112180352,5.19720602035522,2.63942575454712
17
+ 2019-11-16,280.143890380859,285.989593505859,284.518981933594,100999.96875,283.658782958984,99933.6015625,0.012909781187773,5.37002897262573,0.500064074993134
18
+ 2019-11-17,279.41162109375,289.193786621094,287.278594970703,101503.59375,285.190551757813,100441.5078125,0.000602759420872,6.17518091201782,2.33178448677063
19
+ 2019-11-18,282.907958984375,289.452941894531,286.752227783203,101106.1640625,284.470031738281,100048.1875,0.024332545697689,4.95947265625,2.72832131385803
20
+ 2019-11-19,281.222930908203,288.498199462891,285.203338623047,101709.28125,282.853973388672,100640.4765625,0.003459326922894,3.19898533821106,0.879467189311981
21
+ 2019-11-20,280.365142822266,289.753082275391,285.982574462891,101344.1171875,282.348388671875,100287.9921875,3.89E-05,0.466841250658035,1.32042729854584
22
+ 2019-11-21,283.449432373047,291.342742919922,288.261260986328,101161.4453125,285.202117919922,100111.96875,6.89E-05,1.45859718322754,1.85686385631561
23
+ 2019-11-22,283.759460449219,294.419952392578,289.869781494141,100665.5625,285.254333496094,99628.7734375,0.001163817942142,0.095185160636902,2.96889758110046
24
+ 2019-11-23,284.370819091797,292.536529541016,289.942077636719,100172.9140625,287.650238037109,99133.3828125,0.009119542315602,6.63799238204956,3.54840111732483
25
+ 2019-11-24,281.071228027344,289.889709472656,288.453796386719,101219.3046875,286.728210449219,100163.75,0.000329688191414,7.77185869216919,-0.73418515920639
26
+ 2019-11-25,283.602447509766,290.946685791016,288.87890625,101522.15625,286.303833007812,100466.875,0.000427037477493,5.99508476257324,1.86915338039398
27
+ 2019-11-26,286.12109375,292.557403564453,289.742034912109,101492.4296875,287.364227294922,100444.0546875,6.34E-05,2.39880895614624,1.82474529743195
28
+ 2019-11-27,286.326782226562,293.878845214844,291.110260009766,101353.2890625,287.571166992188,100308.9765625,2.58E-05,3.80795884132385,1.94991743564606
29
+ 2019-11-28,286.033294677734,292.165618896484,289.886566162109,101758.7421875,286.286590576172,100707.15625,2.12E-05,3.60884380340576,0.900128543376923
30
+ 2019-11-29,284.880950927734,292.095916748047,288.464324951172,102024.2734375,285.781341552734,100969.4609375,-1.86E-09,1.86156606674194,1.0910028219223
31
+ 2019-11-30,284.823516845703,293.076416015625,288.458770751953,102011.875,285.040802001953,100959.8046875,-4.28E-08,-0.138433709740639,0.79097443819046
32
+ 2019-12-01,284.528839111328,292.345764160156,288.691711425781,101382.9140625,285.9404296875,100338.4609375,1.86E-09,-0.076007284224033,1.09013211727142
33
+ 2019-12-02,285.230133056641,291.094268798828,288.451446533203,101204.84375,285.601501464844,100152.75,5.00E-05,-2.45333647727966,-0.377469331026077
34
+ 2019-12-03,286.093933105469,290.898132324219,289.181732177734,100773.4453125,287.693237304688,99728.28125,5.80E-05,-5.21076822280884,-0.760020196437836
35
+ 2019-12-04,283.047546386719,288.319152832031,286.984436035156,100523.0625,286.001770019531,99474.21875,0.005779733881354,1.91458237171173,2.43778586387634
36
+ 2019-12-05,283.376892089844,291.184631347656,287.946655273437,101614.2734375,285.452697753906,100561.6171875,6.50E-06,-1.01359665393829,0.962993383407593
37
+ 2019-12-06,282.896270751953,293.013366699219,288.524871826172,102065.46875,284.863128662109,101012.7578125,0,-1.44293296337128,1.48972141742706
38
+ 2019-12-07,283.338928222656,291.378387451172,287.575012207031,102077.3515625,284.683471679687,101021.75,2.96E-06,-1.2587878704071,0.078127600252628
39
+ 2019-12-08,285.852081298828,288.70263671875,287.290679931641,102294.90625,286.266906738281,101226.15625,0.008476560935378,1.37802827358246,-0.072672076523304
40
+ 2019-12-09,284.933837890625,290.305847167969,288.071228027344,102419.5859375,285.373046875,101352.7578125,0.000439904630184,5.34705781936646,0.965534210205078
41
+ 2019-12-10,282.28662109375,289.168975830078,286.988830566406,102472.1484375,283.798736572266,101401.2421875,0.001321921125054,2.55038285255432,-1.54461085796356
42
+ 2019-12-11,282.495025634766,290.447174072266,287.158081054688,102097.625,282.602386474609,101033.2265625,0.001650800928473,4.09385919570923,1.15139448642731
43
+ 2019-12-12,281.361419677734,288.673583984375,287.432952880859,101891.0703125,285.356292724609,100826.9921875,0.000418987125158,5.7578616142273,0.574900448322296
44
+ 2019-12-13,283.989654541016,291.369964599609,289.867828369141,101305.5546875,287.646362304688,100255.3359375,5.32E-05,9.46642971038818,2.8544065952301
45
+ 2019-12-14,284.226440429688,291.734436035156,288.992950439453,101800.9453125,285.212677001953,100745.8671875,6.50E-06,4.06499671936035,1.82024967670441
46
+ 2019-12-15,283.476165771484,291.411834716797,287.440490722656,101664.78125,284.523986816406,100616.5625,-4.28E-08,-0.448076725006104,0.808631181716919
47
+ 2019-12-16,279.516693115234,294.247253417969,291.593322753906,100969.6171875,286.060699462891,99929.71875,0,-1.23186004161835,6.00036287307739
48
+ 2019-12-17,281.457794189453,292.583679199219,291.200866699219,100634.4609375,287.550262451172,99595.8203125,0.000536819919944,-1.77081143856049,2.67074871063232
49
+ 2019-12-18,284.618560791016,288.200622558594,287.254333496094,101586.0859375,286.124969482422,100524.6328125,0.009122317656875,4.99246835708618,0.138764828443527
50
+ 2019-12-19,280.996368408203,290.565307617188,286.986572265625,101902.7890625,284.7138671875,100843.0078125,1.86E-09,1.81780385971069,2.30060434341431
51
+ 2019-12-20,281.592559814453,293.419189453125,290.122161865234,101216.5703125,285.235137939453,100175,0.001026257872581,1.45235931873322,4.92853879928589
52
+ 2019-12-21,284.806182861328,294.206604003906,293.212799072266,101113.4453125,292.543029785156,100074.2890625,0.000189838930964,8.24301815032959,4.16265535354614
53
+ 2019-12-22,283.318756103516,293.494262695312,292.244781494141,101723.5234375,290.701873779297,100675.2265625,0,9.11418628692627,2.06118369102478
54
+ 2019-12-23,284.867401123047,291.184387207031,289.438781738281,102574.09375,286.471374511719,101510.75,8.58E-06,4.8449912071228,0.780286073684692
55
+ 2019-12-24,281.922943115234,293.490112304687,288.258850097656,102777.8515625,284.315368652344,101717.0078125,0,0.458070993423462,1.25784504413605
56
+ 2019-12-25,282.767425537109,293.182098388672,287.179046630859,102420.6484375,283.159210205078,101367.8046875,-1.86E-09,-0.946755170822144,0.584219515323639
57
+ 2019-12-26,282.831512451172,291.251312255859,287.191986083984,102508.3984375,283.852508544922,101447.5546875,-4.28E-08,0.908101558685303,0.448448449373245
58
+ 2019-12-27,282.856231689453,290.419464111328,286.725158691406,102797.125,283.695648193359,101725.4453125,5.72E-06,-2.66779518127441,-0.424410969018936
59
+ 2019-12-28,281.909332275391,289.479797363281,285.969177246094,102934.4765625,282.802825927734,101858.8359375,2.10E-05,-2.3729031085968,-0.184997797012329
60
+ 2019-12-29,281.217468261719,288.779541015625,285.632904052734,103071.9375,283.222503662109,101990.8359375,3.75E-05,-2.15144658088684,-0.673203945159912
61
+ 2019-12-30,279.548278808594,288.651000976562,285.355255126953,103127.2421875,282.709594726562,102044.125,1.23E-05,-2.28719973564148,-0.562189280986786
62
+ 2019-12-31,279.129180908203,288.594665527344,285.817230224609,103213.5,282.037567138672,102129.1953125,0.000101646408439,-0.851781070232391,-0.921644449234009
data/history/history.csv ADDED
@@ -0,0 +1,579 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ timestamp,origin_lat,origin_lon,destination_lat,destination_lon,trip_distance,eta_prediction,time_of_prediction,model_used
2
+ 2024-08-08T00:00:00Z,-1.3032036,36.6825914,-1.2739575,36.8118501,30275.7,2248.195556640625,2024-08-08 20:54:10.381005,XGBRegressor
3
+ 2024-08-08T00:00:00Z,-1.284604486663143,36.68626785278321,-1.2739575,36.8118501,19952.5,1658.4490966796875,2024-08-08 20:54:36.795122,XGBRegressor
4
+ 2024-08-08T00:00:00Z,-1.3032036,36.6825914,-1.2739575,36.8118501,30275.7,2248.195556640625,2024-08-08 20:54:51.846503,XGBRegressor
5
+ 2024-08-08T00:00:00Z,-1.2593742778212769,36.71167373657227,-1.2739575,36.8118501,13089.4,1363.249755859375,2024-08-08 20:56:06.931112,XGBRegressor
6
+ 2024-08-08T00:00:00Z,-1.2593742778212769,36.71167373657227,-1.2739575,36.8118501,13131,1517.115966796875,2024-08-08 20:56:39.431254,XGBRegressor
7
+ 2024-08-08T00:00:00Z,-1.3032036,36.6825914,-1.2739575,36.8118501,30275.7,2248.195556640625,2024-08-08 21:00:56.619925,XGBRegressor
8
+ 2024-08-08T00:00:00Z,1.1004796,36.6825914,-1.2739575,36.8118501,336236.8,3222.885986328125,2024-08-08 21:02:20.288798,XGBRegressor
9
+ 2024-08-08T00:00:00Z,-1.3032036,36.6825914,-1.2739575,36.8118501,30275.7,2248.195556640625,2024-08-08 21:02:35.881502,XGBRegressor
10
+ 2024-08-08T00:00:00Z,1.1004796,36.6825914,-1.2739575,36.8118501,336236.8,3222.885986328125,2024-08-08 21:03:00.630205,XGBRegressor
11
+ 2024-08-08T00:00:00Z,1.1004796,36.6825914,-1.2739575,36.8118501,336236.8,3222.885986328125,2024-08-08 21:03:15.907424,XGBRegressor
12
+ 2024-08-08T00:00:00Z,-1.3032036,36.6825914,-1.2739575,36.8118501,30275.7,2248.195556640625,2024-08-08 21:04:03.555102,XGBRegressor
13
+ 2024-08-08T00:00:00Z,-1.3032036,36.6825914,-1.2739575,36.8118501,30275.7,2248.195556640625,2024-08-08 21:05:42.420271,XGBRegressor
14
+ 2024-08-08T00:00:00Z,-1.2348303708657813,36.71407699584962,-1.2739575,36.8118501,13622.7,1585.31982421875,2024-08-08 21:06:21.498996,XGBRegressor
15
+ 2024-08-08T00:00:00Z,-1.2300305138401768,36.78814888000489,-1.2739575,36.8118501,9179.3,1404.4130859375,2024-08-08 21:12:13.322594,XGBRegressor
16
+ 2024-08-08T00:00:00Z,-1.2247101870976034,36.8078899383545,-1.2739575,36.8118501,9024.4,1453.57763671875,2024-08-08 21:12:37.959140,XGBRegressor
17
+ 2024-08-08T00:00:00Z,-1.2241099219360259,36.85132026672364,-1.2739575,36.8118501,12854.5,1885.8411865234375,2024-08-08 21:14:38.340452,XGBRegressor
18
+ 2024-08-09T00:00:00Z,-1.3032036,36.6825914,-1.2739575,36.8118501,30275.7,2248.195556640625,2024-08-09 18:25:55.768108,XGBRegressor
19
+ 2024-08-09T00:00:00Z,-1.3032036,36.6825914,-1.2739575,36.8118501,30275.7,2248.195556640625,2024-08-09 22:58:00.444359,XGBRegressor
20
+ 2024-08-09T00:00:00Z,-1.2634935124040183,36.67476654052735,-1.2739575,36.8118501,24889.9,1949.59033203125,2024-08-10 00:55:27.050682,XGBRegressor
21
+ 2024-08-09T00:00:00Z,-1.2344905625908813,36.70721054077149,-1.2739575,36.8118501,17458.1,1568.106201171875,2024-08-10 00:55:31.322439,XGBRegressor
22
+ 2024-08-09T00:00:00Z,-1.2296872701762085,36.72429084777833,-1.2739575,36.8118501,13954.1,1587.1683349609375,2024-08-10 00:55:34.795439,XGBRegressor
23
+ 2024-08-09T00:00:00Z,-1.2282287765932283,36.7339038848877,-1.2739575,36.8118501,13114.5,1681.5767822265625,2024-08-10 00:55:39.476598,XGBRegressor
24
+ 2024-08-09T00:00:00Z,-1.2442769091840473,36.73330307006837,-1.2739575,36.8118501,12168.6,1595.6368408203125,2024-08-10 00:55:43.702761,XGBRegressor
25
+ 2024-08-09T00:00:00Z,-1.2578347077838283,36.73476219177247,-1.2739575,36.8118501,12773.4,1684.4033203125,2024-08-10 00:55:46.809349,XGBRegressor
26
+ 2024-08-09T00:00:00Z,-1.2504532069640324,36.753816604614265,-1.2739575,36.8118501,9806.9,1370.1663818359375,2024-08-10 00:55:51.061717,XGBRegressor
27
+ 2024-08-09T00:00:00Z,-1.2504532069640324,36.753816604614265,-1.2586044704178534,36.81467056274415,7998.1,1172.1009521484375,2024-08-10 00:55:54.771776,XGBRegressor
28
+ 2024-08-09T00:00:00Z,-1.2504532069640324,36.753816604614265,-1.2401549895943969,36.814241409301765,12207.4,1601.82275390625,2024-08-10 00:55:58.525757,XGBRegressor
29
+ 2024-08-09T00:00:00Z,-1.2388684304870725,36.7503833770752,-1.2401549895943969,36.814241409301765,11501.0,1505.4560546875,2024-08-10 00:56:03.215109,XGBRegressor
30
+ 2024-08-09T00:00:00Z,-1.232175620750091,36.74652099609376,-1.2401549895943969,36.814241409301765,9697.2,1363.687744140625,2024-08-10 00:56:10.069325,XGBRegressor
31
+ 2024-08-09T00:00:00Z,-1.219131786066074,36.74549102783204,-1.2401549895943969,36.814241409301765,10077.5,1363.687744140625,2024-08-10 00:56:13.854676,XGBRegressor
32
+ 2024-08-09T00:00:00Z,-1.2058309856260987,36.74652099609376,-1.2401549895943969,36.814241409301765,9821.5,1363.687744140625,2024-08-10 00:56:18.289717,XGBRegressor
33
+ 2024-08-09T00:00:00Z,-1.2058309856260987,36.74652099609376,-1.2225638367765916,36.81758880615235,11566.6,1500.314208984375,2024-08-10 00:56:25.096484,XGBRegressor
34
+ 2024-08-09T00:00:00Z,-1.2151006037408045,36.74222946166993,-1.2225638367765916,36.81758880615235,14050.5,1676.714599609375,2024-08-10 00:56:30.308178,XGBRegressor
35
+ 2024-08-09T00:00:00Z,-1.1982792397607618,36.73716545104981,-1.2225638367765916,36.81758880615235,10837.5,1369.01953125,2024-08-10 00:56:46.657927,XGBRegressor
36
+ 2024-08-09T00:00:00Z,-1.2084932013192353,36.73596382141114,-1.2225638367765916,36.81758880615235,13745.6,1756.673095703125,2024-08-10 00:57:05.750627,XGBRegressor
37
+ 2024-08-09T00:00:00Z,-1.2132123550762133,36.73587799072266,-1.2225638367765916,36.81758880615235,14045.1,1671.0679931640625,2024-08-10 00:57:24.545443,XGBRegressor
38
+ 2024-08-09T00:00:00Z,-1.207719524414527,36.74463272094727,-1.2225638367765916,36.81758880615235,11955.4,1585.6553955078125,2024-08-10 01:00:20.250400,XGBRegressor
39
+ 2024-08-09T00:00:00Z,-1.195705300979875,36.753559112548835,-1.2225638367765916,36.81758880615235,8259.0,1137.809814453125,2024-08-10 01:00:21.832745,XGBRegressor
40
+ 2024-08-09T00:00:00Z,-1.195705300979875,36.753559112548835,-1.2069463347620175,36.80909156799317,9719.3,1370.1663818359375,2024-08-10 01:00:23.843966,XGBRegressor
41
+ 2024-08-09T00:00:00Z,-1.1900422581924321,36.76548957824708,-1.2069463347620175,36.80909156799317,9544.7,1313.4239501953125,2024-08-10 01:00:25.481542,XGBRegressor
42
+ 2024-08-09T00:00:00Z,-1.1774272321794046,36.77707672119141,-1.2069463347620175,36.80909156799317,10751.5,1638.998291015625,2024-08-10 01:00:30.914118,XGBRegressor
43
+ 2024-08-09T00:00:00Z,-1.1774272321794046,36.77707672119141,-1.2069463347620175,36.9096888,20205.7,1790.7154541015625,2024-08-10 01:00:40.456516,XGBRegressor
44
+ 2024-08-09T00:00:00Z,-1.1279097306962256,36.80540084838868,-1.2069463347620175,36.9096888,20965.2,2047.6016845703125,2024-08-10 01:00:43.485801,XGBRegressor
45
+ 2024-08-09T00:00:00Z,-1.175458799728333,36.79922103881837,-1.2069463347620175,36.9096888,19400.4,1858.7974853515625,2024-08-10 01:00:46.329734,XGBRegressor
46
+ 2024-08-09T00:00:00Z,-1.175458799728333,36.79922103881837,-1.2069463347620175,36.9096888,19471,1858.7974853515625,2024-08-10 01:55:05.959182,XGBRegressor
47
+ 2024-08-10T00:00:00Z,-1.3032036,36.6825914,-1.2739575,36.8118501,30275.7,2248.195556640625,2024-08-10 02:00:17.240709,XGBRegressor
48
+ 2024-08-10T00:00:00Z,-1.3032036,36.6825914,-1.2739575,36.8118501,30275.7,2248.195556640625,2024-08-10 02:03:16.059912,XGBRegressor
49
+ 2024-08-10T00:00:00Z,-1.3032036,36.6825914,-1.2739575,36.8118501,30275.7,2248.195556640625,2024-08-10 02:17:31.852145,XGBRegressor
50
+ 2024-08-10T00:00:00Z,-1.3032036,36.6825914,-1.2739575,36.8118501,30275.7,2248.195556640625,2024-08-10 02:25:57.372842,XGBRegressor
51
+ 2024-08-10T00:00:00Z,-1.3032036,36.6825914,-1.2739575,36.8118501,30275.7,2248.195556640625,2024-08-10 02:34:44.333119,XGBRegressor
52
+ 2024-08-10T00:00:00Z,-1.3032036,36.6825914,-1.2739575,36.8118501,30275.7,2248.195556640625,2024-08-10 04:46:55.522587,XGBRegressor
53
+ 2024-08-10T00:00:00Z,-1.3032036,36.6825914,-1.2739575,36.8118501,30275.7,2248.195556640625,2024-08-10 04:48:40.898553,XGBRegressor
54
+ 2024-08-10T00:00:00Z,-1.3032036,36.6825914,-1.2739575,36.8118501,30275.7,2248.195556640625,2024-08-10 04:52:47.021149,XGBRegressor
55
+ 2024-08-10T00:00:00Z,-1.3032036,36.6825914,-1.2739575,36.8118501,30275.7,2248.195556640625,2024-08-10 04:53:40.181433,XGBRegressor
56
+ 2024-08-10T00:00:00Z,-1.3032036,36.6825914,-1.2739575,36.8118501,30275.7,2248.195556640625,2024-08-10 04:54:08.818077,XGBRegressor
57
+ 2024-08-10T00:00:00Z,-1.3032036,36.6825914,-1.2739575,36.8118501,30275.7,2248.195556640625,2024-08-10 04:54:39.964806,XGBRegressor
58
+ 2024-08-10T00:00:00Z,-1.3032036,36.6825914,-1.2739575,36.8118501,30275.7,2248.195556640625,2024-08-10 04:55:00.750310,XGBRegressor
59
+ 2024-08-10T00:00:00Z,-1.3032036,36.6825914,-1.2739575,36.8118501,30275.7,2248.195556640625,2024-08-10 04:55:24.277585,XGBRegressor
60
+ 2024-08-10T00:00:00Z,-1.3032036,36.6825914,-1.2739575,36.8118501,30275.7,2248.195556640625,2024-08-10 04:55:52.640168,XGBRegressor
61
+ 2024-08-10T00:00:00Z,-1.3032036,36.6825914,-1.2739575,36.8118501,30275.7,2248.195556640625,2024-08-10 04:56:41.120565,XGBRegressor
62
+ 2024-08-10T00:00:00Z,-1.3032036,36.6825914,-1.2739575,36.8118501,30275.7,2248.195556640625,2024-08-10 04:57:14.606174,XGBRegressor
63
+ 2024-08-10T00:00:00Z,-1.3032036,36.6825914,-1.2739575,36.8118501,30275.7,2248.195556640625,2024-08-10 04:57:49.061144,XGBRegressor
64
+ 2024-08-10T00:00:00Z,-1.3032036,36.6825914,-1.2739575,36.8118501,30275.7,2248.195556640625,2024-08-10 04:58:24.264051,XGBRegressor
65
+ 2024-08-10T00:00:00Z,-1.3032036,36.6825914,-1.2739575,36.8118501,30275.7,2248.195556640625,2024-08-10 04:59:37.341599,XGBRegressor
66
+ 2024-08-10T00:00:00Z,-1.3032036,36.6825914,-1.2739575,36.8118501,30275.7,2248.195556640625,2024-08-10 05:07:45.067268,XGBRegressor
67
+ 2024-08-10T00:00:00Z,-1.3032036,36.6825914,-1.2739575,36.8118501,30275.7,2248.195556640625,2024-08-10 05:11:13.945531,XGBRegressor
68
+ 2024-08-10T00:00:00Z,-1.3032036,36.6825914,-1.2739575,36.8118501,30275.7,2248.195556640625,2024-08-10 05:11:45.784325,XGBRegressor
69
+ 2024-08-10T00:00:00Z,-1.3032036,36.6825914,-1.2739575,36.8118501,30275.7,2248.195556640625,2024-08-10 05:11:47.969325,XGBRegressor
70
+ 2024-08-10T00:00:00Z,-1.3032036,36.6825914,-1.2739575,36.8118501,30275.7,2248.195556640625,2024-08-10 05:12:44.455092,XGBRegressor
71
+ 2024-08-10T00:00:00Z,-1.3032036,36.6825914,-1.2739575,36.8118501,30275.7,2248.195556640625,2024-08-10 05:14:02.068273,XGBRegressor
72
+ 2024-08-10T00:00:00Z,-1.3032036,36.6825914,-1.2739575,36.8118501,30275.7,2248.195556640625,2024-08-10 05:14:50.067799,XGBRegressor
73
+ 2024-08-10T00:00:00Z,-1.3032036,36.6825914,-1.2739575,36.8118501,30275.7,2248.195556640625,2024-08-10 05:15:53.882264,XGBRegressor
74
+ 2024-08-10T00:00:00Z,-1.3032036,36.6825914,-1.2739575,36.8118501,30275.7,2248.195556640625,2024-08-10 05:17:08.471432,XGBRegressor
75
+ 2024-08-10T00:00:00Z,-1.3032036,36.6825914,-1.2739575,36.8118501,30275.7,2248.195556640625,2024-08-10 05:17:43.487345,XGBRegressor
76
+ 2024-08-10T00:00:00Z,-1.3032036,36.6825914,-1.2739575,36.8118501,30275.7,2248.195556640625,2024-08-10 05:23:20.508611,XGBRegressor
77
+ 2024-08-10T00:00:00Z,-1.3032036,36.6825914,-1.2739575,36.8118501,30275.7,2248.195556640625,2024-08-10 05:24:06.444294,XGBRegressor
78
+ 2024-08-10T00:00:00Z,-1.3032036,36.6825914,-1.2739575,36.8118501,30275.7,2248.195556640625,2024-08-10 05:25:10.527673,XGBRegressor
79
+ 2024-08-10T00:00:00Z,-1.3032036,36.6825914,-1.2739575,36.8118501,30275.7,2248.195556640625,2024-08-10 05:33:26.824242,XGBRegressor
80
+ 2024-08-10T00:00:00Z,-1.3032036,36.6825914,-1.2739575,36.8118501,30275.7,2248.195556640625,2024-08-10 05:34:22.390386,XGBRegressor
81
+ 2024-08-10T00:00:00Z,-1.3032036,36.6825914,-1.2739575,36.8118501,30275.7,2248.195556640625,2024-08-10 05:34:48.686001,XGBRegressor
82
+ 2024-08-10T00:00:00Z,-1.3032036,36.6825914,-1.2739575,36.8118501,30275.7,2248.195556640625,2024-08-10 05:37:05.399326,XGBRegressor
83
+ 2024-08-10T00:00:00Z,-1.3032036,36.6825914,-1.2739575,36.8118501,30275.7,2248.195556640625,2024-08-10 05:37:27.662683,XGBRegressor
84
+ 2024-08-10T00:00:00Z,-1.3032036,36.6825914,-1.2739575,36.8118501,30275.7,2248.195556640625,2024-08-10 05:38:10.579333,XGBRegressor
85
+ 2024-08-10T00:00:00Z,-1.3032036,36.6825914,-1.2739575,36.8118501,30275.7,2248.195556640625,2024-08-10 05:38:58.529622,XGBRegressor
86
+ 2024-08-10T00:00:00Z,-1.3032036,36.6825914,-1.2739575,36.8118501,30275.7,2248.195556640625,2024-08-10 05:39:55.802412,XGBRegressor
87
+ 2024-08-10T00:00:00Z,-1.3032036,36.6825914,-1.2739575,36.8118501,30275.7,2248.195556640625,2024-08-10 05:52:19.046686,XGBRegressor
88
+ 2024-08-10T00:00:00Z,-1.3032036,36.6825914,-1.2739575,36.8118501,30275.7,2248.195556640625,2024-08-10 05:53:13.462921,XGBRegressor
89
+ 2024-08-10T00:00:00Z,-1.3032036,36.6825914,-1.2739575,36.8118501,30275.7,2248.195556640625,2024-08-10 05:53:54.617689,XGBRegressor
90
+ 2024-08-10T00:00:00Z,-1.3032036,36.6825914,-1.2739575,36.8118501,30275.7,2248.195556640625,2024-08-10 05:55:02.187459,XGBRegressor
91
+ 2024-08-10T00:00:00Z,-1.3032036,36.6825914,-1.2739575,36.8118501,30275.7,2248.195556640625,2024-08-10 05:56:36.306680,XGBRegressor
92
+ 2024-08-10T00:00:00Z,-1.3032036,36.6825914,-1.2739575,36.8118501,30275.7,2248.195556640625,2024-08-10 05:57:27.182927,XGBRegressor
93
+ 2024-08-10T00:00:00Z,-1.3032036,36.6825914,-1.2739575,36.8118501,30275.7,2248.195556640625,2024-08-10 05:57:48.751982,XGBRegressor
94
+ 2024-08-10T00:00:00Z,-1.3032036,36.6825914,-1.2739575,36.8118501,30275.7,2248.195556640625,2024-08-10 05:58:48.270546,XGBRegressor
95
+ 2024-08-10T00:00:00Z,-1.2801440285719086,36.684894561767585,-1.2739575,36.8118501,19549.8,1649.6002197265625,2024-08-10 05:59:30.414458,XGBRegressor
96
+ 2024-08-10T00:00:00Z,-1.2801440285719086,36.684894561767585,-1.2638402163901739,36.80866241455079,18955.2,1827.345703125,2024-08-10 05:59:34.704826,XGBRegressor
97
+ 2024-08-10T00:00:00Z,-1.3032036,36.6825914,-1.2739575,36.8118501,30275.7,2248.195556640625,2024-08-10 06:21:32.986965,XGBRegressor
98
+ 2024-08-10T00:00:00Z,-1.3032036,36.6825914,-1.2739575,36.8118501,30275.7,2248.195556640625,2024-08-10 06:27:10.609698,XGBRegressor
99
+ 2024-08-10T00:00:00Z,-1.2902741129989992,36.6830062866211,-1.2739575,36.8118501,28070.1,2311.299072265625,2024-08-10 06:27:18.727525,XGBRegressor
100
+ 2024-08-10T00:00:00Z,-1.3032036,36.6825914,-1.2739575,36.8118501,30275.7,2248.195556640625,2024-08-10 06:27:36.471580,XGBRegressor
101
+ 2024-08-10T00:00:00Z,-1.3032036,36.6825914,-1.2739575,36.8118501,30275.7,2248.195556640625,2024-08-10 06:29:22.494797,XGBRegressor
102
+ 2024-08-10T00:00:00Z,-1.3032036,36.6825914,-1.2739575,36.8118501,30275.7,2248.195556640625,2024-08-10 06:29:24.724339,XGBRegressor
103
+ 2024-08-10T00:00:00Z,-1.2935336819505119,36.68455123901368,-1.2739575,36.8118501,28781.6,2289.66650390625,2024-08-10 06:29:48.348109,XGBRegressor
104
+ 2024-08-10T00:00:00Z,-1.3032036,36.6825914,-1.2739575,36.8118501,30275.7,2248.195556640625,2024-08-10 06:30:47.689166,XGBRegressor
105
+ 2024-08-10T00:00:00Z,-1.293019013446838,36.69210433959962,-1.2739575,36.8118501,21425.5,1620.2279052734375,2024-08-10 06:30:55.372282,XGBRegressor
106
+ 2024-08-10T00:00:00Z,-1.3032036,36.6825914,-1.2739575,36.8118501,30275.7,2248.195556640625,2024-08-10 06:31:36.831780,XGBRegressor
107
+ 2024-08-10T00:00:00Z,-1.3032036,36.6825914,-1.2739575,36.8118501,30275.7,2248.195556640625,2024-08-10 06:32:09.052084,XGBRegressor
108
+ 2024-08-10T00:00:00Z,-1.3032036,36.6825914,-1.2739575,36.8118501,30275.7,2248.195556640625,2024-08-10 06:53:19.819876,XGBRegressor
109
+ 2024-08-10T00:00:00Z,-1.3032036,36.6825914,-1.2739575,36.8118501,30275.7,2248.195556640625,2024-08-10 06:54:33.780416,XGBRegressor
110
+ 2024-08-10T00:00:00Z,-1.2127270365248108,36.71356201171876,-1.2739575,36.8118501,16163.8,1582.31396484375,2024-08-10 06:54:49.923960,XGBRegressor
111
+ 2024-08-10T00:00:00Z,-1.3032036,36.6825914,-1.2739575,36.8118501,30275.7,2248.195556640625,2024-08-10 06:54:52.274297,XGBRegressor
112
+ 2024-08-10T00:00:00Z,-1.2377755661610916,36.70480728149415,-1.2739575,36.8118501,15709.4,1560.776611328125,2024-08-10 06:55:05.758887,XGBRegressor
113
+ 2024-08-10T00:00:00Z,-1.3032036,36.6825914,-1.2739575,36.8118501,30275.7,2248.195556640625,2024-08-10 06:55:07.944834,XGBRegressor
114
+ 2024-08-10T00:00:00Z,-1.3032036,36.6825914,-1.2739575,36.8118501,30275.7,2248.195556640625,2024-08-10 06:55:34.274873,XGBRegressor
115
+ 2024-08-10T00:00:00Z,-1.257333842852575,36.72248840332032,-1.2739575,36.8118501,11829.1,1272.27685546875,2024-08-10 06:55:44.443979,XGBRegressor
116
+ 2024-08-10T00:00:00Z,-1.3032036,36.6825914,-1.2739575,36.8118501,30275.7,2248.195556640625,2024-08-10 06:55:46.412234,XGBRegressor
117
+ 2024-08-10T00:00:00Z,-1.3032036,36.6825914,-1.2739575,36.8118501,30275.7,2248.195556640625,2024-08-10 06:57:57.635813,XGBRegressor
118
+ 2024-08-10T00:00:00Z,-1.3032036,36.6825914,-1.2739575,36.8118501,30275.7,2248.195556640625,2024-08-10 06:58:24.994561,XGBRegressor
119
+ 2024-08-10T00:00:00Z,-1.3032036,36.6825914,-1.2739575,36.8118501,30275.7,2248.195556640625,2024-08-10 06:59:09.230782,XGBRegressor
120
+ 2024-08-10T00:00:00Z,-1.2183887109319589,36.725578308105476,-1.2739575,36.8118501,14659.1,1666.1309814453125,2024-08-10 06:59:26.563158,XGBRegressor
121
+ 2024-08-10T00:00:00Z,-1.3032036,36.6825914,-1.2739575,36.8118501,30275.7,2248.195556640625,2024-08-10 06:59:28.209229,XGBRegressor
122
+ 2024-08-10T00:00:00Z,-1.3032036,36.6825914,-1.2739575,36.8118501,30275.7,2248.195556640625,2024-08-10 07:20:24.741010,XGBRegressor
123
+ 2024-08-10T00:00:00Z,-1.3032036,36.6825914,-1.2739575,36.8118501,30275.7,2248.195556640625,2024-08-10 08:25:32.067787,XGBRegressor
124
+ 2024-08-10T00:00:00Z,-1.3032036,36.6825914,-1.2739575,36.8118501,30275.7,2248.195556640625,2024-08-10 08:27:50.566361,XGBRegressor
125
+ 2024-08-10T00:00:00Z,-1.3032036,36.6825914,-1.2739575,36.8118501,30275.7,2248.195556640625,2024-08-10 08:29:35.751549,XGBRegressor
126
+ 2024-08-10T00:00:00Z,-1.3032036,36.6825914,-1.2739575,36.8118501,30275.7,2248.195556640625,2024-08-10 08:29:58.189047,XGBRegressor
127
+ 2024-08-10T00:00:00Z,-1.3032036,36.6825914,-1.2739575,36.8118501,30275.7,2248.195556640625,2024-08-10 08:38:10.125708,XGBRegressor
128
+ 2024-08-10T00:00:00Z,-1.2573318688925188,36.73278808593751,-1.2739575,36.8118501,12705.4,1684.4033203125,2024-08-10 08:38:49.128323,XGBRegressor
129
+ 2024-08-10T00:00:00Z,-1.3032036,36.6825914,-1.2739575,36.8118501,30275.7,2248.195556640625,2024-08-10 08:43:14.299165,XGBRegressor
130
+ 2024-08-10T00:00:00Z,-1.2279931353600209,36.698627471923835,-1.2739575,36.8118501,16062.3,1561.5941162109375,2024-08-10 08:43:36.643750,XGBRegressor
131
+ 2024-08-10T00:00:00Z,-1.3032036,36.6825914,-1.2739575,36.8118501,30275.7,2248.195556640625,2024-08-10 08:48:01.141625,XGBRegressor
132
+ 2024-08-10T00:00:00Z,-1.2032865833452848,36.759567260742195,-1.2739575,36.8118501,13725.1,1796.5091552734375,2024-08-10 08:48:08.710935,XGBRegressor
133
+ 2024-08-10T00:00:00Z,-1.200426822924041,36.79012298583985,-1.2739575,36.8118501,13240.0,2102.8544921875,2024-08-10 08:48:24.408470,XGBRegressor
134
+ 2024-08-10T00:00:00Z,-1.3032036,36.6825914,-1.2739575,36.8118501,30275.7,2248.195556640625,2024-08-10 08:52:01.144916,XGBRegressor
135
+ 2024-08-10T00:00:00Z,-1.2050023234074223,36.784801483154304,-1.2739575,36.8118501,12320.7,1765.6004638671875,2024-08-10 08:52:06.139682,XGBRegressor
136
+ 2024-08-10T00:00:00Z,-1.3032036,36.6825914,-1.2739575,36.8118501,30275.7,2248.195556640625,2024-08-10 08:56:42.125278,XGBRegressor
137
+ 2024-08-10T00:00:00Z,-1.2056886191297886,36.82737350463868,-1.2739575,36.8118501,15347.4,1848.7464599609375,2024-08-10 08:56:46.990389,XGBRegressor
138
+ 2024-08-10T00:00:00Z,-1.3032036,36.6825914,-1.2739575,36.8118501,30275.7,2248.195556640625,2024-08-10 08:57:19.686314,XGBRegressor
139
+ 2024-08-10T00:00:00Z,-1.3032036,36.6825914,-1.2739575,36.8118501,30275.7,2248.195556640625,2024-08-10 09:00:52.801043,XGBRegressor
140
+ 2024-08-10T00:00:00Z,-1.207232783872329,36.79681777954102,-1.2739575,36.8118501,18120.3,2039.7274169921875,2024-08-10 09:00:57.623056,XGBRegressor
141
+ 2024-08-10T00:00:00Z,-1.3032036,36.6825914,-1.2739575,36.8118501,30275.7,2248.195556640625,2024-08-10 09:03:00.427472,XGBRegressor
142
+ 2024-08-10T00:00:00Z,-1.2176987661768903,36.76815032958985,-1.2739575,36.8118501,11947.2,1457.3206787109375,2024-08-10 09:03:08.395018,XGBRegressor
143
+ 2024-08-10T00:00:00Z,-1.3032036,36.6825914,-1.2739575,36.8118501,30275.7,2248.195556640625,2024-08-10 09:05:39.152886,XGBRegressor
144
+ 2024-08-10T00:00:00Z,-1.2075759314738517,36.77209854125977,-1.2739575,36.8118501,13126.2,1555.254638671875,2024-08-10 09:05:43.600664,XGBRegressor
145
+ 2024-08-10T00:00:00Z,-1.200084910976205,36.82333946228028,-1.2739575,36.8118501,16497.7,1912.3221435546875,2024-08-10 09:05:54.353503,XGBRegressor
146
+ 2024-08-10T00:00:00Z,-1.3032036,36.6825914,-1.2739575,36.8118501,30275.7,2248.195556640625,2024-08-10 09:13:41.058284,XGBRegressor
147
+ 2024-08-10T00:00:00Z,-1.3032036,36.6825914,-1.2739575,36.8118501,30275.7,2248.195556640625,2024-08-10 09:13:42.784383,XGBRegressor
148
+ 2024-08-10T00:00:00Z,-1.2128947137499875,36.82239532470704,-1.2739575,36.8118501,15442.9,1848.7464599609375,2024-08-10 09:13:47.591045,XGBRegressor
149
+ 2024-08-10T00:00:00Z,-1.3032036,36.6825914,-1.2739575,36.8118501,30275.7,2248.195556640625,2024-08-10 09:15:59.776790,XGBRegressor
150
+ 2024-08-10T00:00:00Z,-1.2132378606351348,36.83063507080079,-1.2739575,36.8118501,14198.7,2032.469482421875,2024-08-10 09:16:03.594644,XGBRegressor
151
+ 2024-08-10T00:00:00Z,-1.3032036,36.6825914,-1.2739575,36.8118501,30275.7,2248.195556640625,2024-08-10 09:16:32.139825,XGBRegressor
152
+ 2024-08-10T00:00:00Z,-1.2127231402910912,36.81329727172852,-1.2739575,36.8118501,16359.7,1978.087158203125,2024-08-10 09:16:36.234624,XGBRegressor
153
+ 2024-08-10T00:00:00Z,-1.3032036,36.6825914,-1.2739575,36.8118501,30275.7,2248.195556640625,2024-08-10 09:28:42.621709,XGBRegressor
154
+ 2024-08-10T00:00:00Z,-1.2170124734964574,36.77673339843751,-1.2739575,36.8118501,10882.8,1428.6334228515625,2024-08-10 09:28:48.346174,XGBRegressor
155
+ 2024-08-10T00:00:00Z,-1.3032036,36.6825914,-1.2739575,36.8118501,30275.7,2248.195556640625,2024-08-10 09:29:19.811754,XGBRegressor
156
+ 2024-08-10T00:00:00Z,-1.3032036,36.6825914,-1.2739575,36.81185,30275.7,2248.195556640625,2024-08-10 09:29:54.365828,XGBRegressor
157
+ 2024-08-10T00:00:00Z,-1.3032036,36.6825914,-1.2739575,36.9096888,33237.6,2338.11279296875,2024-08-10 09:31:12.501940,XGBRegressor
158
+ 2024-08-10T00:00:00Z,-1.3032036,36.6825914,-0.8995204,36.9096888,92475.0,2972.66845703125,2024-08-10 09:31:14.928219,XGBRegressor
159
+ 2024-08-10T00:00:00Z,-1.3032036,36.6825914,-1.2739575,36.8118501,30275.7,2248.195556640625,2024-08-10 09:31:27.332167,XGBRegressor
160
+ 2024-08-10T00:00:00Z,-1.3032036,36.6825914,-1.2739575,36.8118501,30275.7,2248.195556640625,2024-08-10 09:31:35.315324,XGBRegressor
161
+ 2024-08-10T00:00:00Z,-1.3032036,36.6825914,-1.2739575,36.8118501,30271,2248.195556640625,2024-08-10 09:31:39.251510,XGBRegressor
162
+ 2024-08-10T00:00:00Z,-1.3032036,36.6825914,-1.2739575,36.8118501,30261,2248.195556640625,2024-08-10 09:31:40.699399,XGBRegressor
163
+ 2024-08-10T00:00:00Z,-1.3032036,36.6825914,-1.2739575,36.8118501,30275.7,2248.195556640625,2024-08-10 09:31:42.211939,XGBRegressor
164
+ 2024-08-10T00:00:00Z,7.447112616557192,35.59570312500001,-1.2739575,36.8118501,1446155.4,4159.216796875,2024-08-10 09:31:53.210885,XGBRegressor
165
+ 2024-08-10T00:00:00Z,-1.3032036,36.6825914,-1.2739575,36.8118501,30275.7,2248.195556640625,2024-08-10 09:32:13.722519,XGBRegressor
166
+ 2024-08-10T00:00:00Z,-1.3032036,36.6825914,-1.2739575,36.8118501,30275.7,2248.195556640625,2024-08-10 09:34:54.232422,XGBRegressor
167
+ 2024-08-10T00:00:00Z,-1.2664250939961246,36.69021606445313,-1.2739575,36.8118501,15881.6,1728.9835205078125,2024-08-10 09:34:59.097832,XGBRegressor
168
+ 2024-08-10T00:00:00Z,-1.1880058644837717,36.70274734497071,-1.2739575,36.8118501,23382.1,1923.9996337890625,2024-08-10 09:35:03.057558,XGBRegressor
169
+ 2024-08-10T00:00:00Z,-1.3032036,36.6825914,-1.2739575,36.8118501,30275.7,2248.195556640625,2024-08-10 09:39:54.098035,XGBRegressor
170
+ 2024-08-10T00:00:00Z,-1.2082622265468632,36.79681777954102,-1.2739575,36.8118501,14046.7,2127.74267578125,2024-08-10 09:40:00.292722,XGBRegressor
171
+ 2024-08-10T00:00:00Z,-1.2027445085810615,36.842737197875984,-1.2739575,36.8118501,16576.0,1912.7987060546875,2024-08-10 09:40:03.574686,XGBRegressor
172
+ 2024-08-10T00:00:00Z,0.15456,37.908383,-1.2739575,36.8118501,265314.5,4090.07470703125,2024-08-10 09:40:12.373199,XGBRegressor
173
+ 2024-08-10T00:00:00Z,-1.3032036,36.6825914,-1.2739575,36.8118501,30275.7,2248.195556640625,2024-08-10 09:40:18.507326,XGBRegressor
174
+ 2024-08-10T00:00:00Z,-1.3032036,36.6825914,-1.2739575,36.8118501,30275.7,2248.195556640625,2024-08-10 09:59:19.861408,XGBRegressor
175
+ 2024-08-10T00:00:00Z,-1.241547327596531,36.70583724975587,-1.2739575,36.8118501,14335.2,1502.6383056640625,2024-08-10 09:59:23.988120,XGBRegressor
176
+ 2024-08-10T00:00:00Z,-1.179076777258127,36.80334091186524,-1.2739575,36.8118501,22929.6,2002.754150390625,2024-08-10 09:59:27.472862,XGBRegressor
177
+ 2024-08-10T00:00:00Z,-1.3032036,36.6825914,-1.2739575,36.8118501,30275.7,2248.195556640625,2024-08-10 10:05:38.009271,XGBRegressor
178
+ 2024-08-10T00:00:00Z,-1.2144388743903374,36.79990768432618,-1.2739575,36.8118501,10377.8,1532.8798828125,2024-08-10 10:05:42.238174,XGBRegressor
179
+ 2024-08-10T00:00:00Z,-1.3032036,36.6825914,-1.2739575,36.8118501,30275.7,2248.195556640625,2024-08-10 10:09:43.624780,XGBRegressor
180
+ 2024-08-10T00:00:00Z,-1.2482386121143034,36.73587799072266,-1.2739575,36.8118501,13174.6,1835.4429931640625,2024-08-10 10:09:47.124305,XGBRegressor
181
+ 2024-08-10T00:00:00Z,-1.3032036,36.6825914,-1.2739575,36.8118501,30275.7,2248.195556640625,2024-08-10 10:10:08.565936,XGBRegressor
182
+ 2024-08-10T00:00:00Z,-1.2600769968003083,36.72094345092774,-1.2739575,36.8118501,10882.9,1121.5931396484375,2024-08-10 10:10:12.440866,XGBRegressor
183
+ 2024-08-10T00:00:00Z,-1.3032036,36.6825914,-1.2739575,36.8118501,30275.7,2248.195556640625,2024-08-10 10:10:13.940982,XGBRegressor
184
+ 2024-08-10T00:00:00Z,-1.2226743828782145,36.799736022949226,-1.2739575,36.8118501,7867.7,1269.2529296875,2024-08-10 10:10:17.821223,XGBRegressor
185
+ 2024-08-10T00:00:00Z,-1.3032036,36.6825914,-1.2739575,36.8118501,30275.7,2248.195556640625,2024-08-10 10:10:20.046695,XGBRegressor
186
+ 2024-08-10T00:00:00Z,-1.3032036,36.6825914,-1.2739575,36.8118501,30275.7,2248.195556640625,2024-08-10 10:17:43.128651,XGBRegressor
187
+ 2024-08-10T00:00:00Z,-1.2298804320860974,36.76214218139649,-1.2739575,36.8118501,8710.4,1251.9375,2024-08-10 10:17:47.823701,XGBRegressor
188
+ 2024-08-10T00:00:00Z,-1.3032036,36.6825914,-1.2739575,36.8118501,30275.7,2248.195556640625,2024-08-10 10:23:16.757416,XGBRegressor
189
+ 2024-08-10T00:00:00Z,-1.2089485214465474,36.771068572998054,-1.2739575,36.8118501,13063.5,1529.4615478515625,2024-08-10 10:23:20.509823,XGBRegressor
190
+ 2024-08-10T00:00:00Z,-1.3032036,36.6825914,-1.2739575,36.8118501,30275.7,2248.195556640625,2024-08-10 10:23:22.761241,XGBRegressor
191
+ 2024-08-10T00:00:00Z,-1.2116936993094263,36.77158355712891,-1.2739575,36.8118501,11868.9,1445.2916259765625,2024-08-10 10:23:26.916097,XGBRegressor
192
+ 2024-08-10T00:00:00Z,-1.3032036,36.6825914,-1.2739575,36.8118501,30275.7,2248.195556640625,2024-08-10 10:23:28.162943,XGBRegressor
193
+ 2024-08-10T00:00:00Z,-1.3032036,36.6825914,-1.2739575,36.8118501,30275.7,2248.195556640625,2024-08-10 10:23:36.119665,XGBRegressor
194
+ 2024-08-10T00:00:00Z,-1.3032036,36.6825914,-1.2739575,36.8118501,30275.7,2248.195556640625,2024-08-10 10:47:45.927636,XGBRegressor
195
+ 2024-08-10T00:00:00Z,-1.2254217231944835,36.75064086914063,-1.2739575,36.8118501,10332.3,1438.423095703125,2024-08-10 10:47:54.003267,XGBRegressor
196
+ 2024-08-10T00:00:00Z,-1.3032036,36.6825914,-1.2739575,36.8118501,30275.7,2248.195556640625,2024-08-10 10:47:56.519179,XGBRegressor
197
+ 2024-08-10T00:00:00Z,-1.3032036,36.6825914,-1.2739575,36.8118501,30275.7,2248.195556640625,2024-08-10 10:48:18.687532,XGBRegressor
198
+ 2024-08-10T00:00:00Z,-1.3032036,36.6825914,-1.2739575,36.8118501,30275.7,2248.195556640625,2024-08-10 10:49:38.458178,XGBRegressor
199
+ 2024-08-10T00:00:00Z,-1.3032036,36.6825914,-1.2739575,36.8118501,30275.7,2248.195556640625,2024-08-10 10:49:49.963036,XGBRegressor
200
+ 2024-08-10T00:00:00Z,-1.3032036,36.6825914,-1.2739575,36.8118501,30275.7,2248.195556640625,2024-08-10 10:56:59.218604,XGBRegressor
201
+ 2024-08-10T00:00:00Z,-1.2585341118550857,36.73965454101563,-1.2739575,36.8118501,9422.6,1273.8427734375,2024-08-10 10:57:07.480558,XGBRegressor
202
+ 2024-08-10T00:00:00Z,-1.3032036,36.6825914,-1.2739575,36.8118501,30275.7,2248.195556640625,2024-08-10 10:57:10.305898,XGBRegressor
203
+ 2024-08-10T00:00:00Z,-1.3032036,36.6825914,-1.2739575,36.8118501,30275.7,2248.195556640625,2024-08-10 10:57:29.999065,XGBRegressor
204
+ 2024-08-10T00:00:00Z,-1.3032036,36.6825914,-1.2739575,36.8118501,30275.7,2248.195556640625,2024-08-10 11:20:36.825838,XGBRegressor
205
+ 2024-08-10T00:00:00Z,-1.3032036,36.6825914,-1.2357054777947696,36.816215515136726,34455.9,2523.17578125,2024-08-10 11:21:08.579534,XGBRegressor
206
+ 2024-08-10T00:00:00Z,-1.3032036,36.6825914,-1.2739575,36.8118501,30275.7,2248.195556640625,2024-08-10 11:21:13.940036,XGBRegressor
207
+ 2024-08-10T00:00:00Z,-1.3032036,36.6825914,-1.2739575,36.8118501,30275.7,2248.195556640625,2024-08-10 11:21:28.128858,XGBRegressor
208
+ 2024-08-10T00:00:00Z,-1.3032036,36.6825914,-1.2739575,36.8118501,30275.7,2248.195556640625,2024-08-10 11:23:37.228787,XGBRegressor
209
+ 2024-08-10T00:00:00Z,-1.3032036,36.6825914,-1.222494401548033,36.7928695678711,31651.2,2016.694580078125,2024-08-10 11:23:45.848554,XGBRegressor
210
+ 2024-08-10T00:00:00Z,-1.3032036,36.6825914,-1.2739575,36.8118501,30275.7,2248.195556640625,2024-08-10 11:23:49.387702,XGBRegressor
211
+ 2024-08-10T00:00:00Z,-1.3032036,36.6825914,-1.2739575,36.8118501,30275.7,2248.195556640625,2024-08-10 11:24:19.054615,XGBRegressor
212
+ 2024-08-10T00:00:00Z,-1.3032036,36.6825914,-1.2739575,36.8118501,30275.7,2248.195556640625,2024-08-10 11:25:54.172464,XGBRegressor
213
+ 2024-08-10T00:00:00Z,-1.3032036,36.6825914,-1.1916111137925989,36.824455261230476,35508.0,2523.17578125,2024-08-10 11:26:05.958082,XGBRegressor
214
+ 2024-08-10T00:00:00Z,-1.3032036,36.6825914,-1.2739575,36.8118501,30275.7,2248.195556640625,2024-08-10 11:26:12.125168,XGBRegressor
215
+ 2024-08-10T00:00:00Z,-1.3032036,36.6825914,-1.2739575,36.8118501,30275.7,2248.195556640625,2024-08-10 11:26:34.695675,XGBRegressor
216
+ 2024-08-10T00:00:00Z,-1.3032036,36.6825914,-1.2739575,36.8118501,30275.7,2248.195556640625,2024-08-10 11:26:53.987980,XGBRegressor
217
+ 2024-08-10T00:00:00Z,-1.3032036,36.6825914,-1.2739575,36.8118501,30275.7,2248.195556640625,2024-08-10 11:30:39.385403,XGBRegressor
218
+ 2024-08-10T00:00:00Z,-1.2286794252329019,36.71665191650391,-1.2739575,36.8118501,15054.6,1504.7021484375,2024-08-10 11:30:48.178246,XGBRegressor
219
+ 2024-08-10T00:00:00Z,-1.3032036,36.6825914,-1.2739575,36.8118501,30275.7,2248.195556640625,2024-08-10 11:30:51.177904,XGBRegressor
220
+ 2024-08-10T00:00:00Z,-1.242748328631474,36.698112487792976,-1.2739575,36.8118501,15230.2,1536.0408935546875,2024-08-10 11:30:55.882099,XGBRegressor
221
+ 2024-08-10T00:00:00Z,-1.3032036,36.6825914,-1.2739575,36.8118501,30275.7,2248.195556640625,2024-08-10 11:30:57.831853,XGBRegressor
222
+ 2024-08-10T00:00:00Z,-1.2382874648957307,36.71321868896485,-1.2739575,36.8118501,14099.6,1456.050537109375,2024-08-10 11:31:09.443968,XGBRegressor
223
+ 2024-08-10T00:00:00Z,-1.3032036,36.6825914,-1.2739575,36.8118501,30275.7,2248.195556640625,2024-08-10 11:31:16.996038,XGBRegressor
224
+ 2024-08-10T00:00:00Z,-1.3032036,36.6825914,-1.2739575,36.8118501,30275.7,2248.195556640625,2024-08-10 11:37:13.616211,XGBRegressor
225
+ 2024-08-10T00:00:00Z,-1.2267921276585843,36.76042556762696,-1.2739575,36.8118501,9095.0,1278.6177978515625,2024-08-10 11:37:18.368550,XGBRegressor
226
+ 2024-08-10T00:00:00Z,-1.3032036,36.6825914,-1.2739575,36.8118501,30275.7,2248.195556640625,2024-08-10 11:37:20.382926,XGBRegressor
227
+ 2024-08-10T00:00:00Z,-1.27466044015017,36.691417694091804,-1.2739575,36.8118501,17657.3,1763.36328125,2024-08-10 11:37:23.226739,XGBRegressor
228
+ 2024-08-10T00:00:00Z,-1.3032036,36.6825914,-1.2739575,36.8118501,30275.7,2248.195556640625,2024-08-10 11:37:33.776223,XGBRegressor
229
+ 2024-08-10T00:00:00Z,-1.3032036,36.6825914,-1.2739575,36.8118501,30275.7,2248.195556640625,2024-08-10 11:37:54.204290,XGBRegressor
230
+ 2024-08-10T00:00:00Z,-1.3032036,36.6825914,-1.2739575,36.8118501,30275.7,2248.195556640625,2024-08-10 11:37:58.880375,XGBRegressor
231
+ 2024-08-10T00:00:00Z,-1.3032036,36.6825914,-1.2739575,36.8118501,30275.7,2248.195556640625,2024-08-10 11:38:44.472698,XGBRegressor
232
+ 2024-08-10T00:00:00Z,-1.3032036,36.6825914,-1.2235238384051548,36.80110931396485,29216.1,2007.029541015625,2024-08-10 11:38:52.815815,XGBRegressor
233
+ 2024-08-10T00:00:00Z,-1.3032036,36.6825914,-1.2739575,36.8118501,30275.7,2248.195556640625,2024-08-10 11:38:54.174006,XGBRegressor
234
+ 2024-08-10T00:00:00Z,-1.3032036,36.6825914,-1.2739575,36.8118501,30275.7,2248.195556640625,2024-08-10 11:38:59.917342,XGBRegressor
235
+ 2024-08-10T00:00:00Z,-1.3032036,36.6825914,-1.2739575,36.8118501,30275.7,2248.195556640625,2024-08-10 11:42:18.231868,XGBRegressor
236
+ 2024-08-10T00:00:00Z,-1.3032036,36.6825914,-1.2099695549379577,36.80505752563477,28758.8,2296.6904296875,2024-08-10 11:42:27.637107,XGBRegressor
237
+ 2024-08-10T00:00:00Z,-1.3032036,36.6825914,-1.2739575,36.8118501,30275.7,2248.195556640625,2024-08-10 11:42:28.192067,XGBRegressor
238
+ 2024-08-10T00:00:00Z,-1.3032036,36.6825914,-1.2739575,36.8118501,30275.7,2248.195556640625,2024-08-10 11:42:42.452855,XGBRegressor
239
+ 2024-08-10T00:00:00Z,-1.3032036,36.6825914,-1.2739575,36.8118501,30275.7,2248.195556640625,2024-08-10 11:49:32.228258,XGBRegressor
240
+ 2024-08-10T00:00:00Z,-1.3032036,36.6825914,-1.2739575,36.8118501,30275.7,2248.195556640625,2024-08-10 11:53:02.509853,XGBRegressor
241
+ 2024-08-10T00:00:00Z,-1.3032036,36.6825914,-1.2192345155648856,36.80042266845704,28845.9,2023.77783203125,2024-08-10 11:53:09.172977,XGBRegressor
242
+ 2024-08-10T00:00:00Z,-1.3032036,36.6825914,-1.2266821546264286,36.72514915466309,17155.1,1145.0989990234375,2024-08-10 11:53:12.693940,XGBRegressor
243
+ 2024-08-10T00:00:00Z,-1.3032036,36.6825914,-1.2739575,36.8118501,30275.7,2248.195556640625,2024-08-10 11:53:15.474304,XGBRegressor
244
+ 2024-08-10T00:00:00Z,-1.3032036,36.6825914,-1.2739575,36.8118501,30275.7,2248.195556640625,2024-08-10 11:53:25.026550,XGBRegressor
245
+ 2024-08-10T00:00:00Z,-1.3032036,36.6825914,-1.2739575,36.8118501,30275.7,2248.195556640625,2024-08-10 11:56:14.553232,XGBRegressor
246
+ 2024-08-10T00:00:00Z,-1.3032036,36.9096888,-1.2739575,36.8118501,24443.9,2245.502685546875,2024-08-10 11:56:20.194509,XGBRegressor
247
+ 2024-08-10T00:00:00Z,-1.3032036,36.6825914,-1.2739575,36.8118501,30275.7,2248.195556640625,2024-08-10 12:55:03.608328,XGBRegressor
248
+ 2024-08-10T00:00:00Z,-1.2293657149294657,36.69897079467774,-1.2739575,36.8118501,16660.4,1546.0477294921875,2024-08-10 12:55:08.413898,XGBRegressor
249
+ 2024-08-10T00:00:00Z,-1.1662050681972858,36.827201843261726,-1.2739575,36.8118501,20221.9,1891.708740234375,2024-08-10 12:55:13.844907,XGBRegressor
250
+ 2024-08-10T00:00:00Z,-1.3032036,36.6825914,-1.2739575,36.8118501,30275.7,2248.195556640625,2024-08-10 12:55:16.519414,XGBRegressor
251
+ 2024-08-10T00:00:00Z,-1.3032036,36.6825914,-1.2739575,36.8118501,30275.7,2248.195556640625,2024-08-10 12:55:28.190445,XGBRegressor
252
+ 2024-08-10T00:00:00Z,-1.3032036,36.6825914,-1.2739575,36.8118501,30275.7,2248.195556640625,2024-08-10 12:57:22.964740,XGBRegressor
253
+ 2024-08-10T00:00:00Z,-1.3032036,36.6825914,-1.2739575,36.8118501,30275.7,2248.195556640625,2024-08-10 13:00:48.364323,XGBRegressor
254
+ 2024-08-10T00:00:00Z,-1.3032036,36.6825914,-1.2398232024468718,36.786518096923835,24171.1,1552.1275634765625,2024-08-10 13:00:52.397480,XGBRegressor
255
+ 2024-08-10T00:00:00Z,-1.3032036,36.6825914,-1.2350093468937962,36.727123260498054,17669.9,1247.2218017578125,2024-08-10 13:00:55.265238,XGBRegressor
256
+ 2024-08-10T00:00:00Z,-1.3032036,36.6825914,-1.2739575,36.8118501,30275.7,2248.195556640625,2024-08-10 13:01:01.715347,XGBRegressor
257
+ 2024-08-10T00:00:00Z,-1.3032036,36.6825914,-1.2739575,36.8118501,30275.7,2248.195556640625,2024-08-10 13:01:12.902097,XGBRegressor
258
+ 2024-08-10T00:00:00Z,-1.3032036,36.6825914,-1.2739575,36.8118501,30275.7,2248.195556640625,2024-08-10 13:02:52.487140,XGBRegressor
259
+ 2024-08-10T00:00:00Z,-1.2619642705591159,36.69330596923829,-1.2739575,36.8118501,15419.6,1563.1094970703125,2024-08-10 13:02:55.454723,XGBRegressor
260
+ 2024-08-10T00:00:00Z,-1.2326137178075556,36.7324447631836,-1.2739575,36.8118501,12972.2,1681.5767822265625,2024-08-10 13:02:58.467404,XGBRegressor
261
+ 2024-08-10T00:00:00Z,-1.3032036,36.6825914,-1.2739575,36.8118501,30275.7,2248.195556640625,2024-08-10 13:02:59.961264,XGBRegressor
262
+ 2024-08-10T00:00:00Z,-1.3032036,36.6825914,-1.2739575,36.8118501,30275.7,2248.195556640625,2024-08-10 13:03:10.116980,XGBRegressor
263
+ 2024-08-10T00:00:00Z,-1.3032036,36.6825914,-1.2739575,36.8118501,30275.7,2248.195556640625,2024-08-10 13:06:12.129723,XGBRegressor
264
+ 2024-08-10T00:00:00Z,-1.3032036,36.6825914,-1.2447987778544312,36.77862167358399,23242.0,1668.1143798828125,2024-08-10 13:06:16.038222,XGBRegressor
265
+ 2024-08-10T00:00:00Z,-1.3032036,36.6825914,-1.242045225528559,36.699657440185554,13701.2,1078.7432861328125,2024-08-10 13:06:19.390901,XGBRegressor
266
+ 2024-08-10T00:00:00Z,-1.3032036,36.6825914,-1.2739575,36.8118501,30275.7,2248.195556640625,2024-08-10 13:06:20.577716,XGBRegressor
267
+ 2024-08-10T00:00:00Z,-1.3032036,36.6825914,-1.2739575,36.8118501,30275.7,2248.195556640625,2024-08-10 13:06:30.214063,XGBRegressor
268
+ 2024-08-10T00:00:00Z,-1.3032036,36.6825914,-1.2739575,36.8118501,30275.7,2248.195556640625,2024-08-10 17:18:17.716332,XGBRegressor
269
+ 2024-08-10T00:00:00Z,-1.25492987960504,36.68729782104493,-1.2739575,36.8118501,14962.1,1575.412109375,2024-08-10 17:18:24.572830,XGBRegressor
270
+ 2024-08-10T00:00:00Z,-1.3032036,36.6825914,-1.2739575,36.8118501,30275.7,2248.195556640625,2024-08-10 17:18:28.015581,XGBRegressor
271
+ 2024-08-10T00:00:00Z,-1.261449559669742,36.69605255126954,-1.2739575,36.8118501,14979.1,1540.4000244140625,2024-08-10 17:18:31.857639,XGBRegressor
272
+ 2024-08-10T00:00:00Z,-1.3032036,36.6825914,-1.2739575,36.8118501,30275.7,2248.195556640625,2024-08-10 17:18:41.435645,XGBRegressor
273
+ 2024-08-10T00:00:00Z,-1.3032036,36.6825914,-1.2739575,36.8118501,30275.7,2248.195556640625,2024-08-10 17:22:55.852514,XGBRegressor
274
+ 2024-08-10T00:00:00Z,-1.3032036,36.6825914,-1.2118568643066119,36.792011260986335,27067.6,1908.950439453125,2024-08-10 17:23:05.771185,XGBRegressor
275
+ 2024-08-10T00:00:00Z,-1.3032036,36.6825914,-1.2739575,36.8118501,30275.7,2248.195556640625,2024-08-10 17:23:08.493386,XGBRegressor
276
+ 2024-08-10T00:00:00Z,-1.3032036,36.6825914,-1.2739575,36.8118501,30275.7,2248.195556640625,2024-08-10 17:23:19.553333,XGBRegressor
277
+ 2024-08-10T00:00:00Z,-1.3032036,36.6825914,-1.2739575,36.8118501,30275.7,2248.195556640625,2024-08-10 17:23:29.872288,XGBRegressor
278
+ 2024-08-10T00:00:00Z,-1.3032036,36.6825914,-1.2739575,36.8118501,30275.7,2248.195556640625,2024-08-10 17:23:51.654659,XGBRegressor
279
+ 2024-08-10T00:00:00Z,-1.3032036,36.6825914,-1.2739575,36.8118501,30275.7,2248.195556640625,2024-08-10 17:23:59.159934,XGBRegressor
280
+ 2024-08-10T00:00:00Z,-1.3032036,36.6825914,-1.2739575,36.8118501,30275.7,2248.195556640625,2024-08-10 17:24:18.558719,XGBRegressor
281
+ 2024-08-10T00:00:00Z,-1.3032036,36.6825914,-1.2739575,36.8118501,30275.7,2248.195556640625,2024-08-10 17:25:23.837098,XGBRegressor
282
+ 2024-08-10T00:00:00Z,-1.3032036,36.6825914,-1.2739575,36.8118501,30275.7,2248.195556640625,2024-08-10 17:25:45.868283,XGBRegressor
283
+ 2024-08-10T00:00:00Z,-1.3032036,36.6825914,-1.2739575,36.8118501,30275.7,2248.195556640625,2024-08-10 17:26:33.680141,XGBRegressor
284
+ 2024-08-10T00:00:00Z,-1.3032036,36.9096888,-1.2739575,36.8118501,24443.9,2245.502685546875,2024-08-10 17:26:41.792489,XGBRegressor
285
+ 2024-08-10T00:00:00Z,-1.3032036,36.6825914,-1.2739575,36.8118501,30275.7,2248.195556640625,2024-08-10 17:26:47.316142,XGBRegressor
286
+ 2024-08-10T00:00:00Z,-1.3032036,36.6825914,-1.2739575,36.8118501,30275.7,2248.195556640625,2024-08-10 17:27:35.336370,XGBRegressor
287
+ 2024-08-10T00:00:00Z,-1.3032036,36.6825914,-1.2739575,36.8118501,30275.7,2248.195556640625,2024-08-10 17:27:45.717615,XGBRegressor
288
+ 2024-08-10T00:00:00Z,-1.3032036,36.6825914,-1.2739575,36.8118501,30275.7,2248.195556640625,2024-08-10 17:27:55.910763,XGBRegressor
289
+ 2024-08-10T00:00:00Z,-1.3032036,36.6825914,-1.2739575,36.8118501,30275.7,2248.195556640625,2024-08-10 17:28:29.685227,XGBRegressor
290
+ 2024-08-10T00:00:00Z,-1.3032036,36.6825914,-1.2739575,36.8118501,30275.7,2248.195556640625,2024-08-10 17:29:13.606686,XGBRegressor
291
+ 2024-08-10T00:00:00Z,-1.3032036,36.6825914,-1.2739575,36.8118501,30275.7,2248.195556640625,2024-08-10 17:29:22.736188,XGBRegressor
292
+ 2024-08-10T00:00:00Z,-1.3032036,36.6825914,-1.2739575,36.8118501,30275.7,2248.195556640625,2024-08-10 17:29:32.359735,XGBRegressor
293
+ 2024-08-10T00:00:00Z,-1.3032036,36.6825914,-1.2739575,36.8118501,30275.7,2248.195556640625,2024-08-10 17:29:42.100453,XGBRegressor
294
+ 2024-08-10T00:00:00Z,-1.3032036,36.6825914,-1.2739575,36.8118501,30275.7,2248.195556640625,2024-08-10 17:29:56.168046,XGBRegressor
295
+ 2024-08-10T00:00:00Z,-1.3032036,36.6825914,-1.2739575,36.8118501,30275.7,2248.195556640625,2024-08-10 17:30:16.347959,XGBRegressor
296
+ 2024-08-10T00:00:00Z,-1.3032036,36.6825914,-1.2739575,36.8118501,30275.7,2248.195556640625,2024-08-10 17:30:24.984939,XGBRegressor
297
+ 2024-08-10T00:00:00Z,-1.3032036,36.6825914,-1.2739575,36.8118501,30275.7,2248.195556640625,2024-08-10 17:33:22.203323,XGBRegressor
298
+ 2024-08-10T00:00:00Z,-1.3032036,36.6825914,-1.2122000113233322,36.794757843017585,27837.4,2014.5064697265625,2024-08-10 17:33:30.743645,XGBRegressor
299
+ 2024-08-10T00:00:00Z,-1.3032036,36.6825914,-1.2739575,36.8118501,30275.7,2248.195556640625,2024-08-10 17:33:38.333722,XGBRegressor
300
+ 2024-08-10T00:00:00Z,-1.3032036,36.6825914,-1.2070528015135051,36.80557250976563,32162.9,2399.367919921875,2024-08-10 17:33:45.441322,XGBRegressor
301
+ 2024-08-10T00:00:00Z,-1.3032036,36.6825914,-1.2739575,36.8118501,30275.7,2248.195556640625,2024-08-10 17:33:55.454606,XGBRegressor
302
+ 2024-08-10T00:00:00Z,-1.3032036,36.6825914,-1.2739575,36.8118501,30275.7,2248.195556640625,2024-08-10 17:45:06.682822,XGBRegressor
303
+ 2024-08-10T00:00:00Z,-1.3032036,36.6825914,-1.2199208076791799,36.78411483764649,31239.4,1972.6929931640625,2024-08-10 17:45:24.056093,XGBRegressor
304
+ 2024-08-10T00:00:00Z,51.056534,5.1691684,-1.2739575,36.8118501,1000,1883.396728515625,2024-08-10 17:45:31.252669,XGBRegressor
305
+ 2024-08-10T00:00:00Z,-1.3032036,36.6825914,-1.2739575,36.8118501,30275.7,2248.195556640625,2024-08-10 17:45:31.896746,XGBRegressor
306
+ 2024-08-10T00:00:00Z,-1.3032036,36.6825914,-1.2739575,36.8118501,30275.7,2248.195556640625,2024-08-10 17:53:13.471244,XGBRegressor
307
+ 2024-08-10T00:00:00Z,-1.2420620423926565,36.70051574707032,-1.2739575,36.8118501,14646.0,1482.1158447265625,2024-08-10 17:53:18.153187,XGBRegressor
308
+ 2024-08-10T00:00:00Z,-1.3032036,36.6825914,-1.2739575,36.8118501,30275.7,2248.195556640625,2024-08-10 17:53:19.346768,XGBRegressor
309
+ 2024-08-10T00:00:00Z,51.056534,5.1691684,-1.2739575,36.8118501,30275.7,3480.389404296875,2024-08-10 17:53:30.270406,XGBRegressor
310
+ 2024-08-10T00:00:00Z,-1.3032036,36.6825914,-1.2739575,36.8118501,30275.7,2248.195556640625,2024-08-10 17:53:30.896807,XGBRegressor
311
+ 2024-08-10T00:00:00Z,51.056534,5.1691684,-1.2739575,36.8118501,30275.7,3480.389404296875,2024-08-10 17:53:42.849911,XGBRegressor
312
+ 2024-08-10T00:00:00Z,-1.3032036,36.6825914,-1.2739575,36.8118501,30275.7,2248.195556640625,2024-08-10 17:53:43.349221,XGBRegressor
313
+ 2024-08-10T00:00:00Z,-1.3032036,36.6825914,-1.2739575,36.8118501,30275.7,2248.195556640625,2024-08-10 18:00:11.398741,XGBRegressor
314
+ 2024-08-10T00:00:00Z,-1.3032036,36.6825914,-1.2363917656806562,36.79664611816407,27009.7,2020.3282470703125,2024-08-10 18:00:24.542020,XGBRegressor
315
+ 2024-08-10T00:00:00Z,-1.3032036,36.6825914,-1.2739575,36.8118501,30275.7,2248.195556640625,2024-08-10 18:00:31.590091,XGBRegressor
316
+ 2024-08-10T00:00:00Z,51.056534,5.1691684,-1.2739575,36.8118501,30275.7,3480.389404296875,2024-08-10 18:00:41.130672,XGBRegressor
317
+ 2024-08-10T00:00:00Z,-1.3032036,36.6825914,-1.2739575,36.8118501,30275.7,2248.195556640625,2024-08-10 18:00:41.636154,XGBRegressor
318
+ 2024-08-10T00:00:00Z,-1.3032036,36.6825914,-1.2739575,36.8118501,30275.7,2248.195556640625,2024-08-10 18:07:07.947734,XGBRegressor
319
+ 2024-08-10T00:00:00Z,-1.3032036,36.6825914,-1.2333034687984368,36.7899513244629,31862.4,1984.1005859375,2024-08-10 18:07:13.643641,XGBRegressor
320
+ 2024-08-10T00:00:00Z,-1.3032036,36.6825914,-1.2739575,36.8118501,30275.7,2248.195556640625,2024-08-10 18:07:16.027810,XGBRegressor
321
+ 2024-08-10T00:00:00Z,51.056534,5.1691684,-1.2739575,36.8118501,30275.7,3480.389404296875,2024-08-10 18:07:23.684420,XGBRegressor
322
+ 2024-08-10T00:00:00Z,-1.3032036,36.6825914,-1.2739575,36.8118501,30275.7,2248.195556640625,2024-08-10 18:07:24.247497,XGBRegressor
323
+ 2024-08-10T00:00:00Z,-1.3032036,36.9096888,-1.2739575,36.8118501,24443.9,2245.502685546875,2024-08-10 18:16:14.463501,XGBRegressor
324
+ 2024-08-10T00:00:00Z,-1.3032036,37.9096888,-1.2739575,36.8118501,30275.7,2894.838623046875,2024-08-10 18:16:16.045210,XGBRegressor
325
+ 2024-08-10T00:00:00Z,-1.3032036,38.9096888,-1.2739575,36.8118501,30275.7,2894.838623046875,2024-08-10 18:16:17.164400,XGBRegressor
326
+ 2024-08-10T00:00:00Z,-1.3032036,36.6825914,-1.2739575,36.8118501,30275.7,2248.195556640625,2024-08-10 18:16:17.630593,XGBRegressor
327
+ 2024-08-10T00:00:00Z,-1.3032036,36.6825914,-1.8995204,36.8118501,86715.2,3222.885986328125,2024-08-10 18:16:25.511074,XGBRegressor
328
+ 2024-08-10T00:00:00Z,-0.8995204,36.6825914,-1.8995204,36.8118501,30275.7,2248.195556640625,2024-08-10 18:16:32.393384,XGBRegressor
329
+ 2024-08-10T00:00:00Z,-1.3032036,36.6825914,-1.2739575,36.8118501,30275.7,2248.195556640625,2024-08-10 18:16:32.889801,XGBRegressor
330
+ 2024-08-10T00:00:00Z,-0.8995204,36.6825914,-1.2739575,36.8118501,30275.7,2248.195556640625,2024-08-10 18:16:45.783030,XGBRegressor
331
+ 2024-08-10T00:00:00Z,0.1004796,36.6825914,-1.2739575,36.8118501,30275.7,2248.195556640625,2024-08-10 18:16:46.905005,XGBRegressor
332
+ 2024-08-10T00:00:00Z,1.1004796,36.6825914,-1.2739575,36.8118501,336236.8,3222.885986328125,2024-08-10 18:16:47.407945,XGBRegressor
333
+ 2024-08-10T00:00:00Z,-1.3032036,36.6825914,-1.2739575,36.8118501,30275.7,2248.195556640625,2024-08-10 18:16:47.902735,XGBRegressor
334
+ 2024-08-10T00:00:00Z,-0.8995204,36.6825914,-1.2739575,36.8118501,30275.7,2248.195556640625,2024-08-10 18:17:02.975900,XGBRegressor
335
+ 2024-08-10T00:00:00Z,0.1004796,36.6825914,-1.2739575,36.8118501,30275.7,2248.195556640625,2024-08-10 18:17:15.371229,XGBRegressor
336
+ 2024-08-10T00:00:00Z,-0.8995204,36.6825914,-1.2739575,36.8118501,30275.7,2248.195556640625,2024-08-10 18:17:19.647740,XGBRegressor
337
+ 2024-08-10T00:00:00Z,-1.8995204,36.6825914,-1.2739575,36.8118501,30275.7,2248.195556640625,2024-08-10 18:17:21.288070,XGBRegressor
338
+ 2024-08-10T00:00:00Z,-1.3032036,36.6825914,-1.2739575,36.8118501,30275.7,2248.195556640625,2024-08-10 18:17:21.817205,XGBRegressor
339
+ 2024-08-10T00:00:00Z,-1.3032036,36.6825914,-1.2739575,36.8118501,30275.7,2248.195556640625,2024-08-10 18:20:13.943350,XGBRegressor
340
+ 2024-08-10T00:00:00Z,-1.8995204,36.6825914,-1.2739575,36.8118501,30275.7,2248.195556640625,2024-08-10 18:20:45.765347,XGBRegressor
341
+ 2024-08-10T00:00:00Z,-1.3032036,36.6825914,-1.2739575,36.8118501,30275.7,2248.195556640625,2024-08-10 18:20:46.287722,XGBRegressor
342
+ 2024-08-10T00:00:00Z,-1.8995204,36.6825914,-1.2739575,36.8118501,30275.7,2248.195556640625,2024-08-10 18:20:55.081532,XGBRegressor
343
+ 2024-08-10T00:00:00Z,-2.8995204,36.6825914,-1.2739575,36.8118501,30275.7,2248.195556640625,2024-08-10 18:21:02.208091,XGBRegressor
344
+ 2024-08-10T00:00:00Z,-1.3032036,36.6825914,-1.2739575,36.8118501,30275.7,2248.195556640625,2024-08-10 18:21:02.719934,XGBRegressor
345
+ 2024-08-10T00:00:00Z,51.056534,5.1691684,-1.2739575,36.8118501,30275.7,3480.389404296875,2024-08-10 18:21:37.195490,XGBRegressor
346
+ 2024-08-10T00:00:00Z,-1.3032036,36.6825914,-1.2739575,36.8118501,30275.7,2248.195556640625,2024-08-10 18:21:37.662483,XGBRegressor
347
+ 2024-08-10T00:00:00Z,51.056534,5.1691684,-1.2739575,36.8118501,30275.7,3480.389404296875,2024-08-10 18:21:54.648009,XGBRegressor
348
+ 2024-08-10T00:00:00Z,-1.3032036,36.6825914,-1.2739575,36.8118501,30275.7,2248.195556640625,2024-08-10 18:21:55.132328,XGBRegressor
349
+ 2024-08-10T00:00:00Z,-1.3032036,36.6825914,-1.2739575,36.8118501,30275.7,2248.195556640625,2024-08-10 18:23:21.014592,XGBRegressor
350
+ 2024-08-10T00:00:00Z,-1.3032036,36.6825914,-1.2458282060781152,36.77312850952149,22431.5,1671.9000244140625,2024-08-10 18:23:27.929077,XGBRegressor
351
+ 2024-08-10T00:00:00Z,-1.3032036,36.6825914,-1.2401582342094444,36.736822128295906,18314.8,1244.9105224609375,2024-08-10 18:23:31.603554,XGBRegressor
352
+ 2024-08-10T00:00:00Z,-1.3032036,36.6825914,-1.2394703150717925,36.693906784057624,13020.9,1134.9783935546875,2024-08-10 18:23:36.165672,XGBRegressor
353
+ 2024-08-10T00:00:00Z,-1.3032036,36.6825914,-1.2532816069582597,36.73853874206544,21658.0,1402.258056640625,2024-08-10 18:23:40.242121,XGBRegressor
354
+ 2024-08-10T00:00:00Z,-1.8995204,36.6825914,-1.2532816069582597,36.73853874206544,30275.7,1788.7811279296875,2024-08-10 18:23:45.846412,XGBRegressor
355
+ 2024-08-10T00:00:00Z,-1.3032036,36.6825914,-1.2739575,36.8118501,30275.7,2248.195556640625,2024-08-10 18:23:46.343056,XGBRegressor
356
+ 2024-08-10T00:00:00Z,-1.8995204,36.6825914,-1.2739575,36.8118501,30275.7,2248.195556640625,2024-08-10 18:23:49.916166,XGBRegressor
357
+ 2024-08-10T00:00:00Z,-1.3032036,36.6825914,-1.2739575,36.8118501,30275.7,2248.195556640625,2024-08-10 18:23:50.417970,XGBRegressor
358
+ 2024-08-10T00:00:00Z,-1.8995204,36.6825914,-1.2739575,36.8118501,30275.7,2248.195556640625,2024-08-10 18:23:54.913632,XGBRegressor
359
+ 2024-08-10T00:00:00Z,-2.8995204,36.6825914,-1.2739575,36.8118501,30275.7,2248.195556640625,2024-08-10 18:24:01.059571,XGBRegressor
360
+ 2024-08-10T00:00:00Z,-1.3032036,36.6825914,-1.2739575,36.8118501,30275.7,2248.195556640625,2024-08-10 18:24:01.561407,XGBRegressor
361
+ 2024-08-10T00:00:00Z,-1.3032036,36.6825914,-1.2739575,36.8118501,30275.7,2248.195556640625,2024-08-10 18:27:42.623308,XGBRegressor
362
+ 2024-08-10T00:00:00Z,-1.8995204,36.6825914,-1.2739575,36.8118501,30275.7,2248.195556640625,2024-08-10 18:27:50.054696,XGBRegressor
363
+ 2024-08-10T00:00:00Z,-2.8995204,36.6825914,-1.2739575,36.8118501,30275.7,2248.195556640625,2024-08-10 18:27:51.155359,XGBRegressor
364
+ 2024-08-10T00:00:00Z,-1.3032036,36.6825914,-1.2739575,36.8118501,30275.7,2248.195556640625,2024-08-10 18:27:51.648968,XGBRegressor
365
+ 2024-08-10T00:00:00Z,-1.8995204,36.6825914,-1.2739575,36.8118501,30275.7,2248.195556640625,2024-08-10 18:28:03.909248,XGBRegressor
366
+ 2024-08-10T00:00:00Z,-2.8995204,36.6825914,-1.2739575,36.8118501,30275.7,2248.195556640625,2024-08-10 18:28:07.190368,XGBRegressor
367
+ 2024-08-10T00:00:00Z,-3.8995204,36.6825914,-1.2739575,36.8118501,30275.7,2248.195556640625,2024-08-10 18:28:12.981798,XGBRegressor
368
+ 2024-08-10T00:00:00Z,-1.3032036,36.6825914,-1.2739575,36.8118501,30275.7,2248.195556640625,2024-08-10 18:28:13.470938,XGBRegressor
369
+ 2024-08-10T00:00:00Z,-0.8995204,36.6825914,-1.2739575,36.8118501,30275.7,2248.195556640625,2024-08-10 18:28:18.671316,XGBRegressor
370
+ 2024-08-10T00:00:00Z,-1.3032036,36.6825914,-1.2739575,36.8118501,30275.7,2248.195556640625,2024-08-10 18:28:19.171816,XGBRegressor
371
+ 2024-08-10T00:00:00Z,-1.3032036,36.6825914,-1.2739575,36.8118501,30275.7,2248.195556640625,2024-08-10 18:36:01.846640,XGBRegressor
372
+ 2024-08-10T00:00:00Z,-1.3032036,36.6825914,-1.223695411176275,36.788749694824226,31287.3,1997.2069091796875,2024-08-10 18:36:08.274156,XGBRegressor
373
+ 2024-08-10T00:00:00Z,-1.3032036,36.6825914,-1.2312301099798313,36.72420501708985,17885.9,1201.298583984375,2024-08-10 18:36:11.956115,XGBRegressor
374
+ 2024-08-10T00:00:00Z,-1.8995204,36.6825914,-1.2312301099798313,36.72420501708985,30275.7,1747.5113525390625,2024-08-10 18:36:15.334576,XGBRegressor
375
+ 2024-08-10T00:00:00Z,-1.3032036,36.6825914,-1.2739575,36.8118501,30275.7,2248.195556640625,2024-08-10 18:36:15.861443,XGBRegressor
376
+ 2024-08-10T00:00:00Z,-1.3032036,36.6825914,-1.2739575,36.8118501,30275.7,2248.195556640625,2024-08-10 18:37:54.654478,XGBRegressor
377
+ 2024-08-10T00:00:00Z,-1.3032036,36.6825914,-1.2444556350238676,36.78617477416993,24990.3,1679.6968994140625,2024-08-10 18:37:58.338115,XGBRegressor
378
+ 2024-08-10T00:00:00Z,-1.3032036,36.6825914,-1.2525967578410526,36.72540664672852,20399.1,1268.79931640625,2024-08-10 18:38:01.618309,XGBRegressor
379
+ 2024-08-10T00:00:00Z,-1.3032036,36.6825914,-1.2545721717954963,36.6775131225586,9271.7,1027.1279296875,2024-08-10 18:38:06.657881,XGBRegressor
380
+ 2024-08-10T00:00:00Z,51.056534,5.1691684,-1.2739575,36.8118501,30275.7,3480.389404296875,2024-08-10 18:38:35.345430,XGBRegressor
381
+ 2024-08-10T00:00:00Z,-1.3032036,36.6825914,-1.2739575,36.8118501,30275.7,2248.195556640625,2024-08-10 18:38:35.857473,XGBRegressor
382
+ 2024-08-10T00:00:00Z,51.056534,5.1691684,-1.2739575,36.8118501,30275.7,3480.389404296875,2024-08-10 18:38:49.664619,XGBRegressor
383
+ 2024-08-10T00:00:00Z,-1.3032036,36.6825914,-1.2739575,36.8118501,30275.7,2248.195556640625,2024-08-10 18:38:50.193858,XGBRegressor
384
+ 2024-08-10T00:00:00Z,51.056534,5.1691684,-1.2739575,36.8118501,30275.7,3480.389404296875,2024-08-10 18:39:11.843517,XGBRegressor
385
+ 2024-08-10T00:00:00Z,-1.3032036,36.6825914,-1.2739575,36.8118501,30275.7,2248.195556640625,2024-08-10 18:39:12.340213,XGBRegressor
386
+ 2024-08-10T00:00:00Z,-1.3032036,36.6825914,-1.2739575,36.8118501,30275.7,2248.195556640625,2024-08-10 18:39:52.802787,XGBRegressor
387
+ 2024-08-10T00:00:00Z,51.056534,5.1691684,-1.2739575,36.8118501,30275.7,3480.389404296875,2024-08-10 18:39:59.373174,XGBRegressor
388
+ 2024-08-10T00:00:00Z,-1.3032036,36.6825914,-1.2739575,36.8118501,30275.7,2248.195556640625,2024-08-10 18:39:59.951331,XGBRegressor
389
+ 2024-08-10T00:00:00Z,-1.3032036,36.6825914,-1.2739575,36.8118501,30275.7,2248.195556640625,2024-08-10 18:45:21.111577,XGBRegressor
390
+ 2024-08-10T00:00:00Z,-1.3032036,36.6825914,-1.2739575,36.8118501,30275.7,2248.195556640625,2024-08-10 18:45:57.678487,XGBRegressor
391
+ 2024-08-10T00:00:00Z,-1.8995204,36.6825914,-1.2739575,36.8118501,30275.7,2248.195556640625,2024-08-10 18:46:06.687136,XGBRegressor
392
+ 2024-08-10T00:00:00Z,-2.8995204,36.6825914,-1.2739575,36.8118501,30275.7,2248.195556640625,2024-08-10 18:46:07.790296,XGBRegressor
393
+ 2024-08-10T00:00:00Z,-1.3032036,36.6825914,-1.2739575,36.8118501,30275.7,2248.195556640625,2024-08-10 18:46:08.275709,XGBRegressor
394
+ 2024-08-10T00:00:00Z,-1.8995204,36.6825914,-1.2739575,36.8118501,30275.7,2248.195556640625,2024-08-10 18:46:13.088165,XGBRegressor
395
+ 2024-08-10T00:00:00Z,-2.8995204,36.6825914,-1.2739575,36.8118501,30275.7,2248.195556640625,2024-08-10 18:46:13.572881,XGBRegressor
396
+ 2024-08-10T00:00:00Z,-3.8995204,36.6825914,-1.2739575,36.8118501,30275.7,2248.195556640625,2024-08-10 18:46:14.710608,XGBRegressor
397
+ 2024-08-10T00:00:00Z,-4.8995204,36.6825914,-1.2739575,36.8118501,30275.7,2248.195556640625,2024-08-10 18:46:15.829461,XGBRegressor
398
+ 2024-08-10T00:00:00Z,-1.3032036,36.6825914,-1.2739575,36.8118501,30275.7,2248.195556640625,2024-08-10 18:46:16.324586,XGBRegressor
399
+ 2024-08-10T00:00:00Z,-1.8995204,36.6825914,-1.2739575,36.8118501,30275.7,2248.195556640625,2024-08-10 18:46:20.421066,XGBRegressor
400
+ 2024-08-10T00:00:00Z,-2.8995204,36.6825914,-1.2739575,36.8118501,30275.7,2248.195556640625,2024-08-10 18:46:20.888539,XGBRegressor
401
+ 2024-08-10T00:00:00Z,-3.8995204,36.6825914,-1.2739575,36.8118501,30275.7,2248.195556640625,2024-08-10 18:46:21.403714,XGBRegressor
402
+ 2024-08-10T00:00:00Z,-4.8995204,36.6825914,-1.2739575,36.8118501,30275.7,2248.195556640625,2024-08-10 18:46:21.890507,XGBRegressor
403
+ 2024-08-10T00:00:00Z,-1.3032036,36.6825914,-1.2739575,36.8118501,30275.7,2248.195556640625,2024-08-10 18:48:20.529210,XGBRegressor
404
+ 2024-08-10T00:00:00Z,-1.3032036,36.6825914,-1.2739575,36.8118501,30275.7,2248.195556640625,2024-08-10 18:56:39.752360,XGBRegressor
405
+ 2024-08-10T00:00:00Z,-1.3032036,36.6825914,-1.2477162251881952,36.76609039306641,26546.0,1697.316650390625,2024-08-10 18:56:45.593752,XGBRegressor
406
+ 2024-08-10T00:00:00Z,-1.3032036,36.6825914,-1.2331247374089938,36.706352233886726,15422.9,1126.3240966796875,2024-08-10 18:56:48.728215,XGBRegressor
407
+ 2024-08-10T00:00:00Z,-1.3032036,36.6825914,-1.2739575,36.8118501,30275.7,2248.195556640625,2024-08-10 18:56:51.344084,XGBRegressor
408
+ 2024-08-10T00:00:00Z,51.056534,5.1691684,-1.2739575,36.8118501,30275.7,3480.389404296875,2024-08-10 18:57:04.451856,XGBRegressor
409
+ 2024-08-10T00:00:00Z,-1.3032036,36.6825914,-1.2739575,36.8118501,30275.7,2248.195556640625,2024-08-10 18:57:05.089573,XGBRegressor
410
+ 2024-08-10T00:00:00Z,-1.3032036,36.6825914,-1.2739575,36.8118501,30275.7,2248.195556640625,2024-08-10 18:58:34.611542,XGBRegressor
411
+ 2024-08-10T00:00:00Z,-1.233656967337848,36.70583724975587,-1.2739575,36.8118501,17353.0,1568.106201171875,2024-08-10 18:58:39.808413,XGBRegressor
412
+ 2024-08-10T00:00:00Z,-1.3032036,36.6825914,-1.2739575,36.8118501,30275.7,2248.195556640625,2024-08-10 18:58:44.609055,XGBRegressor
413
+ 2024-08-10T00:00:00Z,51.056534,5.1691684,-1.2739575,36.8118501,30275.7,3480.389404296875,2024-08-10 18:58:49.459257,XGBRegressor
414
+ 2024-08-10T00:00:00Z,-1.3032036,36.6825914,-1.2739575,36.8118501,30275.7,2248.195556640625,2024-08-10 18:58:49.977286,XGBRegressor
415
+ 2024-08-10T00:00:00Z,-1.3032036,36.6825914,-1.2739575,36.8118501,30275.7,2248.195556640625,2024-08-10 18:59:37.798048,XGBRegressor
416
+ 2024-08-10T00:00:00Z,51.056534,5.1691684,-1.2739575,36.8118501,30275.7,3480.389404296875,2024-08-10 18:59:47.499589,XGBRegressor
417
+ 2024-08-10T00:00:00Z,-1.3032036,36.6825914,-1.2739575,36.8118501,30275.7,2248.195556640625,2024-08-10 18:59:48.016985,XGBRegressor
418
+ 2024-08-10T00:00:00Z,51.056534,5.1691684,-1.2739575,36.8118501,30275.7,3480.389404296875,2024-08-10 19:00:21.338523,XGBRegressor
419
+ 2024-08-10T00:00:00Z,-1.3032036,36.6825914,-1.2739575,36.8118501,30275.7,2248.195556640625,2024-08-10 19:00:21.811014,XGBRegressor
420
+ 2024-08-10T00:00:00Z,-1.3032036,36.6825914,-1.2739575,36.8118501,30275.7,2248.195556640625,2024-08-10 19:02:46.654748,XGBRegressor
421
+ 2024-08-10T00:00:00Z,-1.8995204,36.6825914,-1.2739575,36.8118501,30275.7,2248.195556640625,2024-08-10 19:02:57.598865,XGBRegressor
422
+ 2024-08-10T00:00:00Z,-1.3032036,36.6825914,-1.2739575,36.8118501,30275.7,2248.195556640625,2024-08-10 19:02:58.116540,XGBRegressor
423
+ 2024-08-10T00:00:00Z,-1.8995204,36.6825914,-1.2739575,36.8118501,30275.7,2248.195556640625,2024-08-10 19:03:01.344532,XGBRegressor
424
+ 2024-08-10T00:00:00Z,-2.8995204,36.6825914,-1.2739575,36.8118501,30275.7,2248.195556640625,2024-08-10 19:03:08.271111,XGBRegressor
425
+ 2024-08-10T00:00:00Z,-3.8995204,36.6825914,-1.2739575,36.8118501,30275.7,2248.195556640625,2024-08-10 19:03:09.379550,XGBRegressor
426
+ 2024-08-10T00:00:00Z,-4.8995204,36.6825914,-1.2739575,36.8118501,30275.7,2248.195556640625,2024-08-10 19:03:10.516385,XGBRegressor
427
+ 2024-08-10T00:00:00Z,-1.3032036,36.6825914,-1.2739575,36.8118501,30275.7,2248.195556640625,2024-08-10 19:03:11.012515,XGBRegressor
428
+ 2024-08-10T00:00:00Z,-1.8995204,36.6825914,-1.2739575,36.8118501,30275.7,2248.195556640625,2024-08-10 19:04:32.306019,XGBRegressor
429
+ 2024-08-10T00:00:00Z,-2.8995204,36.6825914,-1.2739575,36.8118501,30275.7,2248.195556640625,2024-08-10 19:04:33.711463,XGBRegressor
430
+ 2024-08-10T00:00:00Z,-3.8995204,36.6825914,-1.2739575,36.8118501,30275.7,2248.195556640625,2024-08-10 19:04:35.788267,XGBRegressor
431
+ 2024-08-10T00:00:00Z,-4.8995204,36.6825914,-1.2739575,36.8118501,30275.7,2248.195556640625,2024-08-10 19:04:36.261309,XGBRegressor
432
+ 2024-08-10T00:00:00Z,-1.3032036,36.6825914,-1.2739575,36.8118501,30275.7,2248.195556640625,2024-08-10 19:04:47.922311,XGBRegressor
433
+ 2024-08-10T00:00:00Z,-1.3032036,36.6825914,-1.2739575,36.8118501,30275.7,2248.195556640625,2024-08-10 19:05:08.216059,XGBRegressor
434
+ 2024-08-10T00:00:00Z,-1.2226766361783479,36.72763824462891,-1.2739575,36.8118501,14349.9,1724.0120849609375,2024-08-10 19:05:25.969028,XGBRegressor
435
+ 2024-08-10T00:00:00Z,-1.3032036,36.6825914,-1.2739575,36.8118501,30275.7,2248.195556640625,2024-08-10 19:05:34.115372,XGBRegressor
436
+ 2024-08-10T00:00:00Z,-1.3032036,36.6825914,-1.2739575,36.8118501,30275.7,2248.195556640625,2024-08-10 19:12:40.842227,XGBRegressor
437
+ 2024-08-10T00:00:00Z,-1.3032036,36.6825914,-1.2171772284580045,36.77982330322266,26424.1,1710.220947265625,2024-08-10 19:12:46.613126,XGBRegressor
438
+ 2024-08-10T00:00:00Z,-1.3032036,36.6825914,-1.185762071910128,36.70841217041016,25238.7,1464.56396484375,2024-08-10 19:12:49.529664,XGBRegressor
439
+ 2024-08-10T00:00:00Z,-1.3032036,36.6825914,-1.185762071910128,36.70841217041016,25238.7,1464.56396484375,2024-08-10 19:12:53.733545,XGBRegressor
440
+ 2024-08-10T00:00:00Z,-1.3032036,36.6825914,-1.2739575,36.8118501,30275.7,2248.195556640625,2024-08-10 19:12:54.221424,XGBRegressor
441
+ 2024-08-10T00:00:00Z,-1.3032036,36.6825914,-1.2739575,36.8118501,30275.7,2248.195556640625,2024-08-10 19:13:19.355479,XGBRegressor
442
+ 2024-08-10T00:00:00Z,-1.3032036,36.6825914,-1.2739575,36.8118501,30275.7,2248.195556640625,2024-08-10 19:14:21.459903,XGBRegressor
443
+ 2024-08-10T00:00:00Z,-1.2382892809777724,36.70480728149415,-1.2739575,36.8118501,15712.1,1560.776611328125,2024-08-10 19:14:26.574038,XGBRegressor
444
+ 2024-08-10T00:00:00Z,-1.3032036,36.6825914,-1.2739575,36.8118501,30275.7,2248.195556640625,2024-08-10 19:16:34.138114,XGBRegressor
445
+ 2024-08-10T00:00:00Z,-1.3032036,36.6825914,-1.2355349819934454,36.77209854125977,22522.0,1671.9000244140625,2024-08-10 19:16:47.913422,XGBRegressor
446
+ 2024-08-10T00:00:00Z,-1.3032036,36.6825914,-1.2264297492467666,36.750812530517585,22519.9,1564.9390869140625,2024-08-10 19:16:51.118532,XGBRegressor
447
+ 2024-08-10T00:00:00Z,-1.3032036,36.6825914,-1.2334611431163052,36.728067398071296,18113.0,1297.483154296875,2024-08-10 19:16:59.474416,XGBRegressor
448
+ 2024-08-10T00:00:00Z,-1.3032036,36.6825914,-1.239811351790342,36.71133041381837,16992.1,1105.705810546875,2024-08-10 19:17:02.445635,XGBRegressor
449
+ 2024-08-10T00:00:00Z,-1.3032036,36.6825914,-1.2424726456032664,36.694164276123054,13201.2,1173.581787109375,2024-08-10 19:17:08.869014,XGBRegressor
450
+ 2024-08-10T00:00:00Z,-1.3032036,36.6825914,-1.2452185533092621,36.67922973632813,14296.7,1249.5877685546875,2024-08-10 19:17:12.533399,XGBRegressor
451
+ 2024-08-10T00:00:00Z,-1.3032036,36.6825914,-1.2739575,36.8118501,30275.7,2248.195556640625,2024-08-10 19:18:04.053993,XGBRegressor
452
+ 2024-08-10T00:00:00Z,-1.3032036,36.6825914,-1.2550935704374027,36.74686431884766,24421.8,1595.872802734375,2024-08-10 19:18:09.339345,XGBRegressor
453
+ 2024-08-10T00:00:00Z,-1.3032036,36.6825914,-1.2739575,36.8118501,30275.7,2248.195556640625,2024-08-10 19:18:30.167396,XGBRegressor
454
+ 2024-08-10T00:00:00Z,-1.3032036,36.6825914,-1.2556082681679697,36.78668975830079,28468.1,1884.7978515625,2024-08-10 19:18:44.329582,XGBRegressor
455
+ 2024-08-10T00:00:00Z,-1.3032036,36.6825914,-1.2739575,36.8118501,30275.7,2248.195556640625,2024-08-10 19:19:49.076273,XGBRegressor
456
+ 2024-08-10T00:00:00Z,-1.3032036,36.6825914,-1.2547504385607586,36.77707672119141,28050.4,1911.6507568359375,2024-08-10 19:19:55.035996,XGBRegressor
457
+ 2024-08-10T00:00:00Z,-1.3032036,36.6825914,-1.2547504385607586,36.77707672119141,28050.4,1911.6507568359375,2024-08-10 19:20:03.287938,XGBRegressor
458
+ 2024-08-10T00:00:00Z,-1.3032036,36.6825914,-1.2739575,36.8118501,30275.7,2248.195556640625,2024-08-10 19:20:03.804308,XGBRegressor
459
+ 2024-08-10T00:00:00Z,-1.3032036,36.6825914,-1.2739575,36.8118501,30275.7,2248.195556640625,2024-08-10 19:21:05.469947,XGBRegressor
460
+ 2024-08-10T00:00:00Z,-1.3032036,36.6825914,-1.252348514164674,36.7734718322754,26483.7,1782.0303955078125,2024-08-10 19:21:10.166769,XGBRegressor
461
+ 2024-08-10T00:00:00Z,-1.3032036,36.6825914,-1.2350134428330684,36.74137115478516,19125.4,1320.391357421875,2024-08-10 19:21:13.620663,XGBRegressor
462
+ 2024-08-10T00:00:00Z,-1.3032036,36.6825914,-1.2739575,36.8118501,30275.7,2248.195556640625,2024-08-10 19:21:22.624327,XGBRegressor
463
+ 2024-08-10T00:00:00Z,-1.3032036,36.6825914,-1.2739575,36.8118501,30275.7,2248.195556640625,2024-08-10 19:22:30.969318,XGBRegressor
464
+ 2024-08-10T00:00:00Z,-1.3032036,36.6825914,-1.2667600273749045,36.80780410766602,29630.3,2246.46826171875,2024-08-10 19:23:50.388590,XGBRegressor
465
+ 2024-08-10T00:00:00Z,-1.3032036,36.6825914,-1.2624686157291516,36.77724838256837,16755.3,1350.7723388671875,2024-08-10 19:23:57.974271,XGBRegressor
466
+ 2024-08-10T00:00:00Z,-1.3032036,36.6825914,-1.2583496852318137,36.74171447753907,22976.9,1494.652587890625,2024-08-10 19:24:00.601832,XGBRegressor
467
+ 2024-08-10T00:00:00Z,-1.3032036,36.6825914,-1.2739575,36.8118501,30275.7,2248.195556640625,2024-08-10 19:24:11.385953,XGBRegressor
468
+ 2024-08-10T00:00:00Z,-1.3032036,36.6825914,-1.2739575,36.8118501,30275.7,2248.195556640625,2024-08-10 19:26:52.894335,XGBRegressor
469
+ 2024-08-10T00:00:00Z,-1.3032036,36.6825914,-1.2739575,36.8118501,30275.7,2248.195556640625,2024-08-10 19:28:48.681104,XGBRegressor
470
+ 2024-08-10T00:00:00Z,-1.3032036,36.6825914,-1.2355349819934454,36.73553466796876,18868.1,1336.0697021484375,2024-08-10 19:28:55.820268,XGBRegressor
471
+ 2024-08-10T00:00:00Z,-1.3032036,36.6825914,-1.2355349819934454,36.73553466796876,18868.1,1336.0697021484375,2024-08-10 19:29:02.644992,XGBRegressor
472
+ 2024-08-10T00:00:00Z,-1.3032036,36.6825914,-1.2739575,36.8118501,30275.7,2248.195556640625,2024-08-10 19:29:03.158643,XGBRegressor
473
+ 2024-08-10T00:00:00Z,-1.3032036,36.6825914,-1.2739575,36.8118501,30275.7,2248.195556640625,2024-08-10 19:29:15.964147,XGBRegressor
474
+ 2024-08-10T00:00:00Z,-1.3032036,36.6825914,-1.2149468386355708,36.75373077392579,22069.4,1509.060791015625,2024-08-10 19:29:53.977055,XGBRegressor
475
+ 2024-08-10T00:00:00Z,-1.3032036,36.6825914,-1.2739575,36.8118501,30275.7,2248.195556640625,2024-08-10 19:29:58.619733,XGBRegressor
476
+ 2024-08-10T00:00:00Z,-1.3032036,36.6825914,-1.2430839280547008,36.737594604492195,18514.8,1276.247314453125,2024-08-10 19:30:05.892293,XGBRegressor
477
+ 2024-08-10T00:00:00Z,-1.3032036,36.6825914,-1.2430839280547008,36.737594604492195,18514.8,1276.247314453125,2024-08-10 19:30:29.921414,XGBRegressor
478
+ 2024-08-10T00:00:00Z,-1.3032036,36.6825914,-1.2739575,36.8118501,30275.7,2248.195556640625,2024-08-10 19:30:30.406533,XGBRegressor
479
+ 2024-08-10T00:00:00Z,-1.3032036,36.6825914,-1.2739575,36.8118501,30275.7,2248.195556640625,2024-08-10 19:58:57.143702,XGBRegressor
480
+ 2024-08-10T00:00:00Z,-1.3032036,36.6825914,-1.2458289940056284,36.778793334960945,27208.6,1881.69287109375,2024-08-10 19:59:03.103440,XGBRegressor
481
+ 2024-08-10T00:00:00Z,-1.3032036,36.6825914,-1.2156242129428432,36.72420501708985,22227.5,1399.1761474609375,2024-08-10 19:59:06.096346,XGBRegressor
482
+ 2024-08-10T00:00:00Z,-1.3032036,36.6825914,-1.2739575,36.8118501,30275.7,2248.195556640625,2024-08-10 20:04:14.625594,XGBRegressor
483
+ 2024-08-10T00:00:00Z,-1.3032036,36.6825914,-1.24102512671833,36.71270370483399,16769.1,1111.2071533203125,2024-08-10 20:04:20.783887,XGBRegressor
484
+ 2024-08-10T00:00:00Z,-1.3032036,36.6825914,-1.2578282048562803,36.66961669921876,9207.9,1025.0653076171875,2024-08-10 20:04:23.775024,XGBRegressor
485
+ 2024-08-10T00:00:00Z,-1.3032036,36.6825914,-1.2739575,36.8118501,30275.7,2248.195556640625,2024-08-10 20:04:25.575746,XGBRegressor
486
+ 2024-08-10T00:00:00Z,-1.2369167444455962,36.714591979980476,-1.2739575,36.8118501,13448.9,1585.31982421875,2024-08-10 20:04:29.395386,XGBRegressor
487
+ 2024-08-10T00:00:00Z,-1.3032036,36.6825914,-1.2739575,36.8118501,30275.7,2248.195556640625,2024-08-10 20:04:49.627359,XGBRegressor
488
+ 2024-08-10T00:00:00Z,-1.3032036,36.6825914,-1.2228389789452672,36.76111221313477,23750.7,1580.15966796875,2024-08-10 20:05:57.565334,XGBRegressor
489
+ 2024-08-10T00:00:00Z,-1.3032036,36.6825914,-1.2739575,36.8118501,30275.7,2248.195556640625,2024-08-10 20:06:08.276230,XGBRegressor
490
+ 2024-08-10T00:00:00Z,-1.3032036,36.6825914,-1.2739575,36.8118501,30275.7,2248.195556640625,2024-08-10 20:07:49.281761,XGBRegressor
491
+ 2024-08-10T00:00:00Z,-1.3032036,36.6825914,-1.2355349819934454,36.79407119750977,26423.9,1938.5538330078125,2024-08-10 20:08:19.804736,XGBRegressor
492
+ 2024-08-10T00:00:00Z,-1.3032036,36.6825914,-1.2739575,36.8118501,30275.7,2248.195556640625,2024-08-10 20:08:24.222244,XGBRegressor
493
+ 2024-08-10T00:00:00Z,-1.3032036,36.6825914,-1.2739575,36.8118501,30275.7,2248.195556640625,2024-08-10 20:13:04.072539,XGBRegressor
494
+ 2024-08-10T00:00:00Z,-1.3032036,36.6825914,-1.2739575,36.8118501,30275.7,2248.195556640625,2024-08-10 20:13:04.741151,XGBRegressor
495
+ 2024-08-10T00:00:00Z,-1.3032036,36.6825914,-1.2739575,36.8118501,30275.7,2248.195556640625,2024-08-10 20:14:24.192998,XGBRegressor
496
+ 2024-08-10T00:00:00Z,-1.3032036,36.6825914,-1.2739575,36.8118501,30275.7,2248.195556640625,2024-08-10 20:14:24.661499,XGBRegressor
497
+ 2024-08-10T00:00:00Z,-1.3032036,36.6825914,-1.2739575,36.8118501,30275.7,2248.195556640625,2024-08-10 20:15:00.226471,XGBRegressor
498
+ 2024-08-10T00:00:00Z,-1.3032036,36.6825914,-1.2739575,36.8118501,30275.7,2248.195556640625,2024-08-10 20:15:43.596765,XGBRegressor
499
+ 2024-08-10T00:00:00Z,-1.3032036,36.6825914,-1.2739575,36.8118501,30275.7,2248.195556640625,2024-08-10 20:15:44.177699,XGBRegressor
500
+ 2024-08-10T00:00:00Z,-1.3032036,36.6825914,-1.2739575,36.8118501,30275.7,2248.195556640625,2024-08-10 20:16:15.560410,XGBRegressor
501
+ 2024-08-10T00:00:00Z,-1.3032036,36.6825914,-1.2739575,36.8118501,30275.7,2248.195556640625,2024-08-10 20:17:53.119511,XGBRegressor
502
+ 2024-08-10T00:00:00Z,-1.3032036,36.6825914,-1.2739575,36.8118501,30275.7,2248.195556640625,2024-08-10 20:18:17.915799,XGBRegressor
503
+ 2024-08-10T00:00:00Z,-1.3032036,36.6825914,-1.2739575,36.8118501,30275.7,2248.195556640625,2024-08-10 20:19:32.410238,XGBRegressor
504
+ 2024-08-10T00:00:00Z,-1.3032036,36.6825914,-1.2739575,36.8118501,30275.7,2248.195556640625,2024-08-10 20:20:16.450353,XGBRegressor
505
+ 2024-08-10T00:00:00Z,-1.3032036,36.6825914,-1.2739575,36.8118501,30275.7,2248.195556640625,2024-08-10 20:20:31.571371,XGBRegressor
506
+ 2024-08-10T00:00:00Z,-1.3032036,36.6825914,-1.2739575,36.8118501,30275.7,2248.195556640625,2024-08-10 20:20:48.543003,XGBRegressor
507
+ 2024-08-10T00:00:00Z,-1.3032036,36.6825914,-1.2739575,36.8118501,30275.7,2248.195556640625,2024-08-10 20:21:36.471781,XGBRegressor
508
+ 2024-08-10T00:00:00Z,-1.3032036,36.6825914,-1.2739575,36.8118501,30275.7,2248.195556640625,2024-08-10 20:23:43.834960,XGBRegressor
509
+ 2024-08-10T00:00:00Z,-1.3032036,36.6825914,-1.2739575,36.8118501,30275.7,2248.195556640625,2024-08-10 20:24:59.562770,XGBRegressor
510
+ 2024-08-10T00:00:00Z,-1.3032036,36.6825914,-1.2739575,36.8118501,30275.7,2248.195556640625,2024-08-10 20:26:23.941601,XGBRegressor
511
+ 2024-08-10T00:00:00Z,-1.3032036,36.6825914,-1.2739575,36.8118501,30275.7,2248.195556640625,2024-08-10 20:27:39.253025,XGBRegressor
512
+ 2024-08-10T00:00:00Z,-1.2427500197949533,36.699142456054695,-1.2739575,36.8118501,15301.2,1536.0408935546875,2024-08-10 20:28:34.269667,XGBRegressor
513
+ 2024-08-10T00:00:00Z,-1.3032036,36.6825914,-1.2739575,36.8118501,30275.7,2248.195556640625,2024-08-10 20:28:58.088115,XGBRegressor
514
+ 2024-08-10T00:00:00Z,-1.3032036,36.6825914,-1.2434270614547671,36.795272827148445,25505.7,1876.41552734375,2024-08-10 20:29:08.190716,XGBRegressor
515
+ 2024-08-10T00:00:00Z,-1.3032036,36.6825914,-1.2173391374262845,36.77982330322266,26432.0,1710.220947265625,2024-08-10 20:29:11.734215,XGBRegressor
516
+ 2024-08-10T00:00:00Z,-1.3032036,36.6825914,-1.2739575,36.8118501,30275.7,2248.195556640625,2024-08-10 20:30:24.892623,XGBRegressor
517
+ 2024-08-10T00:00:00Z,-1.2545880977489388,36.70875549316407,-1.2739575,36.8118501,14463.6,1523.47705078125,2024-08-10 20:30:29.062120,XGBRegressor
518
+ 2024-08-10T00:00:00Z,-1.3032036,36.6825914,-1.2739575,36.8118501,30275.7,2248.195556640625,2024-08-10 20:30:34.629746,XGBRegressor
519
+ 2024-08-10T00:00:00Z,-1.3032036,36.6825914,-1.2739575,36.8118501,30275.7,2248.195556640625,2024-08-10 20:30:35.128765,XGBRegressor
520
+ 2024-08-10T00:00:00Z,-1.3032036,36.6825914,-1.2739575,36.8118501,30275.7,2248.195556640625,2024-08-10 20:34:17.033842,XGBRegressor
521
+ 2024-08-10T00:00:00Z,-1.2547596637035199,36.70429229736329,-1.2739575,36.8118501,13965.8,1440.854736328125,2024-08-10 20:34:23.055012,XGBRegressor
522
+ 2024-08-10T00:00:00Z,-1.3032036,36.6825914,-1.2739575,36.8118501,30275.7,2248.195556640625,2024-08-10 20:34:32.297462,XGBRegressor
523
+ 2024-08-10T00:00:00Z,-1.3032036,36.6825914,-1.2739575,36.8118501,30275.7,2248.195556640625,2024-08-10 20:36:24.424727,XGBRegressor
524
+ 2024-08-10T00:00:00Z,-1.2600782027071957,36.70309066772462,-1.2739575,36.8118501,15191.7,1542.8192138671875,2024-08-10 20:36:28.151776,XGBRegressor
525
+ 2024-08-10T00:00:00Z,-1.3032036,36.6825914,-1.2739575,36.8118501,30275.7,2248.195556640625,2024-08-10 20:36:30.402445,XGBRegressor
526
+ 2024-08-10T00:00:00Z,-1.238460847994315,36.693649291992195,-1.2739575,36.8118501,15584.2,1583.0086669921875,2024-08-10 20:36:33.015992,XGBRegressor
527
+ 2024-08-10T00:00:00Z,-1.3032036,36.6825914,-1.2739575,36.8118501,30275.7,2248.195556640625,2024-08-10 20:36:37.953309,XGBRegressor
528
+ 2024-08-10T00:00:00Z,-1.3032036,36.6825914,-1.2739575,36.8118501,30275.7,2248.195556640625,2024-08-10 20:40:27.595186,XGBRegressor
529
+ 2024-08-10T00:00:00Z,-1.3032036,36.6825914,-1.2477162251881952,36.78085327148438,23344.8,1578.298828125,2024-08-10 20:40:31.894264,XGBRegressor
530
+ 2024-08-10T00:00:00Z,-1.3032036,36.6825914,-1.2739575,36.8118501,30275.7,2248.195556640625,2024-08-10 20:40:37.929172,XGBRegressor
531
+ 2024-08-10T00:00:00Z,-1.3032036,36.6825914,-1.2739575,36.8118501,30275.7,2248.195556640625,2024-08-10 20:41:22.986847,XGBRegressor
532
+ 2024-08-10T00:00:00Z,-1.3032036,36.6825914,-1.256122965797153,36.77433013916016,25871.2,1857.8565673828125,2024-08-10 20:41:30.257078,XGBRegressor
533
+ 2024-08-10T00:00:00Z,-1.3032036,36.6825914,-1.2739575,36.8118501,30275.7,2248.195556640625,2024-08-10 20:41:35.696246,XGBRegressor
534
+ 2024-08-10T00:00:00Z,-1.2540733998176408,36.70068740844727,-1.2739575,36.8118501,13600.5,1487.8428955078125,2024-08-10 20:41:38.154168,XGBRegressor
535
+ 2024-08-10T00:00:00Z,-1.3032036,36.6825914,-1.2739575,36.8118501,30275.7,2248.195556640625,2024-08-10 20:41:43.343507,XGBRegressor
536
+ 2024-08-10T00:00:00Z,-1.2619654236166855,36.70171737670899,-1.2739575,36.8118501,13821.1,1487.8428955078125,2024-08-10 20:41:47.818880,XGBRegressor
537
+ 2024-08-10T00:00:00Z,-1.224207724089526,36.72901153564454,-1.2739575,36.8118501,13839.9,1886.460205078125,2024-08-10 20:41:50.971352,XGBRegressor
538
+ 2024-08-10T00:00:00Z,-1.3032036,36.6825914,-1.2739575,36.8118501,30275.7,2248.195556640625,2024-08-10 20:43:01.032574,XGBRegressor
539
+ 2024-08-10T00:00:00Z,-1.3032036,36.6825914,-1.2406819930063788,36.76523208618165,21964.2,1574.814208984375,2024-08-10 20:43:07.004641,XGBRegressor
540
+ 2024-08-10T00:00:00Z,-1.3032036,36.6825914,-1.2739575,36.8118501,30275.7,2248.195556640625,2024-08-10 20:43:13.272525,XGBRegressor
541
+ 2024-08-10T00:00:00Z,-1.2756906252719775,36.68575286865235,-1.2739575,36.8118501,19147.8,1847.260498046875,2024-08-10 20:43:19.105614,XGBRegressor
542
+ 2024-08-10T00:00:00Z,-1.2590401264343827,36.70377731323243,-1.2739575,36.8118501,15128.4,1508.17236328125,2024-08-10 20:43:22.117875,XGBRegressor
543
+ 2024-08-10T00:00:00Z,-1.3032036,36.6825914,-1.2739575,36.8118501,30275.7,2248.195556640625,2024-08-10 20:45:05.317519,XGBRegressor
544
+ 2024-08-10T00:00:00Z,-1.3032036,36.6825914,-1.2739575,36.8118501,30275.7,2248.195556640625,2024-08-10 20:45:05.798411,XGBRegressor
545
+ 2024-08-10T00:00:00Z,-1.3032036,36.6825914,-1.2739575,36.8118501,30275.7,2248.195556640625,2024-08-10 20:45:22.718080,XGBRegressor
546
+ 2024-08-10T00:00:00Z,-1.3032036,36.6825914,-1.2739575,36.8118501,30275.7,2248.195556640625,2024-08-10 20:45:23.232252,XGBRegressor
547
+ 2024-08-10T00:00:00Z,-1.3032036,36.6825914,-1.2739575,36.8118501,30275.7,2248.195556640625,2024-08-10 20:46:04.028434,XGBRegressor
548
+ 2024-08-10T00:00:00Z,-1.2688280335471618,36.69794082641602,-1.2739575,36.8118501,16085.7,1600.5999755859375,2024-08-10 20:46:08.894553,XGBRegressor
549
+ 2024-08-10T00:00:00Z,-1.3032036,36.6825914,-1.2739575,36.8118501,30275.7,2248.195556640625,2024-08-10 20:46:14.269660,XGBRegressor
550
+ 2024-08-10T00:00:00Z,-1.2767200124543694,36.69347763061524,-1.2739575,36.8118501,17989.5,1589.4560546875,2024-08-10 20:46:19.790505,XGBRegressor
551
+ 2024-08-10T00:00:00Z,-1.2430847963073006,36.72042846679688,-1.2739575,36.8118501,13618.6,1477.4990234375,2024-08-10 20:46:22.718980,XGBRegressor
552
+ 2024-08-10T00:00:00Z,-1.3032036,36.6825914,-1.2739575,36.8118501,30275.7,2248.195556640625,2024-08-10 20:50:27.127325,XGBRegressor
553
+ 2024-08-10T00:00:00Z,-1.3032036,36.6825914,-1.2549220045047293,36.77690505981446,28040.5,1885.5150146484375,2024-08-10 20:50:32.642026,XGBRegressor
554
+ 2024-08-10T00:00:00Z,-1.3032036,36.6825914,-1.2739575,36.8118501,30275.7,2248.195556640625,2024-08-10 20:50:39.074166,XGBRegressor
555
+ 2024-08-10T00:00:00Z,-1.3032036,36.6825914,-1.2739575,36.8118501,30275.7,2248.195556640625,2024-08-10 20:53:38.890287,XGBRegressor
556
+ 2024-08-10T00:00:00Z,-1.242578453056531,36.70600891113282,-1.2739575,36.8118501,14281.4,1502.6383056640625,2024-08-10 20:53:54.613089,XGBRegressor
557
+ 2024-08-10T00:00:00Z,-1.3032036,36.6825914,-1.2739575,36.8118501,30275.7,2248.195556640625,2024-08-10 20:54:09.626072,XGBRegressor
558
+ 2024-08-10T00:00:00Z,-1.250985210105814,36.69845581054688,-1.2739575,36.8118501,14239.3,1435.3306884765625,2024-08-10 20:54:13.826987,XGBRegressor
559
+ 2024-08-10T00:00:00Z,-1.207390541573438,36.728324890136726,-1.2739575,36.8118501,16454.6,1816.543212890625,2024-08-10 20:54:17.277752,XGBRegressor
560
+ 2024-08-10T00:00:00Z,-1.3032036,36.6825914,-1.2739575,36.8118501,30275.7,2248.195556640625,2024-08-10 20:59:18.911639,XGBRegressor
561
+ 2024-08-10T00:00:00Z,-1.2614507271407076,36.72592163085938,-1.2739575,36.8118501,10301.7,1327.281494140625,2024-08-10 20:59:24.546606,XGBRegressor
562
+ 2024-08-10T00:00:00Z,-1.3032036,36.6825914,-1.2739575,36.8118501,30275.7,2248.195556640625,2024-08-10 20:59:36.433401,XGBRegressor
563
+ 2024-08-10T00:00:00Z,-1.264195773835005,36.7020606994629,-1.2739575,36.8118501,14101.0,1405.12255859375,2024-08-10 20:59:40.203085,XGBRegressor
564
+ 2024-08-10T00:00:00Z,-1.2286691919712238,36.723346710205085,-1.2739575,36.8118501,14743.8,1429.518798828125,2024-08-10 20:59:42.637496,XGBRegressor
565
+ 2024-08-10T00:00:00Z,-1.3032036,36.6825914,-1.2739575,36.8118501,30275.7,2248.195556640625,2024-08-10 21:06:31.729664,XGBRegressor
566
+ 2024-08-10T00:00:00Z,-1.2691711635666036,36.701374053955085,-1.2739575,36.8118501,16464.0,1506.2706298828125,2024-08-10 21:06:53.271743,XGBRegressor
567
+ 2024-08-10T00:00:00Z,-1.242396141678363,36.70772552490235,-1.2739575,36.8118501,14151.5,1440.854736328125,2024-08-10 21:06:56.124072,XGBRegressor
568
+ 2024-08-10T00:00:00Z,-1.3032036,36.6825914,-1.2739575,36.8118501,30275.7,2248.195556640625,2024-08-10 21:09:31.264192,XGBRegressor
569
+ 2024-08-10T00:00:00Z,-1.247210751078278,36.707897186279304,-1.2739575,36.8118501,13732.2,1508.365234375,2024-08-10 21:09:48.177268,XGBRegressor
570
+ 2024-08-10T00:00:00Z,-1.3032036,36.6825914,-1.2739575,36.8118501,30275.7,2248.195556640625,2024-08-10 21:09:56.685411,XGBRegressor
571
+ 2024-08-10T00:00:00Z,-1.3032036,36.6825914,-1.2739575,36.8118501,30275.7,2248.195556640625,2024-08-10 22:51:54.026480,XGBRegressor
572
+ 2024-08-11T00:00:00Z,-1.3032036,36.6825914,-1.2739575,36.8118501,30275.7,2248.195556640625,2024-08-11 03:01:49.184372,XGBRegressor
573
+ 2024-08-11T00:00:00Z,-1.3032036,36.6825914,-1.2739575,36.8118501,30275.7,2248.195556640625,2024-08-11 03:15:49.227894,XGBRegressor
574
+ 2024-08-11T00:00:00Z,-1.3032036,36.6825914,-1.2739575,36.8118501,30275.7,2248.195556640625,2024-08-11 14:22:52.463557,XGBRegressor
575
+ 2024-08-11T00:00:00Z,-1.3032036,36.6825914,-1.2739575,36.8118501,30275.7,2248.195556640625,2024-08-11 14:54:32.978412,XGBRegressor
576
+ 2024-08-11T00:00:00Z,-1.3032036,36.6825914,-1.2739575,36.8118501,30275.7,2248.195556640625,2024-08-11 21:12:35.579368,XGBRegressor
577
+ 2024-08-11T00:00:00Z,-1.3032036,36.6825914,-1.2739575,36.8118501,30275.7,2248.195556640625,2024-08-11 21:13:09.222020,XGBRegressor
578
+ 2024-08-11T00:00:00Z,-1.280831386263176,36.68558074083211,-1.2739575,36.8118501,19552.2,1669.5150146484375,2024-08-11 21:13:15.294747,XGBRegressor
579
+ 2024-08-11T00:00:00Z,-1.2628112094774315,36.68738337186743,-1.2739575,36.8118501,16316.4,1635.612060546875,2024-08-11 22:09:25.035698,XGBRegressor
requirements.txt ADDED
@@ -0,0 +1,12 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ shiny==1.0.0
2
+ shinywidgets==0.3.2
3
+ plotly==5.23.0
4
+ plotly_calplot==0.1.20
5
+ faicons==0.2.2
6
+ geopandas==1.0.1
7
+ geopy==2.4.1
8
+ requests==2.32.3
9
+ requests-cache==1.2.1
10
+ httpx==0.27.0
11
+ cachetools==5.4.0
12
+ python-dotenv==1.0.1
utils/__init__.py ADDED
File without changes
utils/config.py ADDED
@@ -0,0 +1,101 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ from dotenv import dotenv_values
2
+ from pathlib import Path
3
+ from ipyleaflet import basemaps
4
+
5
+ from shiny.express import ui
6
+
7
+
8
+ # Paths
9
+ # ENV when using standalone shiny server, shiny for python runs from the root of the project
10
+ ENV_PATH = Path("env/online.env")
11
+
12
+ DATA = Path(__file__).parent.parent / "data/"
13
+ TEST_FILE = DATA / "Test.csv"
14
+ TRAIN_FILE = DATA / "Train.csv"
15
+ WEATHER_FILE = DATA / "Weather.csv"
16
+ HISTORY = DATA / "history/"
17
+ HISTORY_FILE = HISTORY / "history.csv"
18
+
19
+
20
+ # Models
21
+ ALL_MODELS = [
22
+ "AdaBoostRegressor",
23
+ "DecisionTreeRegressor",
24
+ "GradientBoostingRegressor",
25
+ "HistGradientBoostingRegressor",
26
+ "LinearRegression",
27
+ "RandomForestRegressor",
28
+ "XGBRegressor",
29
+ ]
30
+
31
+ BEST_MODELS = ["RandomForestRegressor", "XGBRegressor"]
32
+
33
+
34
+ # Urls
35
+ TEST_FILE_URL = "https://raw.githubusercontent.com/valiantezabuku/Yassir-ETA-Prediction-Challenge-For-Azubian-Team-Curium/main/Data/Test.csv"
36
+ TRAIN_FILE_URL = "https://raw.githubusercontent.com/valiantezabuku/Yassir-ETA-Prediction-Challenge-For-Azubian-Team-Curium/main/Data/Train.csv"
37
+ WEATHER_FILE_URL = "https://raw.githubusercontent.com/valiantezabuku/Yassir-ETA-Prediction-Challenge-For-Azubian-Team-Curium/main/Data/Weather.csv"
38
+
39
+
40
+ # Load environment variables from .env file into a dictionary
41
+ environment_variables = dotenv_values(ENV_PATH)
42
+
43
+
44
+ # Get the OpenRouteService API key
45
+ # https://openrouteservice.org/dev/#/home
46
+ ors_api_key = environment_variables.get("ORS_API_TOKEN")
47
+
48
+ # https://maps.app.goo.gl/Fx5rdPs1KeA6jCeB8
49
+ KENYA_LAT = 0.15456
50
+ KENYA_LON = 37.908383
51
+
52
+
53
+ BASEMAPS = {
54
+ "DarkMatter": basemaps.CartoDB.DarkMatter,
55
+ "Mapnik": basemaps.OpenStreetMap.Mapnik,
56
+ "NatGeoWorldMap": basemaps.Esri.NatGeoWorldMap,
57
+ "WorldImagery": basemaps.Esri.WorldImagery,
58
+ }
59
+
60
+ # Yassir
61
+ BRANDCOLORS = {
62
+ "red": "#FB2576",
63
+ "purple-light": "#6316DB",
64
+ "purple-dark": "#08031A",
65
+ }
66
+
67
+ BRANDTHEMES = {
68
+ "red": ui.value_box_theme(bg=BRANDCOLORS['red'], fg='white'),
69
+ "purple-light": ui.value_box_theme(bg=BRANDCOLORS['purple-light'], fg='white'),
70
+ "purple-dark": ui.value_box_theme(bg=BRANDCOLORS['purple-dark'], fg='white'),
71
+ }
72
+
73
+
74
+ # Nairobi, https://maps.app.goo.gl/oPbLBYHuicjrC22J9
75
+ # National Museum of Kenya, https://maps.app.goo.gl/zbmUpe71admABU9i9
76
+ # Closest location
77
+ LOCATIONS = {
78
+ "Nairobi": {"latitude": -1.3032036, "longitude": 36.6825914},
79
+ "National Museum of Kenya": {"latitude": -1.2739575, "longitude": 36.8118501},
80
+ "Mombasa": {"latitude": -1.3293123, "longitude": 36.8717466},
81
+ }
82
+
83
+
84
+ HOURS = [f"{i:02}" for i in range(0, 24)]
85
+
86
+ MINUTES = [f"{i:02}" for i in range(0, 12)]
87
+
88
+ SECONDS = [f"{i:02}" for i in range(0, 60)]
89
+
90
+
91
+ ONE_MINUTE_SEC = 60
92
+
93
+ ONE_HOUR_SEC = ONE_MINUTE_SEC * 60
94
+
95
+ ONE_DAY_SEC = ONE_HOUR_SEC * 24
96
+
97
+ ONE_WEEK_SEC = ONE_DAY_SEC * 7
98
+
99
+
100
+ # Default trip distance
101
+ TRIP_DISTANCE = 30275.7
utils/dashboard.py ADDED
@@ -0,0 +1,568 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ from .data import test_df, train_df, weather_df, time_sec_hms, full_time_sec_hms, get_country_geojson
2
+ from .config import BRANDCOLORS, BRANDTHEMES, ALL_MODELS
3
+ import time
4
+ import requests
5
+ import requests_cache
6
+ from pathlib import Path
7
+
8
+ from faicons import icon_svg
9
+
10
+ import pandas as pd
11
+ import plotly.io as pio
12
+ import plotly.express as px
13
+ import plotly.graph_objects as go
14
+ from plotly_calplot import calplot
15
+ from plotly.subplots import make_subplots
16
+
17
+ from shiny import reactive, render, Inputs, Outputs, Session
18
+ from shiny.express import input, output, module, ui
19
+ from shinywidgets import render_plotly, render_widget
20
+
21
+
22
+ # Set pandas to display all columns
23
+ pd.set_option("display.max_columns", None)
24
+
25
+ # High precision longitudes and Latitudes
26
+ pd.set_option('display.float_format', '{:.16f}'.format)
27
+
28
+
29
+ # Yassir plotly theme
30
+ yassir_theme = pio.templates["plotly_dark"]
31
+
32
+ yassir_theme.layout.update(
33
+ plot_bgcolor=BRANDCOLORS["purple-dark"],
34
+ paper_bgcolor=BRANDCOLORS["purple-dark"],
35
+ colorway=[BRANDCOLORS["red"], BRANDCOLORS["purple-light"],
36
+ BRANDCOLORS["purple-dark"]], # Brand colors
37
+ )
38
+
39
+ pio.templates["yassir_theme"] = yassir_theme
40
+
41
+ pio.templates.default = yassir_theme
42
+
43
+
44
+ @module
45
+ def dashboard_page(input: Inputs, output: Outputs, session: Session):
46
+ # Disable loading spinners, use elegant pulse
47
+ ui.busy_indicators.use(spinners=False)
48
+
49
+ ui.panel_title(title=ui.h1(ui.strong("Dashboard 📈")),
50
+ window_title="Yassir Dashboard")
51
+
52
+ # Link to the external CSS file
53
+ ui.tags.link(rel="stylesheet", href="styles.css")
54
+
55
+ # Add main content
56
+ ICONS = {
57
+ "eta": icon_svg("clock"),
58
+ "distance": icon_svg("route"),
59
+ "ellipsis": icon_svg("ellipsis"),
60
+ }
61
+
62
+ # Define the target column
63
+ target = 'eta'
64
+
65
+ # Columns
66
+ columns = train_df.columns.to_list()
67
+
68
+ # Weather columns
69
+ w_columns = weather_df.columns.to_list()
70
+
71
+ # Numericals
72
+ numericals = train_df.select_dtypes(include=['number']).columns.tolist()
73
+
74
+ # Input range
75
+ eta_rng = (min(train_df["eta"]), max(train_df["eta"]))
76
+ trip_distance_rng = (min(train_df["trip_distance"]),
77
+ max(train_df["trip_distance"]))
78
+
79
+ with ui.layout_sidebar():
80
+
81
+ with ui.sidebar(open="desktop"):
82
+ ui.tags.style("""
83
+ .shiny-input-container input[type="range"] {
84
+ background: linear-gradient(to right, red, #4CAF50) no-repeat;
85
+ height: 8px;
86
+ }
87
+ """),
88
+ ui.input_slider(
89
+ "trip_distance",
90
+ "Trip Distance",
91
+ min=trip_distance_rng[0],
92
+ max=trip_distance_rng[1],
93
+ value=trip_distance_rng,
94
+ post=" m",
95
+ )
96
+ ui.input_slider(
97
+ "eta",
98
+ "ETA",
99
+ min=eta_rng[0],
100
+ max=eta_rng[1],
101
+ value=eta_rng,
102
+ post=" sec",
103
+ )
104
+
105
+ ui.input_action_button("reset", "Reset filter")
106
+
107
+ # KPIs
108
+ with ui.layout_column_wrap(fill=False):
109
+ with ui.value_box(showcase=ICONS["eta"], theme=BRANDTHEMES['purple-dark']):
110
+ "ETA (Total)"
111
+
112
+ @reactive.calc
113
+ def total_eta():
114
+ return float(train_data().eta.sum())
115
+
116
+ @render.text
117
+ def ts():
118
+ return f"{round(total_eta()):,} s"
119
+
120
+ @render.text
121
+ def thms():
122
+ return full_time_sec_hms(total_eta())
123
+
124
+ with ui.value_box(showcase=ICONS["eta"], theme=BRANDTHEMES['purple-dark']):
125
+ "ETA (Median)"
126
+
127
+ @reactive.calc
128
+ def median_eta():
129
+ d = train_data()
130
+ m_eta = None
131
+ if d.shape[0] > 0:
132
+ m_eta = d.eta.median()
133
+ return m_eta
134
+
135
+ @render.text
136
+ def ms():
137
+ return f"{round(median_eta()):,} s"
138
+
139
+ @render.text
140
+ def mhms():
141
+ return time_sec_hms(median_eta())
142
+
143
+ with ui.value_box(showcase=ICONS["distance"], theme=BRANDTHEMES['purple-light']):
144
+ "TRIP DISTANCE (Total)"
145
+
146
+ @reactive.calc
147
+ def total_trip():
148
+ return float(train_data().trip_distance.sum())
149
+
150
+ @render.text
151
+ def tdkm():
152
+ return f"{total_trip()/1000:,.1f} km"
153
+
154
+ @render.text
155
+ def tdm():
156
+ return f"{total_trip():,.1f} m"
157
+
158
+ with ui.value_box(showcase=ICONS["distance"], theme=BRANDTHEMES['purple-light']):
159
+ "TRIP DISTANCE (Median)"
160
+
161
+ @reactive.calc
162
+ def median_trip():
163
+ d = train_data()
164
+ m_trip = None
165
+ if d.shape[0] > 0:
166
+ m_trip = d.trip_distance.median()
167
+ return m_trip
168
+
169
+ @render.text
170
+ def mtdkm():
171
+ return f"{median_trip()/1000:,.1f} km"
172
+
173
+ @render.text
174
+ def mtdm():
175
+ return f"{median_trip():,.1f} m"
176
+
177
+ # Dataset view
178
+ with ui.layout_column_wrap(fill=False):
179
+ with ui.navset_card_pill(id="data_tab"):
180
+ with ui.nav_panel("Train data"):
181
+ with ui.card(full_screen=True):
182
+ ui.card_header("Train data")
183
+
184
+ @render.data_frame
185
+ def train_table():
186
+ return render.DataGrid(train_data(), filters=True)
187
+
188
+ with ui.nav_panel("Test data"):
189
+ with ui.card(full_screen=True):
190
+ ui.card_header("Test data")
191
+
192
+ @render.data_frame
193
+ def test_table():
194
+ return render.DataGrid(test_df)
195
+
196
+ with ui.nav_panel("Weather data"):
197
+ with ui.card(full_screen=True):
198
+ ui.card_header("Weather data")
199
+
200
+ @render.data_frame
201
+ def weather_table():
202
+ return render.DataGrid(weather_df)
203
+
204
+ value = "Explore the visualizations"
205
+ with ui.accordion(id="plot_acc", open=value):
206
+ with ui.accordion_panel(title=ui.strong(value), value=value):
207
+ with ui.navset_card_pill(id="eda_tab"):
208
+ with ui.nav_panel("Train features"):
209
+ with ui.card(full_screen=True):
210
+ ui.card_header(
211
+ "Correlation in the Train features")
212
+
213
+ @render_plotly
214
+ def train_features():
215
+ numeric_correlation_matrix = train_data()[
216
+ numericals].corr()
217
+ # Create heatmap trace
218
+ heatmap_trace = go.Heatmap(
219
+ z=numeric_correlation_matrix.values,
220
+ x=numeric_correlation_matrix.columns,
221
+ y=numeric_correlation_matrix.index,
222
+ colorbar=dict(title='coefficient'),
223
+ colorscale="Agsunset",
224
+ texttemplate='%{z:.3f}',
225
+ )
226
+
227
+ # Create figure
228
+ fig = go.Figure(data=[heatmap_trace])
229
+
230
+ return fig
231
+
232
+ with ui.nav_panel("Trip distance vs Eta"):
233
+ with ui.card(full_screen=True):
234
+ ui.card_header(
235
+ "Relationship between Trip Distance and ETA")
236
+
237
+ @render_plotly
238
+ def scatterplot():
239
+ return px.scatter(
240
+ train_data(),
241
+ x='trip_distance',
242
+ y='eta',
243
+ trendline='ols',
244
+ trendline_color_override=BRANDCOLORS["purple-light"],
245
+ labels={
246
+ 'eta': 'Eta (seconds)', 'trip_distance': 'Trip Distance (meters)'},
247
+ )
248
+
249
+ with ui.nav_panel("Distribution"):
250
+ with ui.card(full_screen=True):
251
+ ui.card_header("Distribution per train column")
252
+ with ui.popover(title="Choose a train column"):
253
+ ICONS["ellipsis"]
254
+ ui.input_radio_buttons(
255
+ "train_col",
256
+ "Select:",
257
+ numericals,
258
+ selected="eta",
259
+ inline=True,
260
+ )
261
+
262
+ @render_plotly
263
+ def distribution():
264
+ column = input.train_col()
265
+ data = train_data()
266
+ fig1 = px.violin(data, x=column, box=True)
267
+
268
+ fig2 = px.histogram(data, x=column)
269
+
270
+ # Create a subplot layout with 1 row and 2 columns
271
+ fig = make_subplots(rows=1, cols=2)
272
+
273
+ # Add traces from fig1 to the subplot
274
+ for trace in fig1.data:
275
+ fig.add_trace(trace, row=1, col=1)
276
+
277
+ # Add traces from fig2 to the subplot
278
+ for trace in fig2.data:
279
+ fig.add_trace(trace, row=1, col=2)
280
+
281
+ # Update layout
282
+ fig.update_layout(title_text=f"Distribution in the {column} column",
283
+ showlegend=True,
284
+ legend_title_text=target
285
+ )
286
+
287
+ return fig
288
+
289
+ with ui.nav_panel("Weather features vs Eta"):
290
+ with ui.card(full_screen=True):
291
+ ui.card_header(
292
+ "Relationship between weather features and Median Eta in seconds")
293
+ with ui.popover(title="Choose a feature column"):
294
+ ICONS["ellipsis"]
295
+ ui.input_radio_buttons(
296
+ "weather_col",
297
+ "Select:",
298
+ [col for col in w_columns if col != "date"],
299
+ selected="dewpoint_2m_temperature",
300
+ inline=True,
301
+ )
302
+
303
+ @render_plotly
304
+ def weather_eta():
305
+ column = input.weather_col()
306
+
307
+ fig = px.scatter(
308
+ x=daily_weather_eta_df()[column],
309
+ y=daily_weather_eta_df()[target],
310
+ )
311
+
312
+ # Update layout
313
+ fig.update_layout(
314
+ title_text=f"Distribution in the {column} column",
315
+ showlegend=False
316
+ )
317
+
318
+ fig.update_xaxes(title_text=column) # Set x-axis title
319
+ fig.update_yaxes(title_text=target) # Set y-axis title
320
+
321
+ return fig
322
+
323
+ value = "More Visualizations..."
324
+ with ui.accordion_panel(title=ui.strong(value), value=value):
325
+ with ui.navset_card_pill(id="more_visualizations"):
326
+ with ui.nav_panel("Weather vs Eta"):
327
+ with ui.card(full_screen=True):
328
+ ui.card_header(
329
+ "Weather vs Eta Features summary")
330
+
331
+ @render_plotly
332
+ def eta_weather_summary():
333
+ daily_weather_eta_correlation_matrix = daily_weather_eta_df().corr().sort_values(by='eta')
334
+
335
+ # Create heatmap trace
336
+ heatmap_trace = go.Heatmap(
337
+ z=daily_weather_eta_correlation_matrix[[
338
+ 'eta']].values,
339
+ x=daily_weather_eta_correlation_matrix[[
340
+ 'eta']].columns,
341
+ y=daily_weather_eta_correlation_matrix[[
342
+ 'eta']].index,
343
+ colorbar=dict(title='Coefficient'),
344
+ colorscale="Agsunset",
345
+ texttemplate='%{z:.3f}',
346
+ )
347
+
348
+ # Create figure
349
+ fig = go.Figure(data=[heatmap_trace])
350
+
351
+ return fig
352
+
353
+ with ui.nav_panel("Top locations"):
354
+ with ui.card(full_screen=True):
355
+ ui.card_header(
356
+ "Top 10 Most Common Origin and Destination Locations")
357
+ with ui.popover(title="Origin or Destination?"):
358
+ ICONS["ellipsis"]
359
+ ui.input_radio_buttons(
360
+ "location_type",
361
+ "Select:",
362
+ ["origin", "destination"],
363
+ selected="origin",
364
+ inline=True,
365
+ )
366
+
367
+ @render_plotly
368
+ def top_locations():
369
+ location_type = input.location_type()
370
+ top_10_origin, top_10_dest = top_bottom_location()[
371
+ 0]
372
+
373
+ data = top_10_origin if location_type == "origin" else top_10_dest
374
+ # Prepare data for origin locations
375
+ data.sort_values(by='count', inplace=True)
376
+ data['location'] = data.sort_values(by='count').apply(
377
+ lambda row: f"({row[f'{location_type}_lat']}, {row[f'{location_type}_lon']})", axis=1)
378
+
379
+ fig = go.Figure()
380
+
381
+ fig.add_trace(
382
+ go.Bar(
383
+ x=data['count'],
384
+ y=data['location'],
385
+ orientation='h',
386
+ marker=dict(
387
+ color=BRANDCOLORS['purple-light'] if location_type == "origin" else BRANDCOLORS['red']),
388
+ name=f'{location_type.title()} Locations'
389
+ )
390
+ )
391
+
392
+ # Update layout
393
+ fig.update_layout(
394
+ xaxis_title=f'{location_type.title()} Locations',
395
+ yaxis_title='Number of Rides',
396
+ showlegend=False
397
+ )
398
+
399
+ return fig
400
+
401
+ with ui.nav_panel("Trips by hour"):
402
+ with ui.card(full_screen=True):
403
+ ui.card_header(
404
+ "No of trips by Hour of the day")
405
+ with ui.popover(title="Average or Median?"):
406
+ ICONS["ellipsis"]
407
+ ui.input_radio_buttons(
408
+ "trip_agg",
409
+ "Select:",
410
+ ["average", "median"],
411
+ selected="median",
412
+ inline=True,
413
+ )
414
+
415
+ @render_plotly
416
+ def trips_by_hour():
417
+ trip_agg = input.trip_agg()
418
+
419
+ # Create a DataFrame with only the Timestamp column
420
+ time_df = train_data()[['timestamp']]
421
+
422
+ # Extract the hour from the timestamp and add it as a new column
423
+ time_df = time_df.assign(hour=time_df['timestamp'].dt.hour)
424
+
425
+ # Count the number of trips for each hour of the day
426
+ tps = time_df['hour'].value_counts().sort_index().reset_index().rename(
427
+ columns={'hour': 'Hour', 'count': f'{trip_agg.title()} number of Trips'})
428
+
429
+ # Calculate the average number of trips per hour (Note: This line might not be necessary as 'trips_per_hour' already represents counts per hour)
430
+ if trip_agg == "median":
431
+ agg_trips_per_hour = tps.groupby(
432
+ 'Hour')[f'{trip_agg.title()} number of Trips'].median().reset_index()
433
+ else:
434
+ agg_trips_per_hour = tps.groupby(
435
+ 'Hour')[f'{trip_agg.title()} number of Trips'].mean().reset_index()
436
+
437
+ # Plot count ETA by hour
438
+ fig = px.line(
439
+ agg_trips_per_hour, x='Hour', y=f'{trip_agg.title()} number of Trips')
440
+
441
+ return fig
442
+
443
+ with ui.nav_panel("Mapping dataset locations"):
444
+ with ui.card(full_screen=True):
445
+ ui.card_header(
446
+ "Map of locations in the train dataset")
447
+
448
+ @render_plotly
449
+ def location_map():
450
+ country, geojson, data = get_country_geojson()
451
+ data['country'] = country
452
+ fig = px.scatter_geo(
453
+ data,
454
+ locations='country',
455
+ hover_name='country',
456
+ geojson=geojson,
457
+ fitbounds='geojson',
458
+ )
459
+
460
+ # Add longitude and latitude points
461
+ fig.add_scattergeo(
462
+ lon=data['longitude'],
463
+ lat=data['latitude'],
464
+ mode='markers',
465
+ marker=dict(
466
+ color=BRANDCOLORS["red"],
467
+ ),
468
+ name='Locations in dataset'
469
+ )
470
+
471
+ # Add annotation to the map
472
+ fig.add_annotation(
473
+ text=f"{country}",
474
+ showarrow=False,
475
+ font=dict(size=18),
476
+ align="center"
477
+ )
478
+
479
+ fig.update_layout(
480
+ title=f'Dataset locations in {country}',
481
+ geo_scope='africa'
482
+ )
483
+
484
+ return fig
485
+
486
+
487
+ value = "Model Explainer"
488
+ with ui.accordion_panel(title=ui.strong(value), value=value):
489
+ with ui.navset_card_pill(id="model_explainer"):
490
+ with ui.nav_panel("Model Explainer..."):
491
+ with ui.card(full_screen=True):
492
+ ui.card_header("Coming Soon...")
493
+
494
+ ui.h3("Models")
495
+ @render.ui
496
+ def all_models():
497
+ return ui.tags.ul(
498
+ [ui.tags.li(item) for item in ALL_MODELS]
499
+ )
500
+
501
+ # ui.include_css("styles.css")
502
+
503
+ # --------------------------------------------------------
504
+ # Reactive calculations and effects
505
+ # --------------------------------------------------------
506
+
507
+ @reactive.calc
508
+ def train_data():
509
+ trip_distances = input.trip_distance()
510
+ idx1 = train_df.trip_distance.between(
511
+ trip_distances[0], trip_distances[1])
512
+ eta = input.eta()
513
+ idx2 = train_df.eta.between(eta[0], eta[1])
514
+ return train_df[idx1 & idx2]
515
+
516
+ @reactive.calc
517
+ def daily_weather_eta_df():
518
+ # Select relevant columns from the training DataFrame
519
+ time_eta_df = train_data()[['timestamp', 'eta']]
520
+
521
+ # Extract the date from the timestamp
522
+ time_eta_df = time_eta_df.assign(
523
+ date=pd.to_datetime(time_eta_df['timestamp'].dt.date))
524
+
525
+ # Prepare daily aggregated ETA data
526
+ daily_eta_df = (
527
+ time_eta_df
528
+ # Remove the 'timestamp' column as it's no longer needed
529
+ .drop(columns=['timestamp'])
530
+ # Set 'date' as the index for resampling
531
+ .set_index('date')
532
+ # Resample the data on a daily frequency
533
+ .resample('D')
534
+ .median() # Compute the median ETA for each day
535
+ .reset_index() # Reset the index to include 'date' as a column
536
+ )
537
+
538
+ # Merge the daily ETA data with the weather data
539
+ return (
540
+ pd.merge(daily_eta_df, weather_df, left_on='date', right_on='date')
541
+ .drop(columns=['date'])
542
+ )
543
+
544
+ @reactive.calc
545
+ def top_bottom_location():
546
+ # Group by origin locations and count occurrences
547
+ origin_counts = train_data().groupby(['origin_lat', 'origin_lon'])[
548
+ 'origin_lon'].count().reset_index(name='count')
549
+
550
+ # Sort by count in descending order
551
+ top_origin = origin_counts.nlargest(10, columns=['count'])
552
+ bottom_origin = origin_counts.nsmallest(10, columns=['count'])
553
+
554
+ # Group by destination locations and count occurrences
555
+ destination_counts = train_data().groupby(['destination_lat', 'destination_lon'])[
556
+ 'destination_lon'].count().reset_index(name='count')
557
+
558
+ # Sort by count in descending order
559
+ top_dest = destination_counts.nlargest(10, columns=['count'])
560
+ bottom_dest = destination_counts.nsmallest(10, columns=['count'])
561
+
562
+ return [(top_origin, top_dest), (bottom_origin, bottom_dest)]
563
+
564
+ @reactive.effect
565
+ @reactive.event(input.reset)
566
+ def _():
567
+ ui.update_slider("trip_distance", value=trip_distance_rng)
568
+ ui.update_slider("eta", value=eta_rng)
utils/data.py ADDED
@@ -0,0 +1,163 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ import logging
2
+ import requests
3
+ import requests_cache
4
+ from geopy.geocoders import Nominatim
5
+ from utils.config import WEATHER_FILE, WEATHER_FILE_URL, TEST_FILE, TEST_FILE_URL, TRAIN_FILE, TRAIN_FILE_URL, ONE_WEEK_SEC
6
+ from cachetools import TTLCache, cached
7
+ from typing import List, Dict
8
+ from pathlib import Path
9
+ import time
10
+
11
+ import pandas as pd
12
+ # Set pandas to display all columns
13
+ pd.set_option("display.max_columns", None)
14
+
15
+ # High precision longitudes and Latitudes
16
+ pd.set_option('display.float_format', '{:.16f}'.format)
17
+
18
+ # Install persistent cache
19
+ requests_cache.install_cache('yassir_requests_cache', expire_after=ONE_WEEK_SEC) # Cache expires after 1 week
20
+
21
+
22
+ # Log
23
+ logging.basicConfig(level=logging.ERROR,
24
+ format='%(asctime)s - %(levelname)s - %(message)s')
25
+
26
+ # Date columns to parse
27
+ parse_dates = ['Timestamp']
28
+
29
+ dtype = {
30
+ 'Origin_lat': 'float64',
31
+ 'Origin_lon': 'float64',
32
+ 'Destination_lat': 'float64',
33
+ 'Destination_lon': 'float64',
34
+ }
35
+
36
+ dtype_weather = {
37
+ 'dewpoint_2m_temperature': 'float64',
38
+ 'maximum_2m_air_temperature': 'float64',
39
+ 'mean_2m_air_temperature': 'float64',
40
+ 'mean_sea_level_pressure': 'float64',
41
+ 'minimum_2m_air_temperature': 'float64',
42
+ 'surface_pressure': 'float64',
43
+ 'total_precipitation': 'float64',
44
+ 'u_component_of_wind_10m': 'float64',
45
+ 'v_component_of_wind_10m': 'float64',
46
+ }
47
+
48
+ # Load CSV files
49
+
50
+
51
+ # @cached(cache=TTLCache(maxsize=100000, ttl=ONE_WEEK_SEC)) # Memory # change cache library
52
+ def get_data_df(file: Path, file_url: str, parse_dates: List[str], dtype: Dict[str, str]) -> pd.DataFrame:
53
+ df = None
54
+ try:
55
+ df = pd.read_csv(file_url, parse_dates=parse_dates, dtype=dtype)
56
+ except Exception as e:
57
+ df = pd.read_csv(file, parse_dates=parse_dates, dtype=dtype)
58
+ logging.error(
59
+ f"Oops, the file is not available on the url, trying a local version: {e}")
60
+ finally:
61
+ return df
62
+
63
+
64
+ # @cached(cache=TTLCache(maxsize=100000, ttl=ONE_WEEK_SEC)) # Memory # unhassable dict. change cache library
65
+ def clean_df(df: pd.DataFrame) -> pd.DataFrame:
66
+ df.columns = [col.lower() for col in df.columns]
67
+ return df
68
+
69
+
70
+ # Read and get cleaned data
71
+ test_df = clean_df(get_data_df(TEST_FILE, TEST_FILE_URL,
72
+ parse_dates=parse_dates, dtype=dtype))
73
+ train_df = clean_df(get_data_df(TRAIN_FILE, TRAIN_FILE_URL,
74
+ parse_dates=parse_dates, dtype=dtype))
75
+ weather_df = clean_df(get_data_df(
76
+ WEATHER_FILE, WEATHER_FILE_URL, parse_dates=['date'], dtype=dtype_weather))
77
+
78
+
79
+ def time_sec_hms(sec: float) -> str:
80
+ return time.strftime("%H:%M:%S", time.gmtime(sec))
81
+
82
+ def full_time_sec_hms(sec: float) -> str:
83
+ hours = sec // 3600
84
+ minutes = (sec % 3600) // 60
85
+ remaining_sec = sec % 60
86
+ return f"{round(hours):,}h: {round(minutes)}m: {round(remaining_sec)}s"
87
+
88
+
89
+ @cached(cache=TTLCache(maxsize=100000, ttl=ONE_WEEK_SEC)) # Memory
90
+ def get_country_geojson():
91
+ data = (
92
+ pd.concat(
93
+ [
94
+ train_df[['origin_lat', 'origin_lon', ]].rename(columns={'origin_lat': 'latitude', 'origin_lon': 'longitude'}),
95
+ train_df[['destination_lat', 'destination_lon']].rename(columns={'destination_lat': 'latitude', 'destination_lon': 'longitude'})
96
+ ],
97
+ ignore_index=True
98
+ )
99
+ .drop_duplicates()
100
+ )
101
+
102
+ # Initialize the Nominatim Geocoder
103
+ geolocator = Nominatim(user_agent="yassirAPP")
104
+
105
+ # Function to reverse geocode
106
+ def reverse_geocode(lat, lon):
107
+ location = geolocator.reverse((lat, lon), exactly_one=True)
108
+ address = location.raw['address']
109
+ country = address.get('country', '')
110
+ return country
111
+
112
+ # Apply reverse geocoding to min latitude and longitude pair and also the maximum in the DataFrame
113
+ # Find the minimum latitude and longitude
114
+ min_lat = data['latitude'].min()
115
+ min_lon = data['longitude'].min()
116
+ max_lat = data['latitude'].max()
117
+ max_lon = data['longitude'].max()
118
+ country_min = reverse_geocode(min_lat, min_lon)
119
+ country_max = reverse_geocode(max_lat, max_lon)
120
+
121
+ if country_min == country_max:
122
+ country = country_min
123
+
124
+
125
+ # Get the location for Kenya
126
+ location = geolocator.geocode(country, exactly_one=True)
127
+
128
+ # If the location is found
129
+ if location:
130
+ # Get the bounding box for Kenya
131
+ bounding_box = location.raw['boundingbox']
132
+ print(f"Bounding Box: {bounding_box}")
133
+
134
+ # Nominatim API URL with query parameters
135
+ url = "https://nominatim.openstreetmap.org/search"
136
+
137
+ # Parameters for the request
138
+ params = {
139
+ 'q': country, # Kenya
140
+ 'format': 'json',
141
+ 'polygon_geojson': 1 # Request GeoJSON polygons in the response
142
+ }
143
+
144
+ # Headers for the request
145
+ headers = {
146
+ 'User-Agent': 'yassirAPP'
147
+ }
148
+
149
+ # Send the request to Nominatim with headers
150
+ response = requests.get(url, params=params, headers=headers)
151
+
152
+ # Check if the request was successful
153
+ if response.status_code == 200:
154
+ country_geojson = response.json()
155
+
156
+ geojson = country_geojson[0]['geojson']
157
+
158
+
159
+ return country, geojson, data
160
+
161
+
162
+
163
+
utils/history.py ADDED
@@ -0,0 +1,56 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ import pandas as pd
2
+
3
+ import logging
4
+ from cachetools import TTLCache, cached
5
+
6
+ from shiny import Inputs, Outputs, Session
7
+ from shiny.express import module, render, ui
8
+
9
+ from .config import HISTORY_FILE, ONE_MINUTE_SEC
10
+
11
+
12
+ # Log
13
+ logging.basicConfig(level=logging.ERROR,
14
+ format='%(asctime)s - %(levelname)s - %(message)s')
15
+
16
+
17
+ @cached(cache=TTLCache(maxsize=3000, ttl=ONE_MINUTE_SEC*5)) # Memory
18
+ def get_history_data():
19
+ try:
20
+ parse_dates = ['time_of_prediction']
21
+ df_history = pd.read_csv(HISTORY_FILE, parse_dates=parse_dates)
22
+ except Exception as e:
23
+ df_history = None
24
+ logging.error(f"Oops, an error occured in the history page: {e}")
25
+
26
+ finally:
27
+ return df_history
28
+
29
+
30
+ # Display History Page
31
+ @module
32
+ def history_page(input: Inputs, output: Outputs, session: Session):
33
+ # Disable loading spinners, use elegant pulse
34
+ ui.busy_indicators.use(spinners=False)
35
+
36
+ ui.panel_title(title=ui.h1(ui.strong("Prediction History 🕰️")),
37
+ window_title="History page")
38
+
39
+ df_history = get_history_data()
40
+
41
+ if df_history is not None:
42
+ with ui.card():
43
+ with ui.card_header():
44
+ ui.h2("Explore all past predictions")
45
+
46
+ @render.data_frame
47
+ def _():
48
+ return render.DataGrid(
49
+ df_history,
50
+ selection_mode="rows",
51
+ filters=True,
52
+ )
53
+
54
+ else:
55
+ ui.notification_show(
56
+ "🚨 There is no history file yet. Make a prediction.", duration=6, type="warning")
utils/home.py ADDED
@@ -0,0 +1,113 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ from pathlib import Path
2
+
3
+ from shiny import experimental, Inputs, Outputs, Session
4
+ from shiny.express import ui, module
5
+
6
+ from .config import BRANDCOLORS
7
+
8
+
9
+ @module
10
+ def home_page(input: Inputs, output: Outputs, session: Session):
11
+ dir = Path(__file__).resolve().parent.parent
12
+
13
+ ui.panel_title(title=ui.h2(ui.strong("Welcome to Yassir Data App!")),
14
+ window_title="Yassir Home",)
15
+
16
+
17
+ with ui.layout_columns(col_widths=(4, 8)):
18
+ with ui.card():
19
+ ui.tags.p(
20
+ {"class": "dynamic-paragraph"},
21
+ ui.span({"class": "dropcap"}, "Y"),
22
+ ui.strong("assir"),
23
+ " is the leading super App in the Maghreb region set to changing the way daily services are provided. It currently operates in 45 cities across Algeria, Morocco and Tunisia with recent expansions into France, Canada and ",
24
+ ui.strong("Sub-Saharan Africa"),
25
+ ". It is backed (~$200M in funding) by VCs from Silicon Valley, Europe and other parts of the world. Offering on-demand services such as ",
26
+ ui.strong("ride-hailing"),
27
+ " and last-mile delivery."
28
+ )
29
+ ui.tags.style(f"""
30
+ .dynamic-paragraph {{
31
+ font-size: calc(1vw + 1vh); /* Adjust this value to control the text size */
32
+ width: 100%;
33
+ height: 100%;
34
+ overflow: hidden;
35
+ }}
36
+ .dropcap {{
37
+ float: left;
38
+ font-size: 4em;
39
+ line-height: 0.8;
40
+ margin-right: 8px;
41
+ font-weight: bold;
42
+ }}
43
+ .red-text {{
44
+ color: {BRANDCOLORS['red']};
45
+ font-weight: bold;
46
+ }}
47
+ .purple-text {{
48
+ color: {BRANDCOLORS['purple-light']};
49
+ font-weight: bold;
50
+ }}
51
+ .no-decoration a {{
52
+ display: inline-block;
53
+ padding: 10px 20px;
54
+ margin: 10px 0;
55
+ background-color: {BRANDCOLORS['purple-light']};
56
+ font-size: calc(1vw + 1vh);
57
+ color: inherit;
58
+ text-decoration: none;
59
+ font-weight: bold;
60
+ border-radius: 5px;
61
+ transition: background-color 0.3s, transform 0.3s;
62
+ }}
63
+ """)
64
+
65
+ experimental.ui.card_image(file=dir / "www/ride-hailing-hero.webp")
66
+
67
+
68
+ with ui.layout_columns(col_widths=(8, 4)):
69
+ with ui.card():
70
+ ui.tags.p(
71
+ {"class": "dynamic-paragraph"},
72
+ """In the fast-paced world of ride-hailing, accuracy and reliability are key.
73
+ For companies like Yassir, the ability to
74
+ """,
75
+ ui.strong("predict the estimated time of arrival (ETA)"),
76
+ "for trips in ",
77
+ ui.strong("real-time"),
78
+ " is crucial. Our mission is to enhance the Yassir experience by leveraging ",
79
+ ui.strong("data"),
80
+ " and ",
81
+ ui.strong("advanced machine learning algorithms"),
82
+ """ to deliver more accurate ETAs, making our services more dependable and
83
+ attractive to both customers and business partners.
84
+ """,
85
+ ui.br(),
86
+ """By improving ETA predictions, Yassir not only boosts customer
87
+ satisfaction but also optimizes operational efficiency, allowing the company
88
+ to allocate resources more effectively and reduce costs.
89
+ """,
90
+ ui.br(),
91
+ """This data app is a step forward in revolutionizing how Yassir operates,
92
+ ensuring that every journey is smooth and timely. It contributes to this vision by
93
+ predicting the ETA at the drop-off point for one Yassir journey at a time.
94
+ """,
95
+ ui.br(),
96
+ ui.span(
97
+ {"class": "purple-text"},
98
+ """Join us in shaping the future of ride-hailing services with our innovative data application!"""
99
+ )
100
+ )
101
+ ui.card_footer(
102
+ ui.strong("Going somewere? "),
103
+ ui.span(
104
+ {"class": "red-text"},
105
+ ui.span(
106
+ {"class": "no-decoration"},
107
+ ui.a("Yassir", href="https://yassir.com/ride-hailing", target="_blank")
108
+ ),
109
+ """ will take you there!"""
110
+ )
111
+ )
112
+
113
+ experimental.ui.card_image(file=dir / "www/image-2-1.webp")
utils/predict.py ADDED
@@ -0,0 +1,435 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ import os
2
+ import re
3
+ import sys
4
+ from dotenv import load_dotenv
5
+ from datetime import datetime
6
+ import time
7
+ import logging
8
+
9
+ import httpx
10
+ import pandas as pd
11
+
12
+ from pydantic import BaseModel, Field
13
+ from typing import List, Optional
14
+
15
+ from shiny import reactive, Inputs, Outputs, Session
16
+ from shiny.express import module, render, ui
17
+ from shinywidgets import render_widget
18
+
19
+ import ipyleaflet as L
20
+ from faicons import icon_svg
21
+ from geopy.distance import geodesic
22
+
23
+ from utils.utils import *
24
+ from utils.config import LOCATIONS, BRANDTHEMES, KENYA_LAT, KENYA_LON, HOURS, MINUTES, SECONDS, ALL_MODELS
25
+ from utils.config import HISTORY_FILE, ENV_PATH
26
+ from utils.url_to_coordinates import get_full_url, on_convert
27
+
28
+ load_dotenv(ENV_PATH)
29
+
30
+
31
+ class EtaFeatures(BaseModel):
32
+ timestamp: List[datetime] = Field(
33
+ description="Timestamp: Time that the trip was started")
34
+ origin_lat: List[float] = Field(
35
+ description="Origin_lat: Origin latitude (in degrees)")
36
+ origin_lon: List[float] = Field(
37
+ description="Origin_lon: Origin longitude (in degrees)")
38
+ destination_lat: List[float] = Field(
39
+ description="Destination_lat: Destination latitude (in degrees)")
40
+ destination_lon: List[float] = Field(
41
+ description="Destination_lon: Destination longitude (in degrees)")
42
+ trip_distance: List[float] = Field(
43
+ description="Trip_distance: Distance in meters on a driving route")
44
+
45
+
46
+ # Log
47
+ logging.basicConfig(level=logging.ERROR,
48
+ format='%(asctime)s - %(levelname)s - %(message)s')
49
+
50
+
51
+ lat_min, lat_max, lon_min, lon_max = get_bounds(country='Kenya')
52
+
53
+
54
+ async def endpoint(model_name: str) -> str:
55
+ api_url = os.getenv("API_URL")
56
+ model_endpoint = f"{api_url}={model_name}"
57
+ return model_endpoint
58
+
59
+
60
+ async def predict_eta(data: EtaFeatures, model_name: str) -> Optional[float]:
61
+ prediction = None
62
+ try:
63
+ # Get model endpoint
64
+ model_endpoint = await endpoint(model_name)
65
+
66
+ if "pyodide" in sys.modules:
67
+ import pyodide.http
68
+
69
+ response = await pyodide.http.pyfetch(
70
+ model_endpoint,
71
+ method="POST",
72
+ body=data,
73
+ headers={"Content-Type": "application/json"}
74
+ )
75
+
76
+ # Handle the response
77
+ if response.ok:
78
+ # .json() parses the response as JSON and converts to dictionary.
79
+ result = await response.json()['result']
80
+
81
+ else:
82
+ # Send POST request with JSON data using the json parameter
83
+ async with httpx.AsyncClient() as client:
84
+ response = await client.post(model_endpoint, json=data, timeout=30)
85
+ response.raise_for_status() # Ensure we catch any HTTP errors
86
+
87
+ if (response.status_code == 200):
88
+ result = response.json()['result']
89
+
90
+ if result:
91
+ prediction = float(result['prediction'][0])
92
+
93
+ # Create dataframe
94
+ df = pd.DataFrame.from_dict(data)
95
+ df['eta_prediction'] = prediction
96
+ df['time_of_prediction'] = pd.Timestamp(datetime.now())
97
+ df['model_used'] = model_name
98
+
99
+ # Save to history csv file
100
+ df.to_csv(HISTORY_FILE, mode='a',
101
+ header=not (HISTORY_FILE.exists()), index=False)
102
+ except Exception as e:
103
+ logging.error(f"Oops, an error occured: {e} {response}")
104
+
105
+ return prediction
106
+
107
+
108
+ @module
109
+ def predict_page(input: Inputs, output: Outputs, session: Session):
110
+ # Disable loading spinners, use elegant pulse
111
+ ui.busy_indicators.use(spinners=False)
112
+
113
+ ui.panel_title(title=ui.h1(ui.strong("Eta Prediction 🔮")),
114
+ window_title="Eta Prediction")
115
+
116
+ with ui.layout_sidebar():
117
+ with ui.sidebar():
118
+ # Cordinates features
119
+ ui.input_numeric("origin_lat", "Origin Latitude °",
120
+ value=LOCATIONS["Nairobi"]['latitude'], min=lat_min, max=lat_max, step=1)
121
+ ui.input_numeric("origin_lon", "Origin Longitude °",
122
+ value=LOCATIONS["Nairobi"]['longitude'], min=lon_min, max=lon_max, step=1)
123
+ ui.input_numeric("destination_lat", "Destination Latitude °",
124
+ value=LOCATIONS["National Museum of Kenya"]['latitude'], min=lat_min, max=lat_max, step=1)
125
+ ui.input_numeric("destination_lon", "Destination Longitude °",
126
+ value=LOCATIONS["National Museum of Kenya"]['longitude'], min=lon_min, max=lon_max, step=1)
127
+
128
+ # Google Maps Url to Coordinates
129
+ ui.help_text("Convert Google Maps Url to Latitude and Longitudes")
130
+ ui.input_action_button("map_url", "Convert")
131
+
132
+ @reactive.effect
133
+ @reactive.event(input.map_url)
134
+ def maps_url_modal():
135
+ m = ui.modal(
136
+ ui.help_text("From Origin:"),
137
+ ui.input_text("origin_url", "Google Maps url:"),
138
+
139
+ ui.help_text("To Destination:"),
140
+ ui.input_text("destination_url", "Google Maps url:"),
141
+
142
+ ui.input_action_button("convert_url", "Convert"),
143
+
144
+ title="Google Maps Url to Coordinates",
145
+ easy_close=True,
146
+ footer=None,
147
+ )
148
+ ui.modal_show(m)
149
+
150
+ @reactive.effect
151
+ @reactive.event(input.convert_url, ignore_init=True)
152
+ def update_coordinates_from_url() -> Optional[float]:
153
+ try:
154
+ origin_url = get_full_url(input.origin_url())
155
+ destination_url = get_full_url(input.destination_url())
156
+
157
+ # Coordinates are yet to be known
158
+ origin_latitude = None
159
+ origin_longitude = None
160
+ destination_latitude = None
161
+ destination_longitude = None
162
+
163
+ # Regular expression to find coordinates in the URL
164
+ pattern = re.compile(r"@(-?\d+\.\d+),(-?\d+\.\d+)")
165
+ match = []
166
+ for url in [origin_url, destination_url]:
167
+ match.append(pattern.search(url))
168
+
169
+ if all(match):
170
+ origin_latitude = float(match[0].group(1))
171
+ origin_longitude = float(match[0].group(2))
172
+ destination_latitude = float(match[1].group(1))
173
+ destination_longitude = float(match[1].group(2))
174
+
175
+ valid.set(on_convert(origin_latitude, origin_longitude,
176
+ destination_latitude, destination_longitude))
177
+
178
+ if valid():
179
+ ui.notification_show(
180
+ f"✅ The coordinates have been updated", duration=3, type="default")
181
+ else:
182
+ raise Exception
183
+ except Exception as e:
184
+ logging.error(
185
+ f"Oops, update_coordinates_from_url says an error occured converting maps url to coordinates: {e}")
186
+ ui.notification_show(
187
+ f"Error: {e}", duration=3, type="error")
188
+ ui.notification_show(
189
+ "🚨 Could not convert url to coordinates. Try again!", duration=6, type="error")
190
+
191
+ finally:
192
+ ui.modal_remove()
193
+
194
+ # Rest coordinates back to Kenyan region
195
+ ui.input_action_button(
196
+ "reset", "Back to Nairobi", icon=icon_svg("crosshairs"))
197
+
198
+ # Trip Distance feature
199
+ ui.input_numeric("trip_distance", "Trip Distance (meters)",
200
+ value=1, min=1, max=600000, step=10)
201
+ ui.input_switch("manual_distance",
202
+ "Use manual distance", False),
203
+
204
+ # Date feature
205
+ ui.input_date("date", "Select a Date")
206
+ ui.help_text("Select the UTC time")
207
+ ui.input_select("hours", "24-hour",
208
+ choices=HOURS, selected=HOURS[0])
209
+ ui.input_select("minutes", "Minutes",
210
+ choices=MINUTES, selected=MINUTES[0])
211
+ ui.input_select("seconds", "Seconds",
212
+ choices=SECONDS, selected=SECONDS[0])
213
+
214
+ # Select model
215
+ ui.input_selectize(
216
+ "modelname",
217
+ "Choose a model",
218
+ choices=ALL_MODELS,
219
+ selected="XGBRegressor",
220
+ )
221
+
222
+ # Base map
223
+ ui.input_selectize(
224
+ "basemap",
225
+ "Choose a basemap",
226
+ choices=list(BASEMAPS.keys()),
227
+ selected="Mapnik",
228
+ )
229
+
230
+ # Top 3 cards
231
+ with ui.layout_column_wrap(fill=False):
232
+ with ui.value_box(showcase=icon_svg("route"), theme=BRANDTHEMES['purple-dark']):
233
+ "Trip Distance"
234
+
235
+ @render.text
236
+ def trip_dist_km():
237
+ return f"{trip_distance()/1000:,.1f} km" if valid else ""
238
+
239
+ @render.text
240
+ def trip_dist_m():
241
+ return f"{trip_distance():,.1f} m" if valid and trip_distance is not None else ""
242
+
243
+ with ui.value_box(showcase=icon_svg("egg"), theme=BRANDTHEMES['purple-dark']):
244
+ "Geodisic Distance"
245
+
246
+ @reactive.calc
247
+ def geo_dist():
248
+ dist = geodesic(loc1xy(), loc2xy())
249
+ return (f"{dist.meters:,.1f} m", f"{dist.kilometers:,.1f} km") if valid and trip_distance is not None else ""
250
+
251
+ @render.text
252
+ def geo_dist_km():
253
+ return geo_dist()[1] if valid and trip_distance is not None else ""
254
+
255
+ @render.text
256
+ def geo_dist_m():
257
+ return geo_dist()[0] if valid and trip_distance is not None else ""
258
+
259
+ with ui.value_box(showcase=icon_svg("clock"), theme=BRANDTHEMES['red']):
260
+ "Est. time of arrival"
261
+
262
+ @reactive.calc
263
+ async def eta():
264
+ try:
265
+ # print(valid())
266
+ # print(notification_error())
267
+ if validate_inputs(origin_lat(), origin_lon(), destination_lat(), destination_lon()) and valid():
268
+ data: EtaFeatures = {
269
+ 'timestamp': [datetz()],
270
+ 'origin_lat': [origin_lat()],
271
+ 'origin_lon': [origin_lon()],
272
+ 'destination_lat': [destination_lat()],
273
+ 'destination_lon': [destination_lon()],
274
+ 'trip_distance': [trip_distance()]
275
+ }
276
+
277
+ eta_sec = await predict_eta(data, input.modelname())
278
+
279
+ eta_hms = time.strftime(
280
+ '%H:%M:%S', time.gmtime(eta_sec))
281
+
282
+ ui.notification_show(
283
+ f"⏰ ETA: {eta_hms} H:M:S", duration=6, type="default")
284
+
285
+ return f"{eta_sec:,.0f} s", f"{eta_hms}"
286
+ else:
287
+ raise Exception
288
+ except Exception:
289
+ ui.notification_show(
290
+ "🚨 Could not predict Eta. Median eta is 1000 seconds", duration=3, type="error")
291
+ return None
292
+
293
+ @render.text
294
+ async def eta_sec():
295
+ text = await eta()
296
+ return text[0] if text else ""
297
+
298
+ @render.text
299
+ async def eta_hms():
300
+ text = await eta()
301
+ return text[1] if text else ""
302
+
303
+ # Map (2 indents)
304
+ with ui.card():
305
+ ui.card_header(
306
+ "💡 Map (drag the markers to change locations)")
307
+
308
+ @render_widget
309
+ def map():
310
+ return L.Map(zoom=9, center=(KENYA_LAT, KENYA_LON))
311
+
312
+ ######################################################
313
+ # Reactive values to store location information
314
+ origin_lat = reactive.value()
315
+ origin_lon = reactive.value()
316
+ destination_lat = reactive.value()
317
+ destination_lon = reactive.value()
318
+
319
+ valid = reactive.value()
320
+
321
+ # Reactive value to store trip_distance information
322
+ trip_distance = reactive.value()
323
+
324
+ @reactive.effect(priority=100)
325
+ def _():
326
+ if (
327
+ validate_inputs(input.origin_lat(), input.origin_lon(),
328
+ input.destination_lat(), input.destination_lon())
329
+ and
330
+ validate_inputs(origin_lat(), origin_lon(),
331
+ destination_lat(), destination_lon())
332
+ ):
333
+ value = True
334
+ else:
335
+ value = False
336
+
337
+ valid.set(value)
338
+
339
+ @reactive.calc
340
+ def datetz():
341
+ return f"{input.date()}T{input.hours()}:{input.minutes()}:{input.seconds()}Z"
342
+
343
+ @reactive.effect
344
+ def _():
345
+ origin_lat.set(input.origin_lat()
346
+ if valid else LOCATIONS["Nairobi"]['latitude'])
347
+ origin_lon.set(input.origin_lon()
348
+ if valid else LOCATIONS["Nairobi"]['longitude'])
349
+ destination_lat.set(input.destination_lat(
350
+ ) if valid else LOCATIONS["National Museum of Kenya"]['latitude'])
351
+ destination_lon.set(input.destination_lon(
352
+ ) if valid else LOCATIONS["National Museum of Kenya"]['longitude'])
353
+
354
+ # Automate trip distance
355
+ trip_distance.set(ops_trip_distance(loc1xy(), loc2xy()))
356
+
357
+ # Manual
358
+ if input.manual_distance() and input.trip_distance() not in [0, None]:
359
+ trip_distance.set(input.trip_distance())
360
+
361
+ @reactive.effect
362
+ @reactive.event(trip_distance)
363
+ def _():
364
+ if valid():
365
+ # Update the trip distance input with current calculated or manual trip distance
366
+ ui.update_numeric("trip_distance", value=trip_distance())
367
+
368
+ @reactive.calc
369
+ def loc1xy():
370
+ return origin_lat(), origin_lon()
371
+
372
+ @reactive.calc
373
+ def loc2xy():
374
+ return destination_lat(), destination_lon()
375
+
376
+ # Add marker for first location
377
+
378
+ @reactive.effect
379
+ def _():
380
+ if valid():
381
+ update_marker(map.widget, loc1xy(), on_move1, "origin", icon=L.AwesomeIcon(
382
+ name='fa-map-marker', marker_color='darkpurple'))
383
+
384
+ # Add marker for second location
385
+
386
+ @reactive.effect
387
+ def _():
388
+ if valid():
389
+ update_marker(map.widget, loc2xy(), on_move2, "destination", icon=L.AwesomeIcon(
390
+ name='fa-map-marker', marker_color='purple'))
391
+
392
+ # Add line and fit bounds when either marker is moved
393
+
394
+ @reactive.effect
395
+ def _():
396
+ if valid():
397
+ update_line(map.widget, loc1xy(), loc2xy())
398
+
399
+ # If new bounds fall outside of the current view, fit the bounds if valid coordinates
400
+
401
+ @reactive.effect
402
+ def _():
403
+ if valid():
404
+ l1 = loc1xy()
405
+ l2 = loc2xy()
406
+
407
+ lat_rng = [min(l1[0], l2[0]), max(l1[0], l2[0])]
408
+ lon_rng = [min(l1[1], l2[1]), max(l1[1], l2[1])]
409
+ new_bounds = [
410
+ [lat_rng[0], lon_rng[0]],
411
+ [lat_rng[1], lon_rng[1]],
412
+ ]
413
+
414
+ b = map.widget.bounds
415
+ if len(b) == 0:
416
+ map.widget.fit_bounds(new_bounds)
417
+ elif (
418
+ lat_min < b[0][0]
419
+ or lat_max > b[1][0]
420
+ or lon_min < b[0][1]
421
+ or lon_max > b[1][1]
422
+ ):
423
+ map.widget.fit_bounds(new_bounds)
424
+
425
+ # Update the basemap
426
+
427
+ @reactive.effect(priority=-100) # The last effect that runs
428
+ def _():
429
+ if valid():
430
+ update_basemap(map.widget, input.basemap())
431
+
432
+ @reactive.effect(priority=95)
433
+ @reactive.event(input.reset)
434
+ def _():
435
+ back_to_nairobi()
utils/redis.py ADDED
@@ -0,0 +1,26 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ # Redis server has latency issues if it not a high availability backend
2
+ # Use memory cache for now.
3
+
4
+ # import os
5
+
6
+ # from dotenv import load_dotenv
7
+
8
+ # import redis
9
+ # from cashews import cache
10
+
11
+ # load_dotenv(ENV_PATH)
12
+
13
+ # # Install persistent cache using Redis Cache
14
+ # url = os.getenv("REDIS_URL")
15
+ # username = os.getenv("REDIS_USERNAME")
16
+ # password = os.getenv("REDIS_PASSWORD")
17
+ # connection = redis.from_url(url=url, username=username,
18
+ # password=password, encoding="utf8", decode_responses=False)
19
+ # backend = R.RedisCache(connection=connection)
20
+
21
+ # Functions Redis Cache- only works for async functions and awaits
22
+ # full_url = os.getenv("REDIS_FULL_URL")
23
+ # cache.setup(full_url)
24
+
25
+
26
+ # @cache(ttl="10m", prefix='yassir_history_data') # Redis
utils/url_to_coordinates.py ADDED
@@ -0,0 +1,24 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ import requests
2
+
3
+ from shiny.express import ui
4
+ from utils.utils import validate_inputs
5
+
6
+
7
+
8
+ def get_full_url(url: str) -> str:
9
+ response = requests.get(url, allow_redirects=True)
10
+ return response.url
11
+
12
+
13
+ def on_convert(origin_lat: float, origin_lon: float, destination_lat: float, destination_lon: float) -> bool:
14
+
15
+ valid = validate_inputs(origin_lat, origin_lon, destination_lat, destination_lon)
16
+
17
+ if valid:
18
+ with ui.hold():
19
+ ui.update_numeric(f"origin_lat", value=origin_lat)
20
+ ui.update_numeric(f"origin_lon", value=origin_lon)
21
+ ui.update_numeric(f"destination_lat", value=destination_lat)
22
+ ui.update_numeric(f"destination_lon", value=destination_lon)
23
+
24
+ return valid
utils/utils.py ADDED
@@ -0,0 +1,169 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ import json
2
+ import requests
3
+ import requests_cache as R
4
+ from cachetools import TTLCache, cached
5
+
6
+ from typing import Literal, Tuple, Optional
7
+
8
+ import ipyleaflet as L
9
+ from ipyleaflet import AwesomeIcon
10
+
11
+ from shiny.express import ui
12
+
13
+ from utils.config import ors_api_key, BRANDCOLORS, BASEMAPS, ONE_WEEK_SEC, LOCATIONS, TRIP_DISTANCE
14
+
15
+
16
+ # Cache expires after 1 week
17
+ R.install_cache('yassir_requests_cache', expire_after=ONE_WEEK_SEC) # Sqlite
18
+
19
+
20
+ # ---------------------------------------------------------------
21
+ # Helper functions for map and location inputs on predict page
22
+ # ---------------------------------------------------------------
23
+
24
+ @cached(cache=TTLCache(maxsize=300, ttl=ONE_WEEK_SEC)) # Memory
25
+ def get_bounds(country: str) -> Tuple[float]:
26
+ headers = {
27
+ 'User-Agent': 'Yassir ETA Shiny App/1.0 ([email protected])'
28
+ }
29
+
30
+ response = requests.get(
31
+ f"http://nominatim.openstreetmap.org/search?q={country}&format=json", headers=headers)
32
+
33
+ boundingbox = json.loads(response.text)[0]["boundingbox"]
34
+
35
+ # Extract the bounds as float datatype
36
+ lat_min, lat_max, lon_min, lon_max = (float(b) for b in boundingbox)
37
+
38
+ return lat_min, lat_max, lon_min, lon_max
39
+
40
+
41
+ @cached(cache=TTLCache(maxsize=3000, ttl=ONE_WEEK_SEC)) # Memory
42
+ def ops_trip_distance(origin: tuple, destination: tuple) -> float:
43
+ """
44
+ The road distance calculated using openrouteservice with the driving car is the shortest
45
+ or optimal road distance based on the available road data and routing algorithm.
46
+
47
+ origin is a tuple of lat, lon
48
+ destination is a tuple of lat, lon
49
+
50
+ Returns: the calculiated trip distance or a default value
51
+ """
52
+
53
+ # OpenRouteService API URL
54
+ # https://giscience.github.io/openrouteservice/api-reference/endpoints/directions/extra-info/
55
+ url = 'https://api.openrouteservice.org/v2/directions/driving-car'
56
+
57
+ # Request parameters
58
+ params = {
59
+ 'api_key': ors_api_key,
60
+ 'start': f'{origin[1]},{origin[0]}', # lon, lat
61
+ 'end': f'{destination[1]},{destination[0]}' # lon, lat
62
+ }
63
+
64
+ # Send request
65
+ # https://openrouteservice.org/dev/#/api-docs/v2/directions/{profile}/get
66
+ response = requests.get(url, params=params)
67
+ data = response.json()
68
+
69
+ # Extract distance
70
+ if response.status_code == 200 and data.get('features'):
71
+ # Distance in meters
72
+ distance = data['features'][0]['properties']['summary']['distance']
73
+ else:
74
+ distance = TRIP_DISTANCE # Default
75
+ back_to_nairobi()
76
+
77
+ return distance
78
+
79
+
80
+ def update_marker(map: L.Map, loc: tuple, on_move: object, name: str, icon: AwesomeIcon):
81
+ remove_layer(map, name)
82
+ m = L.Marker(location=loc, draggable=True, name=name, icon=icon)
83
+ m.on_move(on_move)
84
+ map.add_layer(m)
85
+
86
+
87
+ def update_line(map: L.Map, loc1: tuple, loc2: tuple):
88
+ remove_layer(map, "line")
89
+ map.add_layer(
90
+ L.Polyline(locations=[loc1, loc2],
91
+ color=BRANDCOLORS['red'], weight=3, name="line")
92
+ )
93
+
94
+
95
+ def update_basemap(map: L.Map, basemap: str):
96
+ for layer in map.layers:
97
+ if isinstance(layer, L.TileLayer):
98
+ map.remove_layer(layer)
99
+ map.add_layer(L.basemap_to_tiles(BASEMAPS[basemap]))
100
+
101
+
102
+ def remove_layer(map: L.Map, name: str):
103
+ for layer in map.layers:
104
+ if layer.name == name:
105
+ map.remove_layer(layer)
106
+
107
+
108
+ def on_move1(**kwargs):
109
+ return on_move("origin", **kwargs)
110
+
111
+
112
+ def on_move2(**kwargs):
113
+ return on_move("destination", **kwargs)
114
+
115
+ # When the markers are moved, update the numeric location inputs to include the new
116
+ # location (which results in the locations() reactive value getting updated,
117
+ # which invalidates any downstream reactivity that depends on it)
118
+
119
+
120
+ def on_move(loc_type: Literal['origin', 'destination'], **kwargs):
121
+ location = kwargs["location"]
122
+ loc_lat, loc_lon = location
123
+
124
+ ui.update_numeric(f"{loc_type}_lat", value=loc_lat)
125
+ ui.update_numeric(f"{loc_type}_lon", value=loc_lon)
126
+
127
+ # origin_lat
128
+ # origin_lon
129
+ # destination_lat
130
+ # destination_lon
131
+
132
+ # Re-center to Kenya region
133
+
134
+
135
+ def back_to_nairobi():
136
+ ui.update_numeric("origin_lat", value=LOCATIONS["Nairobi"]['latitude'])
137
+ ui.update_numeric(
138
+ "origin_lon", value=LOCATIONS["Nairobi"]['longitude'])
139
+ ui.update_numeric(
140
+ "destination_lat", value=LOCATIONS["National Museum of Kenya"]['latitude'])
141
+ ui.update_numeric(
142
+ "destination_lon", value=LOCATIONS["National Museum of Kenya"]['longitude'])
143
+
144
+
145
+ def validate_inputs(origin_lat: float = None, origin_lon: float = None, destination_lat: float = None, destination_lon: float = None) -> bool:
146
+ lat_min, lat_max, lon_min, lon_max = get_bounds(country='Kenya')
147
+
148
+ valid = True
149
+
150
+ for lat, lon in [(origin_lat, origin_lon), (destination_lat, destination_lon)]:
151
+ if lat is not None and lon is not None:
152
+ if (lat < lat_min or lat > lat_max) or (lon < lon_min or lon > lon_max):
153
+ ui.notification_show(
154
+ "😮 Location is outside Kenya, taking you back to Nairobi", type="error")
155
+ valid = False
156
+ back_to_nairobi()
157
+ break
158
+
159
+
160
+ return valid
161
+
162
+
163
+ # Footer
164
+ footer = ui.tags.footer(
165
+ ui.tags.div(
166
+ "© 2024. Made with 💖",
167
+ style=f"text-align: center; padding: 10px; color: #fff; background-color: {BRANDCOLORS['purple-dark']}; margin-top: 50px;"
168
+ )
169
+ )
www/comfort.webp ADDED
www/favicon-yassir-forward.png ADDED
www/image-2-1.webp ADDED
www/iphone-frame.svg ADDED
www/logo-yassir-forward-dark.png ADDED
www/logo-yassir-forward-dark.svg ADDED
www/logo-yassir-forward-light.png ADDED
www/logo-yassir-forward-light.svg ADDED
www/ride-hailing-hero.webp ADDED
www/servicesBlock-3.webp ADDED
www/styles.css ADDED
@@ -0,0 +1,35 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ /* Define the primary color */
2
+ :root {
3
+ --primary-color: #FB2576 !important;
4
+ --secondary-color: #6316DB !important;
5
+ }
6
+
7
+ /* Use the primary color for buttons */
8
+ .btn-primary {
9
+ background-color: var(--primary-color) !important;
10
+ border-color: var(--primary-color) !important;
11
+ }
12
+
13
+ /* Use the primary color for slider thumbs */
14
+ .irs-bar,
15
+ .irs-to,
16
+ .irs-from,
17
+ .irs-slider,
18
+ .irs-bar-edge,
19
+ .irs-handle {
20
+ background-color: var(--primary-color) !important;
21
+ border-color: var(--primary-color) !important;
22
+ }
23
+
24
+
25
+ /* Dashboard pill cards links */
26
+ .nav.nav-pills.card-header-pills.shiny-tab-input.shiny-bound-input .nav-link {
27
+ color: var(--secondary-color) !important;
28
+ }
29
+
30
+
31
+ /* Dashboard pill cards link active */
32
+ .nav.nav-pills.card-header-pills.shiny-tab-input.shiny-bound-input .nav-link.active {
33
+ background-color: var(--primary-color) !important;
34
+ color: white !important;
35
+ }