
120 лет Олимпийских игр: эволюция участников, стран и медалей (1896 — 2016)
Олимпиада начиналась как соревнование 14 стран и 241 спортсмена в Афинах-1896; к Рио-2016 в Играх участвовали уже 207 национальных сборных и более 11 тыс. атлетов. Этот проект визуализирует, как за 120 лет менялись--
масштаб Игр — число стран-участниц и спортсменов; гендерный баланс — рост доли женщин в соревнованиях; распределение медалей — какие государства и в какие эпохи доминировали; «возраст чемпиона» — как менялась возрастная структура призёров. Анализ построен на открытом датасете «120 Years of Olympic History: Athletes & Results» (Kaggle). С помощью pandas, matplotlib и seaborn мы очищаем данные, агрегируем их по нужным признакам и получаем четыре законченные инфографики в едином визуальном стиле. Результат показывает ключевые тренды Олимпийского движения за век с небольшим — от первых шагов женского спорта до современной глобальной «медальной гонки».
Источники данных и их роль в анализе
athlete_events.csv Kaggle-датасет «120 Years of Olympic History: Athletes & Results» (раздел athlete_events) Основная фактура анализа: считаем количество спортсменов, строим гистограммы возраста призёров, выделяем медали по дисциплинам и годам, рассчитываем долю женщин. noc_regions.csv GitHub-копия из того же Kaggle-набора, ветка data/noc_regions.csv Объединяется (merge) с athlete_events.csv, чтобы агрегировать медали и спортсменов по полноценному названию страны в графиках и таблицах.

