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

Опыт использования h5py для проведения аналитической работы над большими данными в Python?

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

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

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

EDIT: покупка дополнительного оборудования/памяти, безусловно, может помочь, но с точки зрения ИТ мне трудно продать Python организации, которая должна анализировать огромные наборы данных, когда Python (или R, или MATLAB и т.д.) необходимо провести данных в памяти. SAS продолжает иметь сильную точку продажи здесь, потому что в то время как дисковая аналитика может быть медленнее, вы можете уверенно справляться с огромными наборами данных. Итак, я надеюсь, что Stackoverflowers могут помочь мне разобраться, как уменьшить воспринимаемый риск, используя Python в качестве основного языка аналитики данных.

4b9b3361

Ответ 1

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

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

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

Ловушки HDF5:

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

Ответ 2

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

Три причины:

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

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