Как оптимизировать pandas при работе с большими datasetами (очерк) |
||
МЕНЮ Искусственный интеллект Поиск Регистрация на сайте Помощь проекту ТЕМЫ Новости ИИ Искусственный интеллект Разработка ИИГолосовой помощник Городские сумасшедшие ИИ в медицине ИИ проекты Искусственные нейросети Слежка за людьми Угроза ИИ ИИ теория Внедрение ИИКомпьютерные науки Машинное обуч. (Ошибки) Машинное обучение Машинный перевод Реализация ИИ Реализация нейросетей Создание беспилотных авто Трезво про ИИ Философия ИИ Big data Работа разума и сознаниеМодель мозгаРобототехника, БПЛАТрансгуманизмОбработка текстаТеория эволюцииДополненная реальностьЖелезоКиберугрозыНаучный мирИТ индустрияРазработка ПОТеория информацииМатематикаЦифровая экономика
Генетические алгоритмы Капсульные нейросети Основы нейронных сетей Распознавание лиц Распознавание образов Распознавание речи Техническое зрение Чат-боты Авторизация |
2019-09-18 07:23 Когда памяти вагоны и/или dataset небольшой можно смело закидывать его в pandas безо всяких оптимизаций. Однако, если данные большие, остро встает вопрос, как их обрабатывать или хотя бы считать. В качестве инфо-основы будет использоваться ранее переведенная статья с Хабра, в которой намешано много интересного. Вместо вступления Датасет хабрастатистики считается небольшим, хотя и занимает 288 Мб и состоит из 448533 строк.
Теперь, если напрямую загрузить dataset в pandas и проверить, сколько он использует памяти
увидим, что он «кушает» 436.1 MB:
Здесь также видно, что мы имеем дело со столбцами, в которых содержатся данные типа object. Следовательно, согласно статье, для столбцов, необходимо ориентироваться на оптимизацию, рассчитанную для object. Для всех столбцов, кроме одного. В столбце b содержатся даты, и, для удобства дальнейших вычислений и наглядности лучше отправить их в index датасета. Для этого изменим код, используемый при считывании датасета:
Теперь даты считываются как index датасета и потребление памяти немного снизилось:
Теперь оптимизируем данные в самом датасете вне столбцов и индекса Оптимизация называется: «Оптимизация хранения данных объектных типов с использованием категориальных переменных». :
*столбец с датами в индексе и не отображен Как видно, из строки unique, в столбцах a и с эффективно объединение в категории. Для столбца а — это 25100 пользователей (явно меньше 448533), для с — 185 значений шкалы с "+" и "-" (тоже значительно меньше 448533). Оптимизируем столбцы:
Чтобы понять сколько памяти используется для удобства введем функцию:
И проверим, была ли оптимизация эффективна:
Как видно, был получен выигрыш еще 50 МВ. Теперь, поняв, что оптимизация пошла на пользу (бывает и наоборот), зададим параметры датасета при считывании, чтобы сразу учитывать данные, с которыми имеем дело:
Желаем быстрой работы с датасетами! Код для скачивания — здесь. Источник: habr.com Комментарии: |
|