R y control de versiones para el analista de datos en solitario

155

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

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

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

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

  • Copia de seguridad: ya tengo un sistema de copia de seguridad.
  • 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 involucrados 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 falta algo. Las guías generales sobre el control de versiones parecen estar más dirigidas 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 mencionadas anteriormente:

  1. ¿Vale la pena el control de versiones?
  2. ¿Cuáles son las principales ventajas y desventajas 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)?
Jeromy Anglim
fuente
2
¿Has leído esto: stackoverflow.com/questions/360887/…
Marek
@Marek Esa publicación es útil. Muchas gracias. Todavía me gustaría saber qué problemas específicos, si los hay, se relacionan con el análisis de datos, R y la investigación escrita.
Jeromy Anglim
La respuesta a su primera pregunta es "sí", por supuesto. Pero, ¿qué tipo / tamaño de datos manejas habitualmente? La mayoría de los sistemas CVS tienen dificultades para almacenar datos binarios.
Eduardo Leoni
3
También puede mirar esto: stackoverflow.com/questions/2286831/…
Shane
@Eduardo Trabajo con una mezcla de archivos de texto sin formato (por ejemplo, delimitado por tabulaciones, ancho fijo) y binarios (bases de datos, SPSS, Excel, etc.). Los datos varían: ejemplos típicos de 100 filas x 500 columnas a 10,000 x 20 a 2,000,000 x 20.
Jeromy Anglim

Respuestas:

89

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

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

  • Copia de seguridad: ya tengo un sistema de copia de seguridad.

Sí, y yo también. Sin embargo, hay algunas preguntas a considerar con respecto a la conveniencia de confiar en 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 toma instantáneas su sistema de respaldo?
  • ¿Cuánto tiempo lleva construir una instantánea?
  • ¿Tiene que crear una imagen de todo el disco duro al tomar una instantánea, o se le podría pedir 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 precisa, qué cambió en sus archivos de texto de un respaldo a otro?

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 dada de un solo archivo desde su sistema de respaldo?

Por ejemplo, tener una Mac y usar Time Machine para hacer una copia de seguridad en otro disco duro de mi computadora. Time Machine es excelente para recuperar el archivo extraño o restaurar mi sistema si las cosas se complican. Sin embargo, simplemente no tiene lo necesario para ser confiable con mi importante trabajo:

  • Al realizar una copia de seguridad, Time Machine tiene que crear una imagen de todo el disco duro que lleva una cantidad considerable de tiempo. Si sigo trabajando, no hay garantía de que mi archivo se capture 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 finalice la primera copia de seguridad.

  • El disco duro en el que se guardan mis copias de seguridad de Time Machine se encuentra en mi máquina, lo que hace que mis datos sean vulnerables a robos, 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 instantáneamente. Además, Git se distribuye para que cada computadora en la que trabajo tenga una copia completa del repositorio.

Esto equivale a que mi trabajo se refleje en cuatro computadoras diferentes: nada menos que un acto de Dios podría destruir mis archivos y datos, en cuyo punto probablemente no me importaría demasiado de todos modos.

  • 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 ha devuelto mi inversión en aprender un sistema de control de versiones muchas, muchas veces. ¿Dice que nunca sintió la necesidad de hacer esto, pero que rebobinar cualquier archivo en su sistema de respaldo actual realmente ha sido una opción indolora y factible?

A veces, el informe se veía mejor hace 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 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 parte del tiempo; cambiar a otro solo requiere aprender cómo el nuevo sistema expresa los conceptos clave.

Elija un sistema popular y ¡adelante!

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

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

  1. ¿Vale la pena el control de versiones?

¡Si! Le brinda un gran botón de deshacer y le permite transferir fácilmente el trabajo de una máquina a otra sin preocuparse por cosas como perder su unidad USB.

2 ¿Cuáles son las principales ventajas y desventajas de adoptar el control de versiones?

La única desventaja que se me ocurre es un ligero aumento en el tamaño del archivo, pero los sistemas modernos de control de versiones pueden hacer cosas absolutamente sorprendentes con la compresión y el ahorro selectivo, por lo que este es 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 .Rnwarchivos y no los .texarchivos que se producen a partir de ellos. Almacene datos en bruto 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 cambios en los datos sin procesar.

En cuanto a aprender un sistema de control de versiones, recomiendo 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:

Sharpie
fuente
1
+1 por la respuesta a "Un posible aumento en la complejidad sobre mi sistema de administración de archivos actual" El control de versiones potencialmente reducirá el nivel de complejidad si los elementos colocados en el control de versiones junto con un nivel de control granular sobre los puntos de instantánea en su proceso de copia de seguridad (también proporciona una descripción que es muy útil para recuperar no por fecha sino por función o cambio )
Christopher Hackett
23

Trabajé durante nueve años en una tienda de análisis 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. Sin embargo, haría los siguientes puntos.

  1. El control de versiones puede no ser apropiado si está haciendo un análisis para su posible uso en la corte. No parece que esto se aplique a usted, pero habría puesto a nuestros clientes muy nerviosos al saber que cada versión de cada guión que habíamos producido era potencialmente reconocible. Utilizamos el control de versiones para los módulos de código que se reutilizaron en múltiples compromisos, pero no utilizamos 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 proviene del almacenamiento de módulos enlatados de código que se reutilizaron en múltiples proyectos. Por ejemplo, es posible que tenga una forma favorita particular de procesar ciertos extractos de Census PUMS. Organice este código en un directorio y póngalo en su VCS. Luego puede consultarlo 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á realizando un procesamiento especial de un conjunto de datos común en particular para ese proyecto. Luego, cuando haya terminado con ese proyecto, decida la cantidad de su código especial para volver a fusionar con la rama principal.
  3. No ponga datos procesados ​​en el control de versiones. Solo codigo. 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 asegurarse de que no haya errores antiguos que vivan misteriosamente en sus datos.
  4. Para asegurarse de que sus resultados sean realmente completamente reproducibles, no es suficiente solo mantener su código en un VCS. Es fundamental realizar un seguimiento cuidadoso de qué versión de qué módulos se usaron para crear cualquier entrega en particular.
  5. En cuanto al software, tuve buena suerte con Subversion. Es fácil de configurar y administrar. Reconozco el atractivo de los VCS distribuidos recientemente novedosos, como git y mercurial, pero no estoy seguro de que haya grandes ventajas si está trabajando solo. Por otro lado, tampoco conozco ningún aspecto negativo de usarlos, simplemente no he trabajado con ellos en un entorno de análisis.
Dan Menes
fuente
18

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 comencé a usar Egit dentro de Eclipse con StatET. Ahora generalmente solo uso la interfaz de línea de comandos, aunque la integración con RStudio es bastante buena.

He blogueado sobre mi experiencia al configurar el control de versiones desde la perspectiva de los proyectos de análisis de datos.

Como se indicó en la publicación, descubrí que adoptar el control de versiones ha tenido muchos beneficios secundarios en la forma en que pienso sobre los proyectos de análisis de datos, incluida la aclaración:

  • la distinción entre fuente y archivos 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 se deben dividir los repositorios
  • la naturaleza de comprometer y documentar cambios e hitos del proyecto
Jeromy Anglim
fuente
2
También comencé con la interfaz de línea de comandos (y es bueno saberlo) pero también cambié a usar principalmente RStudio para mis necesidades de R / git. Proporciona la mayoría de las cosas que quiero, pero a veces necesito abrir un terminal para hacer algunas cosas que no están integradas directamente en la interfaz.
Dason
17

Hago investigación económica usando R y LaTeX, y siempre pongo mi trabajo bajo control de versiones. Es como tener un deshacer ilimitado. Prueba Bazaar, es uno de los más simples de aprender y usar, y si estás 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.

Ana Nelson
fuente
9

En este momento, probablemente pienses en tu trabajo como un código de desarrollo que hará lo que quieres que haga. Después de adoptar el uso de un sistema de control de revisión, pensará en su trabajo como escribir su legado en el repositorio y realizar cambios incrementales brillantes en él. Se siente mucho mejor.

