¿Experiencia con el uso de h5py para realizar trabajos analíticos en Big Data en Python?

Hago mucho trabajo estadístico y utilizo Python como mi idioma principal. Sin embargo, algunos de los conjuntos de datos con los que trabajo pueden requerir 20 GB de memoria, lo que hace que el funcionamiento con ellos mediante el uso de funciones en memoria en números, scipy y PyIMSL sea casi imposible. El lenguaje de análisis estadístico SAS tiene una gran ventaja aquí, ya que puede operar con datos del disco duro en lugar de ser estrictamente procesado en memoria. Pero, quiero evitar tener que escribir muchos códigos en SAS (por una variedad de razones) y, por lo tanto, estoy tratando de determinar qué opciones tengo con Python (además de comprar más hardware y memoria).

Debo aclarar que los enfoques como map-reduce no ayudarán en gran parte de mi trabajo porque necesito operar con conjuntos completos de datos (por ejemplo, calcular cuantiles o ajustar un modelo de regresión logística).

Recientemente, comencé a jugar con h5py y creo que es la mejor opción que he encontrado para permitir que Python actúe como SAS y opere en datos desde el disco (a través de archivos hdf5), mientras que todavía puedo aprovechar numpy / scipy / matplotlib, etc. Me gustaría saber si alguien tiene experiencia en el uso de Python y h5py en una configuración similar y lo que han encontrado. ¿Alguien ha podido usar Python en la configuración de “big data” dominada hasta ahora por SAS?

EDITAR: la compra de más hardware / memoria ciertamente puede ayudar, pero desde una perspectiva de TI es difícil para mí vender Python a una organización que necesita analizar grandes conjuntos de datos cuando Python (o R, o MATLAB, etc.) necesitan mantener los datos en la memoria . SAS sigue teniendo un fuerte punto de venta aquí porque, aunque los análisis basados ​​en disco pueden ser más lentos, puede manejar con confianza grandes conjuntos de datos. Por lo tanto, espero que los Stackoverflow-ers puedan ayudarme a descubrir cómo reducir el riesgo percibido de usar Python como lenguaje principal de análisis de datos grandes.

Utilizamos Python junto con h5py, numpy / scipy y boost :: python para hacer análisis de datos. Nuestros conjuntos de datos típicos tienen tamaños de hasta unos pocos cientos de GB.

Ventajas de HDF5:

  • los datos pueden ser inspeccionados convenientemente usando la aplicación h5view, h5py / ipython y las herramientas de línea de comandos h5 *
  • Las API están disponibles para diferentes plataformas e idiomas.
  • estructura de datos utilizando grupos
  • anotando datos utilizando atributos
  • Compresión de datos integrada sin preocupaciones.
  • io en conjuntos de datos individuales es rápido

Trampas HDF5:

  • El rendimiento se descompone si un archivo h5 contiene demasiados conjuntos de datos / grupos (> 1000), ya que atravesarlos es muy lento. Por otro lado, io es rápido para algunos conjuntos de datos grandes.
  • Las consultas de datos avanzadas (como SQL) son difíciles de implementar y lentas (considere SQLite en ese caso)
  • HDF5 no es seguro para subprocesos en todos los casos: uno tiene que asegurarse de que la biblioteca se haya comstackdo con las opciones correctas
  • cambiar los conjuntos de datos h5 (cambiar el tamaño, eliminar, etc.) hace saltar el tamaño del archivo (en el mejor de los casos) o es imposible (en el peor de los casos) (todo el archivo h5 debe copiarse para aplanarlo de nuevo)

Este es un comentario largo, no una respuesta a tu pregunta real sobre h5py. No utilizo Python para estadísticas y tiendo a tratar con conjuntos de datos relativamente pequeños, pero podría valer un momento revisar la Vista de tareas de CRAN para una computación de alto rendimiento en R, especialmente la “Memoria grande y fuera de la memoria”. sección de datos.

Tres razones:

  • Puedes extraer el código fuente de cualquiera de esos paquetes para obtener ideas que puedan ayudarte en general.
  • puede encontrar los nombres de paquetes útiles en la búsqueda de equivalentes de Python; muchos usuarios de R son usuarios de Python, también
  • en algunas circunstancias, podría resultar conveniente simplemente vincular a R para un análisis en particular utilizando uno de los paquetes vinculados anteriormente y luego extraer los resultados en Python

De nuevo, enfatizo que todo esto está fuera de mi scope, y es ciertamente posible que ya sepas todo esto. Pero quizás esto le resulte útil a usted o a alguien que trabaje en los mismos problemas.