| """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") | |