¿Cuáles son algunos de los principios de ingeniería de software que todo científico de datos debe conocer? ¿Cómo los aprendes?

Aquí hay algunos principios que creo que se aplican más a los científicos de datos que a los ingenieros de software.

Los científicos de datos deben saber cómo construir tablas correctamente para aprovechar los índices y acelerar las consultas comunes.

Al escribir consultas para extraer datos de grandes bases de datos, los científicos de datos deben Comprenda cómo minimizar los tiempos de ejecución de consultas (especialmente aquellos que involucran combinaciones complicadas) para que las consultas puedan escalar con el tamaño de los datos.

Los científicos de datos también deben practicar una buena abstracción y factorización en su código, para evitar la proliferación de muchas líneas de códigos que hacen lo mismo. Esto es muy importante para mantener el código y las consultas reutilizables, lo que ocurre muy a menudo en tareas de análisis, extracción de datos, munging de datos y creación de paneles. Esto debe equilibrarse con mantener el código limpio y legible.

Quizás lo más común es que los científicos de datos deben ser expertos en limpieza, lectura, formateo y estandarización de E / S de datos (también conocido como munging de datos) . Debe saber exactamente qué tipo de datos espera ingresar a su función y qué tipo de datos espera obtener. Si la entrada está sucia, ¡debe limpiarla!

Para aplicaciones más avanzadas, los científicos de datos deben practicar una programación paralela adecuada para aprovechar múltiples máquinas y hacer factibles algunos cálculos masivos.

Para los científicos de datos, no sugeriría aprender las mejores prácticas de SE con el propósito de aprenderlas. Aprenderás cuando los necesites.

El control de versiones debe usarse con código y documento. Y si es posible, el código debe admitir “hacer clic y listo” (concepto similar a la compilación nocturna en SE). Eso significa que todos sus resultados y cifras se pueden reproducir ejecutando un solo programa / script principal.

Sin embargo, rara vez uso pruebas unitarias durante mi análisis de datos porque, en un proceso de exploración, ¿cómo puede saber el resultado cuando lo ha hecho? Solo cuando estoy a punto de terminar el proyecto, agrego más documentos / registro y hago un conjunto de pruebas unitarias. La prueba de la unidad sirve como guardia en caso de que actualice el código en el futuro.

Para algunos proyectos, donde los datos ya están preprocesados ​​por otros, solo usamos archivos csv y json para almacenar todos los datos. Pero para un proyecto que involucra rastreo de datos a largo plazo, limpieza de datos y modelado, vemos la necesidad de usar una base de datos para que todas las versiones de datos estén bien administradas.

En términos del trabajo en equipo, mi experiencia en hacer varios concursos de minería de datos (kddcup13, pregunta cerrada de stackoverflow, nokia mdc, etc.) es que dividir el trabajo necesita una idea de la tarea de minería de datos, en lugar de las prácticas de SE. La clave es desacoplar la gran tarea en varias tareas independientes para que todos puedan trabajar solos y comunicarse entre sí lo menos posible. No digo que no haya intercambio de ideas. Por el contrario, hay muchas discusiones. Sin embargo, un intercambio excesivo de código y datos hará que el equipo pase un tiempo precioso en comunicación y coordinación en lugar de análisis de datos.

En resumen, las buenas prácticas no se pueden aprender leyendo las reglas: solo se pueden obtener de una manera difícil, en el proceso de realizar tareas de minería de datos reales.

Esta es una pregunta interesante que he pensado en un grado considerable. Creo que la respuesta se basa en otra pregunta: ¿qué tipo de científico de datos? Hay científicos de datos “teóricos” que hacen análisis de datos, modelado de datos y diseño de algoritmos. Luego están los científicos de datos “experimentales” que implementan sistemas de producción y escriben código. ¿Puede un solo científico de datos hacer ambas cosas? Claro, pero esa persona será un superhombre y debería ganar 2-3 sueldos a la vez. ¿Qué tan probable es eso? No muy.

