¿Por qué las compañías de Internet prefieren Java / Python para el trabajo de científico de datos?


53

Veo muchas veces en la descripción del trabajo de un científico de datos que solicita experiencia en Python / Java y no tengo en cuenta a R. A continuación se muestra un correo electrónico personal que recibí del científico de datos en jefe de una empresa que solicité a través de linkedin.

X, gracias por conectar y expresar interés. Tienes buenas habilidades analíticas. Sin embargo, todos nuestros científicos de datos deben tener buenas habilidades de programación en Java / Python, ya que somos una organización de Internet / móvil y todo lo que hacemos está en línea.

Si bien respeto la decisión del principal científico de datos, no puedo obtener una idea clara de cuáles son las tareas que Python puede hacer que R no puede hacer. ¿A alguien le puede interesar elaborar? De hecho, estoy interesado en aprender Python / Java, siempre que tenga un poco más de detalle.

Editar: encontré una discusión interesante sobre Quora. ¿Por qué Python es un lenguaje de elección para los científicos de datos?

Edit2: Blog de Udacity sobre idiomas y bibliotecas para el aprendizaje automático


8
Python es un buen compromiso: proporciona muchas bibliotecas (no estándar) para ciencia de datos (pandas, scikit, ...) y muchos procesos industriales ya están codificados en python.
Manu H

44
"nuestros científicos de datos deben tener buenas habilidades de programación en Java / Python, ya que somos una organización de Internet / móvil y todo lo que hacemos está en línea" es una incongruencia masiva: la conclusión no se deduce de la premisa. Sospecho que el CDS solo está tratando de deshacerte de ti.
Spacedman

55
@ManuH Si por "no estándar" quiere decir "no en la biblioteca estándar", está en lo correcto. Pero esas herramientas tienen un uso bastante extendido, y ciertamente son elementos básicos del lenguaje. numpy actualmente tiene más de 100k preguntas sobre SO, pandas tiene 74k. Creo que sin duda podría argumentar que son estándares de la industria . (Al menos en el lado del desarrollo de software. Difícilmente me llamaría un "científico de datos")
Jpmc26

2
"Científico de datos" no es un término bien definido. Data Scientist es básicamente alguien que puede hacer cosas útiles con datos. No tienen que estar usando aprendizaje automático o paquetes estadísticos. Alguien podría estar usando Java / Scala / Spark / lo que sea para administrar grandes cantidades de datos y obtener información útil sin ningún aprendizaje automático.
Akavall

2
@ jpmc26 Sí, a eso me refería. Ahora me doy cuenta de que incluso las bibliotecas que aún no han alcanzado los estándares de la industria podrían mencionarse (un argumento más para python)
Manu H

Respuestas:


67

Para que pueda integrarse con el resto de la base de código. Parece que su empresa utiliza una combinación de Java y Python. ¿Qué vas a hacer si un pequeño rincón del sitio necesita aprendizaje automático? pasar los datos con una base de datos o caché, soltar en R, y así sucesivamente ¿Por qué no hacerlo todo en el mismo idioma? Es más rápido, más limpio y más fácil de mantener.

¿Conoces alguna compañía en línea que se ejecute únicamente en R? Yo tampoco...

Todo lo que dijo que Java es el último lenguaje en el que haría ciencia de datos.


1
Estaba a punto de decir que una arquitectura orientada a servicios también ayuda a unir tecnologías. PMML es un poco empresarial; No lo he usado, pero el suyo es una tienda de Java, los idiomas de la empresa madre, por lo que nunca se sabe ...
Emre

3
@Enthusiast no olvides que puedes ejecutar R bajo Python usando RPy2 (por ejemplo) para que puedas terminar (como hice en un trabajo anterior) ejecutando modelos escritos en R a través de Python para que puedan presentarse a través de una interfaz web a través de django.
MD-Tech

2
Construimos el modelo en archivos .r de texto plano que se cargaron en el intérprete R para probar (y facilitar la construcción). Mientras esto se construía y probaba, creamos un proyecto Python Django con una sección que hacía referencia a RPy2 y creaba objetos RPy2. Estos objetos se usaron para cargar los archivos R de la misma manera que los cargaría en el intérprete para que podamos acceder a las funciones que envuelven el modelo. Entonces podríamos pasar datos de la base de datos a R a través de Python. La capa de Python nos dio la interfaz web con django y control sobre la base de datos, etc.
MD-Tech

