Flujos de trabajo de “datos grandes” usando pandas

| | | | | | | | |

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

Un 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 "grandes datos" que requieren una red distribuida, sino archivos demasiado grandes para cabe en la memoria pero lo suficientemente pequeño como para caber en un disco duro.

Mi primer pensamiento es usar HDFStore para almacenar grandes conjuntos de datos en el disco y extraer solo las piezas que necesito en marcos de datos para analizar. Otros han mencionado a MongoDB como una alternativa más fácil de usar. Mi pregunta es esta:

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

  1. Cargar archivos planos en una estructura de base de datos permanente en disco
  2. Consultar esa base de datos para recuperar datos para alimentar una estructura de datos de pandas
  3. Actualizar la base de datos después de manipular piezas en pandas

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 funcionara:

  1. Importar de forma iterativa un archivo plano grande. y guárdelo en una estructura de base de datos permanente en disco. Estos archivos suelen ser demasiado grandes para caber en la memoria.
  2. Para usar Pandas, me gustaría leer subconjuntos de estos datos (generalmente solo unas pocas columnas a la vez) que puedan caber en la memoria.
  3. Crearía nuevas columnas realizando varias operaciones en las columnas seleccionadas.
  4. Entonces tendría que agregar estas nuevas columnas a la estructura de la base de datos.

Estoy tratando de encontrar una forma de mejores prácticas para realizar estos pasos. Al leer enlaces sobre pandas y pytables, parece que agregar una nueva columna podría ser un problema.

Editar: respondiendo específicamente a las preguntas de Jeff:

  1. Estoy creando consumidores modelos de riesgo crediticio. Los tipos de datos incluyen características de teléfono, SSN y dirección, valores de propiedad, información despectiva como antecedentes penales, bancarrotas, etc. Los conjuntos de datos que uso todos los días tienen casi 1,000 a 2,000 campos en promedio de tipos de datos mixtos: variables continuas, nominales y ordinales de datos numéricos y de caracteres. Rara vez agrego filas, pero realizo muchas operaciones que crean nuevas columnas.
  2. Las operaciones típicas implican combinar varias columnas usando lógica condicional en una nueva columna compuesta columna. 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.
  3. Finalmente, me gustaría agregar estas nuevas columnas a la estructura de datos en disco. d repita el paso 2, explorando los datos con tabulaciones cruzadas y estadísticas descriptivas tratando de encontrar relaciones interesantes e intuitivas para modelar.
  4. Un archivo de proyecto típico suele ser de aproximadamente 1 GB. Los archivos se organizan de tal manera que una fila consta de un registro de datos del consumidor. Cada fila tiene el mismo número de columnas para cada registro. Este siempre será el caso.
  5. Es bastante raro que haga subconjuntos por filas al crear una nueva columna. Sin embargo, es bastante común para mí subconjuntos por filas al crear informes o generar descripciones Estadísticas. Por ejemplo, es posible que desee crear una frecuencia simple para una línea de negocio específica, por ejemplo, tarjetas de crédito minoristas. 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.
  6. 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 generalmente se hacen en pequeños conjuntos. Por ejemplo, me centraré en un conjunto de, digamos, 20 columnas que solo se ocupan de los valores de las propiedades y observaré cómo se relacionan con el incumplimiento de pago de un préstamo. Una vez que se exploran y se crean nuevas columnas, paso a otro grupo de columnas, digamos 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 funciones en el lenguaje de estadísticas/aprendizaje automático).

Flujos de trabajo de "datos grandes" usando pandas __del__: Questions

Flujos de trabajo de "datos grandes" usando pandas _files: Questions

Shop

Best Python online courses for 2022

$

Best laptop for Fortnite

$

Best laptop for Excel

$

Best laptop for Solidworks

$

Best laptop for Roblox

$

Best computer for crypto mining

$

Best laptop for Sims 4

$

Best laptop for Zoom

$499

Latest questions

NUMPYNUMPY

psycopg2: insert multiple rows with one query

12 answers

NUMPYNUMPY

How to convert Nonetype to int or string?

12 answers

NUMPYNUMPY

How to specify multiple return types using type-hints

12 answers

NUMPYNUMPY

Javascript Error: IPython is not defined in JupyterLab

12 answers

News

Wiki

Python OpenCV | cv2.putText () method

numpy.arctan2 () in Python

Python | os.path.realpath () method

Python OpenCV | cv2.circle () method

Python OpenCV cv2.cvtColor () method

Python - Move item to the end of the list

time.perf_counter () function in Python

Check if one list is a subset of another in Python

Python os.path.join () method