🐼 ТОП-5 функций Pandas 2.0: Data Science специалисты отправятся «в утиль»?
Все новые функции в Pandas 2.0 для анализа данных. Опробуем на популярных пакетах: ydata-profiling, matplotlib, seaborn и scikit-learn.
Новые ТОП-5 функций для эффективной обработки данных освободят часть работы разработчиков P.S. Дочитай до конца! Ты получишь бонус по работе с pandas 2.0
— шаблоны по визуализации табличных данных.
Введение
Благодаря своей обширной функциональности и универсальности, pandas завоевала место в сердце каждого специалиста data science.
💡 Pandas — это библиотека Python для обработки и анализа структурированных данных, её название происходит от «panel data» («панельные данные»).
Панельными данными называют информацию, полученную в результате исследований и структурированную в виде таблиц. Для работы с такими массивами данных и создан Pandas.
От ввода / вывода данных до очистки и преобразования данных — практически невозможно представить себе работу с данными без import pandas as pd
, верно?
Создатели столь популярной библиотеки сложа руки не сидели, и вот 16 марта, после 3 лет разработки, был выпущен второй релиз
. В pandas 2.0
появилось много новых функций, включая улучшенную поддержку массивов расширений, поддержку pandas 2.0
для фреймов данных и разрешение даты и времени, отличного от наносекундного, а также множество исправлений и, следовательно, изменений API.pyarrow
Итак, что же революционного предлагает
? Настраиваем свои нейрончики и внимательно читаем 💪pandas 2.0
1. Производительность, скорость и эффективность использования памяти
Изначально
был создан с использованием библиотеки pandas
, которая намеренно не разрабатывалась в качестве серверной части для фреймворков данных. По этой причине одним из основных ограничений numpy
pandas
была обработка больших наборов данных в памяти.
В этом релизе 2.0
большое изменение связано с внедрением серверной части Apache Arrow для данных pandas.
По сути, Arrow — это стандартизированный формат столбчатых данных в памяти с доступными библиотеками для нескольких языков программирования (C, C++, R, Python и других). Для Python есть
, который основан на реализации Arrow на C++ и, следовательно, очень быстр!PyArrow
Суммируя, PyArrow
заботится о предыдущих ограничениях памяти версий 1.X и позволяет выполнять более быстрые и экономичные с точки зрения памяти операции с данными, особенно для больших наборов данных.
Вот сравнение между чтением данных без серверной части
и с ее помощью, используя набор данных Hacker News, который составляет около 650 МБ (лицензия CC BY-NC-SA 4.0):pyarrow
Как вы можете видеть, использование нового бэкенда ускоряет чтение данных почти в 35 раз! Другие аспекты, на которые стоит обратить внимание:
- Без серверной части
каждый столбец / объект хранится как свой уникальный тип данных: числовые объекты хранятся какpyarrow
илиint64
, в то время как строковые значения хранятся как объекты.float64
- В
yarrow
все функции используют типы стрелок: обратите внимание на аннотацию [
] и различные типы данных:pyarrow
,int64
,float64
,string
иtimestamp
:double
2. Типы данных со стрелками и числовые индексы
Помимо чтения данных, что является простейшим случаем, вы можете ожидать дополнительных улучшений для ряда других операций, особенно тех, которые связаны со строковыми операциями, поскольку реализация типа данных string
в pyarrow
довольно эффективна:
Фактически Arrow имеет больше (и лучшую поддержку) типов данных, чем
, которые необходимы вне научной (числовой) области: даты и время, длительность, двоичные числа, десятичные дроби, списки и карты.numpy
Беглый просмотр эквивалентности между типами данных с поддержкой
и pyarrow
на самом деле может быть хорошим упражнением, если вы хотите научиться их использовать.numpy
Кроме того, теперь в индексах можно хранить больше numpy-числовых типов.
Традиционные
, int64
и uint64
освободили место для всех индексных значений числовых типов float64
numpy
, поэтому мы можем, например, вместо этого указать их 32-разрядную версию:
💡 Это долгожданное изменение, поскольку индексы являются одной из наиболее часто используемых функций в pandas
, позволяя пользователям фильтровать, объединять и перетасовывать данные, среди прочих операций с данными. По сути, чем меньше индекс, тем эффективнее будут эти процессы!
3. Упрощенная обработка пропущенных значений
Из-за того, что
был построен поверх pandas
, ему было сложно обрабатывать отсутствующие значения простым и гибким способом, поскольку numpy
не поддерживает значения numpy
для некоторых типов данных.null
Например, целые числа автоматически преобразуются в числа с плавающей запятой, что не идеально:
Обратите внимание, как
автоматически изменяется с points
на int64
после введения единственного значения float64
None
.
Нет ничего худшего для потока данных, чем заданный неправильный тип, особенно в рамках подхода искусственного интеллекта, ориентированного целиком и полностью на данные.
Чем же это опасно? 💀
Ошибочные наборы типов напрямую влияют на решения о подготовке данных, вызывают несовместимость между различными фрагментами данных, и даже при передаче в автоматическом режиме они могут поставить под угрозу определенные операции, которые в ответ выдают бессмысленные результаты.
В
мы можем использовать pandas 2.0
, где пропущенные значения учитываются без каких-либо изменений типа, поэтому мы можем сохранить наши исходные типы данных (в данном случае dtype = 'numpy_nullable'
):int64
Это может показаться незначительным изменением, но по правде, это означает, что теперь
может изначально использовать Arrow для работы с отсутствующими значениями. Это делает операции намного более эффективными, поскольку в pandas
не нужно реализовывать собственную версию для обработки нулевых значений для каждого типа данных.pandas
4. Оптимизация копирования при записи
также добавляет новый механизм отложенного копирования, который откладывает копирование фреймов данных и объектов серии до тех пор, пока они не будут изменены.Pandas 2.0
Это означает, что определенные методы будут возвращать представления, а не копии, когда включена функция
(копирования при записи), что повышает эффективность использования памяти за счет сведения к минимуму ненужного дублирования данных.copy-on-write
Это также означает, что вам нужно быть особенно осторожным при использовании цепных назначений.
Если включен режим
, цепные присвоения работать не будут, поскольку они указывают на временный объект, являющийся результатом операции индексирования (который при копировании при записи ведет себя как копия).copy-on-write
Когда
отключен, такие операции, как нарезка, могут изменить исходный copy_on_write
df
при изменении нового фрейма данных:
Когда
включен, копия создается при присвоении, и, следовательно, исходный фрейм данных никогда не изменяется. В таких ситуациях Pandas 2.0 вызовет copy_on_write
(ошибку привязанного назначения), чтобы избежать скрытых ошибок:ChainedAssignmentError
5. Дополнительные зависимости
При использовании
версия 2.0 дает нам гибкость в установке вспомогательных зависимостей, что является плюсом с точки зрения настройки и оптимизации ресурсов.pip
Мы можем адаптировать установку к нашим конкретным требованиям, не тратя дисковое пространство на то, что нам на самом деле не нужно.
Кроме того, это избавляет от многих «головных болей с зависимостями», снижая вероятность проблем с совместимостью или конфликтов с другими пакетами, которые могут возникнуть в наших средах разработки:
Финальный аккорд…
Тем не менее остается вопрос: действительно ли шумиха оправдана? Было любопытно посмотреть, обеспечил ли
значительные улучшения в отношении некоторых пакетов, которые многие разработчики используют ежедневно: pandas 2.0
, ydata-profiling
, matplotlib
seaborn
, scikit-
learn
.
Исходя из этого, мы решили попробовать ydata-профилирование — оно только что добавило поддержку pandas 2.0
. В новой версии пользователи могут быть уверены, что их конвейеры не сломаются, если они используют
, и это большой плюс! Но что еще?pandas 2.0
По правде говоря, профилирование ydata
было одним из самых любимых инструментов многих специалистов для исследовательского анализа данных! С одной стороны, это всего лишь 1 строка кода, но под капотом полно вычислений, которые нужно выполнить — описательная статистика, построение гистограмм, анализ корреляций и так далее.
Итак, что может быть лучше, чем протестировать влияние движка
на все это сразу с минимальными усилиями?pyarrow
Опять же, считывание данных определенно лучше с помощью движка yarrow
, хотя создание профиля данных существенно не изменилось с точки зрения скорости.
Тем не менее различия могут зависеть от эффективности использования памяти, для чего нам пришлось бы провести другой анализ. Кроме того, мы могли бы дополнительно изучить тип анализа, проводимого над данными: для некоторых операций разница между версиями 1.5.2 и 2.0 кажется незначительной.
Но главное, что может иметь значение — это то, что
еще не использует типы данных ydata-profiling
. Это обновление может оказать большое влияние как на скорость, так и на объем памяти, и мы с нетерпением ждем его в будущих разработках!pyarrow
Вердикт: Производительность, гибкость, интер-операбельность!
Эта новая версия
обеспечивает большую гибкость и оптимизацию производительности благодаря тонким, но важным модификациям «под капотом».pandas 2.0
Может быть они и не «кричащие» для новичков в области анализа данных, но они словно вода в пустыне для опытных специалистов по обработке данных, которые привыкли прыгать через горящие костры, чтобы преодолеть ограничения предыдущих версий.
Подводя итог, можно сказать, что это главные преимущества, представленные в новой версии:
- Оптимизация производительности: Благодаря внедрению серверной части Apache Arrow, большему количеству индексов
и режиму копирования при записи;numpy
dtype
- Дополнительная гибкость и настройка: позволяет пользователям управлять необязательными зависимостями и использовать преимущества типов данных Apache Arrow (включая возможность обнуления с самого начала!);
- Совместимость: возможно, это менее «признанное» преимущество новой версии, но имеющее огромное значение. Поскольку Arrow не зависит от языка, данные в памяти могут передаваться между программами, построенными не только на Python, но также R, Spark и другими, использующими серверную часть Apache Arrow!
Pandas 2.0
предлагает множество новых и интересных функций. Мы ознакомились с парой из них и рассмотрели, как их использовать. В утиль data science специалистов отправлять пока рано — есть еще много задач по анализу данных, а
в этом поможет!
Надеемся, что данная статья оказалась для вас полезной!pandas 2.0
Бонус!
Ура! Ты прочитал всю статью и теперь знаешь больше про pandas 2.0
. Ниже мы прикрепили полезные шаблоны по визуализации табличных данных.