FastF1でセッションのラップタイムを取得する方法【Python・コピペOK】

graphical user interface

F1のレースでは、フリープラクティスや予選におけるドライバーごとのラップタイムが、パフォーマンスを判断する重要な指標になります。FastF1を使えば、こうしたラップタイムデータをPythonから簡単に取得できます。

この記事では、FastF1を使ってF1セッションのラップタイムデータを取得する方法を解説します。基本的にはコードをコピーして実行するだけでデータを取得できるため、Python初心者でも問題なく試すことができます。

それでは、セッションを読み込み、ラップタイムデータを取得する基本的な手順を見ていきましょう。

FastF1 2026 Australian GP FP1 Lap Times Example
FastF1で取得した2026年F1オーストラリアGP FP1の各ドライバーのファステストラップ

FastF1でセッションのラップタイムを取得する方法

ここからは、FastF1を使って実際にF1のラップタイムデータを取得する方法を解説します。本記事では、セッションのラップデータを読み込み、ドライバーごとのベストラップを一覧表示する手順を紹介します。

Pythonのコードはすべてコピペで実行できるようにしているため、プログラミング初心者の方でも安心して試すことができます。

また、FastF1を初めて使う方は、事前に「FastF1の使い方【初心者チュートリアル】」の記事を確認しておくのがおすすめです。

まずはセッションを読み込む

FastF1では、まず対象となるレースセッションを読み込む必要があります。以下のコードは、日本GPのセッションを読み込む基本的な例です。

import fastf1
import os

# キャッシュフォルダを作成
os.makedirs('cache', exist_ok=True)

# キャッシュを有効化
fastf1.Cache.enable_cache('cache')

このコードでは、FastF1のキャッシュ機能を有効化しています。

続いて、セッションを指定してデータを読み込みます。

# セッション取得(年 / グランプリ / セッション)
session = fastf1.get_session(2025, 'Japan', 'FP2')

# データ読み込み
session.load()

FastF1では、以下のようなセッションコードを指定できます。

  • FP1(フリー走行1)
  • FP2(フリー走行2)
  • FP3(フリー走行3)
  • Q(予選)
  • R(決勝)

まずはこのコードを実行し、セッションデータが正しく取得できることを確認してみましょう。

セッションのベストラップ一覧を表示する

次に、セッションのラップデータから各ドライバーのベストラップを取得し、ランキング形式で表示してみましょう。

以下のコードを実行すると、F1公式リザルトのように、ドライバーごとのベストタイムを一覧で表示できます。

import pandas as pd

# ラップ取得
laps = session.laps

# 有効ラップのみ
laps = laps[laps["IsAccurate"] & laps["LapTime"].notna()]

# 最速ラップ抽出
idx = laps.groupby("Driver")["LapTime"].idxmin()
best_laps = laps.loc[idx].copy()

# Vmax取得
def get_vmax(lap):
    try:
        return lap.get_car_data()["Speed"].max()
    except:
        return None

best_laps["Vmax"] = [get_vmax(lap) for _, lap in best_laps.iterrows()]

# 必要な列
df = best_laps[
    [
        "Driver",
        "Team",
        "LapTime",
        "Sector1Time",
        "Sector2Time",
        "Sector3Time",
        "Vmax",
        "Compound",
        "LapNumber",
    ]
].copy()

# ソート
df = df.sort_values("LapTime").reset_index(drop=True)
df.insert(0, "Pos", df.index + 1)

# ギャップ
best_time = df["LapTime"].iloc[0]
df["Gap"] = df["LapTime"] - best_time

# ラップ数
df["Laps"] = df["Driver"].map(session.laps.groupby("Driver").size())

