Мы начинаем знакомиться с Pandas — главной библиотекой Python для анализа данных.

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

В отличие от Excel, где тоже широкие возможности для работы с данными, Pandas справится даже с очень большими файлами, в которых сотни тысяч и миллионы строк. Стандартному Excel такое не под силу, как и работа с файлами в формате json — именно в таком формате часто хранятся открытые данные. Например, на сайте ГосРасходы данные о государственных контрактах и субсидиях можно выгрузить только в json.

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

Видео: Глеб Лиманский

1. Создаём датафреймы с нуля

Для начала загрузим библиотеку pandas, сокращенно будем обращаться к ней pd. 

Если вы работаете не через Анаконду, загружайте Pandas командой pip3 install pandas.

В Pandas данные представлены в виде датафрейма, или таблицы с данными. Её можно создать с нуля, например, из словарей, списков или кортежей. 

Создадим свой первый датафрейм для трех крупнейших городов России. Перед нами словарь, в котором ключами являются city и population, а значениями — списки с названиями этих городов и численностью населения, которая им соответствует.

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

Также можно создать датафрейм из списка списков.

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

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

2. Создаем датафрейм из файла

Сегодня мы будем работать с данными по смертности людей от разных причин. Перейдем на сайт Института оценки показателей здоровья США и выберем нужные показатели смертности по странам. 

Выберем такие показатели:

  • Location: Countries and territories (Страны и территории)
  • Year: 2000-2019
  • Content: Cause (причина смерти)
  • Age: All ages
  • Metric: Rate (число смертей от определенной причины на 100 тысяч жителей)
  • Measure: Deaths (смерти)
  • Sex: Male, Female, Both
  • Cause: level 2 causes (2 уровень детализации причин смерти)

Дальше кликнем Download csv (скачать в формате csv).

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

Данные могут прийти не сразу, поэтому тот же самый датасет можно скачать по ссылке. Это большой датасет на 260 тысяч строк, с которым было бы непросто работать в Excel. 

Скопируем путь к файлу на компьютере и загрузим его сразу в датафрейм с помощью метода pd.read_csv().

Выведем первые 5 строк датафрейма методом .head().

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

Последние строки выводятся методом .tail().

Метод df.info() дает описание датафрейма: сколько в нем строк и столбцов, какие типы данных содержатся, сколько не пустых значений (non-null), сколько памяти занимает.

Если мы хотим только узнать, сколько в нем строк и столбцов, используем атрибут shape. 

Метод describe дает статистику по числовым столбцам: среднее, максимум и минимум, квартили, стандартное отклонение.

Если нам для статистики нужны не только числовые столбцы, но и все остальные, добавим аргумент all. 

Тогда к таблице добавятся поля unique (сколько в столбце уникальных значений), top (какое значение встречается чаще всего) и freq (сколько раз встречается самое частое значение).

У нас в датафрейме нет пустых значений (missing values, NA), но часто они бывают в реальных данных, «загрязняют» их и мешают с ними работать. От пустых значений можно избавиться методом dropna.

3. Фильтруем датафрейм по названию столбца и индексам

Выбрать определенный столбец можно двумя способами:

Также можно вывести на экран сразу несколько столбцов, обернув их в двойные квадратные скобки.

Ещё для выбора столбцов и строк существует методы loc и iloc. Loc — для выбора по названию, iloc — по индексу (порядковому номеру).

Если нам нужны только строки с 100 по 110, пропишем это условие слева.

Если мы хотим выбрать столбцы и строки не по названию, а по номеру, задействуем метод iloc. Это бывает полезно, например, когда названия столбцов слишком длинные.

Важно: в методе loc включаются все указанные в условии числа, поэтому мы видим строку 110, а в iloc правый конец исключается (как в стандартных срезах в Python), поэтому последняя строка, которую мы видим — 109. Чтобы вывести на экран строки 100:110, нужно было бы указать df.iloc[100:111, 0:3].

4. Фильтруем датафрейм по условиям

В Pandas очень удобно выбирать данные по условию. Например, нам нужны показатели смертности только для Both sexes, обоих полов.

Или по трем условиям: оба пола, только 2019 год, только сердечно-сосудистые заболевания.

Или по четырем: оба пола, только 2019 год, только сердечно-сосудистые заболевания, только больше 600 смертей на 100 тысяч жителей.

Мы видим страны с самой высокой смертностью от сердечно-сосудистых болезней. Cохраним результат в отдельный датафрейм и назовем его cardio.

И отсортируем его по показателю смертности от сердечно-сосудистых болезней. Оказывается, чаще всего от проблем с сердцем умирают в Болгарии.

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

Если мы не знаем точно, как называется причина смерти, либо название слишком длинное, удобно использовать метод contains (содержит). Метод str.contains("HIV") выдаст нам строки, в которых упоминается HIV (ВИЧ).

Если нам, наоборот, нужны строки, в которых НЕ упоминается ВИЧ, то можно добавить либо условие False в конце, либо знак ~ в начале.

5. Удаляем, добавляем столбцы, меняем названия

Видно, что значения в столбцах measure, metric, age одинаковые. Также мы не будем работать с столбцами lower и upper (нижняя оценка показателя смертности и высокая), поэтому их можно удалить. Для этого используем метод drop.

Чтобы удалить несколько столбцов, обернем их в квадратные скобки.

Аргумент axis =1 показывает, что удалить нужно именно столбец (1 — столбцы, 0 — строки). 

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

Переименовать столбцы тоже несложно. Переименуем, например, val в value.

6. Сохраняем датафрейм 

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

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