Любите спорт? Любите анализ данных? Панды - это путь!
В Python есть множество библиотек для анализа данных. Тем не менее, Pandas является наиболее известным, он позволяет нам импортировать данные из разных форматов (CSV, JSON, Excel, SQL) и имеет удобные функции и методы для обработки данных. Панды также очень эффективны при визуализации данных.
После прочтения этой статьи у вас должно быть хорошее представление о возможностях Pandas для анализа и визуализации данных. Некоторые из затронутых тем включают:
- Обработка данных
- Агрегатные функции
- Работа с пропущенными значениями
- Заговор
- Объединение разных файлов
Для этого проекта я взял данные с этого сайта:
Полный проект смотрите по ссылке: https://github.com/juanpi19/soccer_analysis
Вот 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, и мы знаем, как определить пропущенные значения и заполнить их с некоторыми данными.
Панды очень мощны, и знание того, как их использовать, может помочь вам в игре.
Надеюсь, вам понравилась эта статья. Не стесняйтесь обращаться, если у вас есть какие-либо вопросы.
До позже!