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
We use cookies to improve the operation of the website and to enhance its usability. More detailed information on the use of cookies can be fo...
Show more