diff --git a/agents/compare_agent.py b/agents/compare_agent.py new file mode 100644 index 0000000000000000000000000000000000000000..d06755f820c7d8cae1eefd53f699f53f0bcb9073 --- /dev/null +++ b/agents/compare_agent.py @@ -0,0 +1,86 @@ +""" +KRONECTOR - Compare Agent + +Uses Groq's Llama3 to analyze the mathematical SHAP Delta between two drivers +and synthesize a "Tale of the Tape" style narrative. +""" + +import os +from groq import Groq + +def compare_agent( + driver1_name: str, + driver1_prob: float, + driver1_status: str, + driver2_name: str, + driver2_prob: float, + driver2_status: str, + shap_deltas: dict[str, float], + race_context: str +) -> str: + """Uses Llama3 to write a head-to-head comparison.""" + + api_key = os.getenv("GROQ_API_KEY") + if not api_key: + raise RuntimeError("GROQ_API_KEY environment variable is required.") + + client = Groq(api_key=api_key) + + # Sort deltas to find biggest advantages for driver 1 (positive) and driver 2 (negative) + sorted_deltas = sorted(shap_deltas.items(), key=lambda item: item[1], reverse=True) + d1_advantages = [f"{k}: +{v:.2f}" for k, v in sorted_deltas[:3] if v > 0] + d2_advantages = [f"{k}: +{abs(v):.2f}" for k, v in reversed(sorted_deltas) if v < 0][:3] + + system_prompt = f""" +You are KRONECTOR, an elite Formula 1 Race Strategy AI. +You have been asked to compare two drivers head-to-head for an upcoming race. +You have a Machine Learning model that calculates 'SHAP Deltas' — exactly where one driver gains or loses mathematical advantage over the other. + +YOUR JOB: +Write a "Tale of the Tape" style boxing-match breakdown (1-2 paragraphs max). +Explain who is the overall favorite based on Win Probability, but highlight the specific areas where the underdog might have an edge. +Make it sound like an expert F1 engineer breaking down a matchup. + +IMPORTANT CONCEPTS: +- 'grid_position' or 'pole_conversion_rate' means track position/qualifying pace. +- 'career_race_starts' means veteran experience vs rookie volatility. +- 'driver_form_last3' means recent momentum. +- 'sector_1_time', etc. means raw track speed. +- CRASH DETECTION: You are provided with the 'Qualifying Status' for both drivers. If a driver's status indicates an Accident, Collision, or Crash, you MUST dramatically mention it as a major disadvantage or factor! (Note: a driver can still have a good grid position if they crashed in Q3. If so, highlight this loophole!) +""" + + user_prompt = f""" +RACE CONTEXT: {race_context} + +MATCHUP: +{driver1_name} (Win Probability: {driver1_prob:.1f}%) | Quali Status: {driver1_status} +vs +{driver2_name} (Win Probability: {driver2_prob:.1f}%) | Quali Status: {driver2_status} + +MATHEMATICAL ADVANTAGES (SHAP Deltas): +Biggest edges for {driver1_name}: +{', '.join(d1_advantages) if d1_advantages else "None"} + +Biggest edges for {driver2_name}: +{', '.join(d2_advantages) if d2_advantages else "None"} + +Write the Head-to-Head analysis: +""" + + chat_completion = client.chat.completions.create( + messages=[ + { + "role": "system", + "content": system_prompt.strip(), + }, + { + "role": "user", + "content": user_prompt.strip(), + } + ], + model="llama-3.3-70b-versatile", + temperature=0.7, + max_tokens=500, + ) + + return chat_completion.choices[0].message.content diff --git a/agents/critique_agent.py b/agents/critique_agent.py index b8b65b2cd40e6322860aef027781f22eb9c264e5..ea549fa51ff8392e683ec5aec97ae57a4eed1cfb 100644 --- a/agents/critique_agent.py +++ b/agents/critique_agent.py @@ -17,16 +17,26 @@ def critique_agent(prediction: PredictionOutput) -> CritiqueOutput: """Critiques the prediction mathematically to safeguard the LLM.""" prob = prediction["probability"] shap_values = prediction["shap_values"] + is_prerace = prediction.get("is_prerace", False) approved = True confidence_rating = "Normal" critique_notes = "" # 1. Evaluate Probability Thresholds - if prob < 0.20: + # Pre-race predictions use a lower threshold (5% = true random chance in a 22-car field) + # because features like tires/weather are missing and probabilities are naturally spread thin. + # Post-race/historical queries use the stricter 20% threshold. + reject_threshold = 0.05 if is_prerace else 0.20 + + if prob < reject_threshold: approved = False confidence_rating = "Low" - critique_notes += f"REJECTED: Win probability is {prob:.1%}, which is below the 20% threshold. The model is guessing. Do not make a definitive prediction.\n\n" + context = "pre-race estimate" if is_prerace else "historical query" + critique_notes += f"REJECTED: Win probability is {prob:.1%}, below the {reject_threshold:.0%} threshold for a {context}. The model is not confident.\n\n" + elif is_prerace and prob < 0.20: + confidence_rating = "PreRace" + critique_notes += f"PRE-RACE ESTIMATE: Win probability is {prob:.1%}. This is a pre-race prediction using qualifying data only — tires, weather, and race pace data are unavailable. Rankings are meaningful but absolute probabilities are lower than post-race queries.\n\n" elif prob > 0.95: confidence_rating = "Overconfident" critique_notes += f"FLAGGED: Win probability is unusually high ({prob:.1%}). In modern F1, >95% confidence may indicate data leakage or a hyper-dominant driver in the dataset. Proceed with caution.\n\n" diff --git a/agents/data_agent.py b/agents/data_agent.py index 6faacdb1a911cefd7aaea90aff13f1e3cd560a2d..15f58252ed48ee4a399706696112a46fb5863735 100644 --- a/agents/data_agent.py +++ b/agents/data_agent.py @@ -159,7 +159,7 @@ def _load_feature_data(data_path: str | Path) -> pd.DataFrame: return pd.read_parquet(path) -def _filter_by_intent(df: pd.DataFrame, intent: QueryIntent) -> pd.DataFrame: +def _filter_by_intent(df: pd.DataFrame, intent: QueryIntent, filter_driver: bool = True) -> pd.DataFrame: rows = df[df["season"] == intent["season"]].copy() round_num = intent.get("round") @@ -188,6 +188,9 @@ def _filter_by_intent(df: pd.DataFrame, intent: QueryIntent) -> pd.DataFrame: f"No rows found for season={intent['season']} round={round_num} grand_prix={grand_prix}" ) + if not filter_driver: + return rows.reset_index(drop=True) + driver_id = _normalize_driver_id(intent.get("driver_id")) driver_name = intent.get("driver_name") diff --git a/agents/synthesis_agent.py b/agents/synthesis_agent.py index e3d8ad2927c344894b303535092b307b3aaac236..f9c78c1add7a28a54d0d5645928eebade7561054 100644 --- a/agents/synthesis_agent.py +++ b/agents/synthesis_agent.py @@ -18,12 +18,16 @@ class SynthesisOutput(TypedDict): def synthesis_agent( query: str, prediction: PredictionOutput, - critique: CritiqueOutput + critique: CritiqueOutput, + top_contenders: str = "" ) -> SynthesisOutput: """Uses Llama3 to write the final explanation for the user.""" - # If the mathematical critique rejected the prediction, bypass the LLM - if not critique["approved"]: + is_prerace = prediction.get("is_prerace", False) + + # If mathematically rejected AND it's not a pre-race query → hard reject + # For pre-race, always call the LLM because the ranking is still meaningful + if not critique["approved"] and not is_prerace: return { "final_response": ( "I apologize, but my underlying machine learning model is not confident enough " @@ -48,20 +52,41 @@ YOUR JOB: Synthesize this mathematical data into a clear, confident, and professional answer for the user. Speak like an F1 Race Engineer on the pit wall. Do NOT hallucinate reasons. Only use the features provided in the Critique Notes. -Explain what the features mean in a natural way (e.g. if 'grid_position' has a positive impact, say starting on pole is a massive advantage here). +Explain what the features mean in a natural way. +Specifically: +- If 'grid_position' or 'pole_conversion_rate' has a strong impact, explain that qualifying position is historically crucial at this specific circuit. Note that our model uses a smoothed historical average, so even newer tracks are grounded in global F1 reality. +- If 'career_race_starts' or 'driver_form_last3' heavily impact a prediction, explain the "experience factor". The model heavily trusts the recent form of proven veterans (100+ starts) but correctly discounts the form of rookies who have a very small sample size of races. +- IMPORTANT: If the user asks about new engine components, fresh power units, or new car parts/upgrades, you MUST acknowledge that our predictive model operates purely on historical telemetry and lap data, and DOES NOT have access to internal team data regarding unannounced parts upgrades or new engines. +- You have been provided the top contenders for this race. If the predicted driver is NOT one of the top favorites, you MUST mention the actual favorites to provide accurate context (e.g., "While Antonelli has a 5% chance, keep in mind Verstappen and Hamilton are the heavy favorites"). +- CRASH DETECTION: You will be provided the driver's 'Qualifying Status'. If it says something like 'Accident', 'Collision', 'Spun off', or anything indicating a crash, you MUST dramatically mention that they crashed in qualifying. Note that a driver can still have a good grid position (e.g. they set a fast lap in Q3 and THEN crashed, which is a known loophole). If they crashed but have a good grid position, explicitly point out this loophole! + +IMPORTANT — If Confidence Rating is "PreRace": +This is a PRE-RACE prediction using only qualifying data. Tire strategy, weather, and pit-stop data are not yet available. +The model's absolute probabilities are compressed across 22 drivers, so the RANKING matters more than the exact number. +Frame your response as a pre-race assessment, not a definitive prediction. Mention the key qualifying factors (sector times, grid position, driver form). Keep it concise (1-2 paragraphs). """ + # For pre-race rejected predictions (below 5% threshold), explain it's a long-shot + prerace_note = "" + if not critique["approved"] and is_prerace: + prerace_note = f"\nNOTE: This driver's win probability ({prediction['probability']:.1%}) is very low — they are considered a long-shot for this race based on qualifying data." + user_prompt = f""" USER QUERY: "{query}" PREDICTED DRIVER: {prediction.get('driver_name', 'Unknown Driver')} +Qualifying Status: {prediction.get('quali_status', 'Finished')} ML PREDICTION: Win Probability: {prediction['probability']:.1%} Confidence Rating: {critique['confidence_rating']} +{prerace_note} + +OVERALL RACE FAVORITES: +{top_contenders if top_contenders else "Unknown"} CRITIQUE AGENT NOTES (SHAP ANALYSIS): {critique['critique_notes']} diff --git a/api/main.py b/api/main.py index 0b28d29b08b981e56584b10ccd61b9a90a30f7a9..e72041951719946b7d5c7ce2916afe0cff694b71 100644 --- a/api/main.py +++ b/api/main.py @@ -26,6 +26,9 @@ from fastapi import FastAPI, HTTPException, Query from fastapi.middleware.cors import CORSMiddleware from agents.data_agent import data_agent, QueryIntent +from agents.critique_agent import critique_agent +from agents.synthesis_agent import synthesis_agent +from agents.compare_agent import compare_agent from api.schemas import ( DriverInfo, ErrorResponse, @@ -34,6 +37,8 @@ from api.schemas import ( PredictionRequest, PredictionResponse, RaceInfo, + CompareRequest, + CompareResponse ) from ml.predict import load_model_and_encoders, predict_dataframe @@ -49,6 +54,7 @@ _model = None _encoders = None _races_data: pd.DataFrame | None = None _drivers_set: set[str] = set() +_prerace_data: dict[str, pd.DataFrame] = {} # keyed by "season_round" e.g. "2026_7" def patch_mlruns_paths(): @@ -139,6 +145,22 @@ async def lifespan(app: FastAPI): else: logger.warning(f"Data not found: {data_path}") + # Load any pre-race parquet files from data_output/prerace/ + prerace_dir = Path("data_output/prerace") + if prerace_dir.exists(): + for pf in prerace_dir.glob("*.parquet"): + try: + prerace_df = pd.read_parquet(pf) + if not prerace_df.empty: + season = int(prerace_df["season"].iloc[0]) + round_num = int(prerace_df["round"].iloc[0]) + key = f"{season}_{round_num}" + _prerace_data[key] = prerace_df + circuit = prerace_df["circuit_id"].iloc[0] + logger.info(f"✓ Pre-race data loaded: {key} ({circuit}) — {len(prerace_df)} drivers") + except Exception as e: + logger.warning(f"Could not load pre-race file {pf}: {e}") + except Exception as e: logger.error(f"Startup error: {e}") @@ -215,28 +237,78 @@ async def predict_f1(request: PredictionRequest) -> PredictionResponse: detail="Model not loaded. Set KRONECTOR_MODEL_RUN_ID.", ) - if _races_data is None: + if _races_data is None and not _prerace_data: raise HTTPException( status_code=503, detail="Race data not loaded. Check data_output/fastf1_races.parquet", ) try: - # Parse query → intent - result = data_agent(request.query) - intent = result["intent"] - df = result["dataframe"] + # Parse query → intent using the main historical parquet + # If the round isn't in the main parquet, fall back to pre-race data + from agents.data_agent import parse_query_with_groq, _filter_by_intent + intent = parse_query_with_groq(request.query) + + df = pd.DataFrame() + is_prerace = False - if len(df) == 0: + # 1. Try the main historical parquet first + if _races_data is not None: + try: + df = _filter_by_intent(_races_data, intent, filter_driver=False) + except (ValueError, KeyError): + df = pd.DataFrame() + + # 2. If not found in historical data, try pre-race data + if df.empty and _prerace_data: + logger.info(f"Round not in historical data — searching pre-race store for intent: {intent}") + for key, prerace_df in _prerace_data.items(): + try: + df = _filter_by_intent(prerace_df, intent, filter_driver=False) + if not df.empty: + is_prerace = True + logger.info(f"✓ Found match in pre-race data: {key}") + break + except (ValueError, KeyError): + continue + + if df.empty: raise HTTPException( status_code=400, - detail=f"No matching data for query. " - f"Season {intent['season']}, round {intent['round']}", + detail=( + f"No matching data for query. Season={intent.get('season')}, " + f"GP='{intent.get('grand_prix')}'. " + "If this is an upcoming race, run: " + "python -m scripts.build_prerace_rows --season --round " + ), ) # Generate predictions predictions = predict_dataframe(df, _model, _encoders, explain=True) + # Get top 3 contenders for context before filtering + top_df = predictions.sort_values(by="win_probability", ascending=False).head(3) + top_contenders = ", ".join( + [f"{r['driver_name']} ({r['win_probability']*100:.1f}%)" for _, r in top_df.iterrows()] + ) + + # Now filter down to the requested driver if specified + driver_id = intent.get("driver_id") + driver_name = intent.get("driver_name") + + import re + if driver_id: + d_id = str(driver_id).strip().upper() + predictions = predictions[predictions["driver_id"].astype(str).str.upper() == d_id] + elif driver_name: + d_name = str(driver_name).strip().lower() + predictions = predictions[ + predictions["driver_name"].astype(str).str.lower().str.contains(re.escape(d_name), na=False) + ] + + if predictions.empty: + raise HTTPException(status_code=400, detail=f"No predictions matched driver intent: {intent}") + # If the user asked "Who will win?" and matched multiple drivers, # sort by probability to find the most likely winner! if len(predictions) > 1: @@ -244,6 +316,14 @@ async def predict_f1(request: PredictionRequest) -> PredictionResponse: pred_row = predictions.iloc[0] + # grid_position is stripped from metadata by predict_dataframe — look it up + # directly from the source df using the matched driver_id. + matched_driver_id = str(pred_row["driver_id"]) + grid_pos_series = df.loc[ + df["driver_id"].astype(str) == matched_driver_id, "grid_position" + ] + grid_pos = float(grid_pos_series.iloc[0]) if not grid_pos_series.empty else 0.0 + # 1. Format raw prediction output raw_prob = float(pred_row["win_probability"]) shap_values = pred_row.get("shap_values", {}) @@ -254,24 +334,26 @@ async def predict_f1(request: PredictionRequest) -> PredictionResponse: "feature_names": list(shap_values.keys()) if shap_values else [], "model_version": "latest", "run_id": "api", - "driver_name": str(pred_row["driver_name"]) + "driver_name": str(pred_row["driver_name"]), + "is_prerace": is_prerace, + "quali_status": "Crash" if getattr(request, "crashed_in_quali", False) else str(pred_row.get("quali_status", "Finished")), } # 2. Mathematical Critique critique = critique_agent(prediction_output) # 3. LLM Synthesis - synthesis = synthesis_agent(request.query, prediction_output, critique) + synthesis = synthesis_agent(request.query, prediction_output, critique, top_contenders=top_contenders) return PredictionResponse( - win_probability=raw_prob, + win_probability=round(raw_prob * 100, 2), metadata=PredictionMetadata( season=int(pred_row["season"]), round=int(pred_row["round"]), driver_id=str(pred_row["driver_id"]), driver_name=str(pred_row["driver_name"]), team=str(pred_row["team"]), - grid_position=float(pred_row.get("grid_position", 0.0)), # Default if missing + grid_position=grid_pos, ), shap_values=shap_values, llm_explanation=synthesis["final_response"], @@ -289,6 +371,151 @@ async def predict_f1(request: PredictionRequest) -> PredictionResponse: ) from e +@app.post( + "/predict/compare", + response_model=CompareResponse, + description="Compare two drivers head-to-head using mathematical SHAP Deltas", + tags=["Prediction"] +) +def compare_drivers(request: CompareRequest): + """Head-to-head driver matchup endpoint.""" + if _model is None or _encoders is None: + raise HTTPException( + status_code=503, detail="Model not loaded. Set KRONECTOR_MODEL_RUN_ID." + ) + + try: + import re + import json + is_prerace = False + df = pd.DataFrame() + race_name = "Unknown Race" + + # 1. Season and round specified? + if request.season and request.round: + prerace_file = Path(f"data_output/prerace/prerace_*_{request.season}.parquet") + import glob + files = glob.glob(str(prerace_file)) + + found = False + for f in files: + pdf = pd.read_parquet(f) + if not pdf.empty and int(pdf["season"].iloc[0]) == request.season and int(pdf["round"].iloc[0]) == request.round: + df = pdf + is_prerace = True + race_name = f"{request.season} Round {request.round}" + found = True + break + + if not found: + global _races_data + if _races_data is not None and not _races_data.empty: + df = _races_data[ + (_races_data["season"] == request.season) & + (_races_data["round"] == request.round) + ] + race_name = f"{request.season} Round {request.round}" + + # 2. No season/round specified, use latest + if df.empty: + prerace_dir = Path("data_output/prerace") + if prerace_dir.exists(): + files = list(prerace_dir.glob("*.parquet")) + if files: + df = pd.read_parquet(files[0]) + is_prerace = True + s = int(df["season"].iloc[0]) + r = int(df["round"].iloc[0]) + race_name = f"{s} Round {r}" + + if df.empty and _races_data is not None and not _races_data.empty: + latest_season = _races_data["season"].max() + latest_round = _races_data[_races_data["season"] == latest_season]["round"].max() + df = _races_data[ + (_races_data["season"] == latest_season) & + (_races_data["round"] == latest_round) + ] + race_name = f"{latest_season} Round {latest_round}" + + if df.empty: + raise HTTPException(status_code=400, detail="Could not find race data for comparison.") + + predictions = predict_dataframe(df, _model, _encoders, explain=True) + + d1_str = request.driver1.strip().lower() + d1_df = predictions[ + (predictions["driver_id"].str.lower() == d1_str) | + (predictions["driver_name"].str.lower().str.contains(re.escape(d1_str), na=False)) + ] + if d1_df.empty: + raise HTTPException(status_code=400, detail=f"Driver '{request.driver1}' not found in race {race_name}.") + d1_row = d1_df.iloc[0] + + d2_str = request.driver2.strip().lower() + d2_df = predictions[ + (predictions["driver_id"].str.lower() == d2_str) | + (predictions["driver_name"].str.lower().str.contains(re.escape(d2_str), na=False)) + ] + if d2_df.empty: + raise HTTPException(status_code=400, detail=f"Driver '{request.driver2}' not found in race {race_name}.") + d2_row = d2_df.iloc[0] + + d1_prob = float(d1_row["win_probability"]) * 100 + d2_prob = float(d2_row["win_probability"]) * 100 + + d1_shap = d1_row["shap_values"] + d2_shap = d2_row["shap_values"] + if isinstance(d1_shap, str): + d1_shap = json.loads(d1_shap) + if isinstance(d2_shap, str): + d2_shap = json.loads(d2_shap) + + deltas = {} + for feature in d1_shap.keys(): + if feature in d2_shap: + deltas[feature] = d1_shap[feature] - d2_shap[feature] + + llm_analysis = compare_agent( + driver1_name=str(d1_row["driver_name"]), + driver1_prob=d1_prob, + driver1_status=str(d1_row.get("quali_status", "Finished")), + driver2_name=str(d2_row["driver_name"]), + driver2_prob=d2_prob, + driver2_status=str(d2_row.get("quali_status", "Finished")), + shap_deltas=deltas, + race_context=f"{race_name} {'(Pre-Race)' if is_prerace else '(Historical)'}" + ) + + return CompareResponse( + driver1=PredictionMetadata( + season=int(d1_row["season"]), + round=int(d1_row["round"]), + driver_id=str(d1_row["driver_id"]), + driver_name=str(d1_row["driver_name"]), + team=str(d1_row["team"]), + grid_position=float(d1_row.get("grid_position", 0.0)), + ), + driver2=PredictionMetadata( + season=int(d2_row["season"]), + round=int(d2_row["round"]), + driver_id=str(d2_row["driver_id"]), + driver_name=str(d2_row["driver_name"]), + team=str(d2_row["team"]), + grid_position=float(d2_row.get("grid_position", 0.0)), + ), + driver1_win_probability=round(d1_prob, 2), + driver2_win_probability=round(d2_prob, 2), + shap_deltas=deltas, + llm_analysis=llm_analysis + ) + + except HTTPException: + raise + except Exception as e: + logger.error(f"Compare prediction error: {e}", exc_info=True) + raise HTTPException(status_code=500, detail=f"Comparison failed: {e}") + + @app.get("/drivers", response_model=list[DriverInfo]) async def list_drivers( season: Optional[int] = Query(None, description="Filter by season"), diff --git a/api/schemas.py b/api/schemas.py index 88c1df4083bbece53c4174bab90cae557c76f701..015db499cbddd0b1072a27814d90ea81039258f3 100644 --- a/api/schemas.py +++ b/api/schemas.py @@ -16,6 +16,9 @@ class PredictionRequest(BaseModel): max_length=500, examples=["What's Max's win probability at Monaco 2023?"], ) + crashed_in_quali: bool = Field( + False, description="Manually flag if the driver crashed in qualifying" + ) class PredictionMetadata(BaseModel): @@ -33,7 +36,7 @@ class PredictionResponse(BaseModel): """Win probability prediction with SHAP explanations.""" win_probability: float = Field( - ..., ge=0, le=1, description="Probability of winning (0.0-1.0)" + ..., ge=0, le=100, description="Win probability as a percentage (0-100)" ) metadata: PredictionMetadata shap_values: Optional[dict[str, float]] = Field( @@ -77,3 +80,34 @@ class ErrorResponse(BaseModel): detail: str error_code: str = Field(..., examples=["INVALID_QUERY", "MODEL_NOT_LOADED"]) + + +class CompareRequest(BaseModel): + """Request for Head-to-Head Driver Comparison.""" + + driver1: str = Field( + ..., + examples=["Max Verstappen", "VER"], + description="First driver to compare (name or 3-letter code)" + ) + driver2: str = Field( + ..., + examples=["Kimi Antonelli", "ANT"], + description="Second driver to compare (name or 3-letter code)" + ) + season: Optional[int] = Field(None, description="Optional year (defaults to latest available)") + round: Optional[int] = Field(None, description="Optional round number (defaults to latest available)") + + +class CompareResponse(BaseModel): + """Head-to-Head Comparison Response.""" + + driver1: PredictionMetadata + driver2: PredictionMetadata + driver1_win_probability: float + driver2_win_probability: float + shap_deltas: dict[str, float] = Field( + ..., + description="Mathematical difference between driver 1 and driver 2 SHAP values (positive means driver 1 has the edge, negative means driver 2 has the edge)" + ) + llm_analysis: str = Field(..., description="Groq's Head-to-Head tale of the tape") diff --git a/data/__init__.py b/data/__init__.py index 2ea4eac426ab2c7977992bbb9e0f1fe6e96da71d..e3437eedccfa78b0d461bfedfe87d60350e258b4 100644 --- a/data/__init__.py +++ b/data/__init__.py @@ -61,6 +61,85 @@ def _get_track_type(circuit_id: str) -> str: return "permanent" +def compute_pole_conversion_rate(df: pd.DataFrame) -> pd.DataFrame: + """ + Compute historical pole-to-win conversion rate per circuit. + + For each circuit, calculates what % of races the pole-sitter went on to win. + This directly encodes "qualifying matters at this track" — e.g.: + - Monaco ~75-80% (almost impossible to overtake) + - Monza ~40-45% (long straights, slipstream, DRS) + + Uses only COMPLETED races (requires finish_position data). + + Args: + df: Historical race DataFrame with circuit_id, grid_position, finish_position + + Returns: + DataFrame with columns (circuit_id, pole_conversion_rate) + """ + if df.empty or "finish_position" not in df.columns: + return pd.DataFrame(columns=["circuit_id", "pole_conversion_rate"]) + + # Only use rows where we have actual race results + completed = df.dropna(subset=["finish_position"]).copy() + + # Get pole-sitters (grid_position == 1) for each race + poles = completed[completed["grid_position"] == 1].copy() + + if poles.empty: + return pd.DataFrame(columns=["circuit_id", "pole_conversion_rate"]) + + poles["pole_won"] = (poles["finish_position"] == 1).astype(int) + + global_mean = poles["pole_won"].mean() + C = 3.0 # Confidence weight (pseudo-observations) + + # Calculate wins and total poles per circuit + stats = poles.groupby("circuit_id").agg( + wins=("pole_won", "sum"), + total=("pole_won", "count") + ).reset_index() + + # Apply Bayesian smoothing: pulls low-N circuits towards the global average + stats["pole_conversion_rate"] = (stats["wins"] + C * global_mean) / (stats["total"] + C) + + conversion = stats[["circuit_id", "pole_conversion_rate"]] + + logger.info( + f"Computed pole_conversion_rate for {len(conversion)} circuits. " + f"Range: {conversion['pole_conversion_rate'].min():.1%} – " + f"{conversion['pole_conversion_rate'].max():.1%}" + ) + + return conversion + + return conversion + + +# --------------------------------------------------------------------------- +# Career Race Starts computation +# --------------------------------------------------------------------------- + +def compute_career_race_starts(df: pd.DataFrame) -> pd.DataFrame: + """ + Compute cumulative career race starts for each driver before each race. + This provides an 'experience' feature so the model knows if driver form + is based on a veteran's long track record or a rookie's small sample size. + """ + if df.empty or "driver_id" not in df.columns: + return pd.DataFrame(columns=["season", "round", "driver_id", "career_race_starts"]) + + # Sort chronologically + df_sorted = df.sort_values(by=["driver_id", "season", "round"]).copy() + + # cumcount() gives 0 for the 1st race, 1 for the 2nd, etc. + # This exactly represents 'starts prior to this race' + df_sorted["career_race_starts"] = df_sorted.groupby("driver_id").cumcount() + + return df_sorted[["season", "round", "driver_id", "career_race_starts"]] + + # --------------------------------------------------------------------------- # Safety car probability computation (Correction 2) # --------------------------------------------------------------------------- @@ -298,6 +377,35 @@ def merge_datasets( "No lap data — safety_car_probability set to 0 for all rows" ) + # ------------------------------------------------------------------- + # Step 8.3: Compute career_race_starts per driver + # ------------------------------------------------------------------- + starts_df = compute_career_race_starts(merged) + if not starts_df.empty: + if "career_race_starts" in merged.columns: + merged = merged.drop(columns=["career_race_starts"]) + merged = merged.merge(starts_df, on=["season", "round", "driver_id"], how="left") + merged["career_race_starts"] = merged["career_race_starts"].fillna(0) + logger.info("Joined career_race_starts from cumulative history") + else: + merged["career_race_starts"] = 0 + logger.warning("Could not compute career_race_starts — defaulting to 0") + + # ------------------------------------------------------------------- + # Step 8.5: Compute pole_conversion_rate per circuit + # ------------------------------------------------------------------- + pcr = compute_pole_conversion_rate(merged) + if not pcr.empty: + if "pole_conversion_rate" in merged.columns: + merged = merged.drop(columns=["pole_conversion_rate"]) + merged = merged.merge(pcr, on="circuit_id", how="left") + # Circuits with no data default to 50% (neutral) + merged["pole_conversion_rate"] = merged["pole_conversion_rate"].fillna(0.5) + logger.info("Joined pole_conversion_rate from historical data") + else: + merged["pole_conversion_rate"] = 0.5 + logger.warning("Could not compute pole_conversion_rate — defaulting to 0.5") + # ------------------------------------------------------------------- # Step 9: Add target variable # ------------------------------------------------------------------- diff --git a/data/fastf1_pipeline.py b/data/fastf1_pipeline.py index 23e0204e7337b9027ae05eb6f6319c3787e30073..c1894962666017f768ede69aa7874b629ae9fd32 100644 --- a/data/fastf1_pipeline.py +++ b/data/fastf1_pipeline.py @@ -54,7 +54,9 @@ def enable_cache(cache_dir: Optional[str] = None) -> None: # --------------------------------------------------------------------------- def _load_session( - season: int, round_num: int, session_type: str + season: int, round_num: int, session_type: str, + laps: bool = True, telemetry: bool = False, + weather: bool = True, messages: bool = False, ) -> Optional[fastf1.core.Session]: """ Load a FastF1 session with error handling. @@ -63,13 +65,17 @@ def _load_session( season: F1 season year (2018–2026) round_num: Race round number within season session_type: One of 'R' (Race), 'Q' (Qualifying), 'FP2', 'FP3' + laps: Load lap timing data (default True) + telemetry: Load car telemetry (default False — not needed for features) + weather: Load weather data (default True) + messages: Load race control messages (default False) Returns: Loaded FastF1 Session object, or None if unavailable. """ try: session = fastf1.get_session(season, round_num, session_type) - session.load() + session.load(laps=laps, telemetry=telemetry, weather=weather, messages=messages) return session except Exception as e: logger.warning( diff --git a/data_output/fastf1_races.parquet b/data_output/fastf1_races.parquet index 97c7387e66f2598f5087aed71d8c808b41e71fb6..1a871c03f9500dd52e0a8a44ec654fceef0d788c 100644 --- a/data_output/fastf1_races.parquet +++ b/data_output/fastf1_races.parquet @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:8d2fba650f3d5031cd6ac5bf9c3507f471ba4a4ddc59b297e978c0c4fdb045b6 -size 132567 +oid sha256:2849f1eec94e44f124f04f2df23970214fb004aa5ce64080ed5520b3ec666b88 +size 111244 diff --git a/data_output/prerace/prerace_70th_anniversary_gra_2020.parquet b/data_output/prerace/prerace_70th_anniversary_gra_2020.parquet new file mode 100644 index 0000000000000000000000000000000000000000..fe64670e293675c08df7d59d3d4241553c1e47bc --- /dev/null +++ b/data_output/prerace/prerace_70th_anniversary_gra_2020.parquet @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:5cd269f7255addee293be9f2edb819a9aee26b922dc13445a7858386fc4797fc +size 17243 diff --git a/data_output/prerace/prerace_abu_dhabi_grand_prix_2014.parquet b/data_output/prerace/prerace_abu_dhabi_grand_prix_2014.parquet new file mode 100644 index 0000000000000000000000000000000000000000..8e38a4b16cf61f811b29f4d3251b58d24c114337 --- /dev/null +++ b/data_output/prerace/prerace_abu_dhabi_grand_prix_2014.parquet @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:b4edb066e72f51c97af2b827a0372b9537bab50931f1d1a41350203110f0427a +size 16024 diff --git a/data_output/prerace/prerace_abu_dhabi_grand_prix_2015.parquet b/data_output/prerace/prerace_abu_dhabi_grand_prix_2015.parquet new file mode 100644 index 0000000000000000000000000000000000000000..a3321a60491fe041888342063a03b1d3f97274e4 --- /dev/null +++ b/data_output/prerace/prerace_abu_dhabi_grand_prix_2015.parquet @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:1f968dac8035d2a6b98fdd2cb948a2919f67afb82c803e1e8fc00a652c1fdc7e +size 16086 diff --git a/data_output/prerace/prerace_abu_dhabi_grand_prix_2016.parquet b/data_output/prerace/prerace_abu_dhabi_grand_prix_2016.parquet new file mode 100644 index 0000000000000000000000000000000000000000..2282ffc258a88380d3f251158f4d1aa4c44686c8 --- /dev/null +++ b/data_output/prerace/prerace_abu_dhabi_grand_prix_2016.parquet @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:1a5601f3056795c2ece6ef7df44574b6af73ff62585112a432387f4fc1de2695 +size 16184 diff --git a/data_output/prerace/prerace_abu_dhabi_grand_prix_2017.parquet b/data_output/prerace/prerace_abu_dhabi_grand_prix_2017.parquet new file mode 100644 index 0000000000000000000000000000000000000000..9780632c14b130d79e0646966e3e148978072bb1 --- /dev/null +++ b/data_output/prerace/prerace_abu_dhabi_grand_prix_2017.parquet @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:502d00fd14943e14cbf616fadb5bc1a425255eee7b4aa5e3bca31f2366ab4491 +size 16121 diff --git a/data_output/prerace/prerace_abu_dhabi_grand_prix_2018.parquet b/data_output/prerace/prerace_abu_dhabi_grand_prix_2018.parquet new file mode 100644 index 0000000000000000000000000000000000000000..b907759a49fabde47e36888e82efce7293202e11 --- /dev/null +++ b/data_output/prerace/prerace_abu_dhabi_grand_prix_2018.parquet @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:fee82cb6eb4323b71fec2694d9af9dbd6c83278230d8b46a17fc62e374424fc0 +size 17219 diff --git a/data_output/prerace/prerace_abu_dhabi_grand_prix_2019.parquet b/data_output/prerace/prerace_abu_dhabi_grand_prix_2019.parquet new file mode 100644 index 0000000000000000000000000000000000000000..33bfb774270a6132630ff16e347faf62fe69c6f4 --- /dev/null +++ b/data_output/prerace/prerace_abu_dhabi_grand_prix_2019.parquet @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:4a4297d21fe4c3c53af0efa99d4629cb1712cb617f4d7f3fb9fe4b6a697a3b53 +size 17171 diff --git a/data_output/prerace/prerace_abu_dhabi_grand_prix_2020.parquet b/data_output/prerace/prerace_abu_dhabi_grand_prix_2020.parquet new file mode 100644 index 0000000000000000000000000000000000000000..4ea00201cc98db69c283bd87b937c5189951151c --- /dev/null +++ b/data_output/prerace/prerace_abu_dhabi_grand_prix_2020.parquet @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:c8f2097399aeca4cc13c1196013b819ca82644a3de9060dd091558e04ad9b0fe +size 17197 diff --git a/data_output/prerace/prerace_abu_dhabi_grand_prix_2021.parquet b/data_output/prerace/prerace_abu_dhabi_grand_prix_2021.parquet new file mode 100644 index 0000000000000000000000000000000000000000..b084d81785b14ab5df9f34e2f5599082887e4dc2 --- /dev/null +++ b/data_output/prerace/prerace_abu_dhabi_grand_prix_2021.parquet @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:fd73c940a2039393c25e4375c3a95d55a81a7337bb2dccd0c96112be8c54804f +size 17224 diff --git a/data_output/prerace/prerace_abu_dhabi_grand_prix_2022.parquet b/data_output/prerace/prerace_abu_dhabi_grand_prix_2022.parquet new file mode 100644 index 0000000000000000000000000000000000000000..97df83195f39f959d9a6f66d47419cb232737d9a --- /dev/null +++ b/data_output/prerace/prerace_abu_dhabi_grand_prix_2022.parquet @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:1b81b44cce7074d8280e7d3cdddf67178e86429d679b8481bb9052e625b95d8a +size 17173 diff --git a/data_output/prerace/prerace_abu_dhabi_grand_prix_2023.parquet b/data_output/prerace/prerace_abu_dhabi_grand_prix_2023.parquet new file mode 100644 index 0000000000000000000000000000000000000000..1d326163ba961fe01564bfde72218ddece1e82e5 --- /dev/null +++ b/data_output/prerace/prerace_abu_dhabi_grand_prix_2023.parquet @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:808cbab2d0ebf3fd4cdbfc3dff58ed68f98f5ee804041664ca3f530ee40dc283 +size 17197 diff --git a/data_output/prerace/prerace_abu_dhabi_grand_prix_2024.parquet b/data_output/prerace/prerace_abu_dhabi_grand_prix_2024.parquet new file mode 100644 index 0000000000000000000000000000000000000000..c5b86e01d9dcb5c8f1a188d9feee7b509cc74559 --- /dev/null +++ b/data_output/prerace/prerace_abu_dhabi_grand_prix_2024.parquet @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:3385b06f5db6ac54b06d75f87f275865612a678c2a0e72c716031707ed5e6b81 +size 17170 diff --git a/data_output/prerace/prerace_abu_dhabi_grand_prix_2025.parquet b/data_output/prerace/prerace_abu_dhabi_grand_prix_2025.parquet new file mode 100644 index 0000000000000000000000000000000000000000..a7e9073e6b582eb56ee437c0cfbf280005a06019 --- /dev/null +++ b/data_output/prerace/prerace_abu_dhabi_grand_prix_2025.parquet @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:1c6b778ca45dfdd67dfb532cd258910c1b97ee0f894de5484ffbd0854c6df252 +size 17116 diff --git a/data_output/prerace/prerace_australian_grand_pri_2014.parquet b/data_output/prerace/prerace_australian_grand_pri_2014.parquet new file mode 100644 index 0000000000000000000000000000000000000000..eb51ee2f2c471ddcb4d31d9ada92b577bf9b7b11 --- /dev/null +++ b/data_output/prerace/prerace_australian_grand_pri_2014.parquet @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:375f0e17bc001fb25ca6d713b4d60dcb97e4ed836465a53f79fd000f70da8199 +size 15799 diff --git a/data_output/prerace/prerace_australian_grand_pri_2015.parquet b/data_output/prerace/prerace_australian_grand_pri_2015.parquet new file mode 100644 index 0000000000000000000000000000000000000000..7dfde17a030bcedfdfc308f39b2e66bf21bdb7d0 --- /dev/null +++ b/data_output/prerace/prerace_australian_grand_pri_2015.parquet @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:5b5892ff5cdf24d49855631396fdc65c5ab89ff8ec0bc8e028dda87ad4041145 +size 16020 diff --git a/data_output/prerace/prerace_australian_grand_pri_2016.parquet b/data_output/prerace/prerace_australian_grand_pri_2016.parquet new file mode 100644 index 0000000000000000000000000000000000000000..2de6a91646fc11e437ba4935d236d5374e8fcbf6 --- /dev/null +++ b/data_output/prerace/prerace_australian_grand_pri_2016.parquet @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:163b6ac086ec568316728d6bfa44616e66f8fdccc89022cda5d2790492f7d313 +size 16179 diff --git a/data_output/prerace/prerace_australian_grand_pri_2017.parquet b/data_output/prerace/prerace_australian_grand_pri_2017.parquet new file mode 100644 index 0000000000000000000000000000000000000000..65fcd19cd5fdf776be71acf67ec2109aac906ad0 --- /dev/null +++ b/data_output/prerace/prerace_australian_grand_pri_2017.parquet @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:a3bff47910334b98b4785fa55cdcef4ea30936fa63f9c38e9e6ed14fcc05fe97 +size 16120 diff --git a/data_output/prerace/prerace_australian_grand_pri_2018.parquet b/data_output/prerace/prerace_australian_grand_pri_2018.parquet new file mode 100644 index 0000000000000000000000000000000000000000..66eba72052bcaf3f8625ed108e90fc3f57817129 --- /dev/null +++ b/data_output/prerace/prerace_australian_grand_pri_2018.parquet @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:b763f2c4b3e5db0d1e732df1598d0452f0ef723352a503fd2538ad35d94e8482 +size 17141 diff --git a/data_output/prerace/prerace_australian_grand_pri_2019.parquet b/data_output/prerace/prerace_australian_grand_pri_2019.parquet new file mode 100644 index 0000000000000000000000000000000000000000..7f36622581ad9891c02e6638ade5656172046a3c --- /dev/null +++ b/data_output/prerace/prerace_australian_grand_pri_2019.parquet @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:933f9ccd3555a89525d451e6988dd5f138fb5b5d908f4ed203a0bd04250e7a41 +size 17176 diff --git a/data_output/prerace/prerace_australian_grand_pri_2022.parquet b/data_output/prerace/prerace_australian_grand_pri_2022.parquet new file mode 100644 index 0000000000000000000000000000000000000000..dc55fe3494d7bcb69d326e24536998842c91b68e --- /dev/null +++ b/data_output/prerace/prerace_australian_grand_pri_2022.parquet @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:eb2e8fdeb0e7c937b02ba882d0e289f086010c5f40ada27b69df26b021160ab4 +size 17157 diff --git a/data_output/prerace/prerace_australian_grand_pri_2023.parquet b/data_output/prerace/prerace_australian_grand_pri_2023.parquet new file mode 100644 index 0000000000000000000000000000000000000000..b8c7a819adad921b3838b78607041e08ce767aa9 --- /dev/null +++ b/data_output/prerace/prerace_australian_grand_pri_2023.parquet @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:7d7e04018dfe44b4c19881f2699a5e5aa0534de11b3a4e1a5ff0647447c23841 +size 17158 diff --git a/data_output/prerace/prerace_australian_grand_pri_2024.parquet b/data_output/prerace/prerace_australian_grand_pri_2024.parquet new file mode 100644 index 0000000000000000000000000000000000000000..36173beb442f9510309c19c66db8dd8d85a88758 --- /dev/null +++ b/data_output/prerace/prerace_australian_grand_pri_2024.parquet @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:93a9ab6e87502fb12b4e0d74c8d8642f8d9364afb18c1cb1e1afd3153da552d2 +size 17098 diff --git a/data_output/prerace/prerace_australian_grand_pri_2025.parquet b/data_output/prerace/prerace_australian_grand_pri_2025.parquet new file mode 100644 index 0000000000000000000000000000000000000000..7adb7297ba66ba4576c3ce100b4daf3f9628f92f --- /dev/null +++ b/data_output/prerace/prerace_australian_grand_pri_2025.parquet @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:fe70b5ae3c1e4e3a4ae1a7183d3f05b01dcc9202595a1f998be88883ec7fe98e +size 17084 diff --git a/data_output/prerace/prerace_australian_grand_pri_2026.parquet b/data_output/prerace/prerace_australian_grand_pri_2026.parquet new file mode 100644 index 0000000000000000000000000000000000000000..3d213f4ed852d5947d6980a92a6cc8586707fd31 --- /dev/null +++ b/data_output/prerace/prerace_australian_grand_pri_2026.parquet @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:89ab900ac7feea4a1eef01372034f778bb3093f3ac425e0c2897eff4cd07dfd4 +size 17193 diff --git a/data_output/prerace/prerace_austrian_grand_prix_2014.parquet b/data_output/prerace/prerace_austrian_grand_prix_2014.parquet new file mode 100644 index 0000000000000000000000000000000000000000..87b6b31b496f1aae48d15f795686df233df6fa02 --- /dev/null +++ b/data_output/prerace/prerace_austrian_grand_prix_2014.parquet @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:2b89fd196fde105cdc5c7434932b847c4e72ff30ef1e816a1b87410b8a339b42 +size 16208 diff --git a/data_output/prerace/prerace_austrian_grand_prix_2015.parquet b/data_output/prerace/prerace_austrian_grand_prix_2015.parquet new file mode 100644 index 0000000000000000000000000000000000000000..88749ccbede697fcf488ab1d9930b0adeb436b62 --- /dev/null +++ b/data_output/prerace/prerace_austrian_grand_prix_2015.parquet @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:7c780f2f2d9dc96e289b12b829044bb1f4a0a1c9684aac51711ff9e38f8f60c8 +size 16090 diff --git a/data_output/prerace/prerace_austrian_grand_prix_2016.parquet b/data_output/prerace/prerace_austrian_grand_prix_2016.parquet new file mode 100644 index 0000000000000000000000000000000000000000..cb166d4292bc1fccf5f0c7aea61800d2342ced53 --- /dev/null +++ b/data_output/prerace/prerace_austrian_grand_prix_2016.parquet @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:d17a96cc7d923b4072d9aaadc452087acc00f040fe61cb4428b55c8fd75e7b36 +size 16198 diff --git a/data_output/prerace/prerace_austrian_grand_prix_2017.parquet b/data_output/prerace/prerace_austrian_grand_prix_2017.parquet new file mode 100644 index 0000000000000000000000000000000000000000..3372d64a6489a726a1213b4e437c02878306cb4a --- /dev/null +++ b/data_output/prerace/prerace_austrian_grand_prix_2017.parquet @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:e3671471e0cecbdb8d7d2a8d76f7367ad1fd766e44f91119ba1913f04d98d8dd +size 16113 diff --git a/data_output/prerace/prerace_austrian_grand_prix_2018.parquet b/data_output/prerace/prerace_austrian_grand_prix_2018.parquet new file mode 100644 index 0000000000000000000000000000000000000000..3f78d5560cae645d986213e3abb0ea2288bb16fc --- /dev/null +++ b/data_output/prerace/prerace_austrian_grand_prix_2018.parquet @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:3ec2fba62b991af17cbc38847515e3196dc62f9126c168bbae2a2c7a3eae1713 +size 17193 diff --git a/data_output/prerace/prerace_austrian_grand_prix_2019.parquet b/data_output/prerace/prerace_austrian_grand_prix_2019.parquet new file mode 100644 index 0000000000000000000000000000000000000000..8be0cabbb3e95857ba0541c7665c20db552c3753 --- /dev/null +++ b/data_output/prerace/prerace_austrian_grand_prix_2019.parquet @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:5275dcf00c1580e9c965a018db62d37c2d302505317756c56d6de7d34ad113c2 +size 17180 diff --git a/data_output/prerace/prerace_austrian_grand_prix_2020.parquet b/data_output/prerace/prerace_austrian_grand_prix_2020.parquet new file mode 100644 index 0000000000000000000000000000000000000000..c64b10b310f77f27b2bc821d9f90525907cf75e1 --- /dev/null +++ b/data_output/prerace/prerace_austrian_grand_prix_2020.parquet @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:aed36837f04ba4f69a63f0fcdd1e7faa34e1810cc5202048f6dd3381cea1cfd1 +size 17186 diff --git a/data_output/prerace/prerace_austrian_grand_prix_2021.parquet b/data_output/prerace/prerace_austrian_grand_prix_2021.parquet new file mode 100644 index 0000000000000000000000000000000000000000..a0d7b6db8609d7efad9603480021f342b70fd3d7 --- /dev/null +++ b/data_output/prerace/prerace_austrian_grand_prix_2021.parquet @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:d890d04b763101f954125f24f77b4650224d5a618b4244ae3689c47834ed1ed0 +size 17194 diff --git a/data_output/prerace/prerace_austrian_grand_prix_2022.parquet b/data_output/prerace/prerace_austrian_grand_prix_2022.parquet new file mode 100644 index 0000000000000000000000000000000000000000..a0b35a292f3e094375158deafc7c4ffb86accf3b --- /dev/null +++ b/data_output/prerace/prerace_austrian_grand_prix_2022.parquet @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:a276394021e03e59b10fcd03c0280df22b3b947d03ccebfd809f95e60f68968d +size 17180 diff --git a/data_output/prerace/prerace_austrian_grand_prix_2023.parquet b/data_output/prerace/prerace_austrian_grand_prix_2023.parquet new file mode 100644 index 0000000000000000000000000000000000000000..ef43ac6a832ec005b743d3ce43665adb2d6eed3f --- /dev/null +++ b/data_output/prerace/prerace_austrian_grand_prix_2023.parquet @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:0235cc3b5754c9ad95c8bbc0b14005b463670f416ca85fa52905319c2498e9fb +size 16910 diff --git a/data_output/prerace/prerace_austrian_grand_prix_2024.parquet b/data_output/prerace/prerace_austrian_grand_prix_2024.parquet new file mode 100644 index 0000000000000000000000000000000000000000..903d614084fbc944b171424ecf3b8a0d0dc06da6 --- /dev/null +++ b/data_output/prerace/prerace_austrian_grand_prix_2024.parquet @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:21ddd483cdd6160159986b984a80336aae7162cb4bed35812fe9dedc827ccbd1 +size 16906 diff --git a/data_output/prerace/prerace_austrian_grand_prix_2025.parquet b/data_output/prerace/prerace_austrian_grand_prix_2025.parquet new file mode 100644 index 0000000000000000000000000000000000000000..0d368372582ef695bf9cf1c53bb3c2909aac49cb --- /dev/null +++ b/data_output/prerace/prerace_austrian_grand_prix_2025.parquet @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:b880dbc20428d8c62bf4f2742e8834e7196e73b3f0c677c478c0e8f84d58eca6 +size 17108 diff --git a/data_output/prerace/prerace_azerbaijan_grand_pri_2017.parquet b/data_output/prerace/prerace_azerbaijan_grand_pri_2017.parquet new file mode 100644 index 0000000000000000000000000000000000000000..0dac1c9421f4380597b98512ecdc957b5730f14d --- /dev/null +++ b/data_output/prerace/prerace_azerbaijan_grand_pri_2017.parquet @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:3991df986866d3b237f2510da2537346ca7b75b86636d0886191aee461a5549b +size 16079 diff --git a/data_output/prerace/prerace_azerbaijan_grand_pri_2018.parquet b/data_output/prerace/prerace_azerbaijan_grand_pri_2018.parquet new file mode 100644 index 0000000000000000000000000000000000000000..730973eb9bb5ffb0cba5bbcbc40aa729782705bd --- /dev/null +++ b/data_output/prerace/prerace_azerbaijan_grand_pri_2018.parquet @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:aea98ac4c994c98e4818e105bffdd81a798451ffd2db8bfc53f6dad5a61e215f +size 17205 diff --git a/data_output/prerace/prerace_azerbaijan_grand_pri_2019.parquet b/data_output/prerace/prerace_azerbaijan_grand_pri_2019.parquet new file mode 100644 index 0000000000000000000000000000000000000000..6e7c5b38e4cf40f5a6406a50043da4d1b88ce16e --- /dev/null +++ b/data_output/prerace/prerace_azerbaijan_grand_pri_2019.parquet @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:fdb2c0d9ae8af4fe0afbe35e0fa00b4495d301cc8744cceb8c2b71298cfc2c83 +size 17210 diff --git a/data_output/prerace/prerace_azerbaijan_grand_pri_2021.parquet b/data_output/prerace/prerace_azerbaijan_grand_pri_2021.parquet new file mode 100644 index 0000000000000000000000000000000000000000..2a10cee07dfc3b468fa986489765f9b42efb8a60 --- /dev/null +++ b/data_output/prerace/prerace_azerbaijan_grand_pri_2021.parquet @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:63e61f2415e99646c7d9360479ff0456dcbff83d0efcd530ff74261dd466fd7a +size 17246 diff --git a/data_output/prerace/prerace_azerbaijan_grand_pri_2022.parquet b/data_output/prerace/prerace_azerbaijan_grand_pri_2022.parquet new file mode 100644 index 0000000000000000000000000000000000000000..3e81a2ade63b0637b8a16d234edd22d9e8aa9e8a --- /dev/null +++ b/data_output/prerace/prerace_azerbaijan_grand_pri_2022.parquet @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:5529cc4110424f30674d2c4323a63c273e48b0140d128d1100493d135b4bb919 +size 17180 diff --git a/data_output/prerace/prerace_azerbaijan_grand_pri_2023.parquet b/data_output/prerace/prerace_azerbaijan_grand_pri_2023.parquet new file mode 100644 index 0000000000000000000000000000000000000000..c35f4dba73b0d4f40f7fc3c8fc45091280a8545b --- /dev/null +++ b/data_output/prerace/prerace_azerbaijan_grand_pri_2023.parquet @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:812122fb5ad98b0e0a178dfa5edd64ee180a4b9026d8efdfef5da1170605c9ca +size 16935 diff --git a/data_output/prerace/prerace_azerbaijan_grand_pri_2024.parquet b/data_output/prerace/prerace_azerbaijan_grand_pri_2024.parquet new file mode 100644 index 0000000000000000000000000000000000000000..fb26a4f8ef8e1de2bb07e8e9b38e87cce981954c --- /dev/null +++ b/data_output/prerace/prerace_azerbaijan_grand_pri_2024.parquet @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:938a4a65c05fef6a0d1fd59c8e38bef7dd6065016861fc4edb13d6f166941558 +size 17154 diff --git a/data_output/prerace/prerace_azerbaijan_grand_pri_2025.parquet b/data_output/prerace/prerace_azerbaijan_grand_pri_2025.parquet new file mode 100644 index 0000000000000000000000000000000000000000..1b25bb3ae1108c12abf910fabb58339f613c488f --- /dev/null +++ b/data_output/prerace/prerace_azerbaijan_grand_pri_2025.parquet @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:ccbfa678a4c969cf4da568e227871bd3743e4cc64e32abb8c131b8c265b8fda1 +size 17105 diff --git a/data_output/prerace/prerace_bahrain_grand_prix_2014.parquet b/data_output/prerace/prerace_bahrain_grand_prix_2014.parquet new file mode 100644 index 0000000000000000000000000000000000000000..accbca797a0f7777f9233f6b40a9870cc7a349dd --- /dev/null +++ b/data_output/prerace/prerace_bahrain_grand_prix_2014.parquet @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:9e661bbfa567e7e595e83dc96eae22714f82db7e7b85461966e88ebd5002865e +size 16204 diff --git a/data_output/prerace/prerace_bahrain_grand_prix_2015.parquet b/data_output/prerace/prerace_bahrain_grand_prix_2015.parquet new file mode 100644 index 0000000000000000000000000000000000000000..fcf1744c23d8a4c3f3fb7ff52708a7e1fe3f563a --- /dev/null +++ b/data_output/prerace/prerace_bahrain_grand_prix_2015.parquet @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:d8243bf75437054b974bc2e1d8aac341177622ef8a5b7a791f783bc61fc276ab +size 16046 diff --git a/data_output/prerace/prerace_bahrain_grand_prix_2016.parquet b/data_output/prerace/prerace_bahrain_grand_prix_2016.parquet new file mode 100644 index 0000000000000000000000000000000000000000..18cd3472f0d13b4e0546f7a9d8dc17a47f1b3909 --- /dev/null +++ b/data_output/prerace/prerace_bahrain_grand_prix_2016.parquet @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:09a38a7d42fe8bb599c4d22c25504cbe66b105ee2f3b7d93d612c26f2f2362b9 +size 16169 diff --git a/data_output/prerace/prerace_bahrain_grand_prix_2017.parquet b/data_output/prerace/prerace_bahrain_grand_prix_2017.parquet new file mode 100644 index 0000000000000000000000000000000000000000..8d97d5773de444af20612b4e63cba8f10ec98086 --- /dev/null +++ b/data_output/prerace/prerace_bahrain_grand_prix_2017.parquet @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:2d84c1e33057e76767f6d8faaad2b6a22545a782ab248a1bf4035988b734109c +size 16106 diff --git a/data_output/prerace/prerace_bahrain_grand_prix_2018.parquet b/data_output/prerace/prerace_bahrain_grand_prix_2018.parquet new file mode 100644 index 0000000000000000000000000000000000000000..2b4b9d1bb743f05755f8c85f9cf32e76c2b7f706 --- /dev/null +++ b/data_output/prerace/prerace_bahrain_grand_prix_2018.parquet @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:e7ca31dfc60d5e7d06d87eb4e7e59c43c72d1df59117b2bbd7fe2e84e4c9214b +size 17174 diff --git a/data_output/prerace/prerace_bahrain_grand_prix_2019.parquet b/data_output/prerace/prerace_bahrain_grand_prix_2019.parquet new file mode 100644 index 0000000000000000000000000000000000000000..bd126d957c86dd1ce88e377aa3e71dd0b6d7114a --- /dev/null +++ b/data_output/prerace/prerace_bahrain_grand_prix_2019.parquet @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:b512d62aec17056ef75cc25d49d94a1073153d192aa7e94a640d862e5effad9e +size 17212 diff --git a/data_output/prerace/prerace_bahrain_grand_prix_2020.parquet b/data_output/prerace/prerace_bahrain_grand_prix_2020.parquet new file mode 100644 index 0000000000000000000000000000000000000000..47865753c9f21cbb64bb77c04602fe159aa20705 --- /dev/null +++ b/data_output/prerace/prerace_bahrain_grand_prix_2020.parquet @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:104443cb99a6a7110d648163e4093db270c1dd45e11b99a706b07c4210e6f2aa +size 17203 diff --git a/data_output/prerace/prerace_bahrain_grand_prix_2021.parquet b/data_output/prerace/prerace_bahrain_grand_prix_2021.parquet new file mode 100644 index 0000000000000000000000000000000000000000..a63b8fb57d6aa48274ca1d48281e418ec893a54b --- /dev/null +++ b/data_output/prerace/prerace_bahrain_grand_prix_2021.parquet @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:74b286491d77692fca229809eaf5291b032d9b47930eb77f93a1b5134b0cd5a0 +size 17182 diff --git a/data_output/prerace/prerace_bahrain_grand_prix_2022.parquet b/data_output/prerace/prerace_bahrain_grand_prix_2022.parquet new file mode 100644 index 0000000000000000000000000000000000000000..47ce1c9a0ede03c4eb26c386ea25028e033bdf7d --- /dev/null +++ b/data_output/prerace/prerace_bahrain_grand_prix_2022.parquet @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:2b5fb679432560ad924c41b6a6437b46dd010770efd398ed239573496f8b0c93 +size 17154 diff --git a/data_output/prerace/prerace_bahrain_grand_prix_2023.parquet b/data_output/prerace/prerace_bahrain_grand_prix_2023.parquet new file mode 100644 index 0000000000000000000000000000000000000000..408fa8da673fbe10fc5a6ad2e5279a9f9b8ff7d5 --- /dev/null +++ b/data_output/prerace/prerace_bahrain_grand_prix_2023.parquet @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:a31f8b84196be0ca817ddb4803340018395de9d9089fec9d80fd0e599b666502 +size 17141 diff --git a/data_output/prerace/prerace_bahrain_grand_prix_2024.parquet b/data_output/prerace/prerace_bahrain_grand_prix_2024.parquet new file mode 100644 index 0000000000000000000000000000000000000000..15e6073469a94d1bcbb97200e5510efc4573c437 --- /dev/null +++ b/data_output/prerace/prerace_bahrain_grand_prix_2024.parquet @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:d252f9663457ab179d943df6c74c134d6fcea60c53a1b117bf3ecb4f7a7d13dc +size 17154 diff --git a/data_output/prerace/prerace_bahrain_grand_prix_2025.parquet b/data_output/prerace/prerace_bahrain_grand_prix_2025.parquet new file mode 100644 index 0000000000000000000000000000000000000000..c0edaa2f167b3f7f2093b0c79198691cc51bc89e --- /dev/null +++ b/data_output/prerace/prerace_bahrain_grand_prix_2025.parquet @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:bec2956b48bf5ce9d810ececa2732a5256819b9ee166be7cede99414fac01a42 +size 17111 diff --git a/data_output/prerace/prerace_belgian_grand_prix_2014.parquet b/data_output/prerace/prerace_belgian_grand_prix_2014.parquet new file mode 100644 index 0000000000000000000000000000000000000000..7c0523d8d7c8c0de5ea4b818fc04251c7a336ba0 --- /dev/null +++ b/data_output/prerace/prerace_belgian_grand_prix_2014.parquet @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:935e911a7406f49018e2e6e6a9364db4b044d26c587f884c08304a9b051f1bce +size 16199 diff --git a/data_output/prerace/prerace_belgian_grand_prix_2015.parquet b/data_output/prerace/prerace_belgian_grand_prix_2015.parquet new file mode 100644 index 0000000000000000000000000000000000000000..b46f18faafa9dc8ba0053f94ea33bfa82b1f17da --- /dev/null +++ b/data_output/prerace/prerace_belgian_grand_prix_2015.parquet @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:7034ae9c421f9d5dbacc2b577c7ffe0abc1f3e6c391995208cc0bca064e40660 +size 16091 diff --git a/data_output/prerace/prerace_belgian_grand_prix_2016.parquet b/data_output/prerace/prerace_belgian_grand_prix_2016.parquet new file mode 100644 index 0000000000000000000000000000000000000000..a570296999f2b3060796c953b3fb09533ede4dd1 --- /dev/null +++ b/data_output/prerace/prerace_belgian_grand_prix_2016.parquet @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:99fd19bffe4ad37affaef986dc3f74b0a72caa641028f4ae3ae54aae4678e6aa +size 16155 diff --git a/data_output/prerace/prerace_belgian_grand_prix_2017.parquet b/data_output/prerace/prerace_belgian_grand_prix_2017.parquet new file mode 100644 index 0000000000000000000000000000000000000000..50fa322970f7c4a14af7f96bf9855b33107dd8bd --- /dev/null +++ b/data_output/prerace/prerace_belgian_grand_prix_2017.parquet @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:bae951941eebb0b5c92684e690ce05f341eaaffddde58931d0f9ee8c39d4f84a +size 16088 diff --git a/data_output/prerace/prerace_belgian_grand_prix_2018.parquet b/data_output/prerace/prerace_belgian_grand_prix_2018.parquet new file mode 100644 index 0000000000000000000000000000000000000000..797550f028819a2384f9957bb63467845f7185ac --- /dev/null +++ b/data_output/prerace/prerace_belgian_grand_prix_2018.parquet @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:41c5066e948c58984c541e70e5bab2d44e638f0465a0d54ae26a65af7f66872a +size 17191 diff --git a/data_output/prerace/prerace_belgian_grand_prix_2019.parquet b/data_output/prerace/prerace_belgian_grand_prix_2019.parquet new file mode 100644 index 0000000000000000000000000000000000000000..b731a53b9f53615554901b552a4bdc568373d7c8 --- /dev/null +++ b/data_output/prerace/prerace_belgian_grand_prix_2019.parquet @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:14b11a10aa45e8cc298421e401319f8862565e7a1e98a4c0715a699ae6ef08f6 +size 17181 diff --git a/data_output/prerace/prerace_belgian_grand_prix_2020.parquet b/data_output/prerace/prerace_belgian_grand_prix_2020.parquet new file mode 100644 index 0000000000000000000000000000000000000000..fba789822b9dc7f7d26e9fe5b171660a08140ab2 --- /dev/null +++ b/data_output/prerace/prerace_belgian_grand_prix_2020.parquet @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:f5c0cfee76840fffac5fc7cea5ec2c3a3499cdf7cfdf0c0bf72bbadc1e806b6c +size 17220 diff --git a/data_output/prerace/prerace_belgian_grand_prix_2021.parquet b/data_output/prerace/prerace_belgian_grand_prix_2021.parquet new file mode 100644 index 0000000000000000000000000000000000000000..5c8930bfba56f566880bec3b6af4001f8e85a447 --- /dev/null +++ b/data_output/prerace/prerace_belgian_grand_prix_2021.parquet @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:1dc5bef7bbf9c230f9b5382f0376d7c3230d7065ab92edb70c96068c1b6eff06 +size 17201 diff --git a/data_output/prerace/prerace_belgian_grand_prix_2022.parquet b/data_output/prerace/prerace_belgian_grand_prix_2022.parquet new file mode 100644 index 0000000000000000000000000000000000000000..556ba051406d6723acba81cca5a2740ac68f79fe --- /dev/null +++ b/data_output/prerace/prerace_belgian_grand_prix_2022.parquet @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:10e83b29d4b766010144f0fcebdd10a55a06473963782444050090998f0a347f +size 17179 diff --git a/data_output/prerace/prerace_belgian_grand_prix_2023.parquet b/data_output/prerace/prerace_belgian_grand_prix_2023.parquet new file mode 100644 index 0000000000000000000000000000000000000000..a469138789cdc93ce085ac9a7f588ee88dabdcfc --- /dev/null +++ b/data_output/prerace/prerace_belgian_grand_prix_2023.parquet @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:44eb371c15d3b0cc7102c7a3a7aca55d43b41962840d9abeb42f5283301bd7c5 +size 16894 diff --git a/data_output/prerace/prerace_belgian_grand_prix_2024.parquet b/data_output/prerace/prerace_belgian_grand_prix_2024.parquet new file mode 100644 index 0000000000000000000000000000000000000000..3bf5f7b5113d8192aa91be9c101c21034d9bbbb6 --- /dev/null +++ b/data_output/prerace/prerace_belgian_grand_prix_2024.parquet @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:d8975163dde0a7662783e8c482291f1b27275367d22befc0b725d5448f907cc4 +size 17148 diff --git a/data_output/prerace/prerace_belgian_grand_prix_2025.parquet b/data_output/prerace/prerace_belgian_grand_prix_2025.parquet new file mode 100644 index 0000000000000000000000000000000000000000..aff3521d419cbbf91cf8452ffad01428ed410f11 --- /dev/null +++ b/data_output/prerace/prerace_belgian_grand_prix_2025.parquet @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:2153c23d900a211ed8bc4435d078927b1a355a5974680746150a216161b12391 +size 16828 diff --git a/data_output/prerace/prerace_brazilian_grand_prix_2014.parquet b/data_output/prerace/prerace_brazilian_grand_prix_2014.parquet new file mode 100644 index 0000000000000000000000000000000000000000..fde3b525508d8c93d7b6e6961e26a62b290046ba --- /dev/null +++ b/data_output/prerace/prerace_brazilian_grand_prix_2014.parquet @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:432f2cf740d301271e98edb20547ec58eb68ec6300aeee54ecbd96847a4a3d10 +size 16054 diff --git a/data_output/prerace/prerace_brazilian_grand_prix_2015.parquet b/data_output/prerace/prerace_brazilian_grand_prix_2015.parquet new file mode 100644 index 0000000000000000000000000000000000000000..5e568f51042db1262f415765b63970c71aec6a16 --- /dev/null +++ b/data_output/prerace/prerace_brazilian_grand_prix_2015.parquet @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:2ebcd3d5d513257013f20623f664be3c5eeeffcad66808c4aa3ee94f0de3b391 +size 16103 diff --git a/data_output/prerace/prerace_brazilian_grand_prix_2016.parquet b/data_output/prerace/prerace_brazilian_grand_prix_2016.parquet new file mode 100644 index 0000000000000000000000000000000000000000..7fa70834325445c5ef30b6bf428912699c8d9c9c --- /dev/null +++ b/data_output/prerace/prerace_brazilian_grand_prix_2016.parquet @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:37b31a9bc5b6bb094db14ed9aaaafc8364118d5822cef9fc4a30223b25fb4d1d +size 16205 diff --git a/data_output/prerace/prerace_brazilian_grand_prix_2017.parquet b/data_output/prerace/prerace_brazilian_grand_prix_2017.parquet new file mode 100644 index 0000000000000000000000000000000000000000..b5fa5638933a86ea2f35c746b053eed59fb90c17 --- /dev/null +++ b/data_output/prerace/prerace_brazilian_grand_prix_2017.parquet @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:809ee2a24c3a1a5100bb925b0f6f04bdc32fb8afef07cc9d149ff2d28a9f7019 +size 16121 diff --git a/data_output/prerace/prerace_brazilian_grand_prix_2018.parquet b/data_output/prerace/prerace_brazilian_grand_prix_2018.parquet new file mode 100644 index 0000000000000000000000000000000000000000..5c7abf76ed1498ec70cbd2f81b5af7f82dce3790 --- /dev/null +++ b/data_output/prerace/prerace_brazilian_grand_prix_2018.parquet @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:f2539ef5ec2a444a85419bf727fc4c94482198c4bbc9a3043cd6394b26e0c712 +size 17204 diff --git a/data_output/prerace/prerace_brazilian_grand_prix_2019.parquet b/data_output/prerace/prerace_brazilian_grand_prix_2019.parquet new file mode 100644 index 0000000000000000000000000000000000000000..30a104a9b2afaa1b715417de273fe66c7b0f5687 --- /dev/null +++ b/data_output/prerace/prerace_brazilian_grand_prix_2019.parquet @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:afa457d15fee5bc3e669e42565c639e74623d8a67b3f40b0cfcae2ec198bc7c0 +size 17202 diff --git a/data_output/prerace/prerace_british_grand_prix_2014.parquet b/data_output/prerace/prerace_british_grand_prix_2014.parquet new file mode 100644 index 0000000000000000000000000000000000000000..01a095912484df6f0ea9a683c41069ff59d96cde --- /dev/null +++ b/data_output/prerace/prerace_british_grand_prix_2014.parquet @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:4b0a563bf8af7948718c7b273e38a1b1c99e338de90e80e89ce15fc72d45224a +size 16203 diff --git a/data_output/prerace/prerace_british_grand_prix_2015.parquet b/data_output/prerace/prerace_british_grand_prix_2015.parquet new file mode 100644 index 0000000000000000000000000000000000000000..9952fed79e09737b70a20a169715a42bca369a53 --- /dev/null +++ b/data_output/prerace/prerace_british_grand_prix_2015.parquet @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:cb8b2b3b44a551140eaf87d2836d8b36778e9e7ed51ff121e1457b7a74c34707 +size 16115 diff --git a/data_output/prerace/prerace_british_grand_prix_2016.parquet b/data_output/prerace/prerace_british_grand_prix_2016.parquet new file mode 100644 index 0000000000000000000000000000000000000000..5d892e365cae82d46afb116e4930e163e0eed066 --- /dev/null +++ b/data_output/prerace/prerace_british_grand_prix_2016.parquet @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:13378eeb8f45f8b5f2a5bea68a28de1e9763f84a3c72c5b4e21a17201bfee453 +size 16178 diff --git a/data_output/prerace/prerace_british_grand_prix_2017.parquet b/data_output/prerace/prerace_british_grand_prix_2017.parquet new file mode 100644 index 0000000000000000000000000000000000000000..793463ac4af26e1a8a66db168cdee4c222b6388a --- /dev/null +++ b/data_output/prerace/prerace_british_grand_prix_2017.parquet @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:d8762024b8962557a835b7d639211f387b934e135bae947eaf34cf5bcb59b1af +size 16112 diff --git a/data_output/prerace/prerace_british_grand_prix_2018.parquet b/data_output/prerace/prerace_british_grand_prix_2018.parquet new file mode 100644 index 0000000000000000000000000000000000000000..bb33a8bc02c6120d58c1a2398f75db3774838f10 --- /dev/null +++ b/data_output/prerace/prerace_british_grand_prix_2018.parquet @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:390f79ca2813642c630c8af417b88aed7c53f1776499df7548468defe625559c +size 17175 diff --git a/data_output/prerace/prerace_british_grand_prix_2019.parquet b/data_output/prerace/prerace_british_grand_prix_2019.parquet new file mode 100644 index 0000000000000000000000000000000000000000..8161460e3ab9a97672a379bd05c14a5e12cb3d50 --- /dev/null +++ b/data_output/prerace/prerace_british_grand_prix_2019.parquet @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:4eab64cd18ac7919b1ad21dc24d9e3d8ac7bc72aad884785864beea9369937a8 +size 17190 diff --git a/data_output/prerace/prerace_british_grand_prix_2020.parquet b/data_output/prerace/prerace_british_grand_prix_2020.parquet new file mode 100644 index 0000000000000000000000000000000000000000..a97e65e80d78fdb8caa517ccdd74165a22dae8d8 --- /dev/null +++ b/data_output/prerace/prerace_british_grand_prix_2020.parquet @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:1ff69ffa2fc1285ebfa77b7c108ba5473ed7336c723258f115e18ddade51c92a +size 17185 diff --git a/data_output/prerace/prerace_british_grand_prix_2021.parquet b/data_output/prerace/prerace_british_grand_prix_2021.parquet new file mode 100644 index 0000000000000000000000000000000000000000..bf44b6f398f1a9481df8db982ef981328b7788eb --- /dev/null +++ b/data_output/prerace/prerace_british_grand_prix_2021.parquet @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:73ba4263217a5a5ea1d92934d0c0030e278e6bdbc5e479152b3d15c816b0f796 +size 17211 diff --git a/data_output/prerace/prerace_british_grand_prix_2022.parquet b/data_output/prerace/prerace_british_grand_prix_2022.parquet new file mode 100644 index 0000000000000000000000000000000000000000..e50723b951f81e9fde07583f47f6861e23e13c36 --- /dev/null +++ b/data_output/prerace/prerace_british_grand_prix_2022.parquet @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:9bf83f21bc6c38ba6a685d87eebe2ee5b8bd2a3f4a4876076f8206e759c85e14 +size 17184 diff --git a/data_output/prerace/prerace_british_grand_prix_2023.parquet b/data_output/prerace/prerace_british_grand_prix_2023.parquet new file mode 100644 index 0000000000000000000000000000000000000000..2aee141249a12182cfd3af4faa1b8dc816ae91de --- /dev/null +++ b/data_output/prerace/prerace_british_grand_prix_2023.parquet @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:23a2a62132917b2a48b65f51ba8172334a8e4cc29e37e709d491508bd5858d36 +size 17171 diff --git a/data_output/prerace/prerace_british_grand_prix_2024.parquet b/data_output/prerace/prerace_british_grand_prix_2024.parquet new file mode 100644 index 0000000000000000000000000000000000000000..0f3a66f80e4f1deba3d4f521de4e08fafdd04b05 --- /dev/null +++ b/data_output/prerace/prerace_british_grand_prix_2024.parquet @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:d0a7470908e28c1a369c69b9988efcfd50325be745941b3c4373c4d0f0f27fa9 +size 17130 diff --git a/data_output/prerace/prerace_british_grand_prix_2025.parquet b/data_output/prerace/prerace_british_grand_prix_2025.parquet new file mode 100644 index 0000000000000000000000000000000000000000..e7057c7bc34e7c9b5f6992af3c19aff8803ab790 --- /dev/null +++ b/data_output/prerace/prerace_british_grand_prix_2025.parquet @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:a16998ec39e1cd8a35d4bea56d69b23e464e219de8f59b31937ccb99ce74e081 +size 17111 diff --git a/data_output/prerace/prerace_canadian_grand_prix_2014.parquet b/data_output/prerace/prerace_canadian_grand_prix_2014.parquet new file mode 100644 index 0000000000000000000000000000000000000000..49feb966f5b176655227f4a39e18b00cc6985219 --- /dev/null +++ b/data_output/prerace/prerace_canadian_grand_prix_2014.parquet @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:0a9687657217a6aa4f239e265f4c8cbf053236009cced24b8817bd64a53290c8 +size 16199 diff --git a/data_output/prerace/prerace_canadian_grand_prix_2015.parquet b/data_output/prerace/prerace_canadian_grand_prix_2015.parquet new file mode 100644 index 0000000000000000000000000000000000000000..2608b99347214466c8cb4bc3f3ea5bc9882fb525 --- /dev/null +++ b/data_output/prerace/prerace_canadian_grand_prix_2015.parquet @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:796bfbecc04e89dd45da088c5ae3c28ba34d16af787ce1e5aafd9656131562c5 +size 16060 diff --git a/data_output/prerace/prerace_canadian_grand_prix_2016.parquet b/data_output/prerace/prerace_canadian_grand_prix_2016.parquet new file mode 100644 index 0000000000000000000000000000000000000000..cf4f46940ee21df28755ecd6608879eb4eda5f09 --- /dev/null +++ b/data_output/prerace/prerace_canadian_grand_prix_2016.parquet @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:152fb729794fe0cfa6be1f9e87581c5baeb4fbbdc42d26b7af90b7553bae903b +size 16158 diff --git a/data_output/prerace/prerace_canadian_grand_prix_2017.parquet b/data_output/prerace/prerace_canadian_grand_prix_2017.parquet new file mode 100644 index 0000000000000000000000000000000000000000..4896262ee62e8e7dbb17cc57f6d7d55622e88aa9 --- /dev/null +++ b/data_output/prerace/prerace_canadian_grand_prix_2017.parquet @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:7ef8a12a20c09f385ec36a5fe1565b1cf4368d77babef3d6dc0ea0cdac42c5b9 +size 16091 diff --git a/data_output/prerace/prerace_canadian_grand_prix_2018.parquet b/data_output/prerace/prerace_canadian_grand_prix_2018.parquet new file mode 100644 index 0000000000000000000000000000000000000000..fef2a7ac378c2a308a0f4daa6c41ab21f7ad10bf --- /dev/null +++ b/data_output/prerace/prerace_canadian_grand_prix_2018.parquet @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:ddfb6e9aa8cc16126e2c61b601fb258bd0285263bf677b72eecec901578244fc +size 17178 diff --git a/data_output/prerace/prerace_canadian_grand_prix_2019.parquet b/data_output/prerace/prerace_canadian_grand_prix_2019.parquet new file mode 100644 index 0000000000000000000000000000000000000000..5f85743f0382c2f9bd654417db66112c648c26a8 --- /dev/null +++ b/data_output/prerace/prerace_canadian_grand_prix_2019.parquet @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:09c5f523de11a7ffb5dc4d680b9c06a3740ee25bcdc088d73786c29936be2cb2 +size 17178 diff --git a/data_output/prerace/prerace_canadian_grand_prix_2022.parquet b/data_output/prerace/prerace_canadian_grand_prix_2022.parquet new file mode 100644 index 0000000000000000000000000000000000000000..03c712a5bc60de79e226f3220a72965ee4f191af --- /dev/null +++ b/data_output/prerace/prerace_canadian_grand_prix_2022.parquet @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:3e8bdc9535357c49f38c11e86bac87ab161928f5c9a417848eabbd8fa719baca +size 17177 diff --git a/data_output/prerace/prerace_canadian_grand_prix_2023.parquet b/data_output/prerace/prerace_canadian_grand_prix_2023.parquet new file mode 100644 index 0000000000000000000000000000000000000000..80d12fd4c09e31f7e89f8e7dcc1f6b315def00d7 --- /dev/null +++ b/data_output/prerace/prerace_canadian_grand_prix_2023.parquet @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:e714e2c12c5053433e6bc2f342e849fdccfde701a672ffb71e14ab93f11fe822 +size 17169 diff --git a/data_output/prerace/prerace_canadian_grand_prix_2024.parquet b/data_output/prerace/prerace_canadian_grand_prix_2024.parquet new file mode 100644 index 0000000000000000000000000000000000000000..44a732cabc6f4d4da0bf9338e575333ddfe24963 --- /dev/null +++ b/data_output/prerace/prerace_canadian_grand_prix_2024.parquet @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:47b2e146221156f68d428358ecf37121d35c514007ab668ef3b2bbb51fae4631 +size 17156 diff --git a/data_output/prerace/prerace_canadian_grand_prix_2025.parquet b/data_output/prerace/prerace_canadian_grand_prix_2025.parquet new file mode 100644 index 0000000000000000000000000000000000000000..b429b73f7d0d8984aa447f13cb8df74728bc5ec4 --- /dev/null +++ b/data_output/prerace/prerace_canadian_grand_prix_2025.parquet @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:fcdeeb981c2f1bd4cec211f87c6301c4585ca96424077337d1110e6d45a88cd8 +size 17101 diff --git a/data_output/prerace/prerace_canadian_grand_prix_2026.parquet b/data_output/prerace/prerace_canadian_grand_prix_2026.parquet new file mode 100644 index 0000000000000000000000000000000000000000..db70947307640972eff94c0ec02a3afd9f8e1db5 --- /dev/null +++ b/data_output/prerace/prerace_canadian_grand_prix_2026.parquet @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:03f172293853f83bfe6ecfce9f61409526891da2c2476daf869a234a3de18142 +size 16953 diff --git a/data_output/prerace/prerace_chinese_grand_prix_2014.parquet b/data_output/prerace/prerace_chinese_grand_prix_2014.parquet new file mode 100644 index 0000000000000000000000000000000000000000..f45e2df114df0976f93265fff266354021095368 --- /dev/null +++ b/data_output/prerace/prerace_chinese_grand_prix_2014.parquet @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:e6f9c241ca499c0fd33315e4eb3c2d978193bf7a63fc6b252d802310834bbe65 +size 16201 diff --git a/data_output/prerace/prerace_chinese_grand_prix_2015.parquet b/data_output/prerace/prerace_chinese_grand_prix_2015.parquet new file mode 100644 index 0000000000000000000000000000000000000000..6a2f97f45298c3437d53ca919341f89d2bbf4545 --- /dev/null +++ b/data_output/prerace/prerace_chinese_grand_prix_2015.parquet @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:776bc9e4c5227cbc6f0f5affaab5a2c7a0a4805e0c12fb5d4ea31d80df4747d2 +size 16084 diff --git a/data_output/prerace/prerace_chinese_grand_prix_2016.parquet b/data_output/prerace/prerace_chinese_grand_prix_2016.parquet new file mode 100644 index 0000000000000000000000000000000000000000..05359e4713a40396bcd0a16adc0cc8f75160326c --- /dev/null +++ b/data_output/prerace/prerace_chinese_grand_prix_2016.parquet @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:df4a6223030cc233a5554f7033c1531cbe6abbc3e7955a663bd61b1251808efd +size 16185 diff --git a/data_output/prerace/prerace_chinese_grand_prix_2017.parquet b/data_output/prerace/prerace_chinese_grand_prix_2017.parquet new file mode 100644 index 0000000000000000000000000000000000000000..db2f83426030f057700f2fb442372c48c5030f6d --- /dev/null +++ b/data_output/prerace/prerace_chinese_grand_prix_2017.parquet @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:727c93fa9bdd1c72b13e9b35d05e9698b4bdc5068719a7678e3036781e501e3c +size 16121 diff --git a/data_output/prerace/prerace_chinese_grand_prix_2018.parquet b/data_output/prerace/prerace_chinese_grand_prix_2018.parquet new file mode 100644 index 0000000000000000000000000000000000000000..91d006033911388142f8b7ff2ce871f1fd9cd85f --- /dev/null +++ b/data_output/prerace/prerace_chinese_grand_prix_2018.parquet @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:2c0de291e7e77c7f964fefcedaa752f508bb54ec623317382fc7251c790f0d99 +size 17180 diff --git a/data_output/prerace/prerace_chinese_grand_prix_2019.parquet b/data_output/prerace/prerace_chinese_grand_prix_2019.parquet new file mode 100644 index 0000000000000000000000000000000000000000..40836c9de8a40aadcde3297b9ca7b375bbe85ebd --- /dev/null +++ b/data_output/prerace/prerace_chinese_grand_prix_2019.parquet @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:0c6c959b76cec945521ade773636ab645a52bb13c20d7f81d78d6a55ef89d388 +size 17184 diff --git a/data_output/prerace/prerace_chinese_grand_prix_2024.parquet b/data_output/prerace/prerace_chinese_grand_prix_2024.parquet new file mode 100644 index 0000000000000000000000000000000000000000..43694a8636040bb8a24ae270e91fd193ef4c7615 --- /dev/null +++ b/data_output/prerace/prerace_chinese_grand_prix_2024.parquet @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:973f0fabba6a60472dce40b79a6a0dbf62d4ce4ab68be21f39eb0362501cbeba +size 16881 diff --git a/data_output/prerace/prerace_chinese_grand_prix_2025.parquet b/data_output/prerace/prerace_chinese_grand_prix_2025.parquet new file mode 100644 index 0000000000000000000000000000000000000000..098d2b27a59c67a3a8807b3b4686cdfe6b88aa5a --- /dev/null +++ b/data_output/prerace/prerace_chinese_grand_prix_2025.parquet @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:cc2183a429b3639463551075093d9fca9c8dbadf80ea60b1a05d28768e294ca4 +size 16838 diff --git a/data_output/prerace/prerace_chinese_grand_prix_2026.parquet b/data_output/prerace/prerace_chinese_grand_prix_2026.parquet new file mode 100644 index 0000000000000000000000000000000000000000..8fa93b84e44f4ac13961aa8f49866ea70e037628 --- /dev/null +++ b/data_output/prerace/prerace_chinese_grand_prix_2026.parquet @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:04bd05158e01ec6d0d87780daeb4c061d33566b8d4655c9c0d25f7ac65384d26 +size 16975 diff --git a/data_output/prerace/prerace_dutch_grand_prix_2021.parquet b/data_output/prerace/prerace_dutch_grand_prix_2021.parquet new file mode 100644 index 0000000000000000000000000000000000000000..93ad03c2b9e0f1b790a91bdbedad9eff1f87b621 --- /dev/null +++ b/data_output/prerace/prerace_dutch_grand_prix_2021.parquet @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:3586897c83ae83d2612000cf6c35e63923c465b89a26411304464a527f5d5705 +size 17192 diff --git a/data_output/prerace/prerace_dutch_grand_prix_2022.parquet b/data_output/prerace/prerace_dutch_grand_prix_2022.parquet new file mode 100644 index 0000000000000000000000000000000000000000..798ea66fbc9e8ccd3cfccbb354b005c72de222f0 --- /dev/null +++ b/data_output/prerace/prerace_dutch_grand_prix_2022.parquet @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:6adef094eef6e5a81c552f6a62aecc3443306f4271d764319574688e78d6d7d1 +size 17137 diff --git a/data_output/prerace/prerace_dutch_grand_prix_2023.parquet b/data_output/prerace/prerace_dutch_grand_prix_2023.parquet new file mode 100644 index 0000000000000000000000000000000000000000..a0c6ea9f663c108023e7822d7b42884741624795 --- /dev/null +++ b/data_output/prerace/prerace_dutch_grand_prix_2023.parquet @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:bf7a07f86292844a14a88a8d57d9d7e0ac30f368a0318b6806355e987798707e +size 17147 diff --git a/data_output/prerace/prerace_dutch_grand_prix_2024.parquet b/data_output/prerace/prerace_dutch_grand_prix_2024.parquet new file mode 100644 index 0000000000000000000000000000000000000000..f0fdca1ff9638cb3e1d788146b2933ffccbf0d13 --- /dev/null +++ b/data_output/prerace/prerace_dutch_grand_prix_2024.parquet @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:daf05dd508588474f691b5dc81728be35e699468199a210efba2e8fb895f3a57 +size 17125 diff --git a/data_output/prerace/prerace_dutch_grand_prix_2025.parquet b/data_output/prerace/prerace_dutch_grand_prix_2025.parquet new file mode 100644 index 0000000000000000000000000000000000000000..810d928376063e08ca1494375911801937ce2b62 --- /dev/null +++ b/data_output/prerace/prerace_dutch_grand_prix_2025.parquet @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:f19af1c974a26ce68cba5c2a8ebb91c545457de67e9a57724898e78abde94a8e +size 17069 diff --git a/data_output/prerace/prerace_eifel_grand_prix_2020.parquet b/data_output/prerace/prerace_eifel_grand_prix_2020.parquet new file mode 100644 index 0000000000000000000000000000000000000000..1f6973ee9778f1c48e11881b8d03ae55b35daab0 --- /dev/null +++ b/data_output/prerace/prerace_eifel_grand_prix_2020.parquet @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:5bd1d906eac478fc2b75ed2c338cc60e24921d713abffa40a0864b6796b51e6a +size 17209 diff --git a/data_output/prerace/prerace_emilia_romagna_grand_2020.parquet b/data_output/prerace/prerace_emilia_romagna_grand_2020.parquet new file mode 100644 index 0000000000000000000000000000000000000000..f616a5a0edc86194e899d588748f9af0512fa1a8 --- /dev/null +++ b/data_output/prerace/prerace_emilia_romagna_grand_2020.parquet @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:e902499bbec04b7f7b5215995acf2eef19a2cd83ac06a15f6737ba9988d6a410 +size 16974 diff --git a/data_output/prerace/prerace_emilia_romagna_grand_2021.parquet b/data_output/prerace/prerace_emilia_romagna_grand_2021.parquet new file mode 100644 index 0000000000000000000000000000000000000000..a4a4f0cad56e879d6a30c1dbf3ab715737131a9e --- /dev/null +++ b/data_output/prerace/prerace_emilia_romagna_grand_2021.parquet @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:f77de33b3e5e5b88f045267ff650be47ec41ed349e1753dfb64ab03a3269e4da +size 17234 diff --git a/data_output/prerace/prerace_emilia_romagna_grand_2022.parquet b/data_output/prerace/prerace_emilia_romagna_grand_2022.parquet new file mode 100644 index 0000000000000000000000000000000000000000..f028ee603618f39feee24a3174aac847ed4e58dc --- /dev/null +++ b/data_output/prerace/prerace_emilia_romagna_grand_2022.parquet @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:3cedf99ed6ffb8e2bca64f24523ef3bfcbe317377d90d53b9b4ff5f11ef27153 +size 17175 diff --git a/data_output/prerace/prerace_emilia_romagna_grand_2024.parquet b/data_output/prerace/prerace_emilia_romagna_grand_2024.parquet new file mode 100644 index 0000000000000000000000000000000000000000..86460408b6419d78f0ed6aa75e4fdcf07812666a --- /dev/null +++ b/data_output/prerace/prerace_emilia_romagna_grand_2024.parquet @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:2b8eadf52a705c9d8bcd575d59f6f23313e1184de91a83961b0637dd4e790f3a +size 17194 diff --git a/data_output/prerace/prerace_emilia_romagna_grand_2025.parquet b/data_output/prerace/prerace_emilia_romagna_grand_2025.parquet new file mode 100644 index 0000000000000000000000000000000000000000..ac2309d8b84e1ba885f6ab88355346225d13d390 --- /dev/null +++ b/data_output/prerace/prerace_emilia_romagna_grand_2025.parquet @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:939b5d01343492218a1a128a14d3c592815a07bd54ad28e8505f5ceda8d27ae1 +size 17127 diff --git a/data_output/prerace/prerace_european_grand_prix_2016.parquet b/data_output/prerace/prerace_european_grand_prix_2016.parquet new file mode 100644 index 0000000000000000000000000000000000000000..55953c978dffe92dbac35ca80fdcf36f0575a083 --- /dev/null +++ b/data_output/prerace/prerace_european_grand_prix_2016.parquet @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:3f60ea36ec17f30a802ad56876a30ea6b6ef8519b31e61dd630e56e6fe1df6e1 +size 16182 diff --git a/data_output/prerace/prerace_french_grand_prix_2018.parquet b/data_output/prerace/prerace_french_grand_prix_2018.parquet new file mode 100644 index 0000000000000000000000000000000000000000..32f388be53ba897edbc9d9ce8d05ef79dd099786 --- /dev/null +++ b/data_output/prerace/prerace_french_grand_prix_2018.parquet @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:1d224eb272d82cc61afc90e1992d73d09a769e22db77595fb93fe7794c6c4bb3 +size 17142 diff --git a/data_output/prerace/prerace_french_grand_prix_2019.parquet b/data_output/prerace/prerace_french_grand_prix_2019.parquet new file mode 100644 index 0000000000000000000000000000000000000000..8a2209e42fb53af0493a1b861630f0196643ed4e --- /dev/null +++ b/data_output/prerace/prerace_french_grand_prix_2019.parquet @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:495b51988e18fc8fce1515100ac1d0e4822c27228423ebe1746c1d0719a4237f +size 17202 diff --git a/data_output/prerace/prerace_french_grand_prix_2021.parquet b/data_output/prerace/prerace_french_grand_prix_2021.parquet new file mode 100644 index 0000000000000000000000000000000000000000..aa034381fa40885dccbe99e4652b3a00002f3420 --- /dev/null +++ b/data_output/prerace/prerace_french_grand_prix_2021.parquet @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:9779b90bf96c6418909f737e9afb1ab3b4d0db95e9ef1f7fca37a01803e475bd +size 17217 diff --git a/data_output/prerace/prerace_french_grand_prix_2022.parquet b/data_output/prerace/prerace_french_grand_prix_2022.parquet new file mode 100644 index 0000000000000000000000000000000000000000..41d18701cc73ed0105398cbf2e2be6cb8d5918fa --- /dev/null +++ b/data_output/prerace/prerace_french_grand_prix_2022.parquet @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:7c0732d8d3ad91c8b517976973d81615e3a016ef78ab90dbae26154ba65d4dc0 +size 17156 diff --git a/data_output/prerace/prerace_german_grand_prix_2014.parquet b/data_output/prerace/prerace_german_grand_prix_2014.parquet new file mode 100644 index 0000000000000000000000000000000000000000..84981cb299967b81a03c699804ee9e8eb43f077c --- /dev/null +++ b/data_output/prerace/prerace_german_grand_prix_2014.parquet @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:83497ffbec111e5d6e1142eb61fbd81535e7bb89edbf7fbd18be858ebac2c86e +size 16200 diff --git a/data_output/prerace/prerace_german_grand_prix_2016.parquet b/data_output/prerace/prerace_german_grand_prix_2016.parquet new file mode 100644 index 0000000000000000000000000000000000000000..6fd2a07e9ec4932f536337667d0de37d5bec33c3 --- /dev/null +++ b/data_output/prerace/prerace_german_grand_prix_2016.parquet @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:2a9a4192efa90c8aa1e959a625bd1578bfcf39443f92e210e6245d50dfd8404a +size 16184 diff --git a/data_output/prerace/prerace_german_grand_prix_2018.parquet b/data_output/prerace/prerace_german_grand_prix_2018.parquet new file mode 100644 index 0000000000000000000000000000000000000000..2b4fb58e1a91a069ab125959295834003982c801 --- /dev/null +++ b/data_output/prerace/prerace_german_grand_prix_2018.parquet @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:f00f9e9e3149312ae9b1c91380424228413a05443e0bf798bdc2770d5e0b9390 +size 17080 diff --git a/data_output/prerace/prerace_german_grand_prix_2019.parquet b/data_output/prerace/prerace_german_grand_prix_2019.parquet new file mode 100644 index 0000000000000000000000000000000000000000..cc2059b17275aa8afcd45652cdeae272d967f8df --- /dev/null +++ b/data_output/prerace/prerace_german_grand_prix_2019.parquet @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:2b17364cf1d879f087fe12ba44c44061a559064ada363951c4774f0525758def +size 17166 diff --git a/data_output/prerace/prerace_hungarian_grand_prix_2014.parquet b/data_output/prerace/prerace_hungarian_grand_prix_2014.parquet new file mode 100644 index 0000000000000000000000000000000000000000..2f2553d355a78e3c3195d51993da26d70ee5d58e --- /dev/null +++ b/data_output/prerace/prerace_hungarian_grand_prix_2014.parquet @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:46a75935d1ee3e7de304fccfb470fb9960a6573761b20dfbb40bd5c7080502c8 +size 16212 diff --git a/data_output/prerace/prerace_hungarian_grand_prix_2015.parquet b/data_output/prerace/prerace_hungarian_grand_prix_2015.parquet new file mode 100644 index 0000000000000000000000000000000000000000..5c09c2e52f86829b70441005ac17cd67989279ec --- /dev/null +++ b/data_output/prerace/prerace_hungarian_grand_prix_2015.parquet @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:bedad91ff3c0cfc1911e4c2d3f31fe4f6d86cf91d782b99d62415face0a66218 +size 16096 diff --git a/data_output/prerace/prerace_hungarian_grand_prix_2016.parquet b/data_output/prerace/prerace_hungarian_grand_prix_2016.parquet new file mode 100644 index 0000000000000000000000000000000000000000..658271bcea5f9f5a7d9b70c40e3f0a9ac6525b0d --- /dev/null +++ b/data_output/prerace/prerace_hungarian_grand_prix_2016.parquet @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:1475cd0bc68c94e8dd65f6fcbcb6fc22cc9def1ed6f55b9a67887e93ba7217fb +size 16203 diff --git a/data_output/prerace/prerace_hungarian_grand_prix_2017.parquet b/data_output/prerace/prerace_hungarian_grand_prix_2017.parquet new file mode 100644 index 0000000000000000000000000000000000000000..187c34668472f8f78769789453464c8006874fcf --- /dev/null +++ b/data_output/prerace/prerace_hungarian_grand_prix_2017.parquet @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:527a45b35043b75332a498f4794ccce68b27ef059cfff41e3e3e339fee691c47 +size 16112 diff --git a/data_output/prerace/prerace_hungarian_grand_prix_2018.parquet b/data_output/prerace/prerace_hungarian_grand_prix_2018.parquet new file mode 100644 index 0000000000000000000000000000000000000000..84cbe4438c386996c510e45bd824632deb7a326a --- /dev/null +++ b/data_output/prerace/prerace_hungarian_grand_prix_2018.parquet @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:09ec64dec13c1d5414b14c8522773386e733dd4789e5c386a6b97b2f07f0cfbe +size 17207 diff --git a/data_output/prerace/prerace_hungarian_grand_prix_2019.parquet b/data_output/prerace/prerace_hungarian_grand_prix_2019.parquet new file mode 100644 index 0000000000000000000000000000000000000000..01bc61751eee5f79493c8a4430ea0b7f759656c4 --- /dev/null +++ b/data_output/prerace/prerace_hungarian_grand_prix_2019.parquet @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:f941558cfcae0f30ab6c572b0dc6870a82fbf780dd7dcc7fcb25b9ae7c584cac +size 17206 diff --git a/data_output/prerace/prerace_hungarian_grand_prix_2020.parquet b/data_output/prerace/prerace_hungarian_grand_prix_2020.parquet new file mode 100644 index 0000000000000000000000000000000000000000..009e40acd29b1922a4e760f15d575d154f7bed2f --- /dev/null +++ b/data_output/prerace/prerace_hungarian_grand_prix_2020.parquet @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:4c3da75eb6874fba1161563c0c841464dea77b032be907b3ed254d7b70e29594 +size 17216 diff --git a/data_output/prerace/prerace_hungarian_grand_prix_2021.parquet b/data_output/prerace/prerace_hungarian_grand_prix_2021.parquet new file mode 100644 index 0000000000000000000000000000000000000000..aaf6cd9d651bffc40fe942a43130d4f9d7551cea --- /dev/null +++ b/data_output/prerace/prerace_hungarian_grand_prix_2021.parquet @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:872057b3ade33d1725adcf216a6ef299fa89d109b06bfa4947a6b595dfb85a7e +size 17188 diff --git a/data_output/prerace/prerace_hungarian_grand_prix_2022.parquet b/data_output/prerace/prerace_hungarian_grand_prix_2022.parquet new file mode 100644 index 0000000000000000000000000000000000000000..18d0b89181ae4f3f61d9dde892d8fb5be57c958d --- /dev/null +++ b/data_output/prerace/prerace_hungarian_grand_prix_2022.parquet @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:e6a9e31ea86a70a5ddcc41e28521aeb8164df037015b2755760f2a8debe53abf +size 17183 diff --git a/data_output/prerace/prerace_hungarian_grand_prix_2023.parquet b/data_output/prerace/prerace_hungarian_grand_prix_2023.parquet new file mode 100644 index 0000000000000000000000000000000000000000..2a836396af9e61f8673903faf8e6182f872208ab --- /dev/null +++ b/data_output/prerace/prerace_hungarian_grand_prix_2023.parquet @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:aa00bf1b9dcd1eea29a48aa78c504dfcb7013614d0d6c41c720d11e14c71351c +size 17174 diff --git a/data_output/prerace/prerace_hungarian_grand_prix_2024.parquet b/data_output/prerace/prerace_hungarian_grand_prix_2024.parquet new file mode 100644 index 0000000000000000000000000000000000000000..508250456a82445f67c5191082808a574768057d --- /dev/null +++ b/data_output/prerace/prerace_hungarian_grand_prix_2024.parquet @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:d9e084ac98915940ab3232f3eac9ee6d80738c858b88c3dbe84c4ab9572773ff +size 17171 diff --git a/data_output/prerace/prerace_hungarian_grand_prix_2025.parquet b/data_output/prerace/prerace_hungarian_grand_prix_2025.parquet new file mode 100644 index 0000000000000000000000000000000000000000..3f4d24aefa0065d1f28ecc402c67c12abe5cd235 --- /dev/null +++ b/data_output/prerace/prerace_hungarian_grand_prix_2025.parquet @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:9ad1713284e98972478407d5a5e48058482c41a4ffdc7ba001a57d8cdcd420eb +size 17097 diff --git a/data_output/prerace/prerace_italian_grand_prix_2014.parquet b/data_output/prerace/prerace_italian_grand_prix_2014.parquet new file mode 100644 index 0000000000000000000000000000000000000000..c06bced4e3484969e8ff6feb9e286387a92ce0ab --- /dev/null +++ b/data_output/prerace/prerace_italian_grand_prix_2014.parquet @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:76c3d1f9211a5f6df45281a3232a29b9a5b1b801ff5c556dfc2a85c77f842114 +size 16204 diff --git a/data_output/prerace/prerace_italian_grand_prix_2015.parquet b/data_output/prerace/prerace_italian_grand_prix_2015.parquet new file mode 100644 index 0000000000000000000000000000000000000000..d6a88fd8d4d94bdefd892d874ed546523f155847 --- /dev/null +++ b/data_output/prerace/prerace_italian_grand_prix_2015.parquet @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:2621b8f04cc05b0efee561f8c4c0d9713bdb6049186c63de97e2119edef2df3e +size 16081 diff --git a/data_output/prerace/prerace_italian_grand_prix_2016.parquet b/data_output/prerace/prerace_italian_grand_prix_2016.parquet new file mode 100644 index 0000000000000000000000000000000000000000..6a93600ebb8b159a9614616a27ed1fc030780b09 --- /dev/null +++ b/data_output/prerace/prerace_italian_grand_prix_2016.parquet @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:b2ff8d2369c4f92f175ae1090573177730c621e009397248b696413f2a9e8ca5 +size 16167 diff --git a/data_output/prerace/prerace_italian_grand_prix_2017.parquet b/data_output/prerace/prerace_italian_grand_prix_2017.parquet new file mode 100644 index 0000000000000000000000000000000000000000..3f66a91e96deb920b2af225ba340311a80366873 --- /dev/null +++ b/data_output/prerace/prerace_italian_grand_prix_2017.parquet @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:fb8050bc26fbfe21994ca5ec29202ba9bb3dc8029a71c8a821797447ed7a7fbc +size 16122 diff --git a/data_output/prerace/prerace_italian_grand_prix_2018.parquet b/data_output/prerace/prerace_italian_grand_prix_2018.parquet new file mode 100644 index 0000000000000000000000000000000000000000..33b5d423b57b53a962759daeee61b45b56984ad2 --- /dev/null +++ b/data_output/prerace/prerace_italian_grand_prix_2018.parquet @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:e3da883f27b0225acc2a5ef4f3e4d7bd48c0ef5b27fee2cc91b17552b27b9ecd +size 17195 diff --git a/data_output/prerace/prerace_italian_grand_prix_2019.parquet b/data_output/prerace/prerace_italian_grand_prix_2019.parquet new file mode 100644 index 0000000000000000000000000000000000000000..4ac08f7e39990b4d1c82151be272472f748b71bd --- /dev/null +++ b/data_output/prerace/prerace_italian_grand_prix_2019.parquet @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:8cbc3deab59bf5fe8c14560c8589e7aeb3fb52702ceb087f9e9605e431c3e9eb +size 17211 diff --git a/data_output/prerace/prerace_italian_grand_prix_2020.parquet b/data_output/prerace/prerace_italian_grand_prix_2020.parquet new file mode 100644 index 0000000000000000000000000000000000000000..f488d5c52bfb34f42df3652d8285acb5707076ed --- /dev/null +++ b/data_output/prerace/prerace_italian_grand_prix_2020.parquet @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:6a9b16444217bda4239e6889364a2eb4e96ae8b5341d2458718035ef7953ba41 +size 17198 diff --git a/data_output/prerace/prerace_italian_grand_prix_2021.parquet b/data_output/prerace/prerace_italian_grand_prix_2021.parquet new file mode 100644 index 0000000000000000000000000000000000000000..fc5d64477a3b7a4ed640141100f39f9868fc4156 --- /dev/null +++ b/data_output/prerace/prerace_italian_grand_prix_2021.parquet @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:cb9051ec7b32bb0ab452b63168b2a2b38bad8c0e870c1c31bc0b474096d2633b +size 17211 diff --git a/data_output/prerace/prerace_italian_grand_prix_2022.parquet b/data_output/prerace/prerace_italian_grand_prix_2022.parquet new file mode 100644 index 0000000000000000000000000000000000000000..0672cf41077d638e63e21fdbd63adc15bc3b951f --- /dev/null +++ b/data_output/prerace/prerace_italian_grand_prix_2022.parquet @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:6fbacacf62988f7f810d00a52d35b3bdf69bbbedc2c6bdfc9c540d2f05983daf +size 17138 diff --git a/data_output/prerace/prerace_italian_grand_prix_2023.parquet b/data_output/prerace/prerace_italian_grand_prix_2023.parquet new file mode 100644 index 0000000000000000000000000000000000000000..b84c911744e062e9b788ac50674e2ea671421a6a --- /dev/null +++ b/data_output/prerace/prerace_italian_grand_prix_2023.parquet @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:f38cd8e726fb1b554030ae516919f7d5a47140f880ddae5ee3f68e9e7c435f3b +size 17168 diff --git a/data_output/prerace/prerace_italian_grand_prix_2024.parquet b/data_output/prerace/prerace_italian_grand_prix_2024.parquet new file mode 100644 index 0000000000000000000000000000000000000000..07289ed6092138b7a500265bcff324b7afe3c463 --- /dev/null +++ b/data_output/prerace/prerace_italian_grand_prix_2024.parquet @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:7bdf2a5e9bef9a387cf31b39921b1de962df23a6df047b16090e3a5d8bd1377d +size 17163 diff --git a/data_output/prerace/prerace_italian_grand_prix_2025.parquet b/data_output/prerace/prerace_italian_grand_prix_2025.parquet new file mode 100644 index 0000000000000000000000000000000000000000..5dd19f86cdb3612c667d6b3fa0bcd303c97b1ad0 --- /dev/null +++ b/data_output/prerace/prerace_italian_grand_prix_2025.parquet @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:b020e0619581dbc67ef74859c3038bed8b783d7c0e95b4197a15b592328391f9 +size 17107 diff --git a/data_output/prerace/prerace_japanese_grand_prix_2014.parquet b/data_output/prerace/prerace_japanese_grand_prix_2014.parquet new file mode 100644 index 0000000000000000000000000000000000000000..fba3a2f667e8909e0b9112ee1ca158742368af45 --- /dev/null +++ b/data_output/prerace/prerace_japanese_grand_prix_2014.parquet @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:7701022ad894e53dcb7cdcf937b4b8b30ba28826f1018607263c98949e03dd10 +size 16207 diff --git a/data_output/prerace/prerace_japanese_grand_prix_2015.parquet b/data_output/prerace/prerace_japanese_grand_prix_2015.parquet new file mode 100644 index 0000000000000000000000000000000000000000..3c406ee86bdb06debe8bda2ca72f3ee5bdf5a977 --- /dev/null +++ b/data_output/prerace/prerace_japanese_grand_prix_2015.parquet @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:5b0c1f4466bdae9bc853b5b504557dac9b63c357ec328556bebbeec7c6f4596e +size 16088 diff --git a/data_output/prerace/prerace_japanese_grand_prix_2016.parquet b/data_output/prerace/prerace_japanese_grand_prix_2016.parquet new file mode 100644 index 0000000000000000000000000000000000000000..a76512b242c98f817f6563614b65fbd8449e9518 --- /dev/null +++ b/data_output/prerace/prerace_japanese_grand_prix_2016.parquet @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:5663ecd2e5395469e34233ef8477d4d1b15bcf6b34ab11562947d13096ef414b +size 16172 diff --git a/data_output/prerace/prerace_japanese_grand_prix_2017.parquet b/data_output/prerace/prerace_japanese_grand_prix_2017.parquet new file mode 100644 index 0000000000000000000000000000000000000000..cb0f830425f1a66cbf4a57f86ba97f1f723c5941 --- /dev/null +++ b/data_output/prerace/prerace_japanese_grand_prix_2017.parquet @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:8c8e1d9d9691f9805cefe29ed5d6f865cbecbd1e9dc04a3f9378bb45e33d8652 +size 16092 diff --git a/data_output/prerace/prerace_japanese_grand_prix_2018.parquet b/data_output/prerace/prerace_japanese_grand_prix_2018.parquet new file mode 100644 index 0000000000000000000000000000000000000000..d65026c492af8fbe2317efff870229c9b4fbd6b2 --- /dev/null +++ b/data_output/prerace/prerace_japanese_grand_prix_2018.parquet @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:757e794f7b9ac0916974bc2d8cd3f46522c5cd07d42de3c177680dd8b7e8b544 +size 17185 diff --git a/data_output/prerace/prerace_japanese_grand_prix_2019.parquet b/data_output/prerace/prerace_japanese_grand_prix_2019.parquet new file mode 100644 index 0000000000000000000000000000000000000000..67bbcdaf9facd51ac403a40bcfb8b71f1f6806d6 --- /dev/null +++ b/data_output/prerace/prerace_japanese_grand_prix_2019.parquet @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:76768932c3f8bf5feda07eeaca6206b61257fe6338efb273d397b7b2245f4517 +size 16908 diff --git a/data_output/prerace/prerace_japanese_grand_prix_2022.parquet b/data_output/prerace/prerace_japanese_grand_prix_2022.parquet new file mode 100644 index 0000000000000000000000000000000000000000..8e5b9ca04653009643052f377a695bce99c4ea6c --- /dev/null +++ b/data_output/prerace/prerace_japanese_grand_prix_2022.parquet @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:94f7777b605a4f23dc99f1b990d8683eb1788ecb531991728ff1b6f54d70c634 +size 17177 diff --git a/data_output/prerace/prerace_japanese_grand_prix_2023.parquet b/data_output/prerace/prerace_japanese_grand_prix_2023.parquet new file mode 100644 index 0000000000000000000000000000000000000000..5cfb834f8254d4a8334cb1148c968a7e57faa2ca --- /dev/null +++ b/data_output/prerace/prerace_japanese_grand_prix_2023.parquet @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:14931b667d5b8f7598759fa7e4e7b86d9f7910c205e9d7b3ade8d54f19fdd232 +size 17181 diff --git a/data_output/prerace/prerace_japanese_grand_prix_2024.parquet b/data_output/prerace/prerace_japanese_grand_prix_2024.parquet new file mode 100644 index 0000000000000000000000000000000000000000..1e7b2b40f6aa93b0a1ca1e09a1d4dbf7d6e5fc2a --- /dev/null +++ b/data_output/prerace/prerace_japanese_grand_prix_2024.parquet @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:3efe07bdfa3ca86a5ccf6f0abd637a5927e7ca485cc62e138c0d51371dd7a6c6 +size 17161 diff --git a/data_output/prerace/prerace_japanese_grand_prix_2025.parquet b/data_output/prerace/prerace_japanese_grand_prix_2025.parquet new file mode 100644 index 0000000000000000000000000000000000000000..3b65d95b8070698e31beb873b3f28df85a098b7f --- /dev/null +++ b/data_output/prerace/prerace_japanese_grand_prix_2025.parquet @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:c4a8d5c8f108fc0867e224af09df56f5737e83319d1af3586e04d70ac1ed8312 +size 17092 diff --git a/data_output/prerace/prerace_japanese_grand_prix_2026.parquet b/data_output/prerace/prerace_japanese_grand_prix_2026.parquet new file mode 100644 index 0000000000000000000000000000000000000000..496878bb2e285be006f11412b88fb389a384a112 --- /dev/null +++ b/data_output/prerace/prerace_japanese_grand_prix_2026.parquet @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:1eba62ced391045856e374f26c36d939522d7b69474fc37246e2fc1b58a9ed2e +size 17237 diff --git a/data_output/prerace/prerace_las_vegas_grand_prix_2023.parquet b/data_output/prerace/prerace_las_vegas_grand_prix_2023.parquet new file mode 100644 index 0000000000000000000000000000000000000000..e1ac12626fb88091ffc1034a1adfb5656ecbf43a --- /dev/null +++ b/data_output/prerace/prerace_las_vegas_grand_prix_2023.parquet @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:c378ff2d3b487c168d4570a0aeb505bd834b127044eb7c3e4b2135dd4584eec3 +size 17190 diff --git a/data_output/prerace/prerace_las_vegas_grand_prix_2024.parquet b/data_output/prerace/prerace_las_vegas_grand_prix_2024.parquet new file mode 100644 index 0000000000000000000000000000000000000000..3d43f7da2f2ad621792cfd8b6195285e5c2c32f4 --- /dev/null +++ b/data_output/prerace/prerace_las_vegas_grand_prix_2024.parquet @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:55f2d187607f320d7786760e8aeeaf83e168c2972ce631e2606b4c89e40a0dca +size 17171 diff --git a/data_output/prerace/prerace_las_vegas_grand_prix_2025.parquet b/data_output/prerace/prerace_las_vegas_grand_prix_2025.parquet new file mode 100644 index 0000000000000000000000000000000000000000..91dbf4d035eebe76155987fb30e8a4a01f7e55a8 --- /dev/null +++ b/data_output/prerace/prerace_las_vegas_grand_prix_2025.parquet @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:95f2852920870c41fa592a809efe34a0494dfca4a06ede61a64dd2163ada2330 +size 17098 diff --git a/data_output/prerace/prerace_malaysian_grand_prix_2014.parquet b/data_output/prerace/prerace_malaysian_grand_prix_2014.parquet new file mode 100644 index 0000000000000000000000000000000000000000..082e2b59dba5a4f4c96394e137cba6e9730491e4 --- /dev/null +++ b/data_output/prerace/prerace_malaysian_grand_prix_2014.parquet @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:a98c11c3b104bf3961bdb0af10e14b7fac764cc9487c5e8d6d642be6434cf28d +size 16206 diff --git a/data_output/prerace/prerace_malaysian_grand_prix_2015.parquet b/data_output/prerace/prerace_malaysian_grand_prix_2015.parquet new file mode 100644 index 0000000000000000000000000000000000000000..5a82ba88a0890347aa4b932216c6badcf24adba0 --- /dev/null +++ b/data_output/prerace/prerace_malaysian_grand_prix_2015.parquet @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:d52244ec72b529b5791087a1902a605ba80fb2fa9cdfc0b7817449c8d9eaa765 +size 16072 diff --git a/data_output/prerace/prerace_malaysian_grand_prix_2016.parquet b/data_output/prerace/prerace_malaysian_grand_prix_2016.parquet new file mode 100644 index 0000000000000000000000000000000000000000..f2108888921e906683f3d193a0f7ea5a690f8da0 --- /dev/null +++ b/data_output/prerace/prerace_malaysian_grand_prix_2016.parquet @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:b45bca5ced43a0bb63e3d3350edd69dc2fac97964a0e460d9678d4b4d672c15a +size 16187 diff --git a/data_output/prerace/prerace_malaysian_grand_prix_2017.parquet b/data_output/prerace/prerace_malaysian_grand_prix_2017.parquet new file mode 100644 index 0000000000000000000000000000000000000000..bb731e6999227b58acb69468e4ba71d0fa8da921 --- /dev/null +++ b/data_output/prerace/prerace_malaysian_grand_prix_2017.parquet @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:13d797eabd660db389d4e615a5af150ff50a1754578ccf5d4e413522f38ff55d +size 16108 diff --git a/data_output/prerace/prerace_mexican_grand_prix_2015.parquet b/data_output/prerace/prerace_mexican_grand_prix_2015.parquet new file mode 100644 index 0000000000000000000000000000000000000000..f335b7755eb1eaa01ee67e757ce081e7bd25ac5d --- /dev/null +++ b/data_output/prerace/prerace_mexican_grand_prix_2015.parquet @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:01fb2a93e49290a1987c1385789a2a68dc1f35e12b0d07edf31d55ee8f445b0e +size 16073 diff --git a/data_output/prerace/prerace_mexican_grand_prix_2016.parquet b/data_output/prerace/prerace_mexican_grand_prix_2016.parquet new file mode 100644 index 0000000000000000000000000000000000000000..029ad80405db99c3b2064f98359fdbbdf20f8207 --- /dev/null +++ b/data_output/prerace/prerace_mexican_grand_prix_2016.parquet @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:92840cf27e08050bed8ce58001d81357c4fb1c041be6629aa91d5f4b6ba65113 +size 16158 diff --git a/data_output/prerace/prerace_mexican_grand_prix_2017.parquet b/data_output/prerace/prerace_mexican_grand_prix_2017.parquet new file mode 100644 index 0000000000000000000000000000000000000000..f79c1d1eb89e83481af3e9d98c5f2e6000066570 --- /dev/null +++ b/data_output/prerace/prerace_mexican_grand_prix_2017.parquet @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:60f7943bf15cd57f1b70a1dbecd02f43b39975c4ed0886d251130d49c2e90fec +size 16091 diff --git a/data_output/prerace/prerace_mexican_grand_prix_2018.parquet b/data_output/prerace/prerace_mexican_grand_prix_2018.parquet new file mode 100644 index 0000000000000000000000000000000000000000..e2b4837bb02ae1189f208bc38ecac2d365cfd1e9 --- /dev/null +++ b/data_output/prerace/prerace_mexican_grand_prix_2018.parquet @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:8c9ff7cad9ba0267f71176c46b1214f40482d4d22b06757e061edb320d458d2e +size 17184 diff --git a/data_output/prerace/prerace_mexican_grand_prix_2019.parquet b/data_output/prerace/prerace_mexican_grand_prix_2019.parquet new file mode 100644 index 0000000000000000000000000000000000000000..cd5155f193030f82483154ffc82ed3a680f196b5 --- /dev/null +++ b/data_output/prerace/prerace_mexican_grand_prix_2019.parquet @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:29f6c0366d2579e23b1f124f1bc83370b0c1c7caa493d901a76e027695314216 +size 17171 diff --git a/data_output/prerace/prerace_mexico_city_grand_pr_2021.parquet b/data_output/prerace/prerace_mexico_city_grand_pr_2021.parquet new file mode 100644 index 0000000000000000000000000000000000000000..fb06ebb80e561b41681f48107407d52e4788bcea --- /dev/null +++ b/data_output/prerace/prerace_mexico_city_grand_pr_2021.parquet @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:c3131e10ae044de472ff673159016619b4f0adb29678735416c7c83d69dd00a9 +size 17213 diff --git a/data_output/prerace/prerace_mexico_city_grand_pr_2022.parquet b/data_output/prerace/prerace_mexico_city_grand_pr_2022.parquet new file mode 100644 index 0000000000000000000000000000000000000000..1ddf063b9bd4a211aa3e419194b3682481343902 --- /dev/null +++ b/data_output/prerace/prerace_mexico_city_grand_pr_2022.parquet @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:1340e9ed6d7bf92b6dffba28a6020c52254a0fe5ba637d5e7e408b84d71e8af8 +size 17197 diff --git a/data_output/prerace/prerace_mexico_city_grand_pr_2023.parquet b/data_output/prerace/prerace_mexico_city_grand_pr_2023.parquet new file mode 100644 index 0000000000000000000000000000000000000000..a495bf73c10600854bfd30da9b2d37984c26fbec --- /dev/null +++ b/data_output/prerace/prerace_mexico_city_grand_pr_2023.parquet @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:050567c669b2b953034eaf386687d03d826898f6f931896820b6dcf802c5b642 +size 17190 diff --git a/data_output/prerace/prerace_mexico_city_grand_pr_2024.parquet b/data_output/prerace/prerace_mexico_city_grand_pr_2024.parquet new file mode 100644 index 0000000000000000000000000000000000000000..c5e3fd67ab5124f881dac1f5d35faf504401bba3 --- /dev/null +++ b/data_output/prerace/prerace_mexico_city_grand_pr_2024.parquet @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:a81a730d1bea4779111cbfdc56dec09a3aa52566fdb4f21d10283c3b079ad201 +size 17166 diff --git a/data_output/prerace/prerace_mexico_city_grand_pr_2025.parquet b/data_output/prerace/prerace_mexico_city_grand_pr_2025.parquet new file mode 100644 index 0000000000000000000000000000000000000000..1e9e70786a3b31da6dd874e4b5cf1c5a1bb34c05 --- /dev/null +++ b/data_output/prerace/prerace_mexico_city_grand_pr_2025.parquet @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:cefcfd8fcc9bd7c0cdfc583dfe6fe7b5688aa92bd015f7ca5d9d8c12610f95ff +size 17116 diff --git a/data_output/prerace/prerace_miami_grand_prix_2022.parquet b/data_output/prerace/prerace_miami_grand_prix_2022.parquet new file mode 100644 index 0000000000000000000000000000000000000000..780b7c7a9a9aa5e6c1a462dde2675f987f779842 --- /dev/null +++ b/data_output/prerace/prerace_miami_grand_prix_2022.parquet @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:d4390c7f106cc0cc72bb73ba3a940dd1cb751d5884f2e9d311625e0733ef2983 +size 17149 diff --git a/data_output/prerace/prerace_miami_grand_prix_2023.parquet b/data_output/prerace/prerace_miami_grand_prix_2023.parquet new file mode 100644 index 0000000000000000000000000000000000000000..69a305c63eb358bca64fb5eb1c253767e30ed8b7 --- /dev/null +++ b/data_output/prerace/prerace_miami_grand_prix_2023.parquet @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:53804ce3c40629908ae3b7937c7875630d2a6b930e937c2057d0270f8579d865 +size 17160 diff --git a/data_output/prerace/prerace_miami_grand_prix_2024.parquet b/data_output/prerace/prerace_miami_grand_prix_2024.parquet new file mode 100644 index 0000000000000000000000000000000000000000..933fca42215e083989ee028966fc57b56440a590 --- /dev/null +++ b/data_output/prerace/prerace_miami_grand_prix_2024.parquet @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:81aa781196737e6528aac92e1db5c816a4abe27d9ee78fd4b316a0908ad31663 +size 16874 diff --git a/data_output/prerace/prerace_miami_grand_prix_2025.parquet b/data_output/prerace/prerace_miami_grand_prix_2025.parquet new file mode 100644 index 0000000000000000000000000000000000000000..6c8dba88e03631755f0448038f76e582e4499706 --- /dev/null +++ b/data_output/prerace/prerace_miami_grand_prix_2025.parquet @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:0b22bb7b44b197cc90957fb93dc238e0c7dd1bf8f6a56bf3663f194fea6e37e0 +size 16811 diff --git a/data_output/prerace/prerace_miami_grand_prix_2026.parquet b/data_output/prerace/prerace_miami_grand_prix_2026.parquet new file mode 100644 index 0000000000000000000000000000000000000000..c211afc29f0219e283998578d96d77c2d81ec160 --- /dev/null +++ b/data_output/prerace/prerace_miami_grand_prix_2026.parquet @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:02ca3ac07aa664c698aece5181b588996891ddf20ea5400ae9f9bb0dbda39894 +size 16944 diff --git a/data_output/prerace/prerace_monaco_grand_prix_2014.parquet b/data_output/prerace/prerace_monaco_grand_prix_2014.parquet new file mode 100644 index 0000000000000000000000000000000000000000..720ec9b1d76d1800924ce848f809acff5e050df1 --- /dev/null +++ b/data_output/prerace/prerace_monaco_grand_prix_2014.parquet @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:c64083be30324a59993247f950678f336ed7529dda7455e769d3e94beb1fe84b +size 16200 diff --git a/data_output/prerace/prerace_monaco_grand_prix_2015.parquet b/data_output/prerace/prerace_monaco_grand_prix_2015.parquet new file mode 100644 index 0000000000000000000000000000000000000000..66fa70d5faa6155e2664c2c83291c262efbcb847 --- /dev/null +++ b/data_output/prerace/prerace_monaco_grand_prix_2015.parquet @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:2d12bbc78ed6ab69793e7d35f9779b8fc7d8b2caff118a26fdb99466114d6e47 +size 16070 diff --git a/data_output/prerace/prerace_monaco_grand_prix_2016.parquet b/data_output/prerace/prerace_monaco_grand_prix_2016.parquet new file mode 100644 index 0000000000000000000000000000000000000000..c3ef584fdbfe7081e23e391c21ec31a5812958e4 --- /dev/null +++ b/data_output/prerace/prerace_monaco_grand_prix_2016.parquet @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:f0903ccda593825cee3b84a7397de42b7557779bf7112de4f7a2a0c75c04f839 +size 16171 diff --git a/data_output/prerace/prerace_monaco_grand_prix_2017.parquet b/data_output/prerace/prerace_monaco_grand_prix_2017.parquet new file mode 100644 index 0000000000000000000000000000000000000000..211ef17c5f1e98beb9456964c94c94c6f20bd40f --- /dev/null +++ b/data_output/prerace/prerace_monaco_grand_prix_2017.parquet @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:e8e099140a9fc947f575cad8f3976e44a747170dc90805b11c2ee6a77eb7eb27 +size 16094 diff --git a/data_output/prerace/prerace_monaco_grand_prix_2018.parquet b/data_output/prerace/prerace_monaco_grand_prix_2018.parquet new file mode 100644 index 0000000000000000000000000000000000000000..ab4547a4a1f3d4dd4ac1d69dfe3405072a274388 --- /dev/null +++ b/data_output/prerace/prerace_monaco_grand_prix_2018.parquet @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:064c29a36d1ff691fa62bee99447c602a99b33f6944247d628b0113e5edc4e9e +size 17195 diff --git a/data_output/prerace/prerace_monaco_grand_prix_2019.parquet b/data_output/prerace/prerace_monaco_grand_prix_2019.parquet new file mode 100644 index 0000000000000000000000000000000000000000..6cfbfc1741f0ce1c9f6b1b95e1bd798f66639d01 --- /dev/null +++ b/data_output/prerace/prerace_monaco_grand_prix_2019.parquet @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:10ba448878b73f88c8c6b03d4badca5dbde8ac347296c7f7241fb32b779751c9 +size 17159 diff --git a/data_output/prerace/prerace_monaco_grand_prix_2021.parquet b/data_output/prerace/prerace_monaco_grand_prix_2021.parquet new file mode 100644 index 0000000000000000000000000000000000000000..9a8bb98d3a239cc4fb0b14e5ef92230821b34329 --- /dev/null +++ b/data_output/prerace/prerace_monaco_grand_prix_2021.parquet @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:eaed84dc5ef99c5fb7c648998c2fcbfeb3316646a39ea4736d7da9743456dab2 +size 17200 diff --git a/data_output/prerace/prerace_monaco_grand_prix_2022.parquet b/data_output/prerace/prerace_monaco_grand_prix_2022.parquet new file mode 100644 index 0000000000000000000000000000000000000000..e475d658a3bbc0eab0b410b12f08e781b0774dcd --- /dev/null +++ b/data_output/prerace/prerace_monaco_grand_prix_2022.parquet @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:c7c7fc88aaccfba2bfaa5f3b1355365446010c04432b13251485b9c5672bb36f +size 17165 diff --git a/data_output/prerace/prerace_monaco_grand_prix_2023.parquet b/data_output/prerace/prerace_monaco_grand_prix_2023.parquet new file mode 100644 index 0000000000000000000000000000000000000000..84dfa609dfc43d0d178d8f284447457586560314 --- /dev/null +++ b/data_output/prerace/prerace_monaco_grand_prix_2023.parquet @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:430114877680c282c50900a9f4e0b88c94c6a62b9f2702cf9b9a746bd300311b +size 17161 diff --git a/data_output/prerace/prerace_monaco_grand_prix_2024.parquet b/data_output/prerace/prerace_monaco_grand_prix_2024.parquet new file mode 100644 index 0000000000000000000000000000000000000000..7141bfe2dfe1d44fc10d6507abf8d254df39a736 --- /dev/null +++ b/data_output/prerace/prerace_monaco_grand_prix_2024.parquet @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:d01c8134deb36df40de7895b957291c7fe3483255eaf2fca927ebd76760bc3a2 +size 17160 diff --git a/data_output/prerace/prerace_monaco_grand_prix_2025.parquet b/data_output/prerace/prerace_monaco_grand_prix_2025.parquet new file mode 100644 index 0000000000000000000000000000000000000000..6f398b83003dcd76d31aa3b4928455f6f1632cbf --- /dev/null +++ b/data_output/prerace/prerace_monaco_grand_prix_2025.parquet @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:602ad06b99f30978d2f620be1e4bd8efe9ca3ad9ea9a986433bdcb96f194aa9c +size 17082 diff --git a/data_output/prerace/prerace_monaco_grand_prix_2026.parquet b/data_output/prerace/prerace_monaco_grand_prix_2026.parquet new file mode 100644 index 0000000000000000000000000000000000000000..5da264b47f8ddf6efc110aaa6a45ab0c8cbff7e4 --- /dev/null +++ b/data_output/prerace/prerace_monaco_grand_prix_2026.parquet @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:4d772d369da5460623efcebf205986702403e16d1b4971658170c64812247e55 +size 17224 diff --git a/data_output/prerace/prerace_portuguese_grand_pri_2020.parquet b/data_output/prerace/prerace_portuguese_grand_pri_2020.parquet new file mode 100644 index 0000000000000000000000000000000000000000..94f1d7a3dc1ee91935a1fcc5379a102bd353eb54 --- /dev/null +++ b/data_output/prerace/prerace_portuguese_grand_pri_2020.parquet @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:a93ab6188889ccfc9cd14010bae59fc13e614c61ee9e86c34e34d4630ac283c8 +size 17227 diff --git a/data_output/prerace/prerace_portuguese_grand_pri_2021.parquet b/data_output/prerace/prerace_portuguese_grand_pri_2021.parquet new file mode 100644 index 0000000000000000000000000000000000000000..be635ba74992ecadfe1896fecc6b9d8a81114398 --- /dev/null +++ b/data_output/prerace/prerace_portuguese_grand_pri_2021.parquet @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:82613852ad94db8efef51f4d7526a9cb6d7ce756acaef15116230c4a9aefb8fe +size 17207 diff --git a/data_output/prerace/prerace_qatar_grand_prix_2021.parquet b/data_output/prerace/prerace_qatar_grand_prix_2021.parquet new file mode 100644 index 0000000000000000000000000000000000000000..f84cc06e46c14157407b4f1d68cb859205f64389 --- /dev/null +++ b/data_output/prerace/prerace_qatar_grand_prix_2021.parquet @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:6a6edbc5dc21843a948d6221117b8177e1a66cffc6724ef5a2f47659c74ea4de +size 17176 diff --git a/data_output/prerace/prerace_qatar_grand_prix_2023.parquet b/data_output/prerace/prerace_qatar_grand_prix_2023.parquet new file mode 100644 index 0000000000000000000000000000000000000000..022fd25af045205bf9b9de64a1fde2ef324814e8 --- /dev/null +++ b/data_output/prerace/prerace_qatar_grand_prix_2023.parquet @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:7a6be8f7c5b2ef3dc9240cd55bf6f7e1ba02970e177df3455726546c5ff2d43a +size 16888 diff --git a/data_output/prerace/prerace_qatar_grand_prix_2024.parquet b/data_output/prerace/prerace_qatar_grand_prix_2024.parquet new file mode 100644 index 0000000000000000000000000000000000000000..a76c416f1535a1388047d1e61b8d820c31734a92 --- /dev/null +++ b/data_output/prerace/prerace_qatar_grand_prix_2024.parquet @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:f208e794b2129f4782680c80435df2c9198db31cc1175d85d3f50d53854dab33 +size 16887 diff --git a/data_output/prerace/prerace_qatar_grand_prix_2025.parquet b/data_output/prerace/prerace_qatar_grand_prix_2025.parquet new file mode 100644 index 0000000000000000000000000000000000000000..bafe7bbf655deced91bee667736c6c3791222f3b --- /dev/null +++ b/data_output/prerace/prerace_qatar_grand_prix_2025.parquet @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:4088036f861e183f8de088313c4087b55e2af5e452464320e8a3936ab8329088 +size 16824 diff --git a/data_output/prerace/prerace_russian_grand_prix_2014.parquet b/data_output/prerace/prerace_russian_grand_prix_2014.parquet new file mode 100644 index 0000000000000000000000000000000000000000..1a6e19914d15b925e86a4340e59fb5603e150f4e --- /dev/null +++ b/data_output/prerace/prerace_russian_grand_prix_2014.parquet @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:1f74c459568d204ebaae8ab5cf61695f66fbcde645cb5f96f7102a753e8a9036 +size 16164 diff --git a/data_output/prerace/prerace_russian_grand_prix_2015.parquet b/data_output/prerace/prerace_russian_grand_prix_2015.parquet new file mode 100644 index 0000000000000000000000000000000000000000..f1135b107309bf7443c4a4f67b1fbbabc2fc5493 --- /dev/null +++ b/data_output/prerace/prerace_russian_grand_prix_2015.parquet @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:8ffe1371ab13fbf92fb7e5c36b41ff22ac76a77f25bece658bb29b01c57078d0 +size 16051 diff --git a/data_output/prerace/prerace_russian_grand_prix_2016.parquet b/data_output/prerace/prerace_russian_grand_prix_2016.parquet new file mode 100644 index 0000000000000000000000000000000000000000..5de9270ca60d1a691ad60dd60df9068fef465ef9 --- /dev/null +++ b/data_output/prerace/prerace_russian_grand_prix_2016.parquet @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:b4360b7797e2e380a798e7edda87ebe23da35d7f7a488c1bb589f638fa15b725 +size 16177 diff --git a/data_output/prerace/prerace_russian_grand_prix_2017.parquet b/data_output/prerace/prerace_russian_grand_prix_2017.parquet new file mode 100644 index 0000000000000000000000000000000000000000..d030b14060288160a5b5c329dba152b37ab14605 --- /dev/null +++ b/data_output/prerace/prerace_russian_grand_prix_2017.parquet @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:cef7b2ed364e6f66b9a1cc391cecdafdc6935bdede328031a89482e420351a06 +size 16099 diff --git a/data_output/prerace/prerace_russian_grand_prix_2018.parquet b/data_output/prerace/prerace_russian_grand_prix_2018.parquet new file mode 100644 index 0000000000000000000000000000000000000000..d5b64cb4c6688ff930055f65fb17652d8303e7d6 --- /dev/null +++ b/data_output/prerace/prerace_russian_grand_prix_2018.parquet @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:7ea14dd63bbced9b8819ca926deceafdfb5a2e6312eb63e291f2ee95434490c5 +size 17188 diff --git a/data_output/prerace/prerace_russian_grand_prix_2019.parquet b/data_output/prerace/prerace_russian_grand_prix_2019.parquet new file mode 100644 index 0000000000000000000000000000000000000000..484f824026a214c7620bac91d42e121ca4e56a98 --- /dev/null +++ b/data_output/prerace/prerace_russian_grand_prix_2019.parquet @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:4b961889dd4d62846ce550881a70c2bd375e50a083c4bca82a5010ef7baa24d5 +size 17179 diff --git a/data_output/prerace/prerace_russian_grand_prix_2020.parquet b/data_output/prerace/prerace_russian_grand_prix_2020.parquet new file mode 100644 index 0000000000000000000000000000000000000000..afdcc6e66beffcbcd8151d7b0dbbc1900f981a28 --- /dev/null +++ b/data_output/prerace/prerace_russian_grand_prix_2020.parquet @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:5a202c47aec6af009da573aa7bbe450d8c52eea5380d4adca8d1e11ab6ca1485 +size 17201 diff --git a/data_output/prerace/prerace_russian_grand_prix_2021.parquet b/data_output/prerace/prerace_russian_grand_prix_2021.parquet new file mode 100644 index 0000000000000000000000000000000000000000..456b98b0cdb42af7cbd22b901810b711bc24db42 --- /dev/null +++ b/data_output/prerace/prerace_russian_grand_prix_2021.parquet @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:f2faa02b4174223820c643413e2db4566ac7cc14277867cc6f8c27eb1b7cc421 +size 16950 diff --git a/data_output/prerace/prerace_sakhir_grand_prix_2020.parquet b/data_output/prerace/prerace_sakhir_grand_prix_2020.parquet new file mode 100644 index 0000000000000000000000000000000000000000..32404bf65c7d47a06845fcabae065823cf57232b --- /dev/null +++ b/data_output/prerace/prerace_sakhir_grand_prix_2020.parquet @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:b9aacd35a775a9b5ce38e340b8976f5055dd92a0858bb360e6c83b89013ba3a1 +size 17180 diff --git a/data_output/prerace/prerace_saudi_arabian_grand__2021.parquet b/data_output/prerace/prerace_saudi_arabian_grand__2021.parquet new file mode 100644 index 0000000000000000000000000000000000000000..9165d90b6d0c7cba416ab843c37b776581dba39e --- /dev/null +++ b/data_output/prerace/prerace_saudi_arabian_grand__2021.parquet @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:2a84da32c2cf770c563071a51ba0dc90998e3fb2647894ec3587fb3abe6b83b7 +size 17253 diff --git a/data_output/prerace/prerace_saudi_arabian_grand__2022.parquet b/data_output/prerace/prerace_saudi_arabian_grand__2022.parquet new file mode 100644 index 0000000000000000000000000000000000000000..61aee9e5da475f1331f66fdc76ca68e9b9911566 --- /dev/null +++ b/data_output/prerace/prerace_saudi_arabian_grand__2022.parquet @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:07295b147cb930803ce9b938acadea6c9f56e2fe6c8824dfa4dc9bb9733b492b +size 17176 diff --git a/data_output/prerace/prerace_saudi_arabian_grand__2023.parquet b/data_output/prerace/prerace_saudi_arabian_grand__2023.parquet new file mode 100644 index 0000000000000000000000000000000000000000..c05b0028a391524bdfca1f4405a99b433993d372 --- /dev/null +++ b/data_output/prerace/prerace_saudi_arabian_grand__2023.parquet @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:51f9f58a1bd63ec619b3e5dd3495dde9fce575b02fb8afaa9d9f5167d628b018 +size 17177 diff --git a/data_output/prerace/prerace_saudi_arabian_grand__2024.parquet b/data_output/prerace/prerace_saudi_arabian_grand__2024.parquet new file mode 100644 index 0000000000000000000000000000000000000000..e7695c7d6ad692c899f57509b59f916f903316df --- /dev/null +++ b/data_output/prerace/prerace_saudi_arabian_grand__2024.parquet @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:e67d7c023177a0aac93e3ad3636ccaf7fb50be972bc4efab66fa4cbc104c1624 +size 17188 diff --git a/data_output/prerace/prerace_saudi_arabian_grand__2025.parquet b/data_output/prerace/prerace_saudi_arabian_grand__2025.parquet new file mode 100644 index 0000000000000000000000000000000000000000..17e70a2905f4f6e9b345e3e40f2ca55ca8dccbe3 --- /dev/null +++ b/data_output/prerace/prerace_saudi_arabian_grand__2025.parquet @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:97348385e40fb67f1616c78c9478562c810f1d0e5c3f07d30ae8112a717484bb +size 17136 diff --git a/data_output/prerace/prerace_singapore_grand_prix_2014.parquet b/data_output/prerace/prerace_singapore_grand_prix_2014.parquet new file mode 100644 index 0000000000000000000000000000000000000000..f03c26b4362adcc84fcd47a495730f17e24d3d72 --- /dev/null +++ b/data_output/prerace/prerace_singapore_grand_prix_2014.parquet @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:51d0f87eaad0116013deefe850887fb283385e0a5f67ffb334636070d8ce3630 +size 16223 diff --git a/data_output/prerace/prerace_singapore_grand_prix_2015.parquet b/data_output/prerace/prerace_singapore_grand_prix_2015.parquet new file mode 100644 index 0000000000000000000000000000000000000000..e148a86646e0f4c0b5874bf4fa92c4cf51cc0569 --- /dev/null +++ b/data_output/prerace/prerace_singapore_grand_prix_2015.parquet @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:7939ebf32b91986fb4deaca9fb00f457987928a09461649cf672f8cb5778edbd +size 16087 diff --git a/data_output/prerace/prerace_singapore_grand_prix_2016.parquet b/data_output/prerace/prerace_singapore_grand_prix_2016.parquet new file mode 100644 index 0000000000000000000000000000000000000000..c7fc2ae6514539046a96a54c1cb94e8621b3ecec --- /dev/null +++ b/data_output/prerace/prerace_singapore_grand_prix_2016.parquet @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:d41c52b00af21975f3d68be15afb5ad90e5d92ccca4dc94771e09e6648c31971 +size 16198 diff --git a/data_output/prerace/prerace_singapore_grand_prix_2017.parquet b/data_output/prerace/prerace_singapore_grand_prix_2017.parquet new file mode 100644 index 0000000000000000000000000000000000000000..b72b310b8768362045aa10d253b0060bce91d149 --- /dev/null +++ b/data_output/prerace/prerace_singapore_grand_prix_2017.parquet @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:a11795f1beb3d32ef1a15870823ca18721427da074169e1113ebcfa13e284aa0 +size 16119 diff --git a/data_output/prerace/prerace_singapore_grand_prix_2018.parquet b/data_output/prerace/prerace_singapore_grand_prix_2018.parquet new file mode 100644 index 0000000000000000000000000000000000000000..8352f453c726913545755984c79da6311f0952b4 --- /dev/null +++ b/data_output/prerace/prerace_singapore_grand_prix_2018.parquet @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:706a9017d3893b7ebcbecf94ce800d7ecd37505ca0db45da44e8b9529c348450 +size 17204 diff --git a/data_output/prerace/prerace_singapore_grand_prix_2019.parquet b/data_output/prerace/prerace_singapore_grand_prix_2019.parquet new file mode 100644 index 0000000000000000000000000000000000000000..d82eb86eb58a1eb1e8bd604b5a34500018e90e6c --- /dev/null +++ b/data_output/prerace/prerace_singapore_grand_prix_2019.parquet @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:c009afaa93666f6b301fbe9b6e12996e7f6e4d78b457fd40fdb684e259f3d699 +size 17189 diff --git a/data_output/prerace/prerace_singapore_grand_prix_2022.parquet b/data_output/prerace/prerace_singapore_grand_prix_2022.parquet new file mode 100644 index 0000000000000000000000000000000000000000..c596eae79e09b581aaf4246b29b29a3b16c1e5e1 --- /dev/null +++ b/data_output/prerace/prerace_singapore_grand_prix_2022.parquet @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:3f6a21938fe866328793d7af4652b8304a9efaeed55adbdf46cd5dcfa06b69bf +size 17182 diff --git a/data_output/prerace/prerace_singapore_grand_prix_2023.parquet b/data_output/prerace/prerace_singapore_grand_prix_2023.parquet new file mode 100644 index 0000000000000000000000000000000000000000..db6c3825824e1b63627529d9345c494a0b4b753e --- /dev/null +++ b/data_output/prerace/prerace_singapore_grand_prix_2023.parquet @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:aca8715b1c3e3bcc52fa733d5d31386d7dba660effbb7798bd04323866ba019b +size 17168 diff --git a/data_output/prerace/prerace_singapore_grand_prix_2024.parquet b/data_output/prerace/prerace_singapore_grand_prix_2024.parquet new file mode 100644 index 0000000000000000000000000000000000000000..a3d2c3393f4bf5ae0c450972784d93b3c45daaff --- /dev/null +++ b/data_output/prerace/prerace_singapore_grand_prix_2024.parquet @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:23112e3d76c993cd08a3f2a72fea609a3fe91afa5e6782434661531741ed8939 +size 17161 diff --git a/data_output/prerace/prerace_singapore_grand_prix_2025.parquet b/data_output/prerace/prerace_singapore_grand_prix_2025.parquet new file mode 100644 index 0000000000000000000000000000000000000000..9ade083e2daf855e7f2aa0d63ee675602ad2151f --- /dev/null +++ b/data_output/prerace/prerace_singapore_grand_prix_2025.parquet @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:ea8512a4540970ebece30c2b7279f92afe2cb096f886111b7d001dd5f29a787a +size 17107 diff --git a/data_output/prerace/prerace_spanish_grand_prix_2014.parquet b/data_output/prerace/prerace_spanish_grand_prix_2014.parquet new file mode 100644 index 0000000000000000000000000000000000000000..7597fba500dc66346a480da701cbee40e3236dda --- /dev/null +++ b/data_output/prerace/prerace_spanish_grand_prix_2014.parquet @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:4fd5847641b35d56a7384b689b08fb38d22dbd884a1391b5064595e589025096 +size 16203 diff --git a/data_output/prerace/prerace_spanish_grand_prix_2015.parquet b/data_output/prerace/prerace_spanish_grand_prix_2015.parquet new file mode 100644 index 0000000000000000000000000000000000000000..01c2586be4442b56ae789a572609466d4ceb01fe --- /dev/null +++ b/data_output/prerace/prerace_spanish_grand_prix_2015.parquet @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:949a647ed7e9378f417e92af280af262e23a394122562328609ed0d82b6cb35a +size 16083 diff --git a/data_output/prerace/prerace_spanish_grand_prix_2016.parquet b/data_output/prerace/prerace_spanish_grand_prix_2016.parquet new file mode 100644 index 0000000000000000000000000000000000000000..0e8787da7452f184d31c37198284ee8c851440a2 --- /dev/null +++ b/data_output/prerace/prerace_spanish_grand_prix_2016.parquet @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:198c26b385490f1c2467ed25117d1704d22020f5419eddc9b2d89c936c293e95 +size 16181 diff --git a/data_output/prerace/prerace_spanish_grand_prix_2017.parquet b/data_output/prerace/prerace_spanish_grand_prix_2017.parquet new file mode 100644 index 0000000000000000000000000000000000000000..678dc50a0a8771b576256375a55dc959183f3498 --- /dev/null +++ b/data_output/prerace/prerace_spanish_grand_prix_2017.parquet @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:43386e97c3350176a32a4e41cd9089fbe252d4f97b56aa3dd368cda112b5f66a +size 16099 diff --git a/data_output/prerace/prerace_spanish_grand_prix_2018.parquet b/data_output/prerace/prerace_spanish_grand_prix_2018.parquet new file mode 100644 index 0000000000000000000000000000000000000000..2fa4e27f4b22a2b1e4c1ded1c29be062f138c00d --- /dev/null +++ b/data_output/prerace/prerace_spanish_grand_prix_2018.parquet @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:d43bf2036a5fa3a43e6e596e588277c707e632556354d66454baa7810d7f9304 +size 17166 diff --git a/data_output/prerace/prerace_spanish_grand_prix_2019.parquet b/data_output/prerace/prerace_spanish_grand_prix_2019.parquet new file mode 100644 index 0000000000000000000000000000000000000000..09b97456c78a794fcafc78986043533d504b39e3 --- /dev/null +++ b/data_output/prerace/prerace_spanish_grand_prix_2019.parquet @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:3854b6a853ac1f9b2c77e0f9b1c99725134c15c13297274e21d6355254bcc662 +size 17176 diff --git a/data_output/prerace/prerace_spanish_grand_prix_2020.parquet b/data_output/prerace/prerace_spanish_grand_prix_2020.parquet new file mode 100644 index 0000000000000000000000000000000000000000..19a453332be1453d94b9b9c36677924c2747b481 --- /dev/null +++ b/data_output/prerace/prerace_spanish_grand_prix_2020.parquet @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:9f36fa0b666fee9a3c737bd0e28a50b9dfa5d1ddea38570d25121f99cc7eb312 +size 17192 diff --git a/data_output/prerace/prerace_spanish_grand_prix_2021.parquet b/data_output/prerace/prerace_spanish_grand_prix_2021.parquet new file mode 100644 index 0000000000000000000000000000000000000000..ee6bc73cf7a0e3a2fe3c7eba57e6647767ba4fc9 --- /dev/null +++ b/data_output/prerace/prerace_spanish_grand_prix_2021.parquet @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:3c3c84995d63fbbbc92c6c7df7aa8faa32ed6f59cc70430d32d49e736357ceb3 +size 17210 diff --git a/data_output/prerace/prerace_spanish_grand_prix_2022.parquet b/data_output/prerace/prerace_spanish_grand_prix_2022.parquet new file mode 100644 index 0000000000000000000000000000000000000000..2cc8a1494e80b6ddf6cc1630cda5a1e10573c44d --- /dev/null +++ b/data_output/prerace/prerace_spanish_grand_prix_2022.parquet @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:d71a03672a6de72ab8c1382c17baef2fc166954077eb6804d930e9df9686d08b +size 17182 diff --git a/data_output/prerace/prerace_spanish_grand_prix_2023.parquet b/data_output/prerace/prerace_spanish_grand_prix_2023.parquet new file mode 100644 index 0000000000000000000000000000000000000000..c0c5b52745515c1bb3b3effbbfb56630d9168811 --- /dev/null +++ b/data_output/prerace/prerace_spanish_grand_prix_2023.parquet @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:613dc871d26d4a5658ba12cbca376e5c5f0aa403b7ac7d7ed48626d9a0e95f26 +size 17191 diff --git a/data_output/prerace/prerace_spanish_grand_prix_2024.parquet b/data_output/prerace/prerace_spanish_grand_prix_2024.parquet new file mode 100644 index 0000000000000000000000000000000000000000..76e95da653398f37518c63c743adf1a1518ba332 --- /dev/null +++ b/data_output/prerace/prerace_spanish_grand_prix_2024.parquet @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:8e562894db722e9f5bb6e56859905b824ab1bb1017439fd72bb9bcf0d7140be4 +size 17167 diff --git a/data_output/prerace/prerace_spanish_grand_prix_2025.parquet b/data_output/prerace/prerace_spanish_grand_prix_2025.parquet new file mode 100644 index 0000000000000000000000000000000000000000..e902c84f42eb604140d32bfe3fe62dd8c964c28b --- /dev/null +++ b/data_output/prerace/prerace_spanish_grand_prix_2025.parquet @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:54c30e03222e06c50fe0f2ecc531271c388ebf9a1dee1ca2e322eb440c7e8100 +size 17098 diff --git a/data_output/prerace/prerace_styrian_grand_prix_2020.parquet b/data_output/prerace/prerace_styrian_grand_prix_2020.parquet new file mode 100644 index 0000000000000000000000000000000000000000..2f321f68ac0d9c169ad12a262141a059caa87c7c --- /dev/null +++ b/data_output/prerace/prerace_styrian_grand_prix_2020.parquet @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:ff22f002ce47c84dd0a435a350c14ce6dbead8ade9b01261876a3ea9c47ae93e +size 16930 diff --git a/data_output/prerace/prerace_styrian_grand_prix_2021.parquet b/data_output/prerace/prerace_styrian_grand_prix_2021.parquet new file mode 100644 index 0000000000000000000000000000000000000000..8a63a91b0969f045134993d5da63d2b17c630859 --- /dev/null +++ b/data_output/prerace/prerace_styrian_grand_prix_2021.parquet @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:eced418a476a32a11387a644dd5d7721fdef47a1a655c690af4411fb7b65e521 +size 17202 diff --git "a/data_output/prerace/prerace_s\303\243o_paulo_grand_prix_2021.parquet" "b/data_output/prerace/prerace_s\303\243o_paulo_grand_prix_2021.parquet" new file mode 100644 index 0000000000000000000000000000000000000000..9a74d09618c09808113a51d99812baebd2324f85 --- /dev/null +++ "b/data_output/prerace/prerace_s\303\243o_paulo_grand_prix_2021.parquet" @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:ac26dde3ff264042679f5ac46008c5cef73e45efa5aac9a35f0c594e70e92732 +size 17191 diff --git "a/data_output/prerace/prerace_s\303\243o_paulo_grand_prix_2022.parquet" "b/data_output/prerace/prerace_s\303\243o_paulo_grand_prix_2022.parquet" new file mode 100644 index 0000000000000000000000000000000000000000..a9208a3c946f8160d4afd45de4ae07fbae02fa22 --- /dev/null +++ "b/data_output/prerace/prerace_s\303\243o_paulo_grand_prix_2022.parquet" @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:24152f6fe130abfc04225df2513cd56fb1f3e6d4b6feb24e725acf4a76da52fb +size 17176 diff --git "a/data_output/prerace/prerace_s\303\243o_paulo_grand_prix_2023.parquet" "b/data_output/prerace/prerace_s\303\243o_paulo_grand_prix_2023.parquet" new file mode 100644 index 0000000000000000000000000000000000000000..ad9f30d31e871228605391246e1eb7463c16f5c0 --- /dev/null +++ "b/data_output/prerace/prerace_s\303\243o_paulo_grand_prix_2023.parquet" @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:5c786a4b34ac6b89c830804017d45acb3d4ed7e095607d4575e53a466523e9b3 +size 16878 diff --git "a/data_output/prerace/prerace_s\303\243o_paulo_grand_prix_2024.parquet" "b/data_output/prerace/prerace_s\303\243o_paulo_grand_prix_2024.parquet" new file mode 100644 index 0000000000000000000000000000000000000000..de5bb3ff9787f3d380fbed6d3878ae3bc0c66aa7 --- /dev/null +++ "b/data_output/prerace/prerace_s\303\243o_paulo_grand_prix_2024.parquet" @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:d1cf67ff6c6c3b8110cd237e14805805862213dbfc60e2773b3275ec1af85725 +size 16903 diff --git "a/data_output/prerace/prerace_s\303\243o_paulo_grand_prix_2025.parquet" "b/data_output/prerace/prerace_s\303\243o_paulo_grand_prix_2025.parquet" new file mode 100644 index 0000000000000000000000000000000000000000..d299523b4cd211ba26ecfdd2c66803568f237af2 --- /dev/null +++ "b/data_output/prerace/prerace_s\303\243o_paulo_grand_prix_2025.parquet" @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:9f4acaa6c754dc559cc0f9df2a14495f4457903e64574ac2bd3efcad26e38dfc +size 16833 diff --git a/data_output/prerace/prerace_turkish_grand_prix_2020.parquet b/data_output/prerace/prerace_turkish_grand_prix_2020.parquet new file mode 100644 index 0000000000000000000000000000000000000000..8fe780b9571bbf809d76606aa3cf81797d9c764a --- /dev/null +++ b/data_output/prerace/prerace_turkish_grand_prix_2020.parquet @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:abd786967ef7c26dc77f6adf07c6107c73d9690b368b81f474db6ab69a0b8402 +size 17208 diff --git a/data_output/prerace/prerace_turkish_grand_prix_2021.parquet b/data_output/prerace/prerace_turkish_grand_prix_2021.parquet new file mode 100644 index 0000000000000000000000000000000000000000..0770ac2bc1105bd0ecbc60b142eea80246db3858 --- /dev/null +++ b/data_output/prerace/prerace_turkish_grand_prix_2021.parquet @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:f3772d86814e1b7ebf5e66b4a49c5afbed09797b8eefeccaec99154b08d6ebb3 +size 17214 diff --git a/data_output/prerace/prerace_tuscan_grand_prix_2020.parquet b/data_output/prerace/prerace_tuscan_grand_prix_2020.parquet new file mode 100644 index 0000000000000000000000000000000000000000..27f6e410d0a27d534bb65b1044a731f046bc79b4 --- /dev/null +++ b/data_output/prerace/prerace_tuscan_grand_prix_2020.parquet @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:b7ca67563452db09deaa00ad69244d2acfb3eba4fa798bb0678107884be55442 +size 17217 diff --git a/data_output/prerace/prerace_united_states_grand__2014.parquet b/data_output/prerace/prerace_united_states_grand__2014.parquet new file mode 100644 index 0000000000000000000000000000000000000000..e9fa74d31e00d7761c26e66d1f551768084202df --- /dev/null +++ b/data_output/prerace/prerace_united_states_grand__2014.parquet @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:7fdc947f72399f959f4bc23b4359ed730db9a9bf89f0404881f979c0e2f06886 +size 16048 diff --git a/data_output/prerace/prerace_united_states_grand__2015.parquet b/data_output/prerace/prerace_united_states_grand__2015.parquet new file mode 100644 index 0000000000000000000000000000000000000000..5962179a5e6a3b3a1f2a3a97b7e4b010d7e1b987 --- /dev/null +++ b/data_output/prerace/prerace_united_states_grand__2015.parquet @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:1b333f0ee4aff99d201f685a72aeeda486b7cd626cc6cdf0e0c3137301c78be7 +size 16100 diff --git a/data_output/prerace/prerace_united_states_grand__2016.parquet b/data_output/prerace/prerace_united_states_grand__2016.parquet new file mode 100644 index 0000000000000000000000000000000000000000..78645798d71a1e87b91e9e4cdd2a0096e25557ed --- /dev/null +++ b/data_output/prerace/prerace_united_states_grand__2016.parquet @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:d529b766c58fc8497bd38f0ddfc562b4a5b8936db62c4dc44fac2db8ba5ee20d +size 16242 diff --git a/data_output/prerace/prerace_united_states_grand__2017.parquet b/data_output/prerace/prerace_united_states_grand__2017.parquet new file mode 100644 index 0000000000000000000000000000000000000000..7b80a21616a629a87dd0086d14abf772ad274ffc --- /dev/null +++ b/data_output/prerace/prerace_united_states_grand__2017.parquet @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:52b0bd02a6bbee98cc925ef8abb8b41888ef4c27c7cffd4ffd11df9447ec4e28 +size 16157 diff --git a/data_output/prerace/prerace_united_states_grand__2018.parquet b/data_output/prerace/prerace_united_states_grand__2018.parquet new file mode 100644 index 0000000000000000000000000000000000000000..1ffd4f01f7bafc7a24c41d53fa94b6a815bd48bf --- /dev/null +++ b/data_output/prerace/prerace_united_states_grand__2018.parquet @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:a4cad3c7eeaa6e1f64a78de11adef4bc54a5a258812d8a9db35714204447dd3f +size 17219 diff --git a/data_output/prerace/prerace_united_states_grand__2019.parquet b/data_output/prerace/prerace_united_states_grand__2019.parquet new file mode 100644 index 0000000000000000000000000000000000000000..0bf4f82e8489cc2e2f2964ca6aa86b51b68f394a --- /dev/null +++ b/data_output/prerace/prerace_united_states_grand__2019.parquet @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:a5e9f421447199134789a83eb1afefbc768576325cad6dc647bd5f53c0322d64 +size 17223 diff --git a/data_output/prerace/prerace_united_states_grand__2021.parquet b/data_output/prerace/prerace_united_states_grand__2021.parquet new file mode 100644 index 0000000000000000000000000000000000000000..58d0c9a596c94e7aaf4627f726eda19bcf8b72af --- /dev/null +++ b/data_output/prerace/prerace_united_states_grand__2021.parquet @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:15607967acef59beef97e654cdb1a6b665fcf589c318273473fbad3502c8d788 +size 17231 diff --git a/data_output/prerace/prerace_united_states_grand__2022.parquet b/data_output/prerace/prerace_united_states_grand__2022.parquet new file mode 100644 index 0000000000000000000000000000000000000000..0e957ba2c73d73ac05d3fe7ede85cbaec1496e9e --- /dev/null +++ b/data_output/prerace/prerace_united_states_grand__2022.parquet @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:4353724672b7dc19dc3488d72e9f25c25cdf03dee23c6265e3a7fc59e093f3c3 +size 17203 diff --git a/data_output/prerace/prerace_united_states_grand__2023.parquet b/data_output/prerace/prerace_united_states_grand__2023.parquet new file mode 100644 index 0000000000000000000000000000000000000000..166a2d7380a2a8e9c4ff3205791f2c3282e885c4 --- /dev/null +++ b/data_output/prerace/prerace_united_states_grand__2023.parquet @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:e130f8502052ba0115087deb5b3ba67a0cbc6e1ef5f6a83a30afcaa516acf7ab +size 16939 diff --git a/data_output/prerace/prerace_united_states_grand__2024.parquet b/data_output/prerace/prerace_united_states_grand__2024.parquet new file mode 100644 index 0000000000000000000000000000000000000000..26ed55e3c33a1d6a7d2f12f45586b0a9ae557f27 --- /dev/null +++ b/data_output/prerace/prerace_united_states_grand__2024.parquet @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:a0b6b92139b4b972eb7fde352dce7076cf0fda5287f79db724fd419207bb43cd +size 16920 diff --git a/data_output/prerace/prerace_united_states_grand__2025.parquet b/data_output/prerace/prerace_united_states_grand__2025.parquet new file mode 100644 index 0000000000000000000000000000000000000000..b7f08432863ad3f980d936e9064f02728459fc5a --- /dev/null +++ b/data_output/prerace/prerace_united_states_grand__2025.parquet @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:8736a88a3b6b03fbd00a070578edbb1e5ddcb1805a8ad352e008dc9ac5e29478 +size 16850 diff --git a/ml/feature_engineering.py b/ml/feature_engineering.py index 1afdb0a2eaa102879ded3ecd50a469ef3fbc25d3..265d0ccee28d060c4d499dd06a6ba08b4c47594d 100644 --- a/ml/feature_engineering.py +++ b/ml/feature_engineering.py @@ -37,6 +37,8 @@ BASE_REQUIRED_COLUMNS = { SECTOR_COLUMNS = ["sector_1_time", "sector_2_time", "sector_3_time"] NUMERIC_FEATURES = [ + # ── Pre-race features only ── + # Grid & qualifying "season", "grid_position", "sector_1_time", @@ -46,17 +48,18 @@ NUMERIC_FEATURES = [ "sector_2_time_era_norm", "sector_3_time_era_norm", "avg_lap_time_practice", - "tire_compound", - "tire_age_laps", - "fresh_tire", - "pit_stop_count", - "team_pit_speed", - "weather_temp_track", - "weather_rainfall", + # Driver & championship context "championship_standing", "driver_form_last3", + # Circuit context "safety_car_probability", "telemetry_available", + "pole_conversion_rate", + # Driver experience + "career_race_starts", + # NOTE: Race-day features removed (tire_compound, tire_age_laps, + # fresh_tire, pit_stop_count, team_pit_speed, weather_temp_track, + # weather_rainfall) — these cause data leakage for pre-race predictions. ] CATEGORICAL_FEATURES = ["team", "track_type", "regulation_era"] @@ -68,6 +71,14 @@ LEAKAGE_COLUMNS = { "driver_id", "circuit_id", TARGET_COLUMN, + # Race-day features that we don't have before the race + "tire_compound", + "tire_age_laps", + "fresh_tire", + "pit_stop_count", + "team_pit_speed", + "weather_temp_track", + "weather_rainfall", } EXCLUDED_FEATURE_COLUMNS = LEAKAGE_COLUMNS | {"round"} @@ -294,7 +305,7 @@ def prepare_model_data( metadata_columns = [ column - for column in ["season", "round", "driver_id", "driver_name", "team"] + for column in ["season", "round", "driver_id", "driver_name", "team", "grid_position", "quali_status"] if column in prepared.columns ] metadata = prepared[metadata_columns].copy() diff --git a/mlruns/0/meta.yaml b/mlruns/0/meta.yaml index acbf0143851e09c3af14f4620cfe9a7cb1e3b0a1..67a7e1ec1e8914d9d1ce772c836fc96cb521af43 100644 --- a/mlruns/0/meta.yaml +++ b/mlruns/0/meta.yaml @@ -1,4 +1,4 @@ -artifact_location: file:///C:/Users/Lenovo/OneDrive/Desktop/kronector/mlruns/0 +artifact_location: file:///D:/kronector/mlruns/0 creation_time: 1780335696379 experiment_id: '0' last_update_time: 1780335696379 diff --git a/mlruns/563634279953604033/14ea1b6adfc148b99eada74d20d3267a/meta.yaml b/mlruns/563634279953604033/14ea1b6adfc148b99eada74d20d3267a/meta.yaml index cf19ba22a28f564da752b7c045c5d7785310c665..daec85074ea859a25a74e75edbca7f6448a06078 100644 --- a/mlruns/563634279953604033/14ea1b6adfc148b99eada74d20d3267a/meta.yaml +++ b/mlruns/563634279953604033/14ea1b6adfc148b99eada74d20d3267a/meta.yaml @@ -1,4 +1,4 @@ -artifact_uri: file:///C:/Users/Lenovo/OneDrive/Desktop/kronector/mlruns/563634279953604033/14ea1b6adfc148b99eada74d20d3267a/artifacts +artifact_uri: file:///D:/kronector/mlruns/563634279953604033/14ea1b6adfc148b99eada74d20d3267a/artifacts end_time: 1780694959793 entry_point_name: '' experiment_id: '563634279953604033' diff --git a/mlruns/563634279953604033/251301396e4b4b36aaebf7104169c07d/meta.yaml b/mlruns/563634279953604033/251301396e4b4b36aaebf7104169c07d/meta.yaml index 946cebd313c193376d84c3c2a722d7c63d83fd9a..22966f96f9230e09d25923b3dada951ee7a89837 100644 --- a/mlruns/563634279953604033/251301396e4b4b36aaebf7104169c07d/meta.yaml +++ b/mlruns/563634279953604033/251301396e4b4b36aaebf7104169c07d/meta.yaml @@ -1,4 +1,4 @@ -artifact_uri: file:///C:/Users/Lenovo/OneDrive/Desktop/kronector/mlruns/563634279953604033/251301396e4b4b36aaebf7104169c07d/artifacts +artifact_uri: file:///D:/kronector/mlruns/563634279953604033/251301396e4b4b36aaebf7104169c07d/artifacts end_time: 1780413140448 entry_point_name: '' experiment_id: '563634279953604033' diff --git a/mlruns/563634279953604033/a23e869ad4fe4cfc8e693fdf555a3656/meta.yaml b/mlruns/563634279953604033/a23e869ad4fe4cfc8e693fdf555a3656/meta.yaml index b0006602d8cec5f856c258f7ebbab34ab0cdf5bc..85aa3fe4d7e04961fe679559e33f79586efad5c8 100644 --- a/mlruns/563634279953604033/a23e869ad4fe4cfc8e693fdf555a3656/meta.yaml +++ b/mlruns/563634279953604033/a23e869ad4fe4cfc8e693fdf555a3656/meta.yaml @@ -1,4 +1,4 @@ -artifact_uri: file:///C:/Users/Lenovo/OneDrive/Desktop/kronector/mlruns/563634279953604033/a23e869ad4fe4cfc8e693fdf555a3656/artifacts +artifact_uri: file:///D:/kronector/mlruns/563634279953604033/a23e869ad4fe4cfc8e693fdf555a3656/artifacts end_time: 1780413028062 entry_point_name: '' experiment_id: '563634279953604033' diff --git a/mlruns/563634279953604033/b5a67c7560a145eabdd30172823109d0/meta.yaml b/mlruns/563634279953604033/b5a67c7560a145eabdd30172823109d0/meta.yaml index 15e80106b94bd6824c4a2bc2433346d8080acd97..84942a066d81fced91cb6d65806bee42f710946d 100644 --- a/mlruns/563634279953604033/b5a67c7560a145eabdd30172823109d0/meta.yaml +++ b/mlruns/563634279953604033/b5a67c7560a145eabdd30172823109d0/meta.yaml @@ -1,4 +1,4 @@ -artifact_uri: file:///C:/Users/Lenovo/OneDrive/Desktop/kronector/mlruns/563634279953604033/b5a67c7560a145eabdd30172823109d0/artifacts +artifact_uri: file:///D:/kronector/mlruns/563634279953604033/b5a67c7560a145eabdd30172823109d0/artifacts end_time: 1780338452247 entry_point_name: '' experiment_id: '563634279953604033' diff --git a/mlruns/563634279953604033/b5d33fd8abaa4cc9a0c7e4af95c34ba5/meta.yaml b/mlruns/563634279953604033/b5d33fd8abaa4cc9a0c7e4af95c34ba5/meta.yaml index d5a06e2f188f00cf22424bcaece6df882591091f..ce96f4b360899315725d329e3430bb0f23075c03 100644 --- a/mlruns/563634279953604033/b5d33fd8abaa4cc9a0c7e4af95c34ba5/meta.yaml +++ b/mlruns/563634279953604033/b5d33fd8abaa4cc9a0c7e4af95c34ba5/meta.yaml @@ -1,4 +1,4 @@ -artifact_uri: file:///C:/Users/Lenovo/OneDrive/Desktop/kronector/mlruns/563634279953604033/b5d33fd8abaa4cc9a0c7e4af95c34ba5/artifacts +artifact_uri: file:///D:/kronector/mlruns/563634279953604033/b5d33fd8abaa4cc9a0c7e4af95c34ba5/artifacts end_time: 1780335720950 entry_point_name: '' experiment_id: '563634279953604033' diff --git a/mlruns/563634279953604033/c5b8dd75484f403090aebb2d1ce01f7c/meta.yaml b/mlruns/563634279953604033/c5b8dd75484f403090aebb2d1ce01f7c/meta.yaml index d5eaaf18a5e13fe3c20d3c5bba4fe0f12b8689f5..87a6b784e9222c8b1a06551d0cda679b1981cd05 100644 --- a/mlruns/563634279953604033/c5b8dd75484f403090aebb2d1ce01f7c/meta.yaml +++ b/mlruns/563634279953604033/c5b8dd75484f403090aebb2d1ce01f7c/meta.yaml @@ -1,4 +1,4 @@ -artifact_uri: file:///C:/Users/Lenovo/OneDrive/Desktop/kronector/mlruns/563634279953604033/c5b8dd75484f403090aebb2d1ce01f7c/artifacts +artifact_uri: file:///D:/kronector/mlruns/563634279953604033/c5b8dd75484f403090aebb2d1ce01f7c/artifacts end_time: 1780413773673 entry_point_name: '' experiment_id: '563634279953604033' diff --git a/mlruns/563634279953604033/meta.yaml b/mlruns/563634279953604033/meta.yaml index 3fd58da05e3dcb9494e0b32987ce53aece9a0e5a..46fed1c519271756fdc2bda4eeaa028501ee2c94 100644 --- a/mlruns/563634279953604033/meta.yaml +++ b/mlruns/563634279953604033/meta.yaml @@ -1,4 +1,4 @@ -artifact_location: file:///C:/Users/Lenovo/OneDrive/Desktop/kronector/mlruns/563634279953604033 +artifact_location: file:///D:/kronector/mlruns/563634279953604033 creation_time: 1780335696401 experiment_id: '563634279953604033' last_update_time: 1780335696401 diff --git a/mlruns/563634279953604033/models/m-23eb08e0b8dc498581085e63240b3b75/meta.yaml b/mlruns/563634279953604033/models/m-23eb08e0b8dc498581085e63240b3b75/meta.yaml index eaad9bbfc6d228651cbd93607402c541c9468cbe..63b1cf3751a49cbc091311d09289201f528f6f78 100644 --- a/mlruns/563634279953604033/models/m-23eb08e0b8dc498581085e63240b3b75/meta.yaml +++ b/mlruns/563634279953604033/models/m-23eb08e0b8dc498581085e63240b3b75/meta.yaml @@ -1,4 +1,4 @@ -artifact_location: file:///C:/Users/Lenovo/OneDrive/Desktop/kronector/mlruns/563634279953604033/models/m-23eb08e0b8dc498581085e63240b3b75/artifacts +artifact_location: file:///D:/kronector/mlruns/563634279953604033/models/m-23eb08e0b8dc498581085e63240b3b75/artifacts creation_timestamp: 1780413761613 experiment_id: '563634279953604033' last_updated_timestamp: 1780413767383 diff --git a/mlruns/563634279953604033/models/m-41d554b096e24e229538a591a98dedbb/meta.yaml b/mlruns/563634279953604033/models/m-41d554b096e24e229538a591a98dedbb/meta.yaml index 69c16441b6b8cc05e67047ef8d9e4481df4b873b..608f3b1387f603da05436b562231a8d940e2eb76 100644 --- a/mlruns/563634279953604033/models/m-41d554b096e24e229538a591a98dedbb/meta.yaml +++ b/mlruns/563634279953604033/models/m-41d554b096e24e229538a591a98dedbb/meta.yaml @@ -1,4 +1,4 @@ -artifact_location: file:///C:/Users/Lenovo/OneDrive/Desktop/kronector/mlruns/563634279953604033/models/m-41d554b096e24e229538a591a98dedbb/artifacts +artifact_location: file:///D:/kronector/mlruns/563634279953604033/models/m-41d554b096e24e229538a591a98dedbb/artifacts creation_timestamp: 1780694940333 experiment_id: '563634279953604033' last_updated_timestamp: 1780694951944 diff --git a/mlruns/563634279953604033/models/m-6c6d818ed4634c2c83dea47f178d7ad5/meta.yaml b/mlruns/563634279953604033/models/m-6c6d818ed4634c2c83dea47f178d7ad5/meta.yaml index 02c053746f96e48b945ffe2558872f021455a014..2b55afaaea2fe9c0bf548edc8c5436d4e51c4873 100644 --- a/mlruns/563634279953604033/models/m-6c6d818ed4634c2c83dea47f178d7ad5/meta.yaml +++ b/mlruns/563634279953604033/models/m-6c6d818ed4634c2c83dea47f178d7ad5/meta.yaml @@ -1,4 +1,4 @@ -artifact_location: file:///C:/Users/Lenovo/OneDrive/Desktop/kronector/mlruns/563634279953604033/models/m-6c6d818ed4634c2c83dea47f178d7ad5/artifacts +artifact_location: file:///D:/kronector/mlruns/563634279953604033/models/m-6c6d818ed4634c2c83dea47f178d7ad5/artifacts creation_timestamp: 1780413111868 experiment_id: '563634279953604033' last_updated_timestamp: 1780413140304 diff --git a/mlruns/563634279953604033/models/m-9588d06eca6642f5813cd365b7e7f2ad/meta.yaml b/mlruns/563634279953604033/models/m-9588d06eca6642f5813cd365b7e7f2ad/meta.yaml index bf1f60c96ef089e03d740a99754e458fbcaa91bf..d11eec2f15b37c2991db1b5cdeea37d54b9075fa 100644 --- a/mlruns/563634279953604033/models/m-9588d06eca6642f5813cd365b7e7f2ad/meta.yaml +++ b/mlruns/563634279953604033/models/m-9588d06eca6642f5813cd365b7e7f2ad/meta.yaml @@ -1,4 +1,4 @@ -artifact_location: file:///C:/Users/Lenovo/OneDrive/Desktop/kronector/mlruns/563634279953604033/models/m-9588d06eca6642f5813cd365b7e7f2ad/artifacts +artifact_location: file:///D:/kronector/mlruns/563634279953604033/models/m-9588d06eca6642f5813cd365b7e7f2ad/artifacts creation_timestamp: 1780338438637 experiment_id: '563634279953604033' last_updated_timestamp: 1780338449397 diff --git a/mlruns/563634279953604033/models/m-9ccb50fc4f504f84a30ce9c85c0f1e43/meta.yaml b/mlruns/563634279953604033/models/m-9ccb50fc4f504f84a30ce9c85c0f1e43/meta.yaml index 1bda47828129242cd19abcf8a9e015b1ef59343d..f341fa37643535d68f62e1b3e75519c84dba0f92 100644 --- a/mlruns/563634279953604033/models/m-9ccb50fc4f504f84a30ce9c85c0f1e43/meta.yaml +++ b/mlruns/563634279953604033/models/m-9ccb50fc4f504f84a30ce9c85c0f1e43/meta.yaml @@ -1,4 +1,4 @@ -artifact_location: file:///C:/Users/Lenovo/OneDrive/Desktop/kronector/mlruns/563634279953604033/models/m-9ccb50fc4f504f84a30ce9c85c0f1e43/artifacts +artifact_location: file:///D:/kronector/mlruns/563634279953604033/models/m-9ccb50fc4f504f84a30ce9c85c0f1e43/artifacts creation_timestamp: 1780413012263 experiment_id: '563634279953604033' last_updated_timestamp: 1780413027973 diff --git a/mlruns/563634279953604033/models/m-c332c58e6c0345aa848e92ec6f3248d1/meta.yaml b/mlruns/563634279953604033/models/m-c332c58e6c0345aa848e92ec6f3248d1/meta.yaml index 99328797354e48dae375eabacb25ba1c6c3827ad..2799900848d1220b2803c969b412786eec2f8f37 100644 --- a/mlruns/563634279953604033/models/m-c332c58e6c0345aa848e92ec6f3248d1/meta.yaml +++ b/mlruns/563634279953604033/models/m-c332c58e6c0345aa848e92ec6f3248d1/meta.yaml @@ -1,4 +1,4 @@ -artifact_location: file:///C:/Users/Lenovo/OneDrive/Desktop/kronector/mlruns/563634279953604033/models/m-c332c58e6c0345aa848e92ec6f3248d1/artifacts +artifact_location: file:///D:/kronector/mlruns/563634279953604033/models/m-c332c58e6c0345aa848e92ec6f3248d1/artifacts creation_timestamp: 1780335699973 experiment_id: '563634279953604033' last_updated_timestamp: 1780335714288 diff --git a/mlruns/models/kronector-f1-lgbm/meta.yaml b/mlruns/models/kronector-f1-lgbm/meta.yaml index 07c02b861470d39a7a71772496be69d45906267c..589f13baf70b9ef387930c69aa92db3cc0e2556f 100644 --- a/mlruns/models/kronector-f1-lgbm/meta.yaml +++ b/mlruns/models/kronector-f1-lgbm/meta.yaml @@ -3,6 +3,6 @@ creation_timestamp: 1780335714328 deployment_job_id: null deployment_job_state: null description: null -last_updated_timestamp: 1780694952047 +last_updated_timestamp: 1780900238236 name: kronector-f1-lgbm workspace: default diff --git a/mlruns/models/kronector-f1-lgbm/version-1/meta.yaml b/mlruns/models/kronector-f1-lgbm/version-1/meta.yaml index 91619aa624183437dc8d91f951491f3bbef73262..b203360df618f8f7e7e23e925c1c75426cfc54aa 100644 --- a/mlruns/models/kronector-f1-lgbm/version-1/meta.yaml +++ b/mlruns/models/kronector-f1-lgbm/version-1/meta.yaml @@ -10,7 +10,7 @@ run_link: null source: models:/m-c332c58e6c0345aa848e92ec6f3248d1 status: READY status_message: null -storage_location: file:///C:/Users/Lenovo/OneDrive/Desktop/kronector/mlruns/563634279953604033/models/m-c332c58e6c0345aa848e92ec6f3248d1/artifacts +storage_location: file:///D:/kronector/mlruns/563634279953604033/models/m-c332c58e6c0345aa848e92ec6f3248d1/artifacts user_id: null version: 1 workspace: default diff --git a/mlruns/models/kronector-f1-lgbm/version-2/meta.yaml b/mlruns/models/kronector-f1-lgbm/version-2/meta.yaml index 3bb22fd58ce4e77e892cba64f578e1286445f9e3..7210dff13db41fcd04de05c67befdb2ba0d92f3e 100644 --- a/mlruns/models/kronector-f1-lgbm/version-2/meta.yaml +++ b/mlruns/models/kronector-f1-lgbm/version-2/meta.yaml @@ -10,7 +10,7 @@ run_link: null source: models:/m-9588d06eca6642f5813cd365b7e7f2ad status: READY status_message: null -storage_location: file:///C:/Users/Lenovo/OneDrive/Desktop/kronector/mlruns/563634279953604033/models/m-9588d06eca6642f5813cd365b7e7f2ad/artifacts +storage_location: file:///D:/kronector/mlruns/563634279953604033/models/m-9588d06eca6642f5813cd365b7e7f2ad/artifacts user_id: null version: 2 workspace: default diff --git a/mlruns/models/kronector-f1-lgbm/version-3/meta.yaml b/mlruns/models/kronector-f1-lgbm/version-3/meta.yaml index a63864c47ff6ce51e794d7d957e049f1af3f9532..c471a4507013aacf59175a22ba8b0ca9df3b690b 100644 --- a/mlruns/models/kronector-f1-lgbm/version-3/meta.yaml +++ b/mlruns/models/kronector-f1-lgbm/version-3/meta.yaml @@ -10,7 +10,7 @@ run_link: null source: models:/m-23eb08e0b8dc498581085e63240b3b75 status: READY status_message: null -storage_location: file:///C:/Users/Lenovo/OneDrive/Desktop/kronector/mlruns/563634279953604033/models/m-23eb08e0b8dc498581085e63240b3b75/artifacts +storage_location: file:///D:/kronector/mlruns/563634279953604033/models/m-23eb08e0b8dc498581085e63240b3b75/artifacts user_id: null version: 3 workspace: default diff --git a/mlruns/models/kronector-f1-lgbm/version-4/meta.yaml b/mlruns/models/kronector-f1-lgbm/version-4/meta.yaml index 1451a9a6891130c109d4bbf60bd767274a5dd935..c5947e7e671cad0c90574e173eb5d26293d726b9 100644 --- a/mlruns/models/kronector-f1-lgbm/version-4/meta.yaml +++ b/mlruns/models/kronector-f1-lgbm/version-4/meta.yaml @@ -10,7 +10,7 @@ run_link: null source: models:/m-41d554b096e24e229538a591a98dedbb status: READY status_message: null -storage_location: file:///C:/Users/Lenovo/OneDrive/Desktop/kronector/mlruns/563634279953604033/models/m-41d554b096e24e229538a591a98dedbb/artifacts +storage_location: file:///D:/kronector/mlruns/563634279953604033/models/m-41d554b096e24e229538a591a98dedbb/artifacts user_id: null version: 4 workspace: default diff --git a/run_api.py b/run_api.py index 8b6b7e48ed63a105b1ea9eb694efc05e2cf0defb..50635fe0602ff03661aaf6dd123223363a281a00 100644 --- a/run_api.py +++ b/run_api.py @@ -16,9 +16,12 @@ else: # Start uvicorn if __name__ == "__main__": import uvicorn + port = int(os.getenv("PORT", 8080)) + print(f" Starting on http://127.0.0.1:{port}") uvicorn.run( "api.main:app", host="127.0.0.1", - port=8000, + port=port, reload=False, ) + diff --git a/scratch.py b/scratch.py new file mode 100644 index 0000000000000000000000000000000000000000..df5404db4e4d1035050ba8e33eb833e0bcf5f4f2 --- /dev/null +++ b/scratch.py @@ -0,0 +1,9 @@ +import fastf1 +from data.fastf1_pipeline import enable_cache + +enable_cache() +session = fastf1.get_session(2026, 1, 'Q') +session.load(laps=True, telemetry=False, weather=False, messages=False) + +if session.results is not None: + print(session.results[['Abbreviation', 'Status']].head(22)) diff --git a/scratch2.py b/scratch2.py new file mode 100644 index 0000000000000000000000000000000000000000..54226b56b3ce4702faedbce1713c6056488c61a2 --- /dev/null +++ b/scratch2.py @@ -0,0 +1,7 @@ +import fastf1 +from data.fastf1_pipeline import enable_cache +enable_cache() +s = fastf1.get_session(2021, 'Monaco', 'Q') +s.load(laps=True, telemetry=False, weather=False, messages=False) +print(s.results.columns) +print(s.results[s.results['Abbreviation'] == 'LEC']) diff --git a/scripts/add_pole_conversion.py b/scripts/add_pole_conversion.py new file mode 100644 index 0000000000000000000000000000000000000000..24265a18a9c14399fc150d8121dbf90df8defae1 --- /dev/null +++ b/scripts/add_pole_conversion.py @@ -0,0 +1,32 @@ +"""One-off script to add pole_conversion_rate to the existing historical parquet.""" +import pandas as pd +import numpy as np + +df = pd.read_parquet("data_output/fastf1_races.parquet") +print(f"Loaded {len(df)} rows") + +# Compute pole conversion rate per circuit +completed = df.dropna(subset=["finish_position"]).copy() +poles = completed[completed["grid_position"] == 1].copy() +poles["pole_won"] = (poles["finish_position"] == 1).astype(int) +pcr = ( + poles.groupby("circuit_id")["pole_won"] + .mean() + .reset_index() + .rename(columns={"pole_won": "pole_conversion_rate"}) +) + +print("\nPole conversion rates:") +for _, row in pcr.sort_values("pole_conversion_rate", ascending=False).iterrows(): + circuit = row["circuit_id"] + rate = row["pole_conversion_rate"] + print(f" {circuit:30s} {rate:.1%}") + +# Merge onto main df +if "pole_conversion_rate" in df.columns: + df = df.drop(columns=["pole_conversion_rate"]) +df = df.merge(pcr, on="circuit_id", how="left") +df["pole_conversion_rate"] = df["pole_conversion_rate"].fillna(0.5) + +df.to_parquet("data_output/fastf1_races.parquet", index=False) +print(f"\nSaved with pole_conversion_rate — {len(df)} rows") diff --git a/scripts/build_prerace_rows.py b/scripts/build_prerace_rows.py new file mode 100644 index 0000000000000000000000000000000000000000..f69c331dbd94f7586275bcfa92f7caaa3e5de161 --- /dev/null +++ b/scripts/build_prerace_rows.py @@ -0,0 +1,323 @@ +""" +KRONECTOR — Pre-Race Prediction Data Builder +============================================= +Builds prediction rows for an UPCOMING race using: + - Qualifying sector times + grid positions (from FastF1 qualifying session) + - Practice avg lap times (FP2/FP3) + - Driver form from existing historical parquet + - Championship standings from existing historical parquet + +This allows predictions BEFORE the race happens, using only qualifying data. + +Usage: + python -m scripts.build_prerace_rows --season 2026 --round 7 --output data_output/prerace_monaco_2026.parquet + python -m scripts.build_prerace_rows --season 2026 --round 7 # saves to data_output/fastf1_races.parquet as temp rows +""" + +import argparse +import logging +import os +import sys +from pathlib import Path + +import numpy as np +import pandas as pd +import fastf1 + +import builtins +import requests +import urllib3 +builtins.RequestsCookieJar = requests.cookies.RequestsCookieJar +builtins.HTTPAdapter = requests.adapters.HTTPAdapter +builtins.Retry = urllib3.util.Retry + +sys.path.insert(0, str(Path(__file__).resolve().parent.parent)) + +from data.fastf1_pipeline import enable_cache, fetch_qualifying, fetch_practice + +logger = logging.getLogger(__name__) +logging.basicConfig( + level=logging.INFO, + format="%(asctime)s | %(name)s | %(levelname)s | %(message)s", +) + + +def fetch_grid_from_qualifying(season: int, round_num: int) -> pd.DataFrame | None: + """ + Load the qualifying session and extract grid positions + sector times. + Uses lightweight load (laps only, no telemetry/weather/messages) so it works + even when data was just published. + + Returns DataFrame with columns: driver_id, driver_name, team, grid_position, circuit_id + """ + enable_cache() + try: + session = fastf1.get_session(season, round_num, "Q") + # Only load laps — skip telemetry, weather, messages (not needed + cause errors on fresh data) + session.load(laps=True, telemetry=False, weather=False, messages=False) + logger.info(f"Qualifying session loaded for {season} R{round_num}") + except Exception as e: + logger.error(f"Could not load qualifying session for {season} R{round_num}: {e}") + logger.error("💡 If qualifying just finished, wait ~15-30 minutes for FastF1 to process the data, then try again.") + return None + + # Try results table first (gives clean classification order) + try: + results = session.results + except Exception: + results = None + + if results is not None and not results.empty: + circuit_id = session.event["EventName"] + df = pd.DataFrame({ + "driver_id": results["Abbreviation"].values, + "driver_name": results["FullName"].values, + "team": results["TeamName"].values, + "grid_position": range(1, len(results) + 1), + "circuit_id": circuit_id, + "quali_status": results["Status"].values if "Status" in results.columns else "Finished", + }) + logger.info(f"✅ Grid from qualifying results: {season} R{round_num} ({circuit_id}) — {len(df)} drivers") + logger.info(f" P1: {df.iloc[0]['driver_name']} ({df.iloc[0]['team']})") + return df + + # Fallback: derive grid from laps (best lap time ordering) + try: + laps = session.laps + except Exception: + laps = None + + if laps is None or laps.empty: + logger.warning(f"No qualifying laps available for {season} R{round_num}") + logger.warning("💡 Data may not be available yet — try again in 15-30 minutes.") + return None + + circuit_id = session.event["EventName"] + + # Best lap per driver → sort ascending to get grid order + best = laps.groupby("Driver")["LapTime"].min().sort_values().reset_index() + # Map driver abbreviation to full name/team via session results if available + driver_info = {} + if session.results is not None and not session.results.empty: + for _, r in session.results.iterrows(): + driver_info[r["Abbreviation"]] = { + "driver_name": r.get("FullName", r["Abbreviation"]), + "team": r.get("TeamName", "Unknown"), + } + + records = [] + for pos, (_, row) in enumerate(best.iterrows(), start=1): + abbr = row["Driver"] + info = driver_info.get(abbr, {"driver_name": abbr, "team": "Unknown"}) + records.append({ + "driver_id": abbr, + "driver_name": info["driver_name"], + "team": info["team"], + "grid_position": pos, + "circuit_id": circuit_id, + "quali_status": "Finished", + }) + + df = pd.DataFrame(records) + logger.info(f"✅ Grid from lap times (fallback): {season} R{round_num} ({circuit_id}) — {len(df)} drivers") + logger.info(f" P1: {df.iloc[0]['driver_name']} ({df.iloc[0]['team']})") + return df + + +def get_driver_context(existing_df: pd.DataFrame, season: int, round_num: int) -> pd.DataFrame: + """ + Pull driver_form_last3 and championship_standing for each driver + from the most recent data available before this round. + """ + # Get data up to but NOT including this round/season + prior = existing_df[ + (existing_df["season"] < season) | + ((existing_df["season"] == season) & (existing_df["round"] < round_num)) + ].copy() + + if prior.empty: + logger.warning("No prior data found for driver context — using defaults") + return pd.DataFrame(columns=["driver_id", "driver_form_last3", "championship_standing"]) + + # Latest championship standing per driver this season (or prior season) + context_rows = [] + for driver_id in prior["driver_id"].unique(): + driver_data = prior[prior["driver_id"] == driver_id].sort_values( + ["season", "round"], ascending=True + ) + if driver_data.empty: + continue + + # driver_form_last3: mean finish position of last 3 races + recent = driver_data.tail(3) + form = recent["finish_position"].mean() if "finish_position" in recent.columns else np.nan + + # championship_standing: most recent value + standing = np.nan + if "championship_standing" in driver_data.columns: + valid = driver_data["championship_standing"].dropna() + if not valid.empty: + standing = valid.iloc[-1] + + # safety_car_probability: get from the circuit if available + context_rows.append({ + "driver_id": driver_id, + "driver_form_last3": form, + "championship_standing": standing, + }) + + return pd.DataFrame(context_rows) + + +def build_prerace_rows( + season: int, + round_num: int, + existing_parquet: str = "data_output/fastf1_races.parquet", +) -> pd.DataFrame | None: + """ + Build a DataFrame of pre-race prediction rows for an upcoming race. + + These rows use qualifying + practice data for features, and set: + - finish_position = NaN (unknown — will be imputed/excluded) + - win_probability target = 0 (dummy — not used in inference) + - telemetry_available = True + + Returns a DataFrame compatible with ml.predict.predict_dataframe() + """ + # 1. Get grid from qualifying results + grid_df = fetch_grid_from_qualifying(season, round_num) + if grid_df is None: + return None + + # 2. Get qualifying sector times + quali_sectors = fetch_qualifying(season, round_num) + if quali_sectors is not None: + grid_df = grid_df.merge(quali_sectors, on="driver_id", how="left") + else: + logger.warning("No qualifying sector times — using NaN") + grid_df["sector_1_time"] = np.nan + grid_df["sector_2_time"] = np.nan + grid_df["sector_3_time"] = np.nan + + # 3. Get practice lap times + practice_df = fetch_practice(season, round_num) + if practice_df is not None: + grid_df = grid_df.merge(practice_df, on="driver_id", how="left") + else: + grid_df["avg_lap_time_practice"] = np.nan + + # 4. Pull driver form + championship standing from existing historical data + if Path(existing_parquet).exists(): + existing_df = pd.read_parquet(existing_parquet) + context_df = get_driver_context(existing_df, season, round_num) + grid_df = grid_df.merge(context_df, on="driver_id", how="left") + else: + logger.warning(f"No existing parquet at {existing_parquet} — driver context will be NaN") + grid_df["driver_form_last3"] = np.nan + grid_df["championship_standing"] = np.nan + + # 5. Fill in race-level fields that won't be known until after the race + grid_df["season"] = season + grid_df["round"] = round_num + grid_df["finish_position"] = np.nan # Unknown — will be imputed + grid_df["tire_compound"] = np.nan + grid_df["tire_age_laps"] = np.nan + grid_df["fresh_tire"] = np.nan + grid_df["pit_stop_count"] = np.nan + grid_df["team_pit_speed"] = np.nan + grid_df["weather_temp_track"] = np.nan + grid_df["weather_rainfall"] = np.nan + grid_df["telemetry_available"] = True + + # safety_car_probability: use historical average for this circuit if available + if Path(existing_parquet).exists(): + existing_df = pd.read_parquet(existing_parquet) + circuit_name = grid_df["circuit_id"].iloc[0] + circuit_data = existing_df[ + existing_df["circuit_id"].astype(str).str.contains( + circuit_name.split()[0], case=False, na=False + ) + ] + if not circuit_data.empty and "safety_car_probability" in circuit_data.columns: + sc_prob = circuit_data["safety_car_probability"].dropna().mean() + grid_df["safety_car_probability"] = sc_prob if not np.isnan(sc_prob) else 0.0 + else: + grid_df["safety_car_probability"] = 0.0 + + # pole_conversion_rate: historical pole-to-win % at this circuit + if not circuit_data.empty and "finish_position" in circuit_data.columns: + poles = circuit_data[circuit_data["grid_position"] == 1].dropna(subset=["finish_position"]) + if not poles.empty: + pcr = (poles["finish_position"] == 1).mean() + grid_df["pole_conversion_rate"] = pcr + logger.info(f" Pole conversion rate at {circuit_name}: {pcr:.1%}") + else: + grid_df["pole_conversion_rate"] = 0.5 + else: + grid_df["pole_conversion_rate"] = 0.5 + + # career_race_starts: count driver's past races + for idx, row in grid_df.iterrows(): + d_id = row["driver_id"] + starts = len(existing_df[existing_df["driver_id"] == d_id]) + grid_df.at[idx, "career_race_starts"] = starts + + else: + grid_df["safety_car_probability"] = 0.0 + grid_df["pole_conversion_rate"] = 0.5 + grid_df["career_race_starts"] = 0 + + logger.info(f"\n✅ Pre-race rows built for {season} R{round_num} — {len(grid_df)} drivers") + logger.info(f" Grid P1: {grid_df.iloc[0]['driver_name']} (qualifying pole)") + logger.info("\nGrid order:") + for _, row in grid_df.iterrows(): + s1 = f"{row.get('sector_1_time', np.nan):.3f}s" if pd.notna(row.get('sector_1_time')) else "N/A" + logger.info(f" P{int(row['grid_position'])}: {row['driver_name']} ({row['team']}) | S1={s1}") + + return grid_df + + +def main(): + parser = argparse.ArgumentParser(description="KRONECTOR — Pre-Race Row Builder") + parser.add_argument("--season", type=int, required=True) + parser.add_argument("--round", type=int, required=True, dest="round_num") + parser.add_argument( + "--output", + type=str, + default=None, + help="Output parquet path. Defaults to data_output/prerace_{circuit}_{season}.parquet", + ) + parser.add_argument( + "--existing", + type=str, + default="data_output/fastf1_races.parquet", + help="Existing historical parquet for driver form/standings context", + ) + args = parser.parse_args() + + df = build_prerace_rows( + season=args.season, + round_num=args.round_num, + existing_parquet=args.existing, + ) + + if df is None: + logger.error("Failed to build pre-race rows. Exiting.") + sys.exit(1) + + # Save output — default to data_output/prerace/ so the API auto-loads it on startup + circuit_slug = df["circuit_id"].iloc[0].replace(" ", "_").lower()[:20] if not df.empty else "unknown" + out_path = args.output or f"data_output/prerace/prerace_{circuit_slug}_{args.season}.parquet" + Path(out_path).parent.mkdir(parents=True, exist_ok=True) + df.to_parquet(out_path, index=False) + + logger.info(f"\n💾 Saved to: {out_path}") + print(f"\nPre-race parquet saved: {out_path}") + print(f"Rows: {len(df)} drivers") + print(f"\nTo run predictions:") + print(f" Use the API: POST /predict/f1 with data_path pointing to this file") + print(f" Or: python -m ml.predict --run-id --data-path {out_path}") + + +if __name__ == "__main__": + main() diff --git a/scripts/quick_features.py b/scripts/quick_features.py new file mode 100644 index 0000000000000000000000000000000000000000..27ab018c8ce9c6e37da06fbe2c399a9683522b98 --- /dev/null +++ b/scripts/quick_features.py @@ -0,0 +1,37 @@ +import pandas as pd +import numpy as np + +print("Loading existing dataset...") +df = pd.read_parquet('data_output/fastf1_races.parquet') + +print("1. Calculating Bayesian pole_conversion_rate...") +if 'pole_conversion_rate' in df.columns: + df = df.drop(columns=['pole_conversion_rate']) + +completed = df.dropna(subset=['finish_position']).copy() +poles = completed[completed['grid_position'] == 1].copy() +poles['pole_won'] = (poles['finish_position'] == 1).astype(int) + +global_mean = poles['pole_won'].mean() +C = 3.0 +stats = poles.groupby('circuit_id').agg( + wins=('pole_won', 'sum'), + total=('pole_won', 'count') +).reset_index() + +stats['pole_conversion_rate'] = (stats['wins'] + C * global_mean) / (stats['total'] + C) +df = df.merge(stats[['circuit_id', 'pole_conversion_rate']], on='circuit_id', how='left') +df['pole_conversion_rate'] = df['pole_conversion_rate'].fillna(global_mean) + +print("2. Calculating career_race_starts...") +if 'career_race_starts' in df.columns: + df = df.drop(columns=['career_race_starts']) + +df_sorted = df.sort_values(by=['driver_id', 'season', 'round']).copy() +df_sorted['career_race_starts'] = df_sorted.groupby('driver_id').cumcount() +df = df.merge(df_sorted[['season', 'round', 'driver_id', 'career_race_starts']], on=['season', 'round', 'driver_id'], how='left') +df['career_race_starts'] = df['career_race_starts'].fillna(0) + +print(f"Saving {len(df)} rows...") +df.to_parquet('data_output/fastf1_races.parquet', index=False) +print("Done!") diff --git a/scripts/update_cache.py b/scripts/update_cache.py new file mode 100644 index 0000000000000000000000000000000000000000..1cfabc1751a6ce52032afabb48463c16ea8b7046 --- /dev/null +++ b/scripts/update_cache.py @@ -0,0 +1,245 @@ +""" +KRONECTOR — Incremental Cache & Data Update Script +==================================================== +Run this after each new race weekend to: + 1. Fetch data for specific rounds that are NEW (not already in the parquet). + 2. Append them to data_output/fastf1_races.parquet. + 3. Retrain the model on the full updated dataset. + 4. Update .env with the new MLflow run_id. + +Usage: + # Fetch rounds 6, 7 for 2026 and retrain: + python -m scripts.update_cache --season 2026 --rounds 6 7 + + # Fetch and append only, skip retraining: + python -m scripts.update_cache --season 2026 --rounds 6 7 --no-retrain +""" + +import argparse +import logging +import os +import sys +from pathlib import Path + +import numpy as np +import pandas as pd +import fastf1 + +import builtins +import requests +import urllib3 +builtins.RequestsCookieJar = requests.cookies.RequestsCookieJar +builtins.HTTPAdapter = requests.adapters.HTTPAdapter +builtins.Retry = urllib3.util.Retry + +# Add project root so we can import ml.train etc. +sys.path.insert(0, str(Path(__file__).resolve().parent.parent)) + +from data.fastf1_pipeline import ( + enable_cache, + fetch_race_results, + fetch_qualifying, + fetch_practice, + fetch_tire_data, + fetch_pit_stops, + fetch_weather, + fetch_lap_data, +) + +logger = logging.getLogger(__name__) +logging.basicConfig( + level=logging.INFO, + format="%(asctime)s | %(name)s | %(levelname)s | %(message)s", +) + + +def fetch_single_round(season: int, round_num: int) -> tuple[pd.DataFrame | None, pd.DataFrame | None]: + """ + Fetch all data for a single race round, mirroring build_season_dataframe logic. + Returns (race_df, lap_df). Either can be None if the session isn't available yet. + """ + logger.info(f"\n{'='*60}") + logger.info(f"Fetching {season} Round {round_num}") + logger.info(f"{'='*60}") + + # 1. Race results (base) — if race hasn't happened, this will be None + results_df = fetch_race_results(season, round_num) + if results_df is None: + logger.warning(f"⚠️ No race results for {season} R{round_num} — race may not have happened yet.") + return None, None + + # 2. Qualifying sector times + quali_df = fetch_qualifying(season, round_num) + if quali_df is not None: + results_df = results_df.merge(quali_df, on="driver_id", how="left") + else: + results_df["sector_1_time"] = np.nan + results_df["sector_2_time"] = np.nan + results_df["sector_3_time"] = np.nan + + # 3. Practice avg lap times + practice_df = fetch_practice(season, round_num) + if practice_df is not None: + results_df = results_df.merge(practice_df, on="driver_id", how="left") + else: + results_df["avg_lap_time_practice"] = np.nan + + # 4. Tire data + tire_df = fetch_tire_data(season, round_num) + if tire_df is not None: + results_df = results_df.merge(tire_df, on="driver_id", how="left") + else: + results_df["tire_compound"] = np.nan + results_df["tire_age_laps"] = np.nan + results_df["fresh_tire"] = np.nan + + # 5. Pit stops + pit_df = fetch_pit_stops(season, round_num) + if pit_df is not None: + pit_merge_cols = ["driver_id", "pit_stop_count", "team_pit_speed"] + results_df = results_df.merge(pit_df[pit_merge_cols], on="driver_id", how="left") + else: + results_df["pit_stop_count"] = np.nan + results_df["team_pit_speed"] = np.nan + + # 6. Weather + weather_df = fetch_weather(season, round_num) + if weather_df is not None: + results_df["weather_temp_track"] = weather_df["weather_temp_track"].iloc[0] + results_df["weather_rainfall"] = weather_df["weather_rainfall"].iloc[0] + else: + results_df["weather_temp_track"] = np.nan + results_df["weather_rainfall"] = np.nan + + results_df["telemetry_available"] = True + + # 7. Lap data for safety car + lap_df = fetch_lap_data(season, round_num) + + logger.info(f"✅ Round {round_num} fetched: {len(results_df)} driver rows") + return results_df, lap_df + + +def update_env_file(run_id: str): + env_path = Path(".env") + if not env_path.exists(): + with open(env_path, "w") as f: + f.write(f"KRONECTOR_MODEL_RUN_ID={run_id}\n") + return + + with open(env_path, "r") as f: + lines = f.readlines() + + found = False + with open(env_path, "w") as f: + for line in lines: + if line.startswith("KRONECTOR_MODEL_RUN_ID="): + f.write(f"KRONECTOR_MODEL_RUN_ID={run_id}\n") + found = True + else: + f.write(line) + if not found: + f.write(f"KRONECTOR_MODEL_RUN_ID={run_id}\n") + + logger.info(f"✅ Updated .env with KRONECTOR_MODEL_RUN_ID={run_id}") + + +def main(): + parser = argparse.ArgumentParser(description="KRONECTOR — Incremental Cache Updater") + parser.add_argument("--season", type=int, required=True, help="F1 season year (e.g. 2026)") + parser.add_argument( + "--rounds", + type=int, + nargs="+", + required=True, + help="Round numbers to fetch (e.g. --rounds 6 7 8)", + ) + parser.add_argument( + "--no-retrain", + action="store_true", + help="Skip model retraining after data update (just update the parquet)", + ) + parser.add_argument( + "--output", + type=str, + default="data_output/fastf1_races.parquet", + help="Path to the parquet file to update", + ) + args = parser.parse_args() + + enable_cache() + + out_path = Path(args.output) + + # ---------------------------------------------------------------- + # Load existing data + # ---------------------------------------------------------------- + if out_path.exists(): + logger.info(f"Loading existing dataset from {out_path}...") + existing_df = pd.read_parquet(out_path) + logger.info(f" Existing rows: {len(existing_df)}") + + # Check which rounds already exist for this season + existing_rounds = set( + existing_df[existing_df["season"] == args.season]["round"].dropna().astype(int).unique() + ) + logger.info(f" Rounds already in dataset for {args.season}: {sorted(existing_rounds)}") + else: + logger.error(f"No existing parquet found at {out_path}. Run run_all.py first.") + sys.exit(1) + + # ---------------------------------------------------------------- + # Fetch each requested round + # ---------------------------------------------------------------- + new_race_dfs = [] + + for round_num in args.rounds: + if round_num in existing_rounds: + logger.info(f"⏭️ Round {round_num} already exists in dataset — skipping. " + f"(Use --force to overwrite)") + continue + + race_df, _ = fetch_single_round(args.season, round_num) + if race_df is not None and not race_df.empty: + new_race_dfs.append(race_df) + + if not new_race_dfs: + logger.info("No new rounds were fetched. Dataset unchanged.") + if not args.no_retrain: + logger.info("Skipping retraining since no data changed.") + sys.exit(0) + + # ---------------------------------------------------------------- + # Append and save + # ---------------------------------------------------------------- + combined_df = pd.concat([existing_df] + new_race_dfs, ignore_index=True) + combined_df.to_parquet(out_path, index=False) + + added = len(combined_df) - len(existing_df) + logger.info(f"\n✅ Dataset updated: {len(existing_df)} → {len(combined_df)} rows (+{added} new rows)") + logger.info(f" Saved to {out_path}") + + # ---------------------------------------------------------------- + # Retrain + # ---------------------------------------------------------------- + if args.no_retrain: + logger.info("Skipping retraining (--no-retrain flag set).") + return + + logger.info("\n🔧 Starting model retraining on updated dataset...") + try: + from ml.train import train_model + run_id = train_model(data_path=str(out_path)) + logger.info(f"\n🏁 Model retrained! New MLflow Run ID: {run_id}") + update_env_file(run_id) + print(f"\n{'='*60}") + print(f" NEW KRONECTOR_MODEL_RUN_ID = {run_id}") + print(f" Copy this to your Hugging Face Space secrets!") + print(f"{'='*60}\n") + except Exception as e: + logger.error(f"Retraining failed: {e}", exc_info=True) + sys.exit(1) + + +if __name__ == "__main__": + main()