Original size 1140x1600

Лучшие бойцы UFC по данным рекордов

PROTECT STATUS: not protected

Введение

Я выбрал данный датасет из-за того, что эта тема мне интересна и сам для себя хотел выявить лучших бойцов.

Датасет был выбран на ресурсе https://www.kaggle.com/datasets.

В проекте использованы такие диаграммы как: -Столбчатая —круговая

На мой взгляд, они наиболее наглядно показывают информацию

Блок 1: Импорт библиотек и загрузка данных

import pandas as pd import matplotlib.pyplot as plt

Загружаем CSV файл

file_path = '/content/UFC_Records.csv' ufc_data = pd.read_csv (file_path)

Просмотр первых строк данных

ufc_data.head ()

Импортируем библиотеки: использую pandas для работы с данными и matplotlib.pyplot для визуализации.

Загружаю данные: CSV файл, содержащий информацию о бойцах UFC.

Просмотр данных: вывожу первые несколько строк таблицы, чтобы убедиться, что данные загружены корректно.

Блок 2: Фильтрация и создание сводной таблицы

Оставляем только нужные строки для каждой метки

ufc_data_filtered = ufc_data[ufc_data['Type of Record'].isin ([…])]

Создаю сводную таблицу, где каждый боец в строках, а метки — в столбцах

ufc_data_pivoted = ufc_data_filtered.pivot_table (index="Name», columns="Type of Record», values="Total», aggfunc="first»)

Просмотр первых строк преобразованных данных

ufc_data_pivoted.head ()

Фильтрация данных: я отобрал только те строки, которые содержат информацию о рекордах бойцов (например, победы, количество боёв, и т. д.).

Создание сводной таблицы: преобразовал данные, чтобы для каждого бойца в строке находились его различные рекорды (в столбцах).

Просмотр данных: вывожу первые строки преобразованных данных, чтобы убедиться, что таблица имеет правильный вид

Блок 3: Проверка данных с пропусками (NaN) после сводной таблицы

Проверка на пропуски (NaN)

ufc_data_pivoted.isna ().sum ()

Заменяем пропущенные значения (NaN) на 0

ufc_data_pivoted_filled = ufc_data_pivoted.fillna (0)

Проверка, что пропуски заменены

ufc_data_pivoted_filled.isna ().sum ()

Проверка на пропуски: проверяю, есть ли пропущенные значения (NaN) в данных.

Заполнение пропусков: если есть пропущенные значения, заменяю их на 0, так как не можем работать с пустыми ячейками.

Блок 4: Нормализация данных и отображение всей таблицы

from sklearn.preprocessing import MinMaxScaler from IPython.display import display

Список столбцов для нормализации

columns_to_normalize = […]

Нормализуем данные

scaler = MinMaxScaler () ufc_data_normalized = ufc_data_pivoted_filled.copy () ufc_data_normalized[columns_to_normalize] = scaler.fit_transform (ufc_data_pivoted_filled[columns_to_normalize])

Отображаем всю таблицу

display (ufc_data_normalized)

Нормализация данных: для того, чтобы сравнивать бойцов по разным меткам (например, победы, нокауты), я нормализовал все числовые данные, чтобы они имели одинаковую шкалу от 0 до 1.

Отображение данных: вывожу нормализованные данные для проверки.

Блок 5: Создание итоговой оценки для каждого бойца

Создаем итоговую оценку для каждого бойца

ufc_data_normalized['Final Score'] = ufc_data_normalized[columns_to_normalize].mean (axis=1)

Сортируем бойцов по итоговому баллу и сбрасываем индекс

best_fighter = ufc_data_normalized.sort_values (by='Final Score', ascending=False).head (1).reset_index ()

Просмотр лучшего бойца

print («Самый лучший боец по всем меткам:») print (best_fighter[['Name', 'Final Score']])

Итоговый балл: для каждого бойца вычислил итоговый балл как среднее значение по всем меткам (например, победы, нокауты, и т. д.).

Сортировка бойцов: сортирую бойцов по итоговому баллу и нахожу бойца с наибольшим баллом — это и есть лучший боец.

