May 15, 2020

Pandas для начинающих

На сегодняшний день, пакет Pandas – самый важный инструмент во всем, что касается анализа данных. Многие аналитики и data scientist'ы пользуются этим пакетом.

Если вы думаете о карьере в области data science, то крайне важно, чтобы вы сначала изучили Pandas. В этой статье мы рассмотрим наиболее важную информацию о Pandas, в том числе о том, как его установить и как его использовать.

Для чего нужен Pandas

У Pandas так много применений, что проще перечислить то, что он не может делать, вместо того, что он может делать. Шутка конечно. С помощью этого инструмента вы знакомитесь со своими данными, очищая, трансформируя и анализируя их.

Например, скажем, вы хотите исследовать набор данных, хранящийся в формате CSV на вашем компьютере. Pandas может извлекать данные из CSV в DataFrame – собственный специальный формат данных – и затем позволит вам делать такие вещи, как:

  • Рассчитать статистику и ответить на вопросы о данных, например:
    1. Каково среднее значение, медиана, максимум или минимум каждого столбца?
    2. Коррелирует ли столбец A со столбцом B?
    3. Как выглядит распределение данных в столбце C?
  • Очистить данные, выполнив такие действия, как удаление пропущенных значений и фильтрацию строк и/или столбцов по некоторым критериям
  • Визуализировать данные с помощью Matplotlib. Графики, диаграммы, гистограммы и многое другое
  • Сохранить очищенные, преобразованные данные обратно в CSV, другой файл или базу данных

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

Первые шаги в Pandas

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

Для импортирования пандас обычно используется короткое имя – pd.

Теперь перейдем к базовым компонентам этого пакета.

Ключевые компоненты: Series и DataFrames

Основные компоненты пандас – Series и DataFrame. Series – что-то вроде столбца с данными, DataFrame – это таблица, созданная из столбцов Series.

Существует множество способов создания DataFrame, но на мой взгляд самым простым и удобным является использование словаря.

Теперь создадим DataFrame, в котором содержатся заказы на яблоки и апельсины.

А теперь поглядим что получилось:

Как это работает?

Каждый элемент (ключ, значение) в данных соответствует столбцу в результирующем DataFrame. Индекс в DataFrame пандас создал автоматически в виде чисел 0-3, но мы также можем создать и собственный индекс, в момент инициализации DataFrame.

Давайте в качестве индекса попробуем использовать имена.

Вот что получилось:

Теперь можно запросто найти заказ клиента, используя его имя и функцию loc.

Получаем ожидаемый результат:

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

Чтение данных

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

Чтение данных из CSV

Всё, что нам нужно для работы с CSV-файлами, так это одна строка для загрузки данных.

А вот что получилось:

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

Теперь индексация работает как надо.

Чтение данных из JSON

Если у вас есть JSON-файл (который по сути является словарем), пандас может прочитать его так же легко.

Тот же самый результат:

Обратите внимание, что на этот раз индекс пришел правильно, поскольку мы использовали JSON. Не стесняйтесь открывать файл с данными data.json в блокноте, чтобы видеть как именно он работает.

Pandas попытается выяснить, как создать DataFrame, проанализировав структуру вашего JSON, и иногда это приводит к неправильным результатам. Часто вам будет нужно установить аргумент orient в зависимости от структуры, поэтому обязательно посмотрите документацию read_json об этом аргументе, чтобы узнать, какую ориентацию вы используете.

Наиболее важные операции с DataFrame

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

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

Просмотр данных

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

По умолчанию команда .head() выводит первые 5 строчек, но в аргументах функции можно указать, например, вывести первые 10 строчек – .head(10).

Последние 5 строчек можно вывести с помощью команды .tail(), опять же, в аргументах функции можно указать необходимое число.

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

Получение информации о данных

.info() должна быть одной из первых команд, которую вы запустите сразу после того, как данные будут загружены.

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

Обратите внимание, что в этом наборе данных очевидно есть пропущенные значения в двух последних столбцах. Сейчас мы попробуем обработать эти пропущенные значения.

Как работать с пропущенными значениями

При изучении данных вы, скорее всего, столкнетесь с отсутствующими или нулевыми значениями, которые по сути являются своего рода "заполнителями" для несуществующих значений. Чаще всего это None или np.nan, каждый из которых обрабатывается по-разному в разных ситуациях.

Есть два варианта работы с нулями:

  1. Избавиться от строк или столбцов с нулями;
  2. Заменить нули ненулевыми значениями.

Давайте вычислим общее количество нулей в каждом столбце. Первый шаг – проверить, какие ячейки в DataFrame имеют значение null.

Обратите внимание, что isnull() возвращает DataFrame, где каждая ячейка имеет значение True или False в зависимости от состояния этой ячейки.

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

.isnull() сам по себе не настолько полезен, как его сочетание с другими методами, например с sum().

Теперь мы четко видим, что в revenue_millions отсутствует 128 значений, и 64 – в metascore.

Удаление нулевых значений

Data scientist'ы и аналитики данных регулярно сталкиваются с дилеммой удаления или замены нулевых значений, и это решение всегда требует глубокого знания данных. В целом, удаление нулевых данных рекомендуется только в том случае, если пропущенных данных мало.

Удалить нули довольно просто.

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

Таким образом, эта операция удалит 128 строк из revenue_millions и 64 строки из metascore. Это, очевидно, кажется не самым хорошим решением, поскольку в других столбцах этих пропущенных строк есть совершенно хорошие данные. Вот почему мы сейчас попробуем заменить эти данные ненулевыми значениями.

Замена данных

Замена данных (imputation) – это традиционный метод feature engineering, используемый для работы с данными в которых присутствуют нулевые значения.

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

Давайте посмотрим на замену пропущенных значений в столбце revenue_millions.

Сначала извлечем этот столбец в его собственную переменную.

Использование квадратных скобок – это основной способ выбора столбцов в DataFrame, как если бы нужно было обратиться к значению в словаре dict в Python.

revenue теперь содержит Series, а не DataFrame.

Далее мы заменим нулевые значения в revenue используя средние значения mean по столбцу.

А теперь остается только заменить нулевые значения на средние с помощью функции fillna().

Теперь все нулевые значения заменены на среднее значение этого столбца. Обратите внимание, что при использовании inplace=True фактически был переписан исходный датафрейм movies_df.

Конечный результат получится примерно следующий:

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

Исследование, очистка, преобразование и визуализация данных с помощью Pandas в Python – это важный навык в Data Science. А чистая обработка данных – это целых 80% работы в качестве Data Scientist'а. Поэтому так важно знать основы работы с данными в Pandas.


Статья подготовлена образовательной организацией Python Academy