¿Qué idiomas debería aprender para la ciencia de datos?

La ciencia de datos es un campo interesante para trabajar, que combina habilidades estadísticas y cuantitativas avanzadas con la capacidad de programación del mundo real. Hay muchos lenguajes de programación potenciales en los que el aspirante a científico de datos podría considerar especializarse.

Si bien no hay una respuesta correcta, hay varias cosas a tener en cuenta. Su éxito como científico de datos dependerá de muchos puntos, que incluyen:

Especificidad

Cuando se trata de ciencia de datos avanzada, solo llegará hasta cierto punto reinventando la rueda cada vez. Aprenda a dominar los distintos paquetes y módulos que se ofrecen en el idioma que elija. ¡La medida en que esto sea posible depende de qué paquetes específicos de dominio estén disponibles para usted en primer lugar!

Generalidad

Un científico de datos de primer nivel tendrá buenas habilidades de programación en todos los aspectos, así como la capacidad de calcular números. Gran parte del trabajo diario en ciencia de datos gira en torno al abastecimiento y procesamiento de datos sin procesar o "limpieza de datos". Para esto, ninguna cantidad de paquetes sofisticados de aprendizaje automático ayudará.

Productividad

En el mundo a menudo acelerado de la ciencia de datos comerciales, hay mucho que decir para hacer el trabajo rápidamente. Sin embargo, esto es lo que permite que la deuda técnica se infiltre, y solo con prácticas sensatas se puede minimizar.

Actuación

En algunos casos, es vital optimizar el rendimiento de su código, especialmente cuando se trata de grandes volúmenes de datos de misión crítica. Los lenguajes compilados suelen ser mucho más rápidos que los interpretados; del mismo modo, los lenguajes de tipado estático son considerablemente más a prueba de fallas que los de tipado dinámico. La compensación obvia está en contra de la productividad.

Hasta cierto punto, estos pueden verse como un par de ejes (generalidad-especificidad, rendimiento-productividad). Cada uno de los idiomas siguientes se encuentra en algún lugar de estos espectros.

Con estos principios básicos en mente, echemos un vistazo a algunos de los lenguajes más populares utilizados en la ciencia de datos. Lo que sigue es una combinación de investigación y experiencia personal mía, amigos y colegas, ¡pero de ninguna manera es definitiva! Aproximadamente en orden de popularidad, aquí va:

R

Lo que necesitas saber

Lanzado en 1995 como descendiente directo del antiguo lenguaje de programación S, desde entonces R ha ido viento en popa. Escrito en C, Fortran y en sí mismo, el proyecto cuenta actualmente con el apoyo de la Fundación R para Computación Estadística.

Licencia

¡Gratis!

Pros

  • Excelente variedad de paquetes de código abierto, específicos de dominio y de alta calidad. R tiene un paquete para casi todas las aplicaciones cuantitativas y estadísticas imaginables. Esto incluye redes neuronales, regresión no lineal, filogenética, trazado avanzado y muchos, muchos otros.
  • La instalación básica incluye funciones y métodos estadísticos integrados muy completos. R también maneja particularmente bien el álgebra matricial.
  • La visualización de datos es una fortaleza clave con el uso de bibliotecas como ggplot2.

Contras

  • Actuación. No hay dos formas de hacerlo, R no es un lenguaje rápido.
  • Especificidad de dominio. R es fantástico para fines estadísticos y de ciencia de datos. Pero menos para la programación de propósito general.
  • Peculiaridades. R tiene algunas características inusuales que podrían sorprender a los programadores con experiencia en otros lenguajes. Por ejemplo: indexación desde 1, usando múltiples operadores de asignación, estructuras de datos no convencionales.

Veredicto: "brillante para lo que está diseñado"

R es un lenguaje poderoso que sobresale en una gran variedad de aplicaciones estadísticas y de visualización de datos, y ser de código abierto permite una comunidad muy activa de colaboradores. Su reciente crecimiento en popularidad es un testimonio de lo efectivo que es en lo que hace.

Pitón

Lo que necesitas saber

Guido van Rossum introdujo Python en 1991. Desde entonces se ha convertido en un lenguaje de propósito general extremadamente popular y se usa ampliamente dentro de la comunidad de ciencia de datos. Las versiones principales son actualmente 3.6 y 2.7.

Licencia

¡Gratis!

Pros

  • Python es un lenguaje de programación de uso general muy popular y convencional. Tiene una amplia gama de módulos especialmente diseñados y apoyo de la comunidad. Muchos servicios en línea proporcionan una API de Python.
  • Python es un lenguaje fácil de aprender. La baja barrera de entrada lo convierte en un primer idioma ideal para aquellos que son nuevos en la programación.
  • Paquetes como pandas, scikit-learn y Tensorflow hacen de Python una opción sólida para aplicaciones avanzadas de aprendizaje automático.

