Что такое панды?
В отличие от настоящих панд, Pandas - это чрезвычайно быстрая и эффективная библиотека под капотом. Pandas - один из самых популярных инструментов для анализа и обработки данных в Python. Pandas стремится стать фундаментальным строительным блоком высокого уровня для практического и реального анализа. Без чистого набора данных с моделями машинного обучения может быть сложно работать или вообще не работать. Pandas также полагается на другие пакеты python, Numpy и Matplotlib, чтобы помочь многим функциям, производным от библиотеки. Каждый специалист по данным должен уметь легко перемещаться и легко манипулировать наборами данных, и это цель Pandas.
Когда и где?
В любом месте, где есть данные, конечно же, можно использовать панд. Вот обширный список причин, почему использовать эту библиотеку:
- Инструменты для чтения и записи между структурами данных в памяти и форматированием, например CSV, Microsoft Excel, базы данных SQL
- Гибкое изменение формы наборов данных
- Срезы на основе меток, модное индексирование и разбиение больших наборов данных на подмножества
- Столбцы могут быть вставлены и удалены из структур данных для изменения размера.
- Высокопроизводительное слияние и объединение наборов данных
- Высоко оптимизирован для производительности, критические пути кода написаны на Cython и C
- Используется в самых разных областях, таких как статистика, реклама, нейробиология, финансы и т. Д.
За кулисами Python и Pandas
Давайте сначала посмотрим, как работают списки Python и как они будут сравниваться с массивами numpy (используемыми в Pandas). Когда вы думаете о хранилище на уровне Python, управление этими данными может быть связано с большими накладными расходами.
PyObject_Head
- Количество ссылок
- Тип
- Значение (или указатель на значение)
Python выполняет здесь большую часть бухгалтерии, поэтому вам не нужно управлять памятью самостоятельно. Каждый из этих объектов Python должен иметь эти накладные расходы (подумайте о миллионах объектов) и может быстро складываться. Эта проблема возникает еще больше, когда мы думаем о списке в Python.
Каждый элемент в списке является указателем на другой объект Python. Итак, каждый раз, когда мы просматриваем этот массив, мы должны выполнять поиск. Несмотря ни на что, все это добавляет дополнительные накладные расходы, что означает больше времени и обработки со стороны Python. Это еще один компонент того, чего мы хотим избежать при управлении данными.
Как мы можем это исправить?
Numpy Arrays
Массив numpy по существу позволяет вам иметь значение C-Integer, где эти поля точно соответствуют размерам каждого компонента, но при этом имеют возможность взаимодействовать с ним на более высоких языках. Numpy обеспечивает эффективные векторизованные операции с (nd) массивами.
- Это указатель на память в C или Fortran.
- На основе надежного кода, написанного на Фортране
- Может оставаться на уровне C, если вы векторизуете операции и используете специальные функции
Однако проблема с numpy заключается в том, что мы должны писать для него функции на C. Это означает, что мы должны обрабатывать управление памятью и все вещи, которые могут пойти не так в кросс-системной совместимости. Итак, следующий шаг, который приведет нас туда, где мы хотим, - это использовать что-то под названием Cython.
Cython - это типизированная версия Python, которая позволяет нам выражать преобразования с помощью numpy без всякого бухгалтерского кода, который Python выполняет автоматически.
- Компилирует типизированный Python в C
- Специализируется на numpy
- Встроенные функции
- Вызов функций C
- Пузыри до Python только при необходимости
Следующий уровень, который идет поверх этого, - Numexpr, для компиляции numpy-байт-кода для повышения производительности. Скажем, мы хотим выполнить сложный набор операций с массивом numpy, в Python нам нужно было бы создать промежуточный массив для 2 * a, один для 3 * b и еще один для их сложения. Вместо этого numexpr не копирует, а работает с сегментами массива, выполняя все операции сразу.
- Компилирует байт-код в массиве numpy для оптимизации операций
- Разбивает множество массивов и запускает операции в оптимизированных для кеширования группах.
- Меньше накладных расходов от временных массивов
Еще одна вещь, которую Pandas использует под капотом, - это что-то под названием Klib. Хотя поиск в словарях Python выполняется очень быстро, Klib позволяет выполнять поиск еще быстрее, специализируясь на различных типах словарей. Он может реализовывать специальные словари для типов данных, таких как целые числа, числа с плавающей запятой, объекты и т. Д. Klib может делать все это без необходимости переходить на Python.
- К конкретным относятся такие, как kh_get_int32, kh_get_int64 и т. Д.
Заключение и источники
Pandas - отличный инструмент для высокоэффективного управления данными и реализации визуализации наборов данных. Возможность выполнять высокоскоростные числовые операции над структурами данных необходима в любой области науки о данных. Я призываю всех, кто читает это, попробовать эту библиотеку и реализовать ее в своем собственном коде.