Antecedentes: soy científico de datos en una startup en Austin, y vengo de la escuela de posgrado (Física). Yo uso Python día a día para el análisis de datos, pero uso R un poco. También uso C # /. NET y Java (casi a diario), utilicé C ++ en gran medida en la escuela de posgrado.
Creo que el principal problema con el uso de Python para numéricos (sobre R) es el tamaño de la comunidad de usuarios. Como el lenguaje ha existido desde siempre, muchas personas han hecho cosas que probablemente querrás hacer. Esto significa que, cuando se enfrenta a un problema difícil, puede descargar el paquete y ponerse a trabajar. Y R "simplemente funciona": le da un conjunto de datos y sabe qué estadísticas de resumen son útiles. Le das algunos resultados y sabe qué tramas quieres. Todas las tramas comunes que te gustaría hacer están allí, incluso algunas bastante esotéricas que tendrás que buscar en Wikipedia. Tan bueno como scipy / numpy / pandas / statsmodels / etc. son para Python, no están al nivel de la biblioteca estándar de R.
La principal ventaja de Python sobre R es que es un lenguaje de programación real en la familia C. Se escala fácilmente, por lo que es concebible que cualquier cosa que tenga en su caja de arena se pueda usar en la producción. Python tiene la Orientación de Objeto incorporada, a diferencia de R, donde se siente como una idea de último momento (porque lo es). También hay otras cosas que Python hace muy bien: el enhebrado y el procesamiento paralelo son bastante fáciles, y no estoy seguro de si ese es el caso en R. Y aprender Python también le brinda una poderosa herramienta de secuencias de comandos. También hay IDEs realmente buenos (gratis) para Python, mucho mejores si está dispuesto a pagar (menos de $ 100), y no estoy seguro de que este sea el caso de R: el único IDE de R que conozco es R Studio, que es bastante bueno, pero no es tan bueno como PyDev + Eclipse, en mi experiencia.
Agregaré esto como una patada: ya que todavía estás en la escuela, deberías pensar en trabajos. Encontrará más ofertas de trabajo para desarrolladores Python altamente calificados que para desarrolladores R altamente calificados. En Austin, los trabajos para los desarrolladores de Django se están cayendo del cielo. Si conoce R realmente bien, hay algunos lugares donde podrá capitalizar esa habilidad (Revolution Analytics, por ejemplo), pero muchas tiendas parecen usar Python. Incluso en el campo del análisis de datos / ciencia de datos, más personas parecen estar recurriendo a Python.
Y no subestimes que puedes trabajar con / para personas que solo conocen (digamos) Java. Esas personas podrán leer su código Python con bastante facilidad. Este no será necesariamente el caso si haces todo tu trabajo en R. (Esto viene de la experiencia).
Finalmente, esto puede sonar superficial, pero creo que la documentación de Python y las convenciones de nomenclatura (a las que se adhiere religiosamente) resulta mucho mejor que el utilitario R doc. Esto se debatirá arduamente, estoy seguro, pero el énfasis en Python es la legibilidad. Eso significa que los argumentos de las funciones de Python tienen nombres que puedes leer, y eso significa algo. En R, los nombres de argumentos a menudo se truncan --- He encontrado esto menos cierto en Python. Esto puede sonar pedante, pero me vuelve loco escribir cosas como 'xlab' cuando podría nombrar fácilmente un argumento 'x_label' (solo un ejemplo) --- esto tiene un gran efecto cuando intenta aprender un nuevo módulo / paquete API. Leer R doc es como leer páginas de manual de Linux --- si eso es lo que hace flotar tu barco, entonces más poder para ti.
Dicho todo esto, sugeriría lo siguiente (que también es mi flujo de trabajo típico): dado que conoce Python, úselo como su primera herramienta. Cuando encuentre que falta Python, aprenda suficiente R para hacer lo que quiera, y luego:
- Escriba scripts en R y ejecútelos desde Python usando el módulo de subproceso, o
- Instala el módulo RPy.
Use Python para lo que Python es bueno y complete los espacios en blanco con uno de los anteriores. Este es mi flujo de trabajo normal: generalmente uso R para trazar cosas y Python para levantar objetos pesados.
En resumen: debido al énfasis de Python en la legibilidad (busque en Google "Pythonic"), la disponibilidad de IDE buenos y gratuitos, el hecho de que esté en la familia de lenguajes C, la mayor posibilidad de que pueda capitalizar el conjunto de habilidades y el mejor estilo de documentación del lenguaje, sugeriría hacer de Python su opción y confiar en R solo cuando sea necesario.
Ok, esta es (de lejos) mi respuesta más popular en un sitio de pila, y ni siquiera es la # 1 :) Espero que esto haya ayudado a algunas personas en el camino.
En cualquier caso, he llegado a la siguiente conclusión después de varios años en el campo:
Esta es probablemente la pregunta incorrecta que hacer.
Preguntar "debería aprender esta tecnología en particular" es una mala pregunta. ¿Por qué?
- Cambios tecnológicos. Siempre tendrás que aprender otra tecnología. Si vas a trabajar en Twitter, ellos ejecutan Scala. Algunos lugares son tiendas de Python. A algunos lugares no les importa. No vas a ser contratado porque conoces o no una pieza de tecnología en particular; si no puedes aprender una nueva tecnología, puedes (y deberías) despedirlo. Es como si saliera una nueva llave de tubo, y usted es un fontanero, y no puede entender cómo funciona la nueva llave de tubo, probablemente sea un fontanero bastante malo.
- Dada la opción de "Aprendo esta tecnología" o "Dedico más tiempo a resolver problemas reales", siempre debe elegir este último, sin excepción.
Como científico de datos, su trabajo es resolver problemas . Esa única sabiduría se pierde casi siempre en cada conferencia o reunión a la que asistes: cada charla de "big data" que he visto se ha centrado en la tecnología, no en la resolución de problemas. La resolución real del problema generalmente se relega a unas pocas diapositivas al final:
[Talk title = "Aprendizaje profundo en Cool New Startup"] ... [45 minutos de diagramas y techno-babel durante los cuales desconecto y reviso mi teléfono] ... Y, después de implementar nuestro clúster Hadoop y [Ben zonas fuera de nuevo] podemos ejecutar nuestra rutina de aprendizaje profundo, [despertar: ¡es por eso que vine!] cuyos detalles son propietarios. Preguntas?
Esto da una mala impresión de que el campo se trata de tecnología, y simplemente no es cierto. Si eres realmente bueno en Scala, Python o R, pero eres realmente malo para resolver problemas , serás un pésimo científico de datos .
Paco Nathan estuvo en Austin hace unos meses en una conferencia de "big data" de un día de duración, y dijo algo como "La química no se trata de tubos de ensayo". Eso lo resume bastante bien: la ciencia de datos no se trata de Scala, Hadoop, Spark o cualquier otra tecnología que aparezca. Al final del día, quiero contratar personas que piensen, no personas que sean expertas en usar Stack Overflow para aprender kits de herramientas.
Del mismo modo, si vas a una entrevista de trabajo y no te contratan solo porque no conoces un lenguaje de programación, entonces esa compañía apesta . No entienden lo que significa "científico de datos", y probablemente sea mejor para usted si no funcionara.
Finalmente, si sus habilidades para resolver problemas son marginales (sea honesto consigo mismo), o si realmente disfruta el lado tecnológico de las cosas, o aprender tecnología es lo que realmente ama (nuevamente, sea honesto), entonces aprenda mucha tecnología. Siempre podrá encontrar roles de tipo "ingeniero de datos" que se ajusten a su conjunto de habilidades. Esto no es algo malo, los ingenieros de datos engrasan las ruedas y le permiten hacer su trabajo como científico de datos. (La diferencia es similar al arquitecto de software frente al equipo de desarrollo).