Python и FIFA

МЕНЮ


Искусственный интеллект
Поиск
Регистрация на сайте
Помощь проекту

ТЕМЫ


Новости ИИРазработка ИИВнедрение ИИРабота разума и сознаниеМодель мозгаРобототехника, БПЛАТрансгуманизмОбработка текстаТеория эволюцииДополненная реальностьЖелезоКиберугрозыНаучный мирИТ индустрияРазработка ПОТеория информацииМатематикаЦифровая экономика

Авторизация



RSS


RSS новости


2019-01-21 13:17

разработка по

Почти все знают о таком футбольном симуляторе, как 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. Стоит сказать, что данные могут разниться, поскольку я не уверен, что в рассматриваемом датасете есть сведения про абсолютно всех игроков.

Код из статьи с дополнительными указаниями можно найти тут.

Также рекомендую ознакомиться с другими материалами посвященными Искусственном интеллекту и языку программирования Python. Ну и подпишись на сообщество CODE BLOG, если все еще этого не сделал. Здесь публикуется лучший контент для программистов.


Источник: m.vk.com

Комментарии: