R requiere que los datos se carguen en la RAM, ¿eso no dificulta el trabajo con grandes conjuntos de datos? En caso afirmativo, ¿cómo es R tan popular entre los científicos de datos?

Inicialmente solo iba a comentar, no a responder, pero como varias personas lo han mencionado brevemente, creo que merece expandirse. Las personas con entrenamiento en estadísticas entienden el muestreo. En algún momento, cuando intente integrar análisis o un sistema de aprendizaje automático en el código de producción, necesitará algo que se amplíe a un clúster de tamaño arbitrario que pueda extenderse a través de máquinas virtuales en centros de datos, Dios sabe dónde, pero cuándo está realizando su trabajo básico, explorando datos, formando y probando hipótesis, construyendo y evaluando modelos predictivos, no necesita usar los 5 TB más de lo que Nate Silver necesitaba para sondear a cada votante en Estados Unidos para predecir con resultados perfectos de elección de precisión en todos los distritos del país.

No te lo tomes a mal. Las muestras más grandes arrojan conclusiones más sólidas, pero el metanálisis que implicaba sacar conclusiones de muchos estudios agregados existía antes de los grandes datos y realmente antes de que las estadísticas fueran incluso principalmente computacionales y es muy fácil formar modelos formados en corridas completamente separadas entre sí, aunque ciertamente es más rápido y satisfactorio de una manera muy agradable de poder hacerlo todo a la vez en un gran sistema distribuido.

También tenga en cuenta que SparkR es una cosa ahora, por lo que puede usar R encima de Hadoop. Microsoft también adquirió Revolution Analytics y está convirtiendo a R en la pieza central de sus sistemas de aprendizaje automático de Azure. Solo porque requirió cargar todos los datos en la memoria en 1994 o cuando salió por primera vez y solo podía ejecutarlo en una sola máquina en la parte superior de la biblioteca C nativa, no significa que ese sea el caso. Cuando utiliza un clúster local de servidores de los que es propietario y está razonablemente seguro de que no se irá a la basura en medio de su trabajo y no necesita replicación automatizada y gestión de conmutación por error proporcionada por el modelo MapReduce, puede usar algo como nieve. También hay Bigmemory, por lo que ni siquiera es cierto cuando trabajas en una sola máquina que tus datos deben caber en la memoria para que puedas usarlos todos. Incluso dplyr puede operar en tablas de bases de datos relacionales en lugar de data.frames si lo desea, aunque podría decirse que en ese momento también puede usar SQL, que será mucho más rápido.

Sí, tienes razón en que el espacio de trabajo de R se basa en la RAM.

Digamos que tengo 8 GB de RAM, eso significa que el conjunto de datos máximo que puedo analizar en R es en realidad mucho menor que 8 GB , porque debe haber espacio adicional para los datos intermedios generados por la manipulación de datos, sin incluir el escenario donde un algoritmo ingenuo como un anidado El bucle puede hacer que la memoria se desborde fácilmente.

Por lo tanto, usar R para grandes conjuntos de datos es muy difícil. De hecho, sería muy lento o imposible. A pesar de eso, R es muy popular porque:

  • Soporte sólido, con tantos paquetes que se adaptan a casi todas las necesidades. Por lo tanto, desea analizar un gráfico de la matriz de adyacencia, simplemente llame al paquete “Igraph” de la biblioteca. Trazado? Lattice, ggplot2, ggvis, etc. ¿Aprendizaje automático? Lineal, regresión logística, k-significa paquetes de agrupamiento están todos allí.
  • Los sustitutos cercanos: SAS, SPSS, son muy caros.
  • Rápido para análisis de datos exploratorios y prototipos prácticos de productos de datos y muchos otros usos rápidos. Por ejemplo, le interesa ver cómo se ve una pequeña pieza de un conjunto de datos de 600GB antes de usar una herramienta más poderosa para analizarlo, puede usar R para analizar las primeras 10,000 filas en ese conjunto de datos y ver qué hay allí. R es, por lo tanto, muy bueno para la exploración rápida de datos.

