[R-es] Leyendo ficheros de datos enormes con R: nuevo paquete "colbycol"

Carlos J. Gil Bellosta cgb en datanalytics.com
Dom Mayo 10 16:40:46 CEST 2009


Hola, ¿qué tal?

Leer ficheros de texto de varios GBs de tamaño con datos desde R
representa un problema recurrente.

He creado un proto-paquete (dejará de apellidarse "proto" cuando achique
la lista de los TODOs) que permite hacer "algo" cuando uno se enfrenta a
dicho problema. La estrategia es la siguiente:

1) La función de lectura de R reenvía el fichero a un script en python
que lee el fichero línea a línea.

2) Este script crea n ficheros de texto, donde n es el número de
columnas.

3) R lee entonces cada fichero-columna individualmente.

4) R reemplaza los ficheros-columna de texto por volcados de los objetos
de R correspondientes con "save".

5) Lo único que queda en memoria es un objeto con metadatos que sabe
leer las columnas una a una.

El usuario puede entonces analizar las columnas (por ejemplo, en busca
de atípicos, etc.), crear data.frames de análisis con las columnas
interesantes, remuestrear las columnas para crear suconjuntos de los
datos, etc.

Con este paquete he conseguido leer un fichero que originalmente ocupaba
3.5GB y examinar su contenido.

Sobre el objeto que reside en memoria (de la clase colbycol) se pueden
aplicar las funciones ncol, nrow, colnames, etc.

La lista de los TODOs, como anunciaba, es extensa:

1) "Produccionalizarlo" controlando más errores, etc.

2) Añadirle funciones adicionales que hagan más cómodo el trabajar con
estos nuevos objetos.

3) Permitir que los objetos creados puedan hacerse persistentes entre
sesiones, es decir, que puedan guardarse y abrirse en una nueva sesión.

4) Ver si funciona sobre Windows (debería funcionar siempre y cuando
python esté en el "path", creo, aunque no lo he probado).

Invito a los interesados a que le echen un vistazo. Pueden descargárselo
de:

http://www.datanalytics.com/pdf/colbycol_0.1.tar.gz

Puede probarse con el conjunto de datos

http://www.datanalytics.com/pdf/DWH_AAPTNXACCT.zip

Basta con bajar ambos ficheros, instalar el paquete, descomprimir el
fichero de datos y hacer algo así como:

library(colbycol)
kk <-
cbc.read.table( "/home/carlos/src/r/tmp_colbycol/data/DWH_AAPTNXACCT.txt", "/home/carlos/src/r/tmp_colbycol/resultados/", sep = "|", header = TRUE )
ncol(kk)
nrow(kk)
colnames( kk )
col.1 <- cbc.get.col( kk, 1 )
col.source <- cbc.get.col( kk, "SOURCE_SYSTEM_CD" )

Por supuesto, los caminos de los ficheros tienen que ser cambiados (y
recomiendo usar caminos absolutos, no relativos).

¿Sugerencias? ¿Cree alguien que este paquete vale la pena?

Un saludo,

Carlos J. Gil Bellosta
http://www.datanalytics.com



Más información sobre la lista de distribución R-help-es