

ОПИСАНИЕ

Загрузка библиотек
import pandas as pd import matplotlib.pyplot as plt import seaborn as sns from matplotlib import rcParams import matplotlib.font_manager as fm
Обоснование шрифта
Для проекта был выбран шрифт Jost — современный геометрический sans-serif, вдохновлённый немецкой типографикой 1920-х и эстетикой Futura, но адаптированный под цифровую среду. Он даёт ровный «технический» характер, хорошо читается в подписях, шкалах и плотных таблицах, поэтому подходит для инфографики про телеметрию и динамику гонок. Важно, что Jost распространяется по свободной лицензии SIL Open Font License, поэтому его можно легально приложить к проекту вместе с .ttf и сохранить полную воспроизводимость оформления.
Код для подключения кастомного шрифта
import matplotlib.pyplot as plt import matplotlib.font_manager as fm from matplotlib import rcParams import os
if os.path.exists ('Jost-Regular.ttf'): font_path = 'Jost-Regular.ttf' try: fm.fontManager.addfont (font_path) prop = fm.FontProperties (fname=font_path) rcParams['font.family'] = prop.get_name () rcParams['font.sans-serif'] = [prop.get_name ()] rcParams['axes.unicode_minus'] = False except: pass
Код для палитры и общих характеристик оформления
Для проекта была выбрана палитра, основанная на фирменных цветах FIA. Тёмно-синий выступает основным техническим цветом, серебро используется для второстепенных элементов и сетки. Ярко-синий и золото добавлены как акценты, чтобы быстро выделять ключевые линии, лидеров и важные точки на графиках. Такая комбинация даёт стабильный контраст и хорошую читаемость, поэтому визуализации выглядят цельно и аккуратно во всём проекте.
import matplotlib.pyplot as plt import seaborn as sns from matplotlib import rcParams
FIA_DARK_BLUE = '#002D5F' FIA_BRIGHT_BLUE = '#00B4E1' FIA_GOLD = '#B49664' FIA_SILVER = '#BEBEBE' FIA_WHITE = '#FFFFFF'
extended_palette = [FIA_BRIGHT_BLUE, FIA_GOLD, FIA_SILVER, FIA_DARK_BLUE] sns.set_palette (extended_palette)
rcParams.update ({ 'axes.facecolor': FIA_WHITE, 'figure.facecolor': FIA_WHITE, 'axes.edgecolor': FIA_DARK_BLUE, 'xtick.color': FIA_DARK_BLUE, 'ytick.color': FIA_DARK_BLUE, 'axes.labelcolor': FIA_DARK_BLUE, 'text.color': FIA_DARK_BLUE, 'axes.titlecolor': FIA_DARK_BLUE, 'legend.labelcolor': FIA_DARK_BLUE, 'grid.color': FIA_SILVER, 'grid.alpha': 0.35, 'axes.grid': True, 'font.size': 12, 'axes.titlesize': 16, 'axes.labelsize': 13, 'xtick.labelsize': 12, 'ytick.labelsize': 12, 'legend.fontsize': 12, 'figure.titlesize': 18 })
С помощью кода я построила линейный график, который показывает, как менялся уровень «драматичности» гонок по этапам сезона Формулы-1. Для этого я использую рассчитанный показатель Race Drama Score, который учитывает камбеки пилотов (разницу между стартовой и финишной позицией), динамику позиций по кругам и события гонки вроде Safety Car и Red Flag. Такой график помогает быстро увидеть, где в сезоне были самые «жаркие» этапы и как они выделяются на фоне остальных.
С помощью кода я построила горизонтальную столбчатую диаграмму, которая показывает топ-15 самых драматичных гонок Формулы-1 за весь период по показателю Race Drama Score. Я рассчитала этот индекс для каждой гонки и отсортировала результаты, чтобы выделить этапы, которые можно назвать «лучшими эпизодами» F1 по уровню борьбы и событий.
С помощью кода я построила диаграмму размаха, которая сравнивает распределение Race Drama Score в гонках со Safety Car и без него. Такой график помогает проверить, действительно ли нейтрализации и инциденты повышают общий уровень драматичности гонки, а не влияют только на отдельные яркие моменты.
С помощью кода я построила диаграмму рассеяния, где каждая точка — отдельная гонка Формулы-1. По оси X показана «перетасовка» позиций по ходу дистанции, а по оси Y — средний камбек относительно стартовой решётки. Дополнительно события гонки учитываются визуально, чтобы было видно, какие заезды стали драматичными из-за хаоса и обгонов, а какие — благодаря сильным прорывам отдельных пилотов.
Заключение
Анализ данных Формулы-1 показал, что «драматичность» гонок можно уверенно описывать не одним фактором, а сочетанием нескольких компонентов. В динамике по сезонам видно, что общий уровень драматичности меняется волнообразно: чемпионат переживает периоды более стабильных гонок и периоды повышенной «непредсказуемости». Рейтинг топ-гонок по Race Drama Score позволил выделить этапы-“хайлайты», которые становятся самыми запоминающимися за счёт плотной борьбы и заметных изменений по ходу гонки. Сравнение гонок со Safety Car и без него показало, что наличие нейтрализаций не гарантирует более высокий уровень драматичности — эффект проявляется по-разному, и часто решающим фактором остаётся сама гонка и характер борьбы. Наконец, диаграмма рассеяния наглядно разделила гонки по «механике зрелищности»: одни становятся драматичными благодаря массовой перетасовке позиций по кругам, другие — из-за сильных камбеков относительно стартовой решётки.
Применение генеративной модели
ChatGPT использовался для подбора шрифта-замены коммерческому варианту, выбора оптимальных таблиц и полей из датасета под задачи анализа, а также для улучшения кода: исправления ошибок загрузки и объединения данных, логики расчётов и приведения визуализаций к единому стилю (палитра, типографика, параметры оформления).
Ссылка на датасет