Flujos de trabajo de "datos grandes" usando pandas

He intentado descifrar una respuesta a esta pregunta durante muchos meses mientras aprendía pandas. Uso SAS para mi trabajo diario y es excelente para el soporte fuera de núcleo. Sin embargo, SAS es horrible como una pieza de software por muchas otras razones.

Algún día espero reemplazar mi uso de SAS con python y pandas, pero actualmente carezco de un flujo de trabajo fuera del núcleo para grandes conjuntos de datos. No estoy hablando de "big data" que requiere una red distribuida, sino de archivos demasiado grandes para que quepan en la memoria pero lo suficientemente pequeños para que quepan en un disco duro.

Mi primer pensamiento es usarHDFStore para mantener grandes conjuntos de datos en el disco y extraer solo las piezas que necesito en los marcos de datos para su análisis. Otros han mencionado a MongoDB como una alternativa más fácil de usar. Mi pregunta es la siguiente:

¿Cuáles son algunos flujos de trabajo de mejores prácticas para lograr lo siguiente:

Cargar archivos planos en una estructura de base de datos permanente en discoConsultar esa base de datos para recuperar datos para alimentar una estructura de datos de pandasActualizando la base de datos luego de manipular piezas en pandas.

Los ejemplos del mundo real serían muy apreciados, especialmente de cualquiera que use pandas en "datos grandes".

Editar - un ejemplo de cómo me gustaría que esto funcione:

Importe de forma iterativa un archivo plano grande y almacénelo en una estructura de base de datos permanente en el disco. Estos archivos suelen ser demasiado grandes para caber en la memoria.Para usar Pandas, me gustaría leer subconjuntos de estos datos (generalmente solo algunas columnas a la vez) que pueden caber en la memoria.Yo crearía nuevas columnas realizando varias operaciones en las columnas seleccionadas.Luego tendría que agregar estas nuevas columnas a la estructura de la base de datos.

Estoy tratando de encontrar la mejor manera de realizar estos pasos. Al leer los enlaces sobre pandas y pytables, parece que agregar una nueva columna podría ser un problema.

Editar - Respondiendo a las preguntas de Jeff específicamente:

Estoy construyendo modelos de riesgo de crédito al consumo. Los tipos de datos incluyen teléfono, SSN y características de dirección; valores de propiedad; información despectiva como antecedentes penales, quiebras, etc. Los conjuntos de datos que uso todos los días tienen un promedio de casi 1.000 a 2.000 campos de datos mixtos: variables continuas, nominales y ordinales de datos numéricos y de caracteres. Rara vez agrego filas, pero sí realizo muchas operaciones que crean nuevas columnas.Las operaciones típicas implican combinar varias columnas usando la lógica condicional en una nueva columna compuesta. Por ejemplo,if var1 > 2 then newvar = 'A' elif var2 = 4 then newvar = 'B'. El resultado de estas operaciones es una nueva columna para cada registro en mi conjunto de datos.Finalmente, me gustaría agregar estas nuevas columnas a la estructura de datos en disco. Repetiría el paso 2, explorando los datos con tablas de referencias cruzadas y estadísticas descriptivas que tratan de encontrar relaciones interesantes e intuitivas para modelar.Un archivo de proyecto típico suele ser de aproximadamente 1 GB. Los archivos se organizan de tal manera donde una fila consiste en un registro de datos del consumidor. Cada fila tiene el mismo número de columnas para cada registro. Este siempre será el caso.Es bastante raro que yo subordiese por filas al crear una nueva columna. Sin embargo, es bastante común para mí crear subconjuntos en filas al crear informes o generar estadísticas descriptivas. Por ejemplo, es posible que desee crear una frecuencia simple para una línea de negocios específica, por ejemplo, las tarjetas de crédito de Retail. Para hacer esto, seleccionaría solo aquellos registros donde la línea de negocio = minorista, además de las columnas sobre las que quiero informar. Sin embargo, al crear nuevas columnas, extraería todas las filas de datos y solo las columnas que necesito para las operaciones.El proceso de modelado requiere que analice cada columna, busque relaciones interesantes con alguna variable de resultado y cree nuevas columnas compuestas que describan esas relaciones. Las columnas que exploro se hacen generalmente en pequeños conjuntos. Por ejemplo, me centraré en un conjunto de, por ejemplo, 20 columnas que solo tratan los valores de las propiedades y observarán cómo se relacionan con el incumplimiento de un préstamo. Una vez que se exploran y se crean nuevas columnas, luego paso a otro grupo de columnas, digo educación universitaria y repito el proceso. Lo que estoy haciendo es crear variables candidatas que expliquen la relación entre mis datos y algún resultado. Al final de este proceso, aplico algunas técnicas de aprendizaje que crean una ecuación a partir de esas columnas compuestas.

Es raro que alguna vez agregue filas al conjunto de datos. Casi siempre crearé nuevas columnas (variables o características en las estadísticas / lenguaje de aprendizaje automático).

Respuestas a la pregunta(13)

Su respuesta a la pregunta