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
, каждый из которых обрабатывается по-разному в разных ситуациях.
Есть два варианта работы с нулями:
- Избавиться от строк или столбцов с нулями;
- Заменить нули ненулевыми значениями.
Давайте вычислим общее количество нулей в каждом столбце. Первый шаг – проверить, какие ячейки в 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