2011-07-28 10 views
7

En mi entorno python, los paquetes Rpy y Scipy ya están instalados.Python: manejo de un gran conjunto de datos. Scipy o Rpy? ¿Y cómo?

El problema quiero abordar es tal:

1) Un gran conjunto de datos financieros se almacenan en un archivo de texto. No es posible cargar en Excel

2) Necesito sumar ciertos campos y obtener los totales.

3) Necesito mostrar las 10 filas principales basadas en los totales.

¿Qué paquete (Scipy o Rpy) es el más adecuado para esta tarea?

Si es así, ¿podría proporcionarme algunos consejos (por ejemplo, documentación o ejemplos en línea) que puedan ayudarme a implementar una solución?

La velocidad es una preocupación. Idealmente escabroso y Rpy puede manejar los archivos de gran tamaño cuando incluso los archivos son tan grandes que no se pueden instalar en la memoria

+0

Puede encontrar información útil en http://www.dabeaz.com/generators-uk/ – lazy1

+1

¿Qué significa 'conjunto enorme' exactamente en su caso? – radek

Respuesta

2

Como se mencionó en @gsk3, bigmemory es un paquete excelente para esto, junto con los paquetes biganalytics y bigtabulate (hay más, pero vale la pena consultarlos). También está ff, aunque no es tan fácil de usar.

Común para R y Python es compatible con HDF5 (vea los paquetes ncdf4 o NetCDF4 en R), lo que hace que sea muy rápido y fácil acceder a conjuntos de datos masivos en el disco. Personalmente, utilizo principalmente bigmemory, aunque eso es específico de R. Como HDF5 está disponible en Python y es muy, muy rápido, es probable que sea su mejor apuesta en Python.

5

Ni Rpy ni Scipy son necesarios, aunque numpy puede hacerlo un poco más fácil. Este problema parece ideal para un analizador de línea por línea. Simplemente abra el archivo, lea una fila en una cadena, escanee la fila en una matriz (vea numpy.fromstring), actualice sus sumas en ejecución y avance a la siguiente línea.

1

No sé nada sobre Rpy. Sí sé que SciPy se usa para hacer un gran número de crujidos con conjuntos de datos realmente grandes, por lo que debería funcionar para su problema.

Como señaló Zephyr, es posible que no necesite ninguno; si solo necesitas mantener algunas sumas en ejecución, probablemente puedas hacerlo en Python. Si se trata de un archivo CSV u otro formato de archivo común, verifique si hay un módulo Python que lo analizará por usted y luego escriba un bucle que sume los valores apropiados.

No estoy seguro de cómo conseguir las primeras diez filas. ¿Puede reunirlos sobre la marcha sobre la marcha, o necesita calcular las sumas y luego elegir las filas? Para reunirlos, es posible que desee utilizar un diccionario para realizar un seguimiento de las 10 mejores filas actuales y usar las claves para almacenar la métrica que utilizó para clasificarlas (para facilitar la búsqueda y descartar una fila si otra fila la reemplaza).) Si necesita encontrar las filas después de completar el cálculo, sorbe todos los datos en numpy.array, o simplemente haga una segunda pasada en el archivo para sacar las diez filas.

3

La E/S de archivos de Python no tiene un mal rendimiento, por lo que solo puede usar el módulo file directamente. Puede ver qué funciones están disponibles ingresando help (file) en el intérprete interactivo. La creación de un archivo es parte de la funcionalidad del lenguaje central y no requiere que usted import file.

Algo así como:

f = open ("C:\BigScaryFinancialData.txt", "r"); 
for line in f.readlines(): 
    #line is a string type 
    #do whatever you want to do on a per-line basis here, for example: 
    print len(line) 

de responsabilidad: Esta es una respuesta Python 2. No estoy 100% seguro de que esto funcione en Python 3.

Te dejo a ti para descubrir cómo mostrar las 10 filas principales y encontrar las sumas de las filas. Esto se puede hacer con una lógica de programa simple que no debería ser un problema sin bibliotecas especiales. Por supuesto, si las filas tienen algún tipo de formato complicado que dificulta el análisis de los valores, es posible que desee utilizar algún tipo de módulo para el análisis, por ejemplo, re (escriba help(re) en el intérprete interactivo).

2

¿Qué tan grande es su información, es más grande que la memoria de su PC? Si se puede cargar en la memoria, puede usar numpy.loadtxt() para cargar datos de texto en una matriz numpy. por ejemplo:

import numpy as np 
with file("data.csv", "rb") as f: 
    title = f.readline() # if your data have a title line. 
    data = np.loadtxt(f, delimiter=",") # if your data splitted by "," 
    print np.sum(data, axis=0) # sum along 0 axis to get the sum of every column 
Cuestiones relacionadas