Любите спорт? Любите анализ данных? Панды - это путь!

В Python есть множество библиотек для анализа данных. Тем не менее, Pandas является наиболее известным, он позволяет нам импортировать данные из разных форматов (CSV, JSON, Excel, SQL) и имеет удобные функции и методы для обработки данных. Панды также очень эффективны при визуализации данных.

После прочтения этой статьи у вас должно быть хорошее представление о возможностях Pandas для анализа и визуализации данных. Некоторые из затронутых тем включают:

  • Обработка данных
  • Агрегатные функции
  • Работа с пропущенными значениями
  • Заговор
  • Объединение разных файлов

Для этого проекта я взял данные с этого сайта:



Полный проект смотрите по ссылке: https://github.com/juanpi19/soccer_analysis

Вот 5 основных функций, которые мы рассмотрим:

  1. Значение имеет значение
  2. Группа по
  3. Конкат
  4. Нулевые значения
  5. Заполнить пустые значения

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

Столбцы, с которыми мы будем работать:

Дивизион = Дивизион Лиги

Дата = Дата матча (дд/мм/гг)

Время = время начала матча

Домашняя команда = Домашняя команда

Команда гостей = Команда гостей

FTHG и HG = Цели домашней команды на полный рабочий день

FTAG и AG = Цели команды на выезде на полное время

FTR и Res = результат основного времени (H = победа дома, D = ничья, A = победа в гостях)

HTHG = Голы домашней команды в первом тайме

HTAG = Командные голы в перерыве между таймами

HTR = результат первого тайма (H=победа хозяев, D=ничья, A=победа гостей)

HS = удары домашней команды

AS = Командные броски в гостях

HST = Удары домашней команды в створ

AST = Удары команды гостей в створ

HC = Домашние угловые команды

AC = Угловые команды гостей

HF = Совершенные фолы домашней команды

AF = Совершены фолы команды гостей

HY = Желтые карточки домашней команды

AY = Желтые карточки для команды гостей

HR = Красные карточки домашней команды

AR = Красные карточки гостевой команды

Барселона против Реал Мадрид играет в Барселоне. «Реал Мадрид» — команда гостей, а «Барселона» — команда хозяев.

Теперь, когда мы знаем данные, с которыми собираемся работать, пришло время их проанализировать!

Количество значений

Эта функция возвращает серию, содержащую количество уникальных значений.

Мы берем столбец HomeTeam и применяем функцию value_counts(), чтобы узнать, сколько раз каждая команда играла дома.

Мы также можем выполнять арифметические операции, используя value_counts().

Я объединил подсчеты каждой команды в столбцах HomeTeam и AwayTeam, и в итоге мы получили общее количество игр, сыгранных каждой командой.

Давайте теперь поработаем со столбцом FTR (Final Time Result), который имеет три уникальных значения: H, A, D.

H означает победу команды хозяев, A означает победу команды гостей, а D означает ничью.

Здесь мы фильтруем данные только для записей, в которых столбец FTR (конечный результат времени) равен H, затем мы используем функцию value_counts(), чтобы увидеть, у каких команд было больше всего H. У команды Атлетико Мадрид 15, значит, дома они выиграли 15 раз.

Давайте теперь посмотрим на команды с наибольшим количеством побед как в домашних играх, так и в играх на выезде.

Группа по

Это агрегатная функция. Это позволяет нам сделать один или несколько из следующих шагов.

  • Разделите данные на группы на основе некоторых критериев
  • Применение некоторой функции к каждой группе независимо
  • Объедините результаты в структуру данных

Мы можем применить следующие функции к группам groupby:

  • Значит
  • медиана
  • Считать
  • Сумма
  • Максимум
  • Мин.
  • Режим
  • Стандартное отклонение (стандартное)

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

Мы также можем создавать новые кадры данных с результатами, которые мы получаем

Индекс этого нового фрейма данных — это столбец HomeTeam.

Мы также можем рассчитать среднее количество голов, забитых каждой командой в домашних играх.

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

Теперь, когда мы разобрались с основами groupby. Пришло время провести более интересный анализ

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

Конкат

Функция concat Pandas помогает нам выполнять операции конкатенации вместе с осью Pandas.

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

Теперь давайте объединим наши данные из разных сезонов в один фрейм данных.

Раньше у нас было 380 строк, а теперь 1140. У нас есть все данные за сезоны 2020, 2019 и 2018 годов в одном кадре данных.

Отсутствующие значения

Теперь, когда мы объединили все данные в один кадр данных, мы можем использовать функцию isnull(), чтобы проверить, есть ли пропущенные значения. Isnull() возвращает логическое значение, возвращает true, если значение равно null, и false, если значение не равно null.

В столбце «Время» пропущено 380 значений. Это происходит из-за того, что в одном из наборов данных подмножества не было столбца «Время», поэтому, когда мы объединили все наборы данных подмножества, это просто заполнило эти пробелы отсутствующими значениями.

Что делать с отсутствующими данными?

  • Мы могли бы удалить все строки, содержащие пропущенные значения
  • Мы могли бы заполнить недостающие значения некоторыми данными

Удаление строк, содержащих пропущенные значения, может привести к потере ценных данных, поэтому, если вы не хотите пропускать данные, вы можете заполнить пропущенные значения.

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

Мы преобразуем столбец в целое число, потому что не можем найти режим, если столбец имеет тип объекта, и нам нужен режим для заполнения пропущенных значений.

Теперь пришло время изменить тип столбца и заполнить недостающие данные с помощью режима.

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

Мы рассмотрели довольно много в этой статье. Мы узнали о функции подсчета значений, как применять агрегатные функции к подгруппам в наших данных, используя функцию groupby, мы знаем, как складывать разные кадры данных друг на друга, используя функцию concat, и мы знаем, как определить пропущенные значения и заполнить их с некоторыми данными.

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

Надеюсь, вам понравилась эта статья. Не стесняйтесь обращаться, если у вас есть какие-либо вопросы.

До позже!