Ken Williams
fuente
7

Todavía recomendaría el control de versiones para un acto en solitario como tú porque tener una red de seguridad para atrapar errores puede ser una gran cosa.

He trabajado como desarrollador Java en solitario y todavía uso el control de código fuente. Si reviso las cosas continuamente, 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 de trabajo.

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

duffymo
fuente
7

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

Si desea publicar sus resultados en algún lugar, 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 podría saber qué resultados se efectúan y cuáles no?

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

dalloliogm
fuente
1
Tienes una fuerte discusión. Sin embargo, creo que la investigación reproducible es posible sin un sistema formal de control de versiones. Es menos elegante y menos flexible. Intento escribir código R utilizando principios de programación alfabetizada para que la salida R se integre automáticamente en el documento final. Los archivos asociados con este producto final se pueden guardar.
Jeromy Anglim
eso lo ayuda a volver a aplicar todo el análisis de sus datos, pero no le dice cuáles de sus resultados anteriores se vieron afectados por el error.
dalloliogm
6

¿Vale la pena el control de versiones?

un gran SI.

¿Cuáles son las principales ventajas y desventajas de adoptar el control de versiones?

Pros: puedes seguir lo que has hecho antes. ¡Especialmente útil para el látex, ya que es posible que necesite un párrafo antiguo que haya eliminado! Cuando su computadora falla o trabaja en una nueva, tiene sus datos de nuevo sobre la marcha.

Contras: necesita hacer algunas configuraciones.

¿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 herramienta de cliente y mi departamento tiene un servidor svn, pongo todo mi código y datos (sí, ¡también pones tus datos allí!) Allí.

Yin Zhu
fuente
6

¡Primero, retroceda un poco y conozca las ventajas de escribir paquetes R! ¿Dice que tiene proyectos con varios miles de líneas de código, pero estos no están estructurados o documentados como lo está el código del paquete? Obtiene grandes ganancias al cumplir con los ideales del paquete, incluida la documentación para cada función, las pruebas de muchos de los errores habituales difíciles de atrapar, la facilidad de escribir sus propios conjuntos de pruebas, etc.

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

Hombre espacial
fuente
3
Todo es un viaje, especialmente cuando vienes de un entorno que no es de TI. Ahora estoy usando git, y es genial. También estoy empezando a incursionar en la infraestructura del paquete R. Con respecto a los miles de líneas de código, esto a menudo resulta de grandes cantidades de procesamiento de datos idiosincráticos y creación de tablas y gráficos basados ​​en hipótesis. Si bien la experiencia hace que sea más fácil ver las abstracciones, creo que una cierta cantidad de código idiosincrásico es solo parte de lo que significa analizar conjuntos de datos psicológicos. Creo que esto ayuda a explicar la popularidad del paquete ProjectTemplate y Sweave.
Jeromy Anglim
5

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)
  • le permite probar diferentes ideas y regresar si no funcionan (ramificación)
  • Puede compartir su trabajo con otras personas, y ellos 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 punto determinado, por ejemplo, en el momento en que envía un artículo para publicación, esto puede ayudar cuando otros revisen sus artículos. (puede hacerlo manualmente, pero ¿por qué inventar estos procesos cuando el control de versiones lo hace?)

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

PaulHurleyuk
fuente
Yo uso StatET y Eclipse para R; así que tal vez intente git primero.
Jeromy Anglim
4

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

  • explorar la historia y comparar el trabajo actual con los compromisos anteriores
  • ramificando y probando diferentes versiones para un mismo conjunto de archivos

Si no te ves haciendo una de esas dos funciones básicas de control de versiones, una simple herramienta de respaldo podría ser todo lo que necesitas.
Si tiene la necesidad de esas funciones, también obtendrá una copia de seguridad (con, git bundlepor ejemplo)

VonC
fuente
4

También hago trabajo de scripting en solitario, y encuentro 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 que lleva aprender los conceptos básicos de cualquier sistema de control de versiones definitivamente será un tiempo bien invertido.

MW Frost
fuente
4

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

Zach
fuente