with git version-control r

git - with - R y control de versión para el analista de datos solo



github (13)

Muchos analistas de datos que respeto usan control de versiones. Por ejemplo:

Sin embargo, estoy evaluando si va a valer la pena adoptar un sistema de control de versiones como git.

Una breve descripción: soy un científico social que usa R para analizar datos para publicaciones de investigación. Actualmente no produzco paquetes R Mi código R para un proyecto generalmente incluye unas mil líneas de código para la entrada de datos, limpieza, manipulación, análisis y generación de resultados. Las publicaciones generalmente se escriben usando LaTeX.

Con respecto al control de versiones, hay muchos beneficios que he leído, pero que parecen ser menos relevantes para el analista de datos en solitario.

  • Copia de seguridad: ya tengo un sistema de respaldo en su lugar.
  • Bifurcación y rebobinado: nunca sentí la necesidad de hacer esto, pero puedo ver cómo podría ser útil (por ejemplo, está preparando varios artículos de revistas basados ​​en el mismo conjunto de datos, está preparando un informe que se actualiza mensualmente, etc. )
  • Colaboración: la mayoría de las veces estoy analizando datos yo mismo, por lo tanto, no obtendría los beneficios de colaboración del control de versiones.

También hay varios costos potenciales relacionados con la adopción del control de versiones:

  • Tiempo para evaluar y aprender un sistema de control de versiones
  • Un posible aumento en la complejidad sobre mi sistema actual de administración de archivos

Sin embargo, todavía tengo la sensación de que me estoy perdiendo algo. Las guías generales sobre control de versiones parecen dirigirse más a los informáticos que a los analistas de datos.

Por lo tanto, específicamente en relación con los analistas de datos en circunstancias similares a las enumeradas anteriormente:

  1. ¿Vale la pena el control de la versión?
  2. ¿Cuáles son los principales pros y contras de adoptar el control de versiones?
  3. ¿Cuál es una buena estrategia para comenzar con el control de versiones para el análisis de datos con R (por ejemplo, ejemplos, ideas de flujo de trabajo, software, enlaces a guías)?

¿Vale la pena el control de la versión?

un gran SÍ.

¿Cuáles son los principales pros y contras de adoptar el control de versiones?

pros: puedes rastrear lo que has hecho antes. ¡Especialmente útil para el látex, ya que es posible que necesites un párrafo anterior que borraste! Cuando tu computadora falla o trabajas en una nueva, tienes tus datos de vuelta sobre la marcha.

contras: necesitas hacer algunos ajustes.

¿Cuál es una buena estrategia para comenzar con el control de versiones para el análisis de datos con R (por ejemplo, ejemplos, ideas de flujo de trabajo, software, enlaces a guías)?

Solo comienza a usarlo. Utilizo tortuga SVN en Windows como una herramienta de cliente y mi departamento tiene un servidor svn, puse todo mi código y datos (¡sí, también puso allí sus datos!).


¡Retroceda un poco primero y aprenda las ventajas de escribir paquetes R! ¿Dice que tiene proyectos con miles de líneas de código, pero estas no están estructuradas ni documentadas como el código del paquete? Obtendrá grandes ganancias conforme a los ideales del paquete, incluida la documentación para cada función, pruebas de muchos de los errores habituales difíciles de capturar, la posibilidad de escribir suites de prueba, etc., etc.

Si no tienes la disciplina para producir un paquete, entonces no estoy seguro de que tengas la disciplina para hacer el control de revisión adecuado.


Aún así, recomendaría el control de versiones para un solo acto como tú, porque tener una red de seguridad para detectar errores puede ser una gran cosa.

Trabajé como desarrollador Java solo, y todavía uso control de fuente. Si reviso continuamente las cosas, no puedo perder más de una hora de trabajo si algo sale mal. Puedo experimentar y refactorizar sin preocuparme, porque si sale mal siempre puedo volver a mi última versión operativa.

Si ese es tu caso, te recomendaría usar el control de fuente. No es difícil de aprender.


Creo que la respuesta a su pregunta es un sí rotundo: los beneficios de administrar sus archivos con un sistema de control de versiones superan con creces los costos de implementación de dicho sistema.

Trataré de responder en detalle a algunos de los puntos que planteaste:

  • Copia de seguridad: ya tengo un sistema de respaldo en su lugar.

Sí, y yo también. Sin embargo, hay algunas preguntas para considerar con respecto a la conveniencia de contar con un sistema de respaldo de propósito general para rastrear adecuadamente los archivos importantes y activos relacionados con su trabajo. En el lado del rendimiento:

  • ¿A qué intervalo su sistema de respaldo toma instantáneas?
  • ¿Cuánto tiempo lleva construir una instantánea?
  • ¿Tiene que crear una imagen de todo el disco duro cuando se toma una instantánea, o se le podría indicar fácilmente que haga una copia de seguridad de dos archivos que acaban de recibir actualizaciones críticas?
  • ¿Puede su sistema de respaldo mostrarle, con precisión exacta, qué cambió en sus archivos de texto de una copia de seguridad a la siguiente?

Y más importante:

  • ¿En cuántas ubicaciones se guardan las copias de seguridad? ¿Están en la misma ubicación física que su computadora?
  • ¿Qué tan fácil es restaurar una versión determinada de un solo archivo desde su sistema de respaldo?

Por ejemplo, tenga una Mac y use Time Machine para realizar una copia de seguridad en otro disco duro de mi computadora. Time Machine es ideal para recuperar el archivo impar o restaurar mi sistema si las cosas se estropean. Sin embargo, simplemente no tiene lo que se necesita para confiar en mi importante trabajo:

  • Al realizar la copia de seguridad, Time Machine tiene que crear imágenes de todo el disco duro, lo que lleva una cantidad considerable de tiempo. Si sigo trabajando, no hay garantía de que mi archivo será capturado en el estado en que estaba cuando inicié la copia de seguridad. También puedo llegar a otro punto que me gustaría guardar antes de que termine la primera copia de seguridad.

  • El disco duro al que se guardan mis copias de seguridad de Time Machine está ubicado en mi máquina; esto hace que mis datos sean vulnerables al robo, incendios y otros desastres.

Con un sistema de control de versiones como Git, puedo iniciar una copia de seguridad de archivos específicos sin más esfuerzo que solicitar un guardado en un editor de texto, y el archivo se crea una imagen y se almacena de forma instantánea. Además, Git se distribuye de modo que cada computadora en la que trabajo tiene una copia completa del repositorio.

Esto equivale a hacer que mi trabajo se reproduzca en cuatro computadoras diferentes: nada menos que un acto de Dios podría destruir mis archivos y datos, y en ese momento probablemente no me interesaría demasiado.

  • Bifurcación y rebobinado: nunca sentí la necesidad de hacer esto, pero puedo ver cómo podría ser útil (por ejemplo, está preparando varios artículos de revistas basados ​​en el mismo conjunto de datos, está preparando un informe que se actualiza mensualmente, etc. )

Como solista, tampoco bifurco mucho. Sin embargo, el tiempo que he ahorrado al tener la opción de rebobinar me ha devuelto por mi cuenta mi inversión para aprender un sistema de control de versiones muchas, muchas veces. Usted dice que nunca sintió la necesidad de hacer esto, pero ¿el rebobinado de cualquier archivo en su actual sistema de respaldo realmente ha sido una opción fácil e indolora?

A veces, el informe se veía mejor 45 minutos, hace una hora o dos días.

  • Colaboración: la mayoría de las veces estoy analizando datos yo mismo, por lo tanto, no obtendría los beneficios de colaboración del control de versiones.

Sí, pero aprendería una herramienta que puede resultar indispensable si termina colaborando con otros en un proyecto.

  • Tiempo para evaluar y aprender un sistema de control de versiones

No te preocupes demasiado por esto. Los sistemas de control de versiones son como los lenguajes de programación, tienen algunos conceptos clave que deben aprenderse y el resto es solo azúcar sintáctico. Básicamente, el primer sistema de control de versiones que aprenda requerirá invertir la mayor cantidad de tiempo en cambiar a otro, solo requiere aprender cómo el nuevo sistema expresa los conceptos clave.

Elige un sistema popular y ¡adelante!

  • Un posible aumento en la complejidad sobre mi sistema actual de administración de archivos

¿Tiene una carpeta, diga Projects que contiene todas las carpetas y archivos relacionados con sus actividades de análisis de datos? Si es así, al presionar el control de la versión aumentará la complejidad de su sistema de archivos exactamente en 0 . Si sus proyectos están desparramados sobre su computadora, entonces debe centralizarlos antes de aplicar el control de versión y esto terminará por disminuir la complejidad de administrar sus archivos, por eso tenemos una carpeta de Documents después de todo.

  1. ¿Vale la pena el control de la versión?

¡Sí! Le da un gran botón de deshacer y le permite transferir fácilmente trabajo de máquina a máquina sin preocuparse por cosas como perder su unidad USB.

2 ¿Cuáles son los principales pros y contras de adoptar el control de versiones?

Lo único que puedo pensar es un ligero aumento en el tamaño del archivo, pero los modernos sistemas de control de versiones pueden hacer cosas increíbles con la compresión y el ahorro selectivo, por lo que es prácticamente un punto discutible.

3 ¿Cuál es una buena estrategia para comenzar con el control de versiones para el análisis de datos con R (por ejemplo, ejemplos, ideas de flujo de trabajo, software, enlaces a guías)?

Mantenga los archivos que generan datos o informes bajo control de versiones, sea selectivo. Si está utilizando algo como Sweave , almacene sus archivos .Rnw y no los archivos .tex que se obtienen de ellos. Almacene datos sin procesar si sería difícil volver a adquirirlos. Si es posible, escriba y almacene un script que adquiera sus datos y otro que lo limpie o modifique en lugar de almacenar los cambios en los datos sin formato.

En cuanto a aprender un sistema de control de versiones, recomiendo encarecidamente Git y esta guía .

Estos sitios web también tienen algunos buenos consejos y trucos relacionados con la realización de acciones específicas con Git:


Debe utilizar un software de control de versiones; de lo contrario, su análisis no será perfectamente reproducible.

Si desea publicar sus resultados en alguna parte, siempre debe poder reconstruir el estado de sus scripts en el momento en que los ha producido. Digamos que uno de los revisores descubre un error en uno de sus scripts: ¿cómo sabría qué resultados se efectúan y cuáles no?

En este sentido, un sistema de respaldo no es suficiente porque probablemente solo se realice una vez por día, y no aplica etiquetas a las diferentes copias de seguridad, por lo que no sabe qué versiones corresponden a los resultados. Y aprender un vcs es más simple de lo que crees, si aprendes cómo agregar un archivo y cómo realizar cambios ya es suficiente.


Dropbox tiene un control de versión de "ppor man" que te lleva a una parte del camino por poco esfuerzo con muchos beneficios adicionales.


En aras de la exhaustividad, pensé en proporcionar una actualización sobre mi adopción del control de versiones.

He encontrado que el control de versiones para proyectos de análisis de datos en solitario es muy útil.

He adoptado git como mi principal herramienta de control de versiones. Primero utilicé Egit en Eclipse con StatET. Ahora solo uso la interfaz de la línea de comandos, aunque la integración con RStudio es bastante buena.

He escrito un blog sobre mi experiencia de configurar el control de versiones desde la perspectiva de los proyectos de análisis de datos.

Como mencioné en la publicación, he encontrado que adoptar control de versiones ha tenido muchos beneficios secundarios en la forma en que pienso en los proyectos de análisis de datos, incluida la aclaración:

  • la distinción entre los archivos fuente y derivados
  • la naturaleza de las dependencias:
    • dependencias entre elementos de código
    • dependencias entre archivos dentro de un proyecto
    • y dependencias con archivos y programas externos al repositorio
  • la naturaleza de un repositorio y cómo los repositorios deberían ser divididos
  • la naturaleza de cometer y documentar los cambios y los hitos del proyecto

En este momento, probablemente piense en su trabajo como código de desarrollo que hará lo que usted quiere que haga. Después de adoptar usando un sistema de control de revisiones, pensará en su trabajo como escribir su legado en el repositorio y realizar cambios increíbles brillantes en él. Se siente mucho mejor.


Estoy de acuerdo con los sentimientos anteriores y digo que sí, el control de versiones es útil.