1
@Entusiasta Los resultados del modelo fueron devueltos por la R dentro de RPy2 y presentados en la parte delantera en varias formas, principalmente gráficos.
MD-Tech

2
@Entusiasta Era una red bayesiana de finanzas, pero no puedo decir más que eso. El modelo fue escrito en letra R. Solo texto simple; Lo estaba editando en Vim cada vez que lo necesitaba, y se "desplegó" cargando el código R, como texto, en RPy2 usando la fuente ("our_code.r") en los objetos RPy2. Se hizo de esta manera para que pudiéramos editar en vivo el modelo. Esta no es una respuesta a esta pregunta; es una respuesta a una que no se ha preguntado;)
MD-Tech

24

Puede haber muchas razones como:

  1. Flexibilidad de la fuerza laboral: un programador de Java / Python puede moverse fácilmente a otras tareas o proyectos.

  2. Disponibilidad de candidatos: hay muchos programadores Java / Python. No desea introducir un nuevo lenguaje de programación para luego descubrir que no hay trabajadores calificados o que son demasiado caros.

  3. Integración y ETL: a veces obtener los datos con la calidad adecuada es la parte más difícil del proyecto. Por lo tanto, es natural usar el mismo lenguaje que el resto de los sistemas.

  4. Definición del modelo comercial: la mayoría de las reglas comerciales y los modelos comerciales ya están escritos en estos idiomas.

  5. Simplemente manteniendo las cosas simples. Ya es bastante difícil estar al día con las tecnologías. Una base diversa de lenguaje puede ser caótica. R para esto, Ruby para eso, Scala, Clojure, F #, Swift, Dart ... Pueden necesitar diferentes servidores, diferentes parches, un infierno para administrar. Todos tienen sus propios IDE con herramientas y complementos (no siempre gratuitos). Vea algunos puntos del tío Bob sobre la elección de idiomas y las nuevas tecnologías.

Entonces, incluso si tiene una ventaja de productividad del 5% al ​​15% utilizando R para la tarea específica, pueden preferir una herramienta que simplemente haga el trabajo, incluso si no es de la manera más eficiente.


Aunque es cierto, ninguno de los anteriores responde realmente a la pregunta. Obtener los datos reduce el 99% de las veces a consultar una base de datos o leer .csvarchivos, para lo cual R es en realidad la mejor herramienta adecuada en el mercado. Disponibilidad de candidatos: que haya más programadores Java que programadores R no implica que tenga que descartar un candidato R si tiene uno. Realmente no importa cómo el científico realice sus ejercicios siempre que implementen código legible que pueda ser ejecutado por algunos servidores (o cualquier otra cosa que la compañía esté ejecutando).
Gented

Por supuesto, no debe descartar al candidato. La persona es mucho más importante que la herramienta. Su equipo puede aprender R y el candidato puede aprender Java / Python. Pero llevará tiempo, lo que significa dinero.
borjab

El punto que ciertamente no estoy de acuerdo es que no le importa el idioma. Cuando el único miembro del equipo que conoce a R no está de vacaciones y necesita hacer cambios, el jefe no estará contento. O simplemente pregúntele al equipo "Oh, genial, necesitamos aprender un nuevo idioma solo porque el nuevo hace las cosas de esta manera". Puede ser que la administración del servidor sea otro departamento y los nuevos tipos de servidores necesitan nuevos análisis, procedimientos, etc. Es posible que necesite luz verde de seguridad de TI para usar un nuevo idioma.
borjab

@GennaroTedesco, el código escrito por el candidato debe ser mantenido por otros programadores, mientras trabajan juntos y también en algún futuro cuando el autor original continúe . No es suficiente tener un candidato que conozca bien una tecnología, aún es importante considerar lo fácil que será contratar a otro candidato que conozca bien la tecnología cuando la necesite. por supuesto, se puede introducir una nueva pieza de tecnología de nicho si hay una buena razón, pero debe haber una buena razón para superar esos riesgos comerciales.
Peteris

Usted puede tener una mejora de la productividad mediante el uso de $ x R, pero es sin ayuda si se tienen que gastar $ 2x esfuerzo en los cambios en el flujo de trabajo. ¿Por qué harían eso, especialmente si podrían contratar a alguien que no les cueste $ 2x?
user1908704

