3 способа работы с большими наборами данных в Python
Эта проблема не нова, и, как и во всем остальном, не существует единой волшебной формулы, подходящей для всех. Лучший способ будет зависеть от ваших данных и цели вашего приложения. Однако наиболее популярные решения обычно попадают в одну из категорий, описанных ниже.
Уменьшите использование памяти за счет оптимизации типов данных
При использовании Pandas для загрузки данных из файла он автоматически определяет типы данных, если не указано иначе. В большинстве случаев это будет работать нормально, но предполагаемый тип не обязательно оптимизирован. Более того, если числовой столбец содержит пропущенные значения, то предполагаемый тип автоматически будет плавающим.
Оптимизация типов dtypes при обработке больших наборов данных требует наличия некоторых предварительных знаний о данных, с которыми вы имеете дело. Это может быть бесполезно на чисто исследовательской фазе неизвестного набора данных.
Разделите данные на части
Когда данные слишком велики, чтобы поместиться в памяти, вы можете использовать параметр chunksize Pandas, чтобы разбить данные на куски вместо работы с одним большим блоком. Использование этого параметра создает объект-итератор, который можно использовать для просмотра различных фрагментов и выполнения фильтрации или анализа, как при загрузке полного набора данных.
Разделение на части можно использовать от начального исследовательского анализа до обучения модели и требует очень небольшой дополнительной настройки.
Воспользуйтесь ленивой оценкой
Ленивое вычисление относится к стратегии, которая откладывает вычисление выражения до тех пор, пока значение действительно не понадобится. Ленивое вычисление - это основа, на которой строятся фреймворки распределенных вычислений, такие как Spark или Dask. Хотя они были разработаны для работы с кластерами, вы все равно можете использовать их для обработки больших наборов данных на вашем персональном компьютере.
Основное отличие от Pandas заключается в том, что они не загружают данные непосредственно в память. Вместо этого во время команды чтения происходит сканирование данных, определение dtypes и их разбиение на разделы (пока ничего нового). Вычислительные графы для этих разделов строятся независимо и выполняются только тогда, когда это действительно необходимо (отсюда и лень).