Contras

  • Seguridad de tipos: Python es un lenguaje escrito dinámicamente, lo que significa que debe mostrar el debido cuidado. Los errores de tipo (como pasar una cadena como argumento a un método que espera un número entero) son esperados de vez en cuando.
  • Para fines específicos de análisis de datos y estadísticos, la amplia gama de paquetes de R le da una ligera ventaja sobre Python. Para los lenguajes de propósito general, existen alternativas más rápidas y seguras a Python.

Veredicto: "excelente todoterreno"

Python es una muy buena elección de lenguaje para la ciencia de datos, y no solo para principiantes. Gran parte del proceso de ciencia de datos gira en torno al proceso ETL (extracción-transformación-carga). Esto hace que la generalidad de Python sea ideal. Bibliotecas como Tensorflow de Google hacen de Python un lenguaje muy interesante para trabajar en el aprendizaje automático.

SQL

Lo que necesitas saber

SQL ('Structured Query Language') define, gestiona y consulta bases de datos relacionales. El lenguaje apareció en 1974 y desde entonces ha sufrido muchas implementaciones, pero los principios básicos siguen siendo los mismos.

Licencia

Varía: algunas implementaciones son gratuitas, otras propietarias

Pros

  • Muy eficiente en la consulta, actualización y manipulación de bases de datos relacionales.
  • La sintaxis declarativa hace que SQL sea un lenguaje a menudo muy legible. ¡No hay ambigüedad sobre lo que SELECT name FROM users WHERE age >se supone que debe hacer 18!
  • SQL se usa mucho en una variedad de aplicaciones, lo que lo convierte en un lenguaje muy útil para familiarizarse. Los módulos como SQLAlchemy facilitan la integración de SQL con otros lenguajes.

Contras

  • Las capacidades analíticas de SQL son bastante limitadas; más allá de agregar y sumar, contar y promediar datos, sus opciones son limitadas.
  • Para los programadores que provienen de un entorno imperativo, la sintaxis declarativa de SQL puede presentar una curva de aprendizaje.
  • Hay muchas implementaciones diferentes de SQL como PostgreSQL, SQLite, MariaDB. Todos son lo suficientemente diferentes como para hacer de la interoperabilidad un dolor de cabeza.

Veredicto: "atemporal y eficiente"

SQL es más útil como lenguaje de procesamiento de datos que como herramienta analítica avanzada. Sin embargo, gran parte del proceso de ciencia de datos depende de ETL, y la longevidad y la eficiencia de SQL son una prueba de que es un lenguaje muy útil para que lo conozca el científico de datos moderno.

Java

Lo que necesitas saber

Java es un lenguaje de propósito general extremadamente popular que se ejecuta en la máquina virtual Java (JVM). Es un sistema informático abstracto que permite una portabilidad perfecta entre plataformas. Actualmente soportado por Oracle Corporation.

Licencia

Versión 8 - ¡Gratis! Versiones heredadas, propietarias.

Pros

  • Ubicuidad. Muchos sistemas y aplicaciones modernos se basan en un back-end de Java. La capacidad de integrar métodos de ciencia de datos directamente en la base de código existente es poderosa.
  • Fuertemente tipado. Java no tiene sentido cuando se trata de garantizar la seguridad de los tipos. Para las aplicaciones de big data de misión crítica, esto es invaluable.
  • Java es un lenguaje compilado de alto rendimiento y uso general. Esto lo hace adecuado para escribir código de producción ETL eficiente y algoritmos de aprendizaje automático computacionalmente intensivos.

Contras

  • Para análisis ad-hoc y aplicaciones estadísticas más dedicadas, la verbosidad de Java lo convierte en una primera opción poco probable. Los lenguajes de scripting escritos dinámicamente como R y Python se prestan a una productividad mucho mayor.
  • En comparación con los lenguajes específicos de dominio como R, no hay una gran cantidad de bibliotecas disponibles para métodos estadísticos avanzados en Java.

Veredicto: "un competidor serio para la ciencia de datos"

Hay mucho que decir sobre el aprendizaje de Java como lenguaje de ciencia de datos de primera elección. Muchas empresas apreciarán la capacidad de integrar perfectamente el código de producción de ciencia de datos directamente en su base de código existente, y encontrará que el rendimiento y la seguridad de tipos de Java son ventajas reales.

Sin embargo, no contará con la variedad de paquetes específicos de estadísticas disponibles para otros idiomas. Dicho esto, definitivamente uno a considerar, especialmente si ya conoce uno de R y / o Python.

Scala

Lo que necesitas saber

Desarrollado por Martin Odersky y lanzado en 2004, Scala es un lenguaje que se ejecuta en JVM. Es un lenguaje de múltiples paradigmas, que permite enfoques tanto orientados a objetos como funcionales. El marco de computación en clúster Apache Spark está escrito en Scala.

Licencia

¡Gratis!

Pros

  • Scala + Spark = Computación en clúster de alto rendimiento. Scala es una opción de idioma ideal para quienes trabajan con conjuntos de datos de gran volumen.
  • Multiparadigmático: los programadores de Scala pueden tener lo mejor de ambos mundos. Están disponibles para ellos paradigmas de programación funcional y orientada a objetos.
  • Scala se compila en código de bytes Java y se ejecuta en una JVM. Esto permite la interoperabilidad con el lenguaje Java en sí, lo que convierte a Scala en un lenguaje de propósito general muy poderoso, al mismo tiempo que es adecuado para la ciencia de datos.

Contras

  • Scala no es un lenguaje sencillo para comenzar a usarlo si recién está comenzando. Su mejor opción es descargar sbt y configurar un IDE como Eclipse o IntelliJ con un complemento Scala específico.
  • La sintaxis y el sistema de tipos a menudo se describen como complejos. Esto genera una curva de aprendizaje pronunciada para aquellos que provienen de lenguajes dinámicos como Python.

Veredicto: "perfecto, para grandes cantidades de datos"

Cuando se trata de utilizar la computación en clúster para trabajar con Big Data, Scala + Spark son soluciones fantásticas. Si tiene experiencia con Java y otros lenguajes de tipado estático, también apreciará estas características de Scala.

Sin embargo, si su aplicación no maneja los volúmenes de datos que justifican la complejidad adicional de Scala, probablemente encontrará que su productividad es mucho mayor al usar otros lenguajes como R o Python.

Julia

Lo que necesitas saber

Lanzada hace poco más de 5 años, Julia ha dejado una huella en el mundo de la computación numérica. Su perfil se elevó gracias a la adopción temprana por parte de varias organizaciones importantes, incluidas muchas en la industria financiera.

Licencia

¡Gratis!

Pros

  • Julia es un lenguaje compilado JIT ('just-in-time'), lo que le permite ofrecer un buen rendimiento. También ofrece la simplicidad, la escritura dinámica y las capacidades de escritura de un lenguaje interpretado como Python.
  • Julia fue diseñada específicamente para el análisis numérico. También es capaz de programación de propósito general.
  • Legibilidad. Muchos usuarios del idioma citan esto como una ventaja clave.

Contras

  • Madurez. Como nuevo lenguaje, algunos usuarios de Julia han experimentado inestabilidad al usar paquetes. Pero el lenguaje central en sí es lo suficientemente estable para su uso en producción.
  • Los paquetes limitados son otra consecuencia de la juventud del idioma y la pequeña comunidad de desarrollo. A diferencia de R y Python de larga data, Julia no tiene la opción de paquetes (todavía).

Veredicto: "uno para el futuro"

El principal problema con Julia es uno del que no se puede culpar. Como lenguaje desarrollado recientemente, no está tan maduro o listo para producción como sus principales alternativas Python y R.

Pero, si está dispuesto a ser paciente, hay muchas razones para prestar mucha atención a medida que el idioma evoluciona en los próximos años.

MATLAB

Lo que necesitas saber

MATLAB es un lenguaje informático numérico establecido que se utiliza en la academia y la industria. Está desarrollado y autorizado por MathWorks, una empresa establecida en 1984 para comercializar el software.

Licencia

Propietario: el precio varía según su caso de uso

Pros

  • Diseñado para computación numérica. MATLAB es ideal para aplicaciones cuantitativas con requisitos matemáticos sofisticados, como procesamiento de señales, transformadas de Fourier, álgebra matricial y procesamiento de imágenes.
  • Visualización de datos. MATLAB tiene excelentes capacidades de trazado incorporadas.
  • MATLAB a menudo se enseña como parte de muchos cursos de pregrado en materias cuantitativas como Física, Ingeniería y Matemáticas Aplicadas. Como consecuencia, se usa ampliamente en estos campos.

Contras

  • Licencia propietaria. Dependiendo de su caso de uso (académico, personal o empresarial), es posible que deba desembolsar una licencia costosa. Hay alternativas gratuitas disponibles como Octave. Esto es algo a lo que debe prestar mucha atención.
  • MATLAB no es una opción obvia para la programación de propósito general.

Veredicto: "mejor para aplicaciones matemáticamente intensivas"

El uso generalizado de MATLAB en una variedad de campos cuantitativos y numéricos en la industria y el mundo académico lo convierte en una opción seria para la ciencia de datos.

El caso de uso claro sería cuando su aplicación o función diaria requiera una funcionalidad matemática avanzada e intensiva. De hecho, MATLAB fue diseñado específicamente para esto.

Otros idiomas

