F1をもっと楽しもう! FastF1を使ってテレメトリーデータを可視化する!
🔖 はじめに
この記事ではFastF1というPythonパッケージを使って、F1のテレメトリーデータを可視化する方法について解説します。
🔖 対象読者
- F1が好きな人
- F1のテレメトリーデータに興味がある人
- Pythonのプログラムを実行できる人(※できなくても大丈夫です)
- Pythonできない人のために(F1 Tempoの紹介)
🔖 FastF1
まずはFastF1の紹介から。FastF1は過去から現在までのレースデータを提供するPythonパッケージです。GitHubの公式リポジトリはここ↓になります。
GitHub上では2020年から開発が続いており、リリース数も71に達しています。比較的アクティブなプロジェクトと言えるでしょう。
FastF1を使うと以下のようなプロットを描くことができます。これは先日行われた2025年日本グランプリ(鈴鹿)での、角田選手とフェルスタッペン選手の予選最速ラップの速度遷移の比較です。水色が角田、白色がフェルスタッペンとなります。図中の垂直の点線はコーナーの位置を表しています。
🔖 サンプルプログラム
FastF1を使用するといろんな図を描けますが、自分が欲しい図を描くにはPythonでプログラムを書く必要があります。
サンプルとして、2025年鈴鹿予選最速ラップでの角田選手のシフトチェンジの様子を、コースマップの上にプロットしてみましょう。
2025鈴鹿 予選最速ラップ シフトチェンジ 角田
比較のためにマクラーレンのノリス選手の図も見てみましょう↓ ヘアピンやスプーンを比較すると顕著ですが、ノリス選手の方が低いギアまで使って走っていることがわかります。マシン特性の違いによって走らせ方が違うんだろうなぁ、と想像するだけで楽しいです。
2025鈴鹿 予選最速ラップ シフトチェンジ ノリス
では、早速この図を描くためのプログラムを見てみましょう。
プログラムを書く前にまずはFastF1パッケージをインストールする必要があります。プロジェクト用のフォルダを作り、以下のコマンドを実行しFastF1パッケージをインストールします。
pip install fastf1
パッケージのインストールが終わったら、次のプログラムを打ち込んで実行します。main.pyファイルを作成し、プログラムをコピペして実行してみてください。データの取得にしばらく時間がかかりますが、取得が終わるとウィンドウが開きプロットが表示されます。
import matplotlib.pyplot as plt
import numpy as np
from matplotlib import colormaps
from matplotlib.collections import LineCollection
import fastf1
##############################################################################
# セッション情報の取得(2025年・鈴鹿・予選)
session = fastf1.get_session(2025, "Suzuka", "Q")
session.load()
# 角田の最速ラップを取得
lap = session.laps.pick_drivers("TSU").pick_fastest()
print(lap)
tel = lap.get_telemetry()
##############################################################################
# データの前処理
x = np.array(tel['X'].values)
y = np.array(tel['Y'].values)
points = np.array([x, y]).T.reshape(-1, 1, 2)
segments = np.concatenate([points[:-1], points[1:]], axis=1)
gear = tel['nGear'].to_numpy().astype(float)
##############################################################################
# カラーマップの設定
cmap = colormaps['Paired']
lc_comp = LineCollection(segments, norm=plt.Normalize(1, cmap.N+1), cmap=cmap)
lc_comp.set_array(gear)
lc_comp.set_linewidth(4)
##############################################################################
# プロットの生成
plt.gca().add_collection(lc_comp)
plt.axis('equal')
plt.tick_params(labelleft=False, left=False, labelbottom=False, bottom=False)
lap_time = str(lap['LapTime'])[10:19]
title = plt.suptitle(
f"Fastest Lap Gear Shift Visualization\n"
f"{lap['Driver']} - {lap_time} - {session.event['EventName']} {session.event.year} {session.name}"
)
##############################################################################
# カラーバーの生成
cbar = plt.colorbar(mappable=lc_comp, label="Gear",
boundaries=np.arange(1, 10))
cbar.set_ticks(np.arange(1.5, 9.5))
cbar.set_ticklabels(np.arange(1, 9))
##############################################################################
# プロットの表示
plt.show()
プログラムの内容がよく分からなくても大丈夫です。かくいう私もよく理解しているわけではありません。他のドライバーの図をプロットしたい場合は、プログラムの以下の部分を編集すればOKです。
# フェルスタッペン選手の図をプロットする
lap = session.laps.pick_drivers("VER").pick_fastest()
また、ほかのグランプリのデータを見たいときはここを編集します。例えば、以下のようにすれば2023年オーストリアGPのレースのデータをプロットできます。
session = fastf1.get_session(2023, "Austrian", "R")
🔖 推しドライバーの秘密をもっと探ろう!
ここまで表示できれば、他の種類のデータも図化したいと思うのが人情というもの。大丈夫、ある程度ならそれを簡単に実現できます。
FastF1の公式解説サイト↓にサンプルギャラリーがあるので、そこに載っているサンプルプログラムを持ってきて、グランプリやドライバーの変数を変更して実行すればOKです。
例えば、2025年鈴鹿のレース中の順位遷移表は次のようになります。
🔖 Pythonなんて分からねぇよ、という人のために
Pythonが分からなくても、F1 Tempoというサイトであらかじめ決められた特定の種類の図をプロットすることができます。
GP開催年、コース、予選本選などのセッション種別を選ぶことで、スロットルの開閉度、ブレーキのタイミング、回転数などを表示することができます。同じ図の中に複数のドライバーの状態を表示して比較することも可能です。
2025年バーレーンGP予選 ピアストリとフェルスタッペン
これだけでも十分楽しむことができますよ!
🔖 まとめ
この記事では、FastF1を使ってF1のテレメトリーデータを可視化する方法を紹介しました。
Pythonを使えば自分好みのデータプロットも作成でき、推しドライバーの走りをさらに深く楽しむことができます。
また、プログラムが苦手な方でも、F1 Tempoといった便利なサービスを利用することで、手軽にテレメトリーデータを眺めてニヤニヤすることが可能です。
FastF1を使えばF1の世界をもっと深堀することができます。
自分なりに深堀りして、知れば知るほどF1観戦が何倍も面白くなります。
ドライバーたちの細かな差、マシンの個性、チームごとの戦略まで、今まで見えていなかった部分に気づくかもしれません。
ぜひ、自分なりの「推しポイント」を見つけて、さらに深くF1沼にハマってください!
また次のサーキットで会いましょう。じゃあね。バイバイ!
Discussion