[파이썬/데이터분석] F1 레이싱 텔레메트리 데이터 분석 및 시각화 (코드 포함)
안녕하세요. 파이썬을 활용해 실제 세상의 흥미로운 데이터를 분석하고 시각화하는 것을 즐기는 개발자입니다.
최근 파이썬의 fastf1 라이브러리를 활용하여, 1000분의 1초를 다투는 F1 레이싱 차량의 텔레메트리(원격 측정) 데이터를 수집하고 드라이버들의 코너링 스피드와 브레이킹 포인트를 비교 분석하는 프로젝트를 진행했습니다. 이 과정에서 다루었던 실무적인 데이터 처리 방법과 코드를 공유합니다.
교과서적인 데이터 분석과 실제 현실의 차이 (탁상공론 피하기) 보통 시중의 데이터 분석 튜토리얼이나 교과서를 보면, 결측치가 완벽하게 정제된 깔끔한 CSV 파일을 pandas로 불러와 몇 줄 만에 아름다운 그래프를 그리는 과정을 보여줍니다.
하지만 이는 실제 데이터 분석 현장에서는 전혀 적용되지 않는 탁상공론입니다. 실제 F1 텔레메트리API 데이터를 다루는 현실은 다음과 같은 이유로 다르게 작용합니다.
불규칙한 샘플링 레이트: 실제 센서 데이터는 차량의 통신 상태에 따라 데이터 수집 주기가 들쭉날쭉하며 결측치(NaN)가 빈번하게 발생합니다.
데이터 보간(Interpolation)의 필수성: 이를 그대로 시각화하면 그래프가 끊어지거나 왜곡되므로, 분석 목적에 맞는 적절한 보간 알고리즘을 적용하여 데이터를 스플라인 형태로 부드럽게 이어주는 전처리 과정이 분석 로직의 80%를 차지합니다.
F1 텔레메트리 분석 핵심 코드 특정 그랑프리의 예선 세션을 불러와 가장 빠른 랩(Fastest Lap)의 속도 데이터를 시각화하는 기본 구조입니다.
Python
import fastf1
import fastf1.plotting
from matplotlib import pyplot as plt
# F1 시각화를 위한 기본 테마 세팅
fastf1.plotting.setup_mpl()
def analyze_fastest_lap(year, grand_prix, session_type):
try:
# 데이터 로드 (캐시 적용)
session = fastf1.get_session(year, grand_prix, session_type)
session.load()
# 가장 빠른 랩 데이터 추출
fast_lap = session.laps.pick_fastest()
tel = fast_lap.get_telemetry()
# 거리 대비 속도 그래프 시각화
plt.figure(figsize=(10, 5))
plt.plot(tel['Distance'], tel['Speed'], label=fast_lap['Driver'])
plt.title(f"{year} {grand_prix} - Fastest Lap Speed")
plt.xlabel("Distance (m)")
plt.ylabel("Speed (km/h)")
plt.legend()
plt.show()
except Exception as e:
print(f"데이터 로드 에러: {e}")
if __name__ == "__main__":
analyze_fastest_lap(2023, 'Monza', 'Q')
의존성 관리 (pyproject.toml)
이러한 데이터 분석 프로젝트를 구성할 때, 구형 방식인 requirements.txt를 사용하면 로컬에 설치된 수많은 의존성 패키지가 엉켜 다른 환경에서 재현하기 어렵습니다. 저는 최신 파이썬 생태계의 표준인 pyproject.toml을 사용하여 분석에 필요한 핵심 라이브러리만 세련되게 분리했습니다.
Ini, TOML
[project]
name = "f1-telemetry-analysis"
version = "0.1.0"
description = "F1 텔레메트리 데이터 분석 스크립트"
requires-python = ">=3.9"
dependencies = [
"fastf1",
"pandas",
"matplotlib"
]
단순히 API를 호출하는 것을 넘어, 위에서 언급한 노이즈 낀 현실 데이터를 어떻게 정제하고 두 드라이버의 코너링 공략 차이를 파이썬으로 어떻게 시각화했는지에 대한 전체 과정은 아래 제 영상에 차분하게 정리해 두었습니다. 스포츠 데이터 분석에 관심 있는 분들께 유용한 참고가 되기를 바랍니다.
👉 https://youtu.be/7b1eT20fnHs
python, 데이터분석, fastf1, 데이터시각화, pyproject