Como teórico, a menudo trabajo con personal de TI interno que programa en Python, por ejemplo, e implementamos sistemas de producción en equipo. Hay dos conjuntos de habilidades diferentes que prevalecen entre los teóricos y los experimentadores. Los primeros son expertos en informática, aprendizaje automático, estadística matemática y teoría de la probabilidad. Estos últimos son personas de sistemas capaces de reunir soluciones de hardware y nube, diseñar clústeres de Hadoop, poner en marcha y configurar servidores en EC2 y programar algoritmos escalables de producción en Python.

¿Realmente quieres un doctorado? Estadístico programando su sitio web de comercio electrónico? Y viceversa, ¿realmente querría que su administrador de sistemas Linux desarrolle su algoritmo de descenso de gradiente estocástico?

Mucha gente me pregunta: ¿cómo me convierto en un científico de datos? Creo que la respuesta corta es: como con cualquier rol técnico, no es necesariamente fácil o rápido, pero si eres inteligente, comprometido y dispuesto a invertir en aprendizaje y experimentación, entonces, por supuesto, puedes hacerlo.

Desarrolladores de Java

Si eres un desarrollador de Java, estás familiarizado con los principios de ingeniería de software y prosperas en la creación de sistemas de software que realizan tareas complejas. La ciencia de datos se trata de construir “productos de datos”, esencialmente sistemas de software basados ​​en datos y algoritmos.

DESARROLLADORES DE PITÓN

Si es un desarrollador de Python, está familiarizado con el desarrollo de software y las secuencias de comandos, y es posible que ya haya utilizado algunas bibliotecas de Python que a menudo se usan en ciencia de datos, como NumPy y SciPy.

Python tiene un gran soporte para aplicaciones de ciencia de datos, especialmente con bibliotecas como NumPy / Scipy, Pandas, Scikit-learn, IPython para análisis exploratorio y Matplotlib para visualizaciones.

Para lidiar con grandes conjuntos de datos, obtenga más información sobre Hadoop y su integración con Python a través de la transmisión.

ESTADÍSTICOS Y CIENTÍFICOS APLICADOS

Si proviene de un entorno de estadísticas o de aprendizaje automático, es probable que ya haya utilizado herramientas como R, Matlab o SAS durante años para realizar análisis de regresión, análisis de agrupamiento, clasificación o tareas similares de aprendizaje automático.

R, Matlab y SAS son herramientas sorprendentes para el análisis estadístico y la visualización, con implementaciones maduras para muchos algoritmos de aprendizaje automático.

Sin embargo, estas herramientas generalmente se usan para la exploración de datos y el desarrollo de modelos, y rara vez se usan de forma aislada para crear productos de datos de grado de producción. En la mayoría de los casos, debe mezclar varios otros componentes de software como Java o Python e integrarlos con plataformas de datos como Hadoop, al crear productos de datos de extremo a extremo.

ANALISTAS DE NEGOCIOS

Si su experiencia es SQL, ha estado utilizando datos durante muchos años y comprende completamente cómo utilizar los datos para obtener información comercial. Es probable que el uso de Hive, que le brinda acceso a grandes conjuntos de datos en Hadoop con primitivas SQL familiares, sea un primer paso fácil para usted en el mundo de los grandes datos.

La ciencia de datos a menudo implica el desarrollo de productos de datos que utilizan aprendizaje automático y estadísticas a un nivel que SQL no puede describir bien o implementar de manera eficiente. Por lo tanto, el siguiente paso importante hacia la ciencia de datos es comprender este tipo de algoritmos (como motores de recomendación, árboles de decisión, PNL) a un nivel teórico más profundo, y familiarizarse con las implementaciones actuales de herramientas como Mahout, WEKA o Scikit de Python. -aprender.

DESARROLLADORES DE HADOOP

Si es desarrollador de Hadoop, ya conoce las complejidades de los grandes conjuntos de datos y la informática en clúster. Probablemente también esté familiarizado con Pig, Hive y HBase y probablemente tenga experiencia en Java.

Un buen primer paso es obtener una comprensión profunda del aprendizaje automático y las estadísticas, y cómo estos algoritmos se pueden implementar de manera eficiente para grandes conjuntos de datos. Un buen primer lugar para buscar es Mahout, que implementa muchos de estos algoritmos sobre Hadoop.