Вывод лучшего бойца: показывает имя и итоговый балл лучшего бойца.

Блок 6: Топ-10 бойцов по итоговому баллу

Топ-10 бойцов по итоговому баллу

top_10_fighters = ufc_data_normalized[['Final Score']].sort_values (by='Final Score', ascending=False).head (10).reset_index ()

Отображаем топ-10 бойцов

print («\nТоп-10 бойцов по итоговому баллу:») display (top_10_fighters[['Name', 'Final Score']]) Топ-10 бойцов: вывод 10 лучших бойцов с самыми высокими итоговыми баллами.

Отображение топ-10: вывод имен бойцов и их итоговые баллы.

Блок 7: Гистограмма для лучших 20 бойцов по итоговому баллу

Сортируем бойцов по итоговому баллу и выбираем топ-20

top_20_fighters = ufc_data_normalized[['Final Score']].sort_values (by='Final Score', ascending=False).head (20).reset_index ()

Строим гистограмму

plt.figure (figsize=(12, 6)) plt.barh (top_20_fighters['Name'], top_20_fighters['Final Score'], color='lightblue') plt.xlabel ('Итоговый балл') plt.ylabel ('Бойцы') plt.title ('Топ-20 бойцов по итоговому баллу') plt.gca ().invert_yaxis ()

Инвертирую ось для отображения самых высоких значений сверху

plt.show ()

Строим горизонтальную гистограмму для визуального представления топ-20 бойцов с наивысшими итоговыми баллами.

Original size 1239x582

Блок 8: Количество рекордов у бойцов

Считаем количество уникальных записей (рекордов) для каждого бойца

record_counts = ufc_data.groupby ('Name')['Type of Record'].nunique ()

Строим график распределения количества рекордов у бойцов

plt.figure (figsize=(12, 6)) record_counts.sort_values (ascending=False).head (20).plot (kind='bar', color='salmon') plt.title ('Топ-20 бойцов с наибольшим количеством рекордов') plt.ylabel ('Количество рекордов') plt.xlabel ('Бойцы') plt.xticks (rotation=90) plt.show ()

Распределение рекордов: сколько уникальных типов рекордов (например, количество побед, нокаутов и т. д.) есть у каждого бойца

Строим график, показывающий бойцов с наибольшим количеством рекордов.

Original size 1134x673

Блок 9: Круговая диаграмма для распределения бойцов по количеству боёв

Разделяем бойцов на категории по количеству боёв

bins = [0, 10, 20, 30, 40, 50, 100] labels = ['0-10', '11-20', '21-30', '31-40', '41-50', '50+'] ufc_data['Total Fights Categories'] = pd.cut (ufc_data['Total'], bins=bins, labels=labels)

Считаем количество бойцов в каждой категории

fight_categories = ufc_data['Total Fights Categories'].value_counts ()

Строим круговую диаграмму для распределения по категориям

plt.figure (figsize=(8, 8)) fight_categories.plot (kind='pie', autopct='%1.1f%%', colors=['#FFD700', '#ADFF2F', '#FF4500', '#20B2AA', '#8A2BE2', '#FF6347'], startangle=90) plt.title ('Распределение бойцов по количеству боёв') plt.ylabel ('') # Убираем метку оси Y plt.show ()

Распределение бойцов по количеству боёв: распределение бойцов по категориям в зависимости от того, сколько боёв они провели.

Строим круговую диаграмму, чтобы визуализировать процент бойцов в каждой категории.

Original size 861x608

Блок 10: Круговая диаграмма для распределения побед по типам (KO/TKO, Submission, Decision)

Суммируем данные для разных типов побед

type_of_wins = ufc_data_normalized[['KO/TKO Wins', 'Submission Wins', 'Decision Wins']].sum ()

Строим круговую диаграмму для распределения побед

plt.figure (figsize=(8, 8)) type_of_wins.plot (kind='pie', autopct='%1.1f%%', colors=['#FF6347', '#90EE90', '#87CEFA'], startangle=90) plt.title ('Распределение побед по типам (KO/TKO, Submission, Decision)') plt.ylabel ('') # Убираем метку оси Y plt.show ()

