Python. Библиотека Pandas, часть 2

Методы groupby и сводные таблицы

Дата
12 мар. 2021
Автор
Редакция
Python. Библиотека Pandas, часть 2

Продолжаем изучать самые полезные возможности библиотеки Pandas для анализа данных. Рассмотрим метод groupby, сводные таблицы и построим пару простых графиков.

Видео: Фаина Музыка

1. Загрузка и документация

Загрузим те же данные, что использовались на первом занятии, в датафрейм. На этот раз помимо пути к файлу пропишем еще пару параметров к методу read_csv(), которые часто бывают нужны: delimiter (разделитель) и encoding (кодировка). Данные в файлах в формате CSV (comma-separated values) по умолчанию разделены запятыми, но могут быть и другие разделители — точка с запятой, пробел, любой символ. Если это не запятая, тогда такой разделитель нужно прописать в параметре delimiter. Также бывает нужно прописать стандартную кодировку utf-8, чтобы файл открылся без ошибок.

У методов в Pandas может быть очень много параметров. У метода read_csv(), например, их 50.

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

2. Информация по столбцам

Вспомним, как выглядит наш датафрейм. Это данные по смертности населения 204 стран и территорий от разных причин с 2000 по 2019 год (источник: Global Burden of Disease Study 2019 Results. Seattle, United States: Institute for Health Metrics and Evaluation (IHME)).

Основные столбцы: location — страна или территория, sex — пол, cause — причина смерти, year — год, val — показатель смертности (число смертей на 100 000 жителей), upper и lower — верхняя и нижняя граница оценки показателя смертности (мы их не будем использовать).

Вспомним, сколько в нем столбцов и строк.

Метод describe() показывает статистику по всем числовым столбцам.

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

Для нечислового, например, число уникальных значений и сколько записей им соответствуют.

3. Сортировка и топы значений

Вспомним, как отсортировать датафрейм по какому-то значению.

Иногда бывает удобно не сортировать весь датафрейм, а только посмотреть самые крупные и мелкие значения. Для этого есть методы nlargest() и nsmallest(). В параметрах можно задать число (сколько строк нужно вывести) и название столбца.

На первом месте смертность от несчастных случаев в Гаити в 2010 году. Тогда там произошло разрушительное землетрясение.

Если отфильтровать датафрейм только по 2019 году, в топе будет смертность от сердечно-сосудистых заболеваний в Болгарии.

В первом уроке мы не упомянули очень удобный метод для фильтрации датафрейма — isin(), поэтому рассмотрим его сейчас. Он нужен, когда в столбце нам требуется не одно значение, а несколько. Например, так можно выбрать сразу несколько стран в столбце location.

Точно так же работает метод nsmallest.

4. Метод Groupby

Это один из методов, которые чаще всего используются в Pandas. Он позволяет сгруппировать данные и быстро получить нужную статистику. Например, посмотрим среднюю смертность для каждой из причин по всем странам и за все годы.

Pandas посчитал и то, что нам не нужно: средний год или среднее для значений upper и lower. Но можно прописать, какая именно статистика и для каких столбцов требуется.

Получившаяся таблица — это тоже датафрейм с индексами (причинами смерти) и столбцами (статистикой).

Выбрать определенные столбцы можно точно так же, как и в обычном датафрейме. Выберем средние показатели смертности и отсортируем по убыванию. Получим самые частые причины смерти в мире с 2000 по 2019. Лидируют сердечно-сосудистые заболевания и рак.

Сгруппируем данные по другим параметрам: по смертности мужчин и женщин от разных причин.

Когда индексов несколько — причина смерти и пол — для выбора значений по ним есть метод xs(). В нем нужно прописать строку (например, Transport injuries или Male/Female) и уровень индекса (cause или sex). Ситуация, когда индексов несколько, называется multi index.

Выбрать определенное значение можно методом loc(), как и в любом датафрейме.

5. Сводные таблицы

На метод groupby похож еще один очень удобный метод — pivot_table, сводных таблиц. Чтобы создать сводную таблицу, нужно прописать несколько параметров:

value — по какому столбцу будут считаться значения

index — что будет индексами (строками слево по вертикали)

columns — что будет столбцами

aggfunc — функция, по которой нужно посчитать (mean, median, count, max, min и др.)

margins — нужно ли добавить обобщенные значения по всем индексам и столбцам (True или False)

dropna — удалить пустые значения, missing values (True или False)

fill_value — чем заполнить ячейки с пустыми значениями (None или число float, по умолчанию None)

В виде индексов у нас страны, в виде столбцов — причины смерти. Значения в ячейках — средняя смертность от этих причин по странам за все годы.

Выбрать определенное значение можно методом loc, слева указав индекс (строку), справа — столбец.

Посмотрим, как менялась смертность по годам от разных причин, поменяв location на year в методе index.

Смертность от сердечно-сосудистых заболеваний в мире растет, а от ВИЧ/СПИДа и ИППП — падает.

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

Смертность от ВИЧ/СПИДА и ИППП в мире начала снижаться с 2004 года, а в России с 2017.

6. Графики

Построим пару простых графиков с помощью библиотеки matplotlib и сводных таблиц. Для этого импортируем модуль pyplot и пропишем, чтобы графики строились прямо в нашей тетради, а не в отдельной вкладке.

Построим график того, как менялась смертность от ВИЧ/СПИДа и ИППП в России по годам. Для этого сначала отфильтруем датафрейм по нужным условиям (страна, оба пола, причина смерти), затем построим из датафрейма сводную таблицу с нужными параметрами, а в конце подпишем plot() для отрисовки графика. Параметр kind указывает на то, какой тип графика нужен: line - линейный (по умолчанию), bar — столбчатая диаграмма, pie — круговая и другие.

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

С помощью таких простых графиков уже можно уже сделать какие-то выводы о данных. В будущем мы будем рассматривать и более сложные визуализации в Python.

Тетрадь с этого урока можно скачать здесь, а задать вопросы и пообщаться — в чате «Мастерской» в Telegram.