Продолжаем изучать самые полезные возможности библиотеки 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.