# フォーマット関数
def format_laptime(t):
    if pd.isna(t):
        return ""
    total_sec = t.total_seconds()
    m = int(total_sec // 60)
    s = int(total_sec % 60)
    ms = int((total_sec - int(total_sec)) * 1000)
    return f"{m}:{s:02d}.{ms:03d}"

# 表示用
df["Time"] = df["LapTime"].map(format_laptime)
df["Gap"] = df["Gap"].map(lambda x: "" if x.total_seconds() == 0 else f"+{x.total_seconds():.3f}")
df["S1"] = df["Sector1Time"].map(format_laptime)
df["S2"] = df["Sector2Time"].map(format_laptime)
df["S3"] = df["Sector3Time"].map(format_laptime)
df["Vmax"] = df["Vmax"].round(1)

# カラム名変更
df = df.rename(columns={
    "Compound": "Tyre",
    "LapNumber": "Lap"
})

# 表示用テーブル
df = df[
    [
        "Pos",
        "Driver",
        "Team",
        "Time",
        "Gap",
        "S1",
        "S2",
        "S3",
        "Vmax",
        "Tyre",
        "Lap",
        "Laps",
    ]
]

# =========================
# トップの値をハイライト
# =========================

best_time = df["Time"].iloc[0]
best_s1 = df["S1"].min()
best_s2 = df["S2"].min()
best_s3 = df["S3"].min()
best_vmax = df["Vmax"].max()

def highlight(val, best):
    if val == best:
        return "background-color: #ffe599; font-weight: bold"
    return ""

styler = df.style

styler = styler.map(lambda v: highlight(v, best_time), subset=["Time"])
styler = styler.map(lambda v: highlight(v, best_s1), subset=["S1"])
styler = styler.map(lambda v: highlight(v, best_s2), subset=["S2"])
styler = styler.map(lambda v: highlight(v, best_s3), subset=["S3"])
styler = styler.map(lambda v: highlight(v, best_vmax), subset=["Vmax"])

styler

このコードを実行すると、ドライバーごとのベストラップやセクタータイム、最高速(Vmax)などが、表形式で一覧表示されます。

FastF1 2025 Japanese GP FP2 Lap Times Example
FastF1で取得した2025年F1日本GP FP2の各ドライバーのファステストラップ

PythonでF1の公式リザルトに近いデータを簡単に作れるのが、FastF1の大きな魅力です。

コードの仕組みを簡単に解説

ここまでのコードでは、FastF1のラップデータから各ドライバーのベストラップを抽出し、ランキング形式のテーブルを作成しています。

処理の流れは次のとおりです。

まず、セッションのラップデータを取得します。FastF1では、セッションを読み込むと session.laps からそのセッションのすべてのラップデータにアクセスできます。

次に、有効なラップのみを抽出します。予選やフリー走行では、トラックリミット違反や計測エラーなどにより、正確でないラップが含まれることがあります。そのため、IsAccurate が True のラップだけを対象にしています。

その後、各ドライバーのベストラップを取得します。これは「ドライバーごとに最も速いラップタイム」を抽出する処理で、FastF1を使ったデータ分析では基本となる手法です。

さらに、ベストラップのテレメトリーデータから最高速度(Vmax)を取得しています。FastF1では、ラップごとに速度やスロットル、ブレーキなどの詳細データも取得できるため、こうしたパフォーマンス分析も簡単に行えます。

最後に、ラップタイム順に並び替え、順位やトップとの差(Gap)を計算して表形式に整形しています。これにより、F1公式リザルトのようなランキングテーブルをPythonで再現できます。

このようにFastF1を使えば、公式ライブタイミングのデータをもとに、さまざまな分析を手軽に行うことができます。

【PR】F1ゲームをよりリアルに楽しめるハンコン

👉【PR】Logicool G29 ドライビングフォース(PS5 / PS4 / PC対応)

レースゲームをプレイするなら、ステアリング型コントローラー(ハンコン)を使うと臨場感が大きく変わります。Logicool G29はPS5・PS4・PCに対応した定番モデルで、フォースフィードバック機能により路面の感触や挙動をリアルに再現してくれます。

PR Logicool G29

▶︎ F1-DashやGP TEMPOなど、無料で使えるライブタイミングやテレメトリーデータの解析方法を紹介しています⬇️

F1公式のサブスクリプションサービス F1 TV Access では、レースのライブ視聴はできないものの、F1公式のライブタイミングやリアルタイムのテレメトリーデータを確認できます。さらに、過去のレースアーカイブにもアクセス可能です。

月額360円でどこまでの機能が使えるのか、メリットや注意点も含めて詳しくまとめています。

▶︎ F1 TV Accessでできること・できないことを解説した記事はこちら⬇️

まとめ

この記事では、FastF1を使ってセッションのラップタイムデータを取得し、ドライバーごとのベストラップを一覧表示する方法を解説しました。

FastF1を使えば、F1の公式ライブタイミングデータをPythonから簡単に取得でき、ラップタイムやセクタータイム、最高速度などを自由に分析できます。コードをコピーして実行するだけでも、レースや予選のパフォーマンスをデータとして可視化できるのが大きな魅力です。

今回紹介したコードをベースにすることで、セクター比較やタイヤ別のパフォーマンス分析など、より高度なデータ分析にも発展させることができます。

次の記事では、FastF1で取得したデータを使い、ドライバーのテレメトリー(速度・スロットル・ブレーキ)をグラフで比較する方法を解説します。F1の走りをより深く理解できるようになるので、ぜひ続けてチャレンジしてみてください。

─── 関連記事 ───

以下の記事では、2026年のF1・MotoGPの視聴方法をわかりやすくまとめています。日本の公式配信サービスに加え、VPNを使った海外配信サービスの利用ガイドも紹介しているので、モータースポーツ観戦の選択肢を広げたい方はぜひ参考にしてみてください。

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です