Опыт использования h5py для аналитической работы с большими данными в Python? - PullRequest
46 голосов
/ 02 февраля 2011

Я много занимаюсь статистикой и использую Python в качестве основного языка. Некоторые из наборов данных, с которыми я работаю, могут занимать 20 ГБ памяти, что делает почти невозможным работу с ними с использованием функций в памяти в numpy, scipy и PyIMSL. Язык статистического анализа SAS имеет здесь большое преимущество в том, что он может работать с данными с жесткого диска, а не только с обработкой в ​​памяти. Но я хочу избежать написания большого количества кода на SAS (по разным причинам) и поэтому пытаюсь определить, какие у меня есть варианты с Python (помимо покупки большего количества оборудования и памяти).

Я должен пояснить, что такие подходы, как сокращение карты, не помогут в большей части моей работы, потому что мне нужно работать с полными наборами данных (например, вычислением квантилей или подбором модели логистической регрессии).

Недавно я начал играть с h5py и думаю, что это лучший вариант, который я нашел для того, чтобы позволить Python действовать как SAS и работать с данными с диска (через файлы hdf5), при этом все еще имея возможность использовать numpy / scipy / matplotlib и т. д. Я хотел бы услышать, есть ли у кого-нибудь опыт использования Python и h5py в аналогичных условиях и что они нашли. Кто-нибудь смог использовать Python в настройках «больших данных», где раньше доминировал SAS?

РЕДАКТИРОВАТЬ: Покупка большего количества оборудования / памяти, безусловно, может помочь, но с точки зрения ИТ мне трудно продавать Python организации, которой необходимо анализировать огромные наборы данных, когда Python (или R, или MATLAB и т. Д.) Должен содержать данные в памяти. SAS по-прежнему имеет сильные коммерческие преимущества, поскольку дисковая аналитика может работать медленнее, но вы можете уверенно работать с огромными наборами данных. Итак, я надеюсь, что Stackoverflow-ers могут помочь мне понять, как уменьшить предполагаемый риск при использовании Python в качестве основного языка анализа больших данных.

Ответы [ 2 ]

49 голосов
/ 02 февраля 2011

Мы используем Python вместе с h5py, numpy / scipy и boost :: python для анализа данных. Наши типичные наборы данных имеют размеры до нескольких сотен гигабайт.

Преимущества HDF5:

  • данные можно удобно просматривать с помощью приложения h5view, h5py / ipython и инструментов командной строки h5 *
  • API доступны для разных платформ и языков
  • структура данных с использованием групп
  • аннотирование данных с использованием атрибутов
  • встроенное сжатие данных без лишних забот
  • io для отдельных наборов данных быстро

Подводные камни HDF5:

  • Производительность падает, если файл h5 содержит слишком много наборов данных / групп (> 1000), потому что их обход очень медленный. С другой стороны, io работает быстро для нескольких больших наборов данных.
  • Расширенные запросы данных (например, SQL) неуклюжи в реализации и медленны (в этом случае рассмотрим SQLite)
  • HDF5 не является поточно-ориентированным во всех случаях: необходимо убедиться, что библиотека скомпилирована с правильными параметрами
  • изменение наборов данных h5 (изменение размера, удаление и т. Д.) Увеличивает размер файла (в лучшем случае) или невозможно (в худшем случае) (весь файл h5 должен быть скопирован, чтобы снова его сгладить)
5 голосов
/ 02 февраля 2011

Это длинный комментарий, а не ответ на ваш настоящий вопрос о h5py.Я не использую Python для статистики и, как правило, имею дело с относительно небольшими наборами данных, но, возможно, стоит потратить немного времени на просмотр задач CRAN для высокопроизводительных вычислений в R, особенно для "Большой памяти"раздел «Данные из памяти».

Три причины:

  • вы можете получить исходный код любого из этих пакетов для идей, которые могут вам в общем помочь
  • вы можете найти имена пакетов полезными при поиске эквивалентов Python;многие пользователи R - пользователи Python, тоже
  • , при некоторых обстоятельствах может оказаться удобным просто связать R с конкретным анализом, используя один из вышеуказанных пакетов, а затем вывести результаты обратно в Python

Опять же, я подчеркиваю, что это все из моей лиги, и, конечно, возможно, что вы уже все это знаете.Но, возможно, это окажется полезным для вас или для тех, кто работает над теми же проблемами.

...