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 — для построения графиков.
Затем cчитал два готовых 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




