Почти все знают о таком футбольном симуляторе, как FIFA. Множество игроков даёт прекрасную возможность построить несколько интересных диаграмм. На Kaggle я нашел датасет с сведениями о 18.000 игроков. Данный набор можно найти тут.
Основные задачи
Сегодня в моих целях построить несколько диаграмм про:
- страны с наибольшим кол-вом игроков
- самый "популярный" возраст у футболистов
- самый "популярный" рейтинг у карточек в FIF'е
- кол-во игроков у самых популярных клубов
- средний рейтинг игроков самых популярных клубов
- средний возраст игроков самых популярных клубов
Вся реализация будет очень похожа, однако цель статьи не сколько научить пользоваться какими-то функциями, сколько показать подход для визуализации определённых данных.
С целями разобрались, так что вперёд.
Импортирование и считывание из файла
Сегодня нам понадобится только Pandas и matplotlib, а средой разработки послужит Jupyter Notebook:
Данные загрузим таким способом:
Страны
Для начала узнаем, с каким количеством стран мы вообще имеем дело:
Отлично, у нас есть 164 страны. Конечно же строить диаграмму со всеми из них мы не будем, однако об этом позже.
Чтобы узнать, сколько всего игроков в FIF'е от каждого государства, необходимо выполнить такой фрагмент кода:
Отлично. Однако как мы можем заметить, некоторые страны обладают уж слишком маленьким кол-вом игроков(у Андорры он всего лишь один :) ), потому выберем самые "крупные" государства в плане футболистов:
Получаем 10 стран с самым большим количеством футболистов(то, что их получилось ровно 10 штук - удача, предел в 400 я выбрал со второго раза).
Осталось построить диаграмму. Для этого мы будем использовать matplotlib.pyplot.
Магическая команда %matplotlib inline нужна для вывода изображения в самом Jupyter Notebook.
Дальше пройдемся более детально:
- plt.style.use('ggplot') - устанавливает более красивый стиль для графиков
Как присваиваются значения переменным labels и values, думаю, всем понятно.
- plt.xlabel() - устанавливает подпись оси X(снизу)
- plt.ylabel() - устанавливает подпись оси Y(слева)
- plt.xticks() - устанавливает для первого диапазона(в нашем случае от 0 до 9) подписи, которые хранятся в labels. Параметр rotation указывает на наклон подписей(сегодня везде оставим его вертикальным, также можно указать значение в градусах).
- plt.bar() - строит диаграмму с подписями labels, значениями values, шириной 0.5(можно указать в параметре width) и цветом HTML.
Результат таков:
Как мы можем заметить, Англия обладает самым большим кол-вом игроков(оно то и понятно, в FIF'e 4 английских лиги), далее идут Германия, Испания и Аргентина. К моему удивлению, Бразилия оказалась далеко не в первых позициях.
Позиции
Бонусный раздел, где ничего рисовать мы не будем, однако должно быть интересно. Речь идёт про позиции футболистов. Сначала взглянем на все столбцы, которые у нас есть:
Видим, что позиции у нас задаются заглавными буквами и имеют строковое значение длиной не более 3 символов. Отбросим другие столбцы:
Удаляем значения ID и Age, они тут быть не должны :). Те, кто играл в фифулю, заметят, что тут есть позиции, карточки которых не существует(например LAM - левый атакующий полузащитник). Объяснить этого я не могу, все вопросы к создателю датасета.
Возраст футболистов
Возраст футболистов у нас хранится в столбце Age.
Для начала посмотрим "границы" возраста футболистов в фифе, то есть максимальный и минимальный возраст:
Создадим словарь со значениями <возраст : кол-во игроков>:
Отлично. Теперь по "старой" схеме рисуем диаграмму:
Устанавливаем промежуток [2, 31), чтобы немного отдалить крайний столбец диаграммы от левого края. Подписываем оси, устанавливаем синий цвет столбцов и ширину столбца 0.75. Все настройки вы можете изменить по своему желанию.
Результат таков:
Наглядно видим, что самым распространённым возрастом среди футболистов в фифе является 21 год, далее расположилось значение в 26 лет.
Рейтинг
Сегодня мы всегда будем пользоваться словарями, они очень удобны для наших задач. Следующим пунктом является рейтинг - общий показатель характеристик футболиста в фифе(максимальное значение обычной золотой карточки - 94).
Получаем словарь типа <рейтинг : кол-во футболистов>:
Примечание. Внимательно ознакомьтесь со всеми столбцами, что у вас есть. С первого раза я подумал, что рейтинг будет хранится в столбце 'Rating', однако был не прав.
Видим, что минимальный рейтинг игрока в фифе - 46, и он всего один.
Теперь строим диаграмму:
Каждый раз мы устанавливаем значение промежутка разным, в зависимости от кол-ва рассматриваемых нами значений. Не забываем подписывать оси и изменять цвет столбцов для большей разнообразности. Получаем:
Самым часто встречаемым рейтингом является 66, что является модой выборки. Давайте узнаем среднее значение:
Получаем значение близкое к 66, что говорит о равномерном распределении игроков на диапазоне рейтинга [46, 66) и (66, 94].
Клубы
В качестве рассматриваемых клубов я выбрал:
- АПЛ - Челси, Ливерпуль.
- Бывшая Ла Лига - Барселона, Реал Мадрид
- Бундес Лига - Бавария Мюнхен
- Лига 1 - ПСЖ
- Серия А - Ювентус
Я мог бы взять другие клубы, на исследование это никак бы не повлияло.
Кол-во игроков
Для получения кол-во игроков каждого клуба проделываем стандартную процедуру:
Теряется порядок клубов(лично у меня первым стал Ювентус), однако поправить это не составит труда. Сейчас же это нам не важно, нам нужно кол-во игроков в виде диаграммы:
Это всё у нас уже было, я поменял только подписи и цвет в виде HTML(небольшую подборку цветов можно найти здесь).
Результат таков:
Как мы видим, многие клубы имеют по 33 игрока в своем составе. Существенно отстает старая Синьора - всего лишь 25.
Средний рейтинг
Дальше интереснее. Мы уже научились вычислять среднее арифметическое с помощью метода mean(). В этот раз используем более сложную маску - массив булевых значений, для выбора нужных строк из таблицы. Нам нужно среднеее значение рейтинга тех строк, значение параметра Club равняется заданному клубу. Реализуется это так:
Я решил округлить результат до целого числа, если вы хотите иначе, используйте функцию round() или вовсе ничего не делайте. Опять же строим диаграмму:
Всё из выше показанного повторялось много раз, потому ничего объяснять не надо. Результат:
Как мы видим, самый высокий средний рейтинг имеет Ювентус, который значительно опережает Барселону, несмотря на наличие Месси у последних(переход Роналду пошел явно на пользу).
Средний возраст
Осталось определить самый "старый" клуб среди выше представленных. Вся процедура остается прежней, просто вместо колонки Рейтинг исследуем колонку Возраст:
Ну и строим диаграмму, меняя цвет столбцов и подписи к осям:
И снова Ювентус самый первый. Здесь можно заметить больший разброс среди остальных клубов, где Барселона оказалась самой "молодой".
Заключение
Сегодня мы построили несколько интересных диаграмм, связанных с футболистами в футбольном симуляторе FIFA. Стоит сказать, что данные могут разниться, поскольку я не уверен, что в рассматриваемом датасете есть сведения про абсолютно всех игроков.
Код из статьи с дополнительными указаниями можно найти тут.
Большое спасибо за прочтение! Пожалуйста, поставь лайк и подпишись на канал, чтобы не пропустить свежие статьи. Этим ты очень поможешь в развитии блога!
Также рекомендую прочитать статью Суицид в Америке