Otra área a considerar es la “limpieza de datos”. Muchos algoritmos asumen una cierta estructura básica para los datos antes de que comience el modelado. Desafortunadamente, en la vida real, los datos están bastante “sucios” y prepararlos para el modelado tiende a ocupar una gran parte del trabajo en ciencia de datos. Hadoop es a menudo una herramienta de elección para la limpieza y preprocesamiento de datos a gran escala, antes del modelado.

PENSAMIENTOS FINALES

Aplicación de la vida real: el camino hacia la ciencia de datos no es un paseo por el parque. Tienes que aprender muchas disciplinas nuevas, lenguajes de programación y, lo más importante, adquirir experiencia en el mundo real. Esto requiere tiempo, esfuerzo y una inversión personal. Pero lo que encuentras al final del camino es bastante gratificante.

Recursos: hay muchos recursos que pueden resultarle útiles: libros, capacitación y presentaciones. Puede encontrar a Cloudera útil para dicho entrenamiento.

Asistencia: una excelente manera de comenzar con los problemas del mundo real y la capacitación para todas las habilidades anteriores es observar lo que el mundo entero está hablando sobre Data Science and Analytics; desde las últimas tendencias hasta los ámbitos profesionales. Consulte este enlace para explorar el mundo de la analítica. Aprenda y explore análisis por Jigsaw Academy

Como resultado, hay una serie de habilidades que los desarrolladores de software a menudo dan por sentado que los nuevos científicos de datos no poseen, y que incluso podrían no haber escuchado. Revisé cuáles podrían ser estas habilidades. Revisaré las respuestas más comunes a continuación, pero diría que el tema unificador para todas ellas es que muchos científicos de datos nuevos no saben cómo colaborar efectivamente. Quizás solían ser académicos y solo trabajaban solos o con un solo colaborador. Quizás son autodidactas. Independientemente de los motivos, escribir código en un entorno en el que muchas otras personas (y “otras personas” se incluyen a usted mismo en una fecha posterior) lo verán, intentarán comprender y utilizarán su código o los resultados que produce.

  • Escribir código modular y reutilizable

Es probable que se le solicite que envíe su código para una revisión del código en algún momento. Esto es normal y no significa que las personas sean escépticas de su trabajo. Muchas organizaciones requieren que varias personas revisen el código antes de fusionarlo con el código de producción. Escribir código limpio y reutilizable facilitará este proceso para todos y reducirá la probabilidad de que reescriba partes importantes de su código después de una revisión del código.

  • Documentación / comentarios

Debido a que otras personas leerán su código, debe aprender a escribir comentarios significativos e informativos, así como la documentación del código que escriba. Es una muy buena práctica (aunque probablemente la mayoría de la gente no la seguiría) escribir comentarios y documentación antes de escribir el código. Este es el equivalente de codificación de escribir un esquema antes de escribir un documento.

A diferencia de los comentarios, la documentación es un documento escrito en inglés (o cualquier idioma que hable), en lugar de un lenguaje de programación, que explique el propósito del código que está escribiendo, cómo funciona, por ejemplo, casos de uso, a quién contactar para obtener asistencia, y así. Esto puede ser tan simple como un archivo README que se agrega al directorio donde está su código, a un manual completo que se imprimirá y se entregará a los usuarios.

  • Control de versiones

Muchas personas usan git como su sistema de control de versiones, aunque también puede encontrar terminología mercurial (abreviada hg) y subversión (svn abreviada) y los flujos de trabajo exactos diferirán ligeramente, pero la premisa básica suele ser la misma. Todo el código se almacena en uno o más repositorios (repositorios), y dentro de cada repositorio puede tener varias ramas: diferentes versiones del código. En cada repositorio, la rama que todos tratan como punto de inicio / referencia se denomina rama maestra. GitHub es un servicio que aloja repos (públicos y privados) y proporciona un conjunto común de herramientas para interactuar con git.

  • Pruebas

