File size: 1,530 Bytes
b543474
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
from shiny import module, ui, render, reactive, event, App
import fastf1 as ff1
import numpy as np

# UI
@module.ui
def plot1_ui():
    return ui.ouput_plot("gear_1")


# Server
@module.server
def plot1_server():
    @reactive.Calc
    # Get required data for driver 1 based on selection
    def get_data_1():
        try:
            ui.notification_show("Data takes a couple seconds to load.", duration=3, type = 'default')
            
            f1_session = ff1.get_session(int(input.year()), input.track_select(), input.session_type())
            f1_session.load()

            # Check if user input == fastest driver
            if input.driver1_select() == "Fastest driver":
                lap = f1_session.laps.pick_fastest()
            else:
                laps_driver = f1_session.laps.pick_driver(input.driver1_select())
                lap = laps_driver.pick_fastest()
            
            tel = lap.get_telemetry()
            driver = lap['Driver']

            #converting data to numpy data tables
            x = np.array(tel['X'].values)
            y = np.array(tel['Y'].values)

            points = np.array([x, y]).T.reshape(-1, 1, 2)
            segments = np.concatenate([points[:-1], points[1:]], axis=1)
            gear = tel['nGear'].to_numpy().astype(float)
            lap_time = lap['LapTime']
            return segments, gear, driver, lap_time

        except Exception:
            ui.notification_show("Data not available. Select another track or driver.", duration=10, type = 'error')