Spaces:
Runtime error
Runtime error
File size: 2,824 Bytes
d7745f2 bcf020e c46cec1 84b4aa4 c46cec1 d7745f2 17976c1 d7745f2 fb11f75 b8df987 35e393c bdf1ad8 75b2bb3 84b4aa4 75b2bb3 84b4aa4 33f3b6b 84b4aa4 75b2bb3 41aaaa6 75b2bb3 41aaaa6 75b2bb3 bb00581 75b2bb3 c46cec1 bb00581 bcf020e 75b2bb3 0054bfa c46cec1 0054bfa bb00581 84b4aa4 c46cec1 bb00581 c46cec1 bb00581 84b4aa4 c46cec1 bcf020e b3344b3 87aae5e 84b4aa4 87aae5e bb00581 c46cec1 bb00581 c46cec1 bb00581 bcf020e e1e02bd ed4ba7d 84b4aa4 ed4ba7d 0d0ff81 |
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 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 |
import os
from shiny import App, ui, render, reactive
import fastf1 as ff1
import matplotlib.pyplot as plt
from matplotlib.collections import LineCollection
from matplotlib import cm
import numpy as np
import shiny.experimental as x
import shinyswatch
# Define cache folder path
cache_path = os.getcwd() + "/cache"
print(f"Cache path: {cache_path}")
ff1.Cache.enable_cache(cache_path)
# Offline mode to prevent F1 API crashes on Hugging Face
ff1.Cache.offline_mode(enabled=True)
app_ui = ui.page_fluid(
shinyswatch.theme.minty(),
ui.layout_sidebar(
ui.panel_sidebar(
ui.input_select(
"track", label="Select track:",
choices=["Austria", "Hungary", "Spain", "Bahrain"],
selected = "Austria"),
ui.input_radio_buttons(
"session_type", "Session type:",
choices = {"R": "Race", "Q": "Qualification"},
selected = "R"),
ui.input_radio_buttons(
"year", "Year:",
choices = [2023, 2022],
selected = 2023),
width=2
),
ui.panel_main(
ui.h3("Gear usage in fastest lap"),
x.ui.output_plot("gear", fill = True),
ui.output_text("fastest_driver")
),
),
)
def server(input, output, session):
@reactive.Calc
def get_data():
f1_session = ff1.get_session(int(input.year()), input.track(), input.session_type())
f1_session.load()
lap = f1_session.laps.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)
return segments, gear, driver
@output
@render.plot
def gear():
segments, gear, driver = get_data()
cmap = cm.get_cmap('Paired')
lc_comp = LineCollection(segments, norm=plt.Normalize(1, cmap.N+1), cmap=cmap)
lc_comp.set_array(gear)
lc_comp.set_linewidth(4)
plt.gca().add_collection(lc_comp)
plt.axis('equal')
plt.tick_params(labelleft=False, left=False, labelbottom=False, bottom=False)
cbar = plt.colorbar(mappable=lc_comp, label="Gear", boundaries=np.arange(1, 10))
cbar.set_ticks(np.arange(1.5, 9.5))
cbar.set_ticklabels(np.arange(1, 9))
plt
@output
@render.text
def fastest_driver():
segments, gear, driver = get_data()
return f"The driver of the fastest lap is: {driver}"
app = App(app_ui, server) |