Ventajas;

  • Mantenga su investigación registrada y respaldada, (etiquetado)
  • te permite probar diferentes ideas y regresar si no funcionan (ramificación)
  • Puede compartir su trabajo con otras personas, y pueden compartir sus cambios con usted (sé que no especificó esto, pero es genial)
  • La mayoría de los sistemas de control de versiones facilitan la creación de un paquete comprimido para todos los archivos bajo control en un determinado momento, por ejemplo, en el momento en que envía un artículo para su publicación, esto puede ayudar cuando otros revisan sus artículos. (Puede hacerlo manualmente, pero ¿por qué inventar estos procesos cuando el control de versiones simplemente lo hace?)

En términos de conjuntos de herramientas, utilizo Git , junto con StatEt y Eclipse que funciona bien, aunque ciertamente no es necesario usar Eclipse. Hay algunos plugins de Git para Eclipse , pero generalmente uso las opciones de línea de comando.


Hago investigaciones de economía usando R y LaTeX, y siempre pongo mi trabajo bajo control de versiones. Es como tener un deshacer ilimitado. Pruebe Bazar, es uno de los más simples de aprender y usar, y si está en Windows tiene una interfaz gráfica de usuario (TortoiseBZR).

Sí, hay beneficios adicionales para el control de versiones cuando se trabaja con otros, pero incluso en proyectos individuales tiene mucho sentido.


También hago trabajo de scripting en solitario, y creo que simplifica las cosas, en lugar de hacerlas más complejas. La copia de seguridad está integrada en el flujo de trabajo de codificación y no requiere un conjunto separado de procedimientos del sistema de archivos. El tiempo necesario para aprender los conceptos básicos de cualquier sistema de control de versiones definitivamente sería un tiempo bien empleado.


Trabajé durante nueve años en una tienda analítica e introduje la idea del control de versiones para nuestros proyectos de análisis en esa tienda. Soy un gran creyente en el control de versiones, obviamente. Me gustaría hacer los siguientes puntos, sin embargo.

  1. El control de versiones puede no ser apropiado si está haciendo análisis para su posible uso en la corte. No parece que esto se aplique a usted, pero hubiera puesto muy nerviosos a nuestros clientes al saber que cada versión de cada script que alguna vez habíamos producido era potencialmente detectable. Usamos el control de versiones para módulos de código que se reutilizaron en múltiples contratos, pero no usamos el control de versiones para el código específico del compromiso, por esa razón.
  2. Descubrimos que el mayor beneficio para el control de versiones provino del almacenamiento de módulos de código enlatados que fueron reutilizados en múltiples proyectos. Por ejemplo, es posible que tenga una forma particular de procesamiento de determinados extractos de Census PUMS. Organice este código en un directorio y colóquelo en su VCS. Luego puede verificarlo en cada nuevo proyecto cada vez que lo necesite. Incluso puede ser útil crear ramas específicas de cierto código para cierto proyecto, si está haciendo un procesamiento especial de un conjunto de datos común particular para ese proyecto. Luego, cuando haya terminado con ese proyecto, decida qué parte de su código especial se fusionará con la rama principal.
  3. No coloque los datos procesados ​​en el control de la versión. Solo código Nuestro objetivo siempre fue tener un conjunto completo de scripts para poder eliminar todos nuestros datos procesados ​​internamente, presionar un botón y tener cada número para el informe regenerado desde cero. Esa es la única forma de estar seguro de que no tienes bichos viejos que viven misteriosamente en tus datos.
  4. Para asegurarse de que sus resultados sean completamente reproducibles, no es suficiente mantener su código en un VCS. Es fundamental controlar cuidadosamente qué versión de qué módulos se utilizaron para crear un entregable en particular.
  5. En cuanto al software, tuve buena suerte con Subversion. Es fácil de configurar y administrar. Reconozco el atractivo de los nuevos VCS distribuidos, como git y mercurial, pero no estoy seguro de que haya ventajas importantes si trabajas por tu cuenta. Por otro lado, tampoco conozco ningún aspecto negativo para usarlos, simplemente no he trabajado con ellos en un entorno de análisis.

Una versión de Control para desarrollo en solitario (de cualquier tipo) es realmente interesante para:

  • explorando la historia y comparando el trabajo actual con compromisos pasados
  • branching y probando diferentes versiones para un mismo conjunto de archivos

Si no se ve a sí mismo haciendo una de esas dos funciones básicas de control de versiones, una simple herramienta de respaldo puede ser todo lo que necesita.
Si tiene la necesidad de esas funciones, también obtendrá una copia de seguridad (con git bundle por ejemplo)