Суммирую типы побед: для каждого бойца складываем количество побед по каждому из типов: KO/TKO, Submission и Decision.

Создаем круговую диаграмму, чтобы показать, как распределяются победы между этими тремя типами. Каждая доля на диаграмме будет показывать, какой процент побед приходится на нокауты, сабмишены и решения судей.

Original size 956x683

Зачем это нужно: это позволяет увидеть, какой стиль побед более распространён среди бойцов, и кто чаще выигрывает в том или ином формате.

Блок 11: Сравнение побед и нокаутов (KO/TKO Wins)

Фильтруем бойцов, у которых есть данные по победам и победам нокаутом

ufc_data_filtered = ufc_data_pivoted.dropna (subset=['Wins', 'KO/TKO Wins'])

Сортируем и выбираем топ бойцов по количеству побед

top_fighters_comparison = ufc_data_filtered[['Wins', 'KO/TKO Wins']].sort_values (by='Wins', ascending=False).head (20)

Строим столбчатую диаграмму для сравнения побед и побед нокаутом

top_fighters_comparison.plot (kind='bar', figsize=(12, 6), colormap='Set2') plt.title ('Топ бойцов: Сравнение побед и побед нокаутом (KO/TKO Wins)') plt.ylabel ('Количество побед') plt.xlabel ('Бойцы') plt.xticks (rotation=45) plt.show ()

Фильтрация бойцов: исключаю бойцов, у которых отсутствуют данные о количестве побед или победах нокаутом. Сортировка и выборка: выбор топ-20 бойцов с наибольшим количеством побед.

Столбчатая диаграмма: строим столбчатую диаграмму, которая сравнивает победы с победами нокаутом (KO/TKO) для каждого из топ-20 бойцов.

Original size 1230x679

Зачем это нужно: эта диаграмма помогает увидеть, сколько бойцов выигрывают благодаря нокаутам по сравнению с общим количеством побед

Блок 12: Визуализация распределения итоговых баллов среди всех бойцов (гистограмма)

plt.figure (figsize=(10, 6)) ufc_data_normalized['Final Score'].plot (kind='hist', bins=20, color='skyblue', edgecolor='black') plt.title ('Распределение итоговых баллов среди бойцов') plt.xlabel ('Итоговый балл') plt.ylabel ('Частота') plt.show ()

Строим гистограмму для итоговых баллов бойцов

Original size 841x547

Зачем это нужно: этот график помогает понять, как распределяются итоговые баллы среди всех бойцов. Можно увидеть, есть ли явные лидеры с очень высокими баллами или если баллы бойцов сосредоточены вокруг одного значения.

Вывод

Мы провели анализ данных о бойцах UFC с целью:

  1. Вычисления итогового балла для каждого бойца — на основе различных меток, таких как количество побед, побед нокаутом, и других показателей. Это позволило объективно оценить каждого бойца, учитывая все их достижения.
  2. Определения топ-10 и топ-30 бойцов — выявили самых успешных бойцов по итоговому баллу, что позволяет увидеть лучших бойцов по сравнению с остальными.
  3. Визуализации данных — использовали различные графики и диаграммы (гистограммы, круговые диаграммы, столбчатые диаграммы), чтобы наглядно продемонстрировать: o Как распределяются итоговые баллы среди всех бойцов. o Какие типы побед (нокауты, сабмишены, решения судей) преобладают среди бойцов. o Сколько бойцов имеют наибольшее количество рекордов. o Как бойцы распределяются по категориям количества боёв. Что мы получили: — Лучшего бойца по итоговому баллу. — Топ-10 бойцов с наивысшими результатами. — Понимание того, какие стили побед (нокауты, сабмишены) преобладают в UFC. — Оценку, как количество боёв влияет на успех бойцов. Этот анализ помогает лучше понять, какие бойцы и в каких аспектах показы

Материалы

https://chatgpt.com/ — для улучшения написанного кода

https://www.kaggle.com/datasets/ustice/ufc-records-dataset — для поиска датасета

обложка -была сделана мной в Photoshop

Блокнот и датасет

Лучшие бойцы UFC по данным рекордов
Project created at 10.04.2025