2012-05-29 22 views
7

Tengo un archivo de entrada que tiene alrededor de 20 millones de líneas. El tamaño del archivo es de aproximadamente 1.2 G. ¿De todos modos puedo trazar los datos en R. Algunas de las columnas tienen categorías, la mayoría de ellas son números.¿Trazar enormes archivos de datos en R?

He intentado mi script de trazado con un pequeño subconjunto del archivo de entrada de aproximadamente 800K líneas, pero aunque tengo aproximadamente 8G de RAM, parece que no puedo trazar todos los datos. ¿Hay alguna manera simple de hacer esto?

+9

¿Qué esperas ver en una parcela con 20 millones de puntos de datos? – Chase

+5

Independientemente de la capacidad de cómputo, tendrá que reducir sus datos a través de histogramas, gráficos de densidad 1D y 2D, gráficos de hexbin, ... –

+0

... siguiendo la línea de la respuesta de @Paul Hiemstra, si le da alguna más detalles sobre (un subconjunto de) sus datos, puede obtener una interesante discusión sobre las posibilidades de visualización que se ofrecen aquí. Además, 'ggplot' podría ser más lento/más hambriento de memoria que otras posibilidades, si realmente quieres trazar cada punto. –

Respuesta

12

Sin una descripción más clara del tipo de trazado que desea, es difícil dar sugerencias concretas. Sin embargo, en general no hay necesidad de trazar 20 millones de puntos en una trama. Por ejemplo, una serie de tiempo podría representarse mediante un ajuste de splines, o algún tipo de promedio, p. agregue datos por hora a promedios diarios. De forma alternativa, puede dibujar algún subconjunto de los datos, p. solo un punto por día en el ejemplo de las series temporales. Por lo tanto, creo que su desafío no es tanto obtener 20M puntos, o incluso 800k, en una trama, sino cómo agregar sus datos de manera efectiva de forma tal que transmita el mensaje que desea contar.

+3

Muestrear los datos y repetir el proceso algunas veces también mostraría patrones ocultos en los datos. –

+1

Estoy de acuerdo con @ RomanLuštrik, si el patrón se repite para, por ejemplo, muestras de 10.000 puntos, sabe que el patrón es constante (también conocido como estacionario). Si no, una muestra de 10.000 puntos no es suficiente. –

0

¿se amplía la memoria disponible con memory.limit(size=2000) (o algo más grande) ayuda?

3

trazando directamente en un dispositivo de archivo de trama (llamando al png() por ejemplo) es mucho más rápido. Traté de trazar rnorm(100000) y en mi computadora portátil X11 el diagrama de El Cairo tomó 2.723 segundos, mientras que el dispositivo png finalizó en 2.001 segundos. con 1 millón de puntos, los números son 27.095 y 19.954 segundos.

Uso Fedora Linux y aquí está el código.

f = function(n){ 
x = rnorm(n) 
y = rnorm(n) 
png('test.png') 
plot(x, y) 
dev.off()} 

g = function(n){ 
x = rnorm(n) 
y = rnorm(n) 
plot(x, y)} 

system.time(f(100000)) 
system.time(g(100000)) 
4

El paquete hexbin para trazar hexbins en lugar de diagramas de dispersión para pares de variables como lo sugiere Ben Bolker en Speed up plot() function for large dataset me ha funcionado para 2 millones de registros de manera justa con 4 GB de RAM. Pero falló para 200 millones de registros/filas para el mismo conjunto de variables. Traté de reducir el tamaño del contenedor para ajustar el tiempo de cálculo frente al uso de la RAM, pero no ayudó.

Para 20 millones de registros, puede probar hexbins con xbins = 20,30,40 para comenzar.

1

Incrementando la memoria con memory.limit() me ayudó ... Esto es para trazar con ggplot casi 36K registros.

Cuestiones relacionadas