В проекте будет четыре базовые инфографики, каждая отвечает на свой вопрос об эволюции Олимпийских игр:
Рост масштаба Игр Линейный график, где по оси X — годы Олимпиад (1896-2016), а по двум линиям — • число национальных делегаций, • число спортсменов. Так мы наглядно увидим, как Олимпиада выросла c 14 стран и 241 атлета до 207 стран и 11 тыс. участников. Гендерная динамика Линия «доля женщин-участниц» (процент спортсменок от общего числа) с 1900 по 2016. Пунктир на уровне 50% показывает момент, когда Олимпиада приблизилась к гендерному паритету. Медальная карта мира Горизонтальный bar-чарт с топ-20 странами по суммарному количеству медалей за все Игры. График отвечает, кто исторически доминировал и каков разрыв между лидерами. Возраст призёров Гистограмма распределения возраста всех спортсменов, завоевавших медали. Позволяет увидеть «типичный» возраст чемпиона и улавливает редкие случаи очень юных или возрастных призёров. Эти четыре визуализации в сумме дают целостную картину: сколько стран и людей участвовало, как росла роль женщин, кто брал больше всего медалей и в каком возрасте спортсмены чаще всего поднимаются на подиум.
Обработка данных
Для начала я импортировал основные библиотеки анализа и визуализации данных: pandas — для работы с таблицами, numpy — для базовых вычислений, matplotlib.pyplot и seaborn — для построения графиков.
Затем считал два готовых CSV-файла датасета «120 лет Олимпийской истории» и сразу объединила их по трёхбуквенному коду НОК:
После подготовки таблиц построил четыре итоговых графика — линейные кривые роста Олимпиады, долю женщин-участниц, bar-чарт медального зачёта и гистограмму возраста призёров — и сохранил их в папку figures/
Визуализация данных
Для визуализации я использовал связку Matplotlib + Seaborn — классический «дуэт» для аналитики в Python.
Matplotlib 3.8 служит базовым движком. Сначала я создал холст, далее задал размеры будущего рисунка и разрешение. Затем через plt.title (), plt.xlabel (), plt.ylabel () подписал элементы, добавил сетку или вспомогательные линии (plt.axvline (), plt.grid ()), а в конце сохранил результат в папку figures/
Seaborn 0.13 стоит поверх Matplotlib и ускоряет сам процесс построения: sns.lineplot () — кривые роста (количество стран, количество спортсменов и доля женщин), sns.histplot () с kde=True — гистограмма возраста призёров со сглаженной KDE-кривой, sns.barplot () — горизонтальный рейтинг стран по медалям.
Lifelines мне понадобился только для специальных графиков выживаемости; в основные четыре визуализации он не вошёл, но при необходимости я могу вызвать kmf.plot_survival_function () и получить стилизованную кривую Kaplan–Meier.
Встроенный метод pandas.plot () я использовал лишь на этапе чернового EDA, чтобы быстро проверить агрегаты. Финальные рисунки я перевёл на Seaborn, чтобы сохранить единый стиль.
График № 2 — «Гендерная динамика»
Мы хотим увидеть, как менялась доля женщин-участниц на Олимпийских играх с 1900 по 2016 год. Одна линия покажет, когда женское участие превысило 10%, 25%, 40% и почти дошло до паритета.
Инструменты: pandas—агрегируем число женщин и общее число спортсменов по каждому году matplotlib / seaborn—строим линию «процент женщин», задаём стиль, палитру и шрифт
График № 3 — «Медальная карта мира»
Мне нужно показать, какие государства исторически доминируют на Олимпиадах. Для этого беру суммарное число медалей (золото + серебро + бронза) у каждой страны за все Игры 1896–2016, сортирую и вывожу Top-20 горизонтальным bar-чартом — так названия стран читаются легче, чем на круговой диаграмме.
Инструменты pandas—склеиваю athlete_events.csv с noc_regions.csv, группирую и считаю медали matplotlib / seaborn—строю горизонтальный bar-чарт, задаю цвета и шрифт
График № 4 — «Возраст призёров»
Хотим узнать, в каком возрасте спортсмены чаще всего поднимаются на олимпийский пьедестал и насколько широк «хвост» распределения (юные таланты 16–18 лет и ветераны 35+). Для этого строю гистограмму возраста только медалистов всех Игр (1896–2016) со сглаженной KDE-кривой.
Инструменты pandas—фильтрую строки с медалью и не-пустым возрастом seaborn histplot + kde—быстро рисует распределение matplotlib—задаю размеры, подписи, сохраняю PNG
Заключение
За одну таблицу данных я не спрятал ни одного вывода — в итоге получилось четыре разных, но взаимодополняющих истории о развитии Олимпийских игр. Масштаб. С 1896 г. количество стран-участниц выросло во много раз — от 14 до 207; число спортсменов — с 241 человек до ~11 000. Причина очевидна: распад колониальных империй, создание новых НОК, постепенная интеграция развивающихся регионов и коммерциализация спорта. Игры превратились из «европейского клуба любителей гимнастики» в настоящее всемирное шоу.
Гендерный баланс. Линия женского участия стартует на уровне 2% (1900 г.), проходит отметку 10% только после Второй мировой, но к 2016-му поднимается почти до 45%. В абсолютных числах это 5 000+ спортсменок. Ещё один цикл Игр — и паритет 50/50 станет нормой.
Медальный рейтинг. США сохраняют безусловное лидерство за счёт стабильного присутствия на всех Играх (≈ 2 800 медалей). СССР/Россия удерживают второе место; Китай c нулевой базы 1984 г. ворвался в четвёрку. Топ-20 стран собирают ~75% всех наград, остальные 180 делят оставшуюся четверть — ироничный индикатор того, насколько неравномерно распределены ресурсы в элитном спорте.
Возраст чемпионов. Пик распределения медалистов лежит в диапазоне 21–27 лет; медианный возраст ≈ 24 года. Хвосты показывают: втянуться в гонку за медалью в 16 лет возможно, а выдержать игру до 40 + — редкость, но не исключение (фехтование, стрельба, конный спорт).
Ограничения: Датасет заканчивается Рио-2016: в анализ не попали Токио-2020 и Пекин-2022 (COVID-эффекты, новые правила квот). Все медали считаются одинаково; при необходимости можно взвесить «золото = 3, серебро = 2, бронза = 1». Возраст и медали мы смотрели без разбивки по дисциплинам; пики могут сильно отличаться у гимнасток и марафонцев.
Что можно докрутить: Разделить летние и зимние Игры --- сравнить динамику отдельно. Построить интерактивную карту‐хороплет медалей на Plotly. Дополнить данными о дисквалификациях / допинг-скандалах и посмотреть, как они меняют лидеров. Несмотря на эти оговорки, четыре графика уже дают цельную картинку: Олимпиада растёт, женский спорт почти догнал мужской, медальная «элита» остаётся узкой, а возраст пика достижений удерживается в промежутке одного десятилетия.
Описание применения искусственного интеллекта
Для ускорения работы я использовал ChatGPT-4 как «второе мнение» и справочник, но все ключевые этапы — от отбора датасета до построения финальных графиков — выполнил сам.
Генерация идей. В начале проекта попросил модель предложить, какие метрики по Олимпиаде выглядят наиболее показательно. Итоговый выбор (масштаб, гендерная динамика, медальный рейтинг, возраст призёров) оставил я, отсеяв лишнее.
Черновой код. Попросил ИИ набросать базовые примеры pandas-группировок и функций seaborn. После этого самостоятельно переписал их под свой стиль и добавил обработку пропусков.
Проверка ошибок. Когда столкнулся с предупреждением FutureWarning в matplotlib, уточнил у ChatGPT, как корректно задать DPI и bbox — исправил сам.