14

En general, es cierto que para los ejercicios puramente de ciencia de datos y estadística, R ofrece las mejores y más rápidas data.tableherramientas y métodos (especialmente si se usa el paquete), que de otro modo serían más pesados ​​de implementar en Python (supongo que por Python todos queremos decir Pandas, sin embargo ) De hecho, la mayoría de los científicos de datos usan R para realizar sus modelos y cálculos, o simplemente para ver cómo se comportan los datos.

Una vez que se completa el ejercicio, es hora de ponerlo a disposición del resto de las personas que tienen que usarlo (es decir, desplegarlo); Para este objetivo, a menudo se prefiere enviar el código en Python por dos razones principales:

  1. La mayoría de las arquitecturas están escritas en Python o son compatibles con Python, por lo tanto, sería más fácil implementar modelos escritos de forma nativa en ese lenguaje.
  2. La sintaxis y la gramática de R es extremadamente complicada. Yo mismo estoy a favor de R además de cualquier otra cosa, pero tengo que admitir que la sintaxis no es realmente sencilla y tiene una curva de aprendizaje muy escogida.

Dicho lo anterior, todavía es cierto que uno puede traducir fácilmente el código R a cualquier otro idioma, siempre que haya métodos, bibliotecas y paquetes disponibles (en Python la mayoría de ellos lo están, por lo que no hay ningún problema). Muchas infraestructuras y bases de datos admiten el código R subyacente, por lo tanto, la portabilidad no es realmente un problema, especialmente si uno solo tiene que enviar los resultados de los cálculos (hasta ese punto, nadie realmente ve el código subyacente de todos modos).

Java es casi inútil para la ciencia de datos pura en sí misma (aunque la Universidad de Stanford tiene una colección de bibliotecas de aprendizaje automático de PNL escritas en Java, por lo que recuerdo, pero por favor verifique). La única razón por la que se puede requerir es que el resto de la compañía lo usa en gran medida y no quiere reemplazarlo por algo nuevo.


¡Gracias por compartir tu perspectiva y experiencia! Esto es útil. Desde su segundo último párrafo, supongo que está hablando de scikit-learn? o te refieres a RPy? ¿Cuidado para elaborar?
Entusiasta

1
Simplemente quiero decir que, sea lo que sea que esté haciendo en R, lo más probable es que haya un paquete Python similar que haga el mismo trabajo. Pandas cubre la mayoría de las cosas que data.tableofrece; scikit-learn, como mencionaste, es otro ejemplo, pero hay muchos más según el caso en cuestión.
Gented

1
Exactamente lo que hago. La investigación en R, una vez que haya terminado, traduzca a Python para integrarla en la base de código. Pero @Entusiasta si puede hacer lo mismo en esa empresa depende de su cultura. La mayoría de la gente usa el lenguaje de programación que usa su jefe. Y Python no es difícil de aprender.
jf328

1
@GennaroTedesco: "Simplemente quiero decir que sea lo que sea que esté haciendo en R, lo más probable es que haya un paquete Python similar que haga el mismo trabajo". De hecho, estoy totalmente en desacuerdo con esta afirmación. La mayor ventaja de R es que el 90% de los estadísticos publican su último y "mayor" en R, en lugar de Python. Si estos métodos se ponen de moda, eventualmente pueden llegar a Python. Pero eso también es una ventaja para Python; hay muchos paquetes de estadísticas de R que son basura, mientras que creo que los paquetes de estadísticas de Python tienen más probabilidades de ser los métodos probados y verdaderos.
Cliff AB el

"La sintaxis y la gramática de R es extremadamente complicada. Yo mismo estoy firmemente a favor de R aparte de cualquier otra cosa, pero tengo que admitir que la sintaxis no es realmente sencilla y tiene una curva de aprendizaje muy escogida". Ambas parecen ser opiniones, pero una está vestida como una declaración objetiva y la otra se opone. Estoy desconcertado También siento que la sintaxis y las expresiones idiomáticas de Python son más complicadas (énfasis POO, por ejemplo), así que esta respuesta me confunde doblemente.
estrella brillante

7

He visto bastantes compañías que usan el título de Científico de Datos para roles tipo "Ingeniero de Datos". Particularmente en el espacio de big data.