Cuando se trata de grandes conjuntos de datos, quizás la computación en la nube (AWS) es una mejor opción. En los centros de computación de alto rendimiento, generalmente hay grupos de computadoras que tienen enormes RAM, sin embargo, por lo general, los analistas de datos utilizan herramientas escalables como el marco Hadoop para analizarlos. Además, generalmente esas son operaciones costosas (si eres un ejército de un solo hombre, debes comprar créditos de AWS o Azure para ejecutar), por lo tanto, R se usa primero para analizar pequeños subconjuntos de esos grandes conjuntos de datos para asegurarte Las grandes operaciones no desperdician créditos.

Si está cargando un conjunto de datos muy grande (por ejemplo, más de 2 GB) en R, probablemente no esté utilizando R de la forma prevista.

El enfoque que uso para analizar grandes conjuntos de datos es a) cargar mis datos en una base de datos tradicional optimizada para grandes conjuntos de datos como mySQL o MSSQL b) realizar agregaciones y / o muestreos del gran conjunto de datos yb) cargar el extracto más pequeño en R para analizar.

Si bien es cierto que las bases de datos tradicionales necesitarán acceder al disco para realizar consultas, también tienen una gran cantidad de optimización incorporada (almacenamiento en caché, índices, etc.) que las hacen ideales para almacenar grandes bases de datos.

Toda la base de la ciencia de datos y las estadísticas en general es que tratará de sacar conclusiones sobre una población dada una muestra de datos mucho más pequeña.

Si bien eso es cierto, muchos científicos de datos tienen acceso a computadoras con una cantidad increíblemente grande de RAM. Recientemente estuve en una “competencia de datos” y nos dieron computadoras con 120 gb de RAM, lo que no está cerca de lo que algunos científicos de datos obtienen de tener un grupo de computadoras. Allí, teníamos mucha potencia informática, pero no había manera de que pudiéramos acercarnos a cargar la mitad de TB de datos dados. Incluso si pudiéramos cargar esa cantidad de datos en la memoria, la eficiencia de los algoritmos que elegimos ejecutar y qué tan rápido / cuántos núcleos tenemos que calcular serán los factores que harán que los tiempos de ejecución sean más largos.

Cuando se trata de R, el lenguaje está bien desarrollado, de código abierto y es fácil de usar, y la documentación lo convierte en un gran activo para los científicos de datos más avanzados para aquellos que todavía están aprendiendo los pormenores (como yo). Personalmente, creo que Python es una gran alternativa a R y comparte muchas similitudes en el pensamiento (como lo hace casi cualquier paquete estadístico), pero ofrece un método un poco más eficiente de manejo de datos en memoria comparado con R.

La RAM ya no es tan costosa, por lo que la cantidad que prácticamente puede poner en una estación de trabajo o servidor a menudo es suficiente. Los biólogos que generan los datos con los que trabajo utilizan instrumentos que cuestan decenas, si no cientos de miles de dólares; gastar $ 10k en una máquina con 256GB de RAM y un montón de núcleos para analizarlo es fácil de defender. Todavía no hemos necesitado más, pero podría presentar un argumento convincente para utilizar una fracción del presupuesto ligeramente mayor pero aún pequeña en algo aún más robusto.

Por supuesto, no siempre puedes lanzar hardware a los problemas. Si su análisis solo usa fragmentos de datos en ese momento, hay paquetes * que pueden mover bloques transparentemente entre la RAM y el disco según sea necesario, mientras que fingen ser una estructura de datos normal, aunque necesitan una configuración inicial.

Si tiene un patrón de acceso más aleatorio, entonces necesita repensar el método, o realmente lo necesita todo en la memoria a la vez (y luego pasar a otro idioma realmente no lo ayudaría).

* La opción obvia es ff (CRAN – Package ff),
pero creo que también es posible con HDF5 (rhdf5).

Por eso tenemos “memoria virtual”. Mi MacBook solo tiene 8G de ram, pero tiene mucho más espacio de intercambio. Ejecuto una aplicación con mucha memoria y mi editor y ella procesan los intercambian en el disco. No es eficiente, sin duda, pero puedo direccionar más datos de los que tengo memoria.