Hay otros lenguajes convencionales que pueden o no ser de interés para los científicos de datos. Esta sección proporciona una descripción general rápida ... ¡con mucho espacio para el debate, por supuesto!

C ++

C ++ no es una opción común para la ciencia de datos, aunque tiene un rendimiento increíblemente rápido y una popularidad generalizada. La simple razón puede ser una cuestión de productividad versus desempeño.

Como dice un usuario de Quora:

“Si está escribiendo código para realizar un análisis ad-hoc que probablemente solo se ejecutará una vez, ¿preferiría dedicar 30 minutos a escribir un programa que se ejecutará en 10 segundos, o 10 minutos a escribir un programa que se ejecutará en 1 ¿minuto?"

El tipo tiene razón. Sin embargo, para un rendimiento serio a nivel de producción, C ++ sería una excelente opción para implementar algoritmos de aprendizaje automático optimizados a bajo nivel.

Veredicto: "no para el trabajo diario, pero si el rendimiento es fundamental ..."

JavaScript

Con el auge de Node.js en los últimos años, JavaScript se ha convertido cada vez más en un lenguaje serio del lado del servidor. Sin embargo, su uso en los dominios de ciencia de datos y aprendizaje automático se ha limitado hasta la fecha (aunque consulte brain.js y synaptic.js). Tiene las siguientes desventajas:

  • Tarde en el juego (¡Node.js tiene solo 8 años!), Lo que significa ...
  • Hay pocas bibliotecas y módulos de ciencia de datos relevantes disponibles. Esto significa que no hay ningún interés o impulso real
  • En cuanto al rendimiento, Node.js es rápido. Pero JavaScript como lenguaje no está exento de críticas.

Los puntos fuertes de Node se encuentran en la E / S asincrónica, su uso generalizado y la existencia de lenguajes que se compilan en JavaScript. Por lo tanto, es concebible que se pueda combinar un marco útil para la ciencia de datos y el procesamiento ETL en tiempo real.

La pregunta clave es si esto ofrecería algo diferente a lo que ya existe.

Veredicto: "queda mucho por hacer antes de que JavaScript pueda considerarse un lenguaje de ciencia de datos serio"

Perl

Perl es conocido como una 'navaja suiza de lenguajes de programación', debido a su versatilidad como lenguaje de scripting de propósito general. Tiene mucho en común con Python, ya que es un lenguaje de secuencias de comandos escrito dinámicamente. Pero no ha visto nada parecido a la popularidad que tiene Python en el campo de la ciencia de datos.

Esto es un poco sorprendente, dado su uso en campos cuantitativos como la bioinformática. Perl tiene varias desventajas clave cuando se trata de ciencia de datos. No se destaca rápidamente y su sintaxis es famosa por su hostilidad. No ha habido el mismo impulso hacia el desarrollo de bibliotecas específicas de ciencia de datos. Y en cualquier campo, el impulso es clave.

Veredicto: "un lenguaje de secuencias de comandos de propósito general útil, pero que no ofrece ventajas reales para su CV de ciencia de datos"

Rubí

Ruby es otro lenguaje interpretado dinámicamente de propósito general. Sin embargo, tampoco ha visto la misma adopción de la ciencia de datos que Python.

Esto puede parecer sorprendente, pero es probable que sea el resultado del dominio de Python en el mundo académico y un efecto de retroalimentación positiva. Cuantas más personas usen Python, más módulos y marcos se desarrollarán, y más personas recurrirán a Python.

El proyecto SciRuby existe para llevar la funcionalidad de la computación científica, como el álgebra matricial, a Ruby. Pero por el momento, Python sigue liderando el camino.

Veredicto: "todavía no es una opción obvia para la ciencia de datos, pero no dañará el CV"

Conclusión

Bueno, ahí lo tiene: una guía rápida sobre qué idiomas considerar para la ciencia de datos. La clave aquí es comprender sus requisitos de uso en términos de generalidad frente a especificidad, así como su estilo de desarrollo preferido personal de rendimiento frente a productividad.

Utilizo R, Python y SQL de forma regular, ya que mi función actual se centra principalmente en el desarrollo de procesos ETL y canalización de datos existentes. Estos lenguajes brindan el equilibrio adecuado de generalidad y productividad para hacer el trabajo, con la opción de usar los paquetes de estadísticas más avanzados de R cuando sea necesario.

Sin embargo, es posible que ya tenga algo de experiencia con Java. O puede que desee utilizar Scala para big data. O tal vez esté interesado en participar en el proyecto Julia.

¿Quizás aprendió MATLAB en la universidad o quiere darle una oportunidad a SciRuby? Quizás tenga una sugerencia completamente diferente. Si es así, deje una respuesta a continuación. ¡Espero tener noticias suyas!

¡Gracias por leer!