Si la empresa está utilizando Hadoop o un marco distribuido como Spark para realizar sus análisis en Java, Python (o probablemente Scala) serían los lenguajes que tendrían más sentido.


En este caso, sé con certeza que ese rol era el modelado, ya que requería habilidades de aprendizaje automático y una lista específica de técnicas.
Entusiasta

Todavía podrían estar haciendo eso dentro de esas tecnologías a través de las bibliotecas Java / Python, algo como H20 o MLlib.
greenpenguin

4

Java

Tendría que estar en desacuerdo con los otros carteles sobre la pregunta de Java. Hay ciertas bases de datos noSQL (como hadoop) que uno necesita para escribir trabajos mapreduce en java . Ahora puede usar HIVE para lograr el mismo resultado.

Pitón

El debate python / R continúa. Ambos son lenguajes extensibles, por lo que potencialmente ambos podrían tener la misma capacidad de procesamiento. Solo sé R y mi conocimiento de Python es bastante superficial. Hablando como propietario de una pequeña empresa, no desea tener demasiadas herramientas en su negocio, de lo contrario habrá una falta general de profundidad en ellas y dificultades para apoyarlas. Creo que se reducirá al conocimiento profundo de la herramienta en el equipo. Si el equipo está enfocado en Python, entonces contratar a otro científico de datos de Python tendrá sentido ya que pueden interactuar con la base de código existente y el código de experimento histórico.


2

Al menos para mi equipo actual (~ 80 científicos e ingenieros de datos), no tenemos tanta preferencia. La mitad de los científicos de datos aquí usan R y otra mitad usa Python. Muchos pueden codificar en ambos. Implementamos código Python y R en producción.

No creo que ninguno de nuestros científicos de datos use Java en absoluto. Si necesitan lidiar con big data, pueden usar SparkSQL o PySpark. El equipo de ingeniería de datos utiliza una combinación de Java / Scala / Python / Go.

Si usted es una de las pocas personas de datos en una pequeña empresa, puedo entender por qué requieren ciertas habilidades lingüísticas para que pueda hacer ciencia de datos e ingeniería. Pero tbh, creo que la mayoría de las pequeñas empresas no tendrán datos lo suficientemente grandes como para que Python o R no puedan manejar en la producción.


¿Puede dar más detalles sobre el tipo de negocio que hace su organización? ¿Y es en el trabajo interno de ML o para clientes externos?
Entusiasta

1
@Entusiasta Negocio minorista. 100% para ML interno.
piggybox

0

Mi punto de vista como programador de propósito general con un poco de experiencia en R: R es excelente para la ciencia de datos, pero está dirigido a personas que interpretan datos manualmente. Si desea utilizar los resultados para algo automatizado, debe interactuar con otra cosa, y esa otra cosa será difícil de hacer en un idioma específico del problema como R. ¿Puede hacer un sitio web en R? :) Por otro lado, python tiene bibliotecas preparadas para material de ciencia de datos y es un lenguaje de programación de propósito general que no se interpone en el camino de que hagas nada más con él. En cuanto a Java, es bueno para grandes proyectos de programación con cientos de miles a millones de líneas de código. Si la parte de ciencia de datos necesita interactuar con eso, entonces puede tener sentido hacer todo en Java.

Quejas aleatorias: ¿por qué tengo que iniciar sesión en cada sitio de StackExchange por separado?


44
El código R puede ejecutarse fácilmente con casi todas las herramientas disponibles en el mercado. Java casi no sirve para la ciencia de datos.
Gented

1
@GennaroTedesco JAVA es útil para codificar en herramientas de bigdata. Tan útil en parte para consultar datos.
Entusiasta

-1

Las herramientas en Python son simplemente mejores que la comunidad R. Ther R está bastante estancada mientras que la comunidad Python está evolucionando muy rápido. Especialmente en herramientas para Data Science.
También Python funciona mucho más fácilmente con todo lo que lo rodea. Puede raspar fácilmente la web, conectarse a bases de datos, etc. Eso hace que la creación de prototipos sea realmente rápida.
Y si tiene un prototipo funcional y le interesa acelerarlo o integrarlo en el flujo de trabajo de la empresa, generalmente se vuelve a implementar en Java.

R tiene algunas herramientas y visualización ordenadas, pero no es tan bueno construir cosas nuevas en él.


44
Eso está completamente mal en todos los medios.
Gented
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.