Existe una buena posibilidad de que si no tiene capacitación en informática formal, ni siquiera sabe a qué me refiero cuando digo “prueba”. Estoy hablando de escribir código que verifique su código en busca de errores en una variedad de situaciones. El tipo más básico de prueba que puedes escribir se llama prueba unitaria.

Escribe pruebas que describen el comportamiento esperado de su código y que fallan cuando ese comportamiento no se produce. Estoy trabajando en otra publicación sobre pruebas para científicos de datos, por lo que no entraré en demasiados detalles aquí, pero me gustaría decir aquí que es un tema muy importante. Su código va a estar interactuando con otros códigos y datos desordenados. Debe saber qué sucederá cuando se ejecute en datos que no son tan prístinos como los datos con los que está trabajando ahora.

  • Explotación florestal

Por ejemplo, si sus registros le dicen que el código no se ejecutó porque no se encontró el archivo que contiene los productos, debe saber de inmediato si el archivo se eliminó o si la red no funciona, etc. . Si el código se ejecuta parcialmente y falla en un producto o cliente específico, puede inspeccionar ese dato en particular y corregir su código para que no vuelva a suceder.

El espacio en disco es barato, por lo que debe registrarse generosamente. Es mucho más fácil (y más rápido) pasar por un gran directorio de registros que intentar reproducir un error inusual en una gran base de código o conjunto de datos. Haga que el registro funcione para usted: registre más cosas de las que cree que necesitará. Sea inteligente al iniciar sesión cuando se invoquen funciones o cuando se ejecuten pasos en su programa.

La mayoría de los científicos de datos pueden salirse con la suya siendo ingenieros de software mediocres. Hay un número tan pequeño de científicos de datos capaces en relación con la demanda que la mayoría de las empresas no pueden permitirse ser demasiado exigentes.

Pero no puedo enfatizar lo suficiente lo increíblemente valioso que es ser un científico de datos con habilidades de ingeniería de primer nivel. Si eres una de estas almas raras, ¡contáctame!

En serio, una cosa con la que luchan la mayoría de los científicos de datos es el diseño de arriba hacia abajo. La mayoría de los científicos de datos escriben guiones únicos. Estos scripts son difíciles de mantener, difíciles de extender, difíciles de refactorizar, etc. Comprender cómo escribir código modular bien resumido es muy valioso. Y no, no digo que deba seguir un patrón de diseño específico para cada análisis rápido ad-hoc.

8 habilidades de datos para que te contraten

Este es el conjunto básico de 8 competencias de ciencia de datos que debe desarrollar:

  • Herramientas básicas: no importa para qué tipo de empresa se entreviste, es probable que sepa cómo usar las herramientas del oficio. Esto significa un lenguaje de programación estadística, como R o Python, y un lenguaje de consulta de base de datos como SQL.
  • Estadísticas básicas: al menos una comprensión básica de las estadísticas es vital como científico de datos. Este también será el caso del aprendizaje automático, pero uno de los aspectos más importantes de su conocimiento estadístico será comprender cuándo las diferentes técnicas son un enfoque válido. Las estadísticas son importantes para todos los tipos de empresas, pero especialmente para las empresas basadas en datos donde el producto no se centra en los datos y las partes interesadas del producto dependerán de su ayuda para tomar decisiones y diseñar / evaluar experimentos.
  • Aprendizaje automático: si está en una gran empresa con grandes cantidades de datos, o trabaja en una empresa en la que el producto en sí está especialmente basado en datos, puede ser el caso de que desee familiarizarse con los métodos de aprendizaje automático. Pueden ser vecinos más cercanos, bosques aleatorios, métodos de conjunto, etc., todas las palabras de moda del aprendizaje automático. Es cierto que muchas de estas técnicas se pueden implementar utilizando las bibliotecas R o Python; debido a esto, no es necesariamente un factor decisivo si no eres el experto líder mundial en cómo funcionan los algoritmos. Es más importante comprender los trazos amplios y comprender realmente cuándo es apropiado utilizar diferentes técnicas.
  • Cálculo multivariable y álgebra lineal: de hecho, es posible que se le pida que obtenga algunos de los resultados de aprendizaje automático o estadísticas que emplea en otra parte de su entrevista. Incluso si no lo está, su entrevistador puede hacerle algunas preguntas básicas de cálculo multivariable o álgebra lineal, ya que forman la base de muchas de estas técnicas. Quizás se pregunte por qué un científico de datos necesitaría entender estas cosas si hay un montón de implementaciones listas para usar en sklearn o R. La respuesta es que, en cierto punto, puede ser útil para un equipo de ciencia de datos construir fuera de sus propias implementaciones en casa. Comprender estos conceptos es más importante en las empresas donde el producto se define por los datos y las pequeñas mejoras en el rendimiento predictivo o la optimización de algoritmos pueden generar grandes ganancias para la empresa.
  • Munging de datos: a menudo, los datos que está analizando serán confusos y difíciles de trabajar. Debido a esto, es realmente importante saber cómo lidiar con las imperfecciones en los datos. Algunos ejemplos de imperfecciones de datos incluyen valores faltantes, formato de cadena inconsistente (por ejemplo, ‘Nueva York’ versus ‘nueva york’ versus ‘ny’) y formato de fecha (‘2014-01-01’ vs. ’01 / 01/2014 ‘ , tiempo unix vs. marcas de tiempo, etc.). Esto será más importante en las pequeñas empresas en las que se contrata a los primeros datos, o en las empresas basadas en datos donde el producto no está relacionado con los datos (particularmente porque este último a menudo ha crecido rápidamente sin prestar mucha atención a la limpieza de los datos), pero esto La habilidad es importante para todos.
  • Visualización y comunicación de datos: visualizar y comunicar datos es increíblemente importante, especialmente en compañías jóvenes que toman decisiones basadas en datos por primera vez o en compañías donde los científicos de datos son vistos como personas que ayudan a otros a tomar decisiones basadas en datos. Cuando se trata de comunicarse, esto significa describir sus hallazgos o la forma en que las técnicas funcionan para el público, tanto técnico como no técnico. En cuanto a la visualización, puede ser inmensamente útil estar familiarizado con las herramientas de visualización de datos como ggplot y d3.js. Es importante no solo estar familiarizado con las herramientas necesarias para visualizar datos, sino también con los principios detrás de la codificación visual de datos y la comunicación de información.
  • Ingeniería de software: si está entrevistando en una empresa más pequeña y es una de las primeras contrataciones de ciencia de datos, puede ser importante tener una sólida formación en ingeniería de software. Usted será responsable de manejar una gran cantidad de registros de datos y, posiblemente, del desarrollo de productos basados ​​en datos.
  • Pensando como un científico de datos: las empresas quieren ver que usted es un solucionador de problemas (basado en datos). Es decir, en algún momento durante el proceso de la entrevista, probablemente se le preguntará acerca de algún problema de alto nivel, por ejemplo, sobre una prueba que la empresa quiera ejecutar o un producto basado en datos que desee desarrollar. Es importante pensar qué cosas son importantes y qué cosas no lo son. ¿Cómo debería, como científico de datos, interactuar con los ingenieros y gerentes de producto? ¿Qué métodos debes usar? ¿Cuándo tienen sentido las aproximaciones?

Los ingenieros siempre pueden llevarlo a un nivel superior e inscribirse en buenos institutos analíticos creíbles como Jigsaw Academy para asegurarse de que estén preparados con las habilidades adecuadas al ingresar al campo de la analítica.

Tal vez también un poco sobre la complejidad algorítmica, el equilibrio tiempo / espacio, un sentido intuitivo de las limitaciones de memoria de 32 bits y 64 bits, cómo funciona la reducción de mapas, limitaciones de doble precisión y limitaciones de coma flotante, etc.

Creo que la lista en los detalles de la pregunta es bastante buena. La mayoría de los desarrolladores de software aprenden este material en el trabajo; de hecho, hay un caso bastante bueno que es el objetivo de una posición de desarrollo de nivel de entrada. No veo ninguna razón por la que debería ser diferente para los científicos de datos.