¿Los científicos de datos usan programación orientada a objetos?

En su mayor parte, no.

Tal como dice Satvik Beri, la programación funcional es muy útil para las canalizaciones de ciencia de datos, donde el rendimiento es más crítico que el mantenimiento del código. Los científicos de datos generalmente no trabajan con bases de código grandes. Escriben pequeños guiones y prototipos.

Sin embargo, la mayoría de los científicos de datos usan bibliotecas de aprendizaje automático, y muchas de ellas hacen un uso intensivo de OOP, al menos las escritas en Python. La principal excepción es R, que es un lenguaje puramente funcional. Un científico de datos que trabaje estrictamente en R y SQL nunca tocará OOP.

En las grandes bases de código de aprendizaje automático en compañías tecnológicas, sospecho que la POO también está muy extendida, pero estas son desarrolladas principalmente por ingenieros de aprendizaje automático e ingenieros de datos.

En general, no.

Si está escribiendo código de aprendizaje automático que tiene que ser rápido, usará código altamente vectorizado. Tomarás muchas decisiones sobre el rendimiento que no se corresponden perfectamente con la encapsulación y las interfaces.

Si está escribiendo canalizaciones de datos, la programación funcional es mucho mejor: generalmente toma una pequeña cantidad de conjuntos de datos de entrada y produce una pequeña cantidad de conjuntos de datos de salida. La paralelización es super importante. Conceptos como la inmutabilidad y la idempotencia harán su vida mucho más fácil.

Conocer algunos conceptos de OOP es útil, por supuesto, pero probablemente no usará gran parte de él.

Si. El lenguaje más utilizado para la ciencia de datos es Python, que, aunque se puede usar como lenguaje de secuencias de comandos de procedimiento, tiene mucho más sentido si comprende y sabe cómo aplicar los principios de OOP.

Las bibliotecas de ciencia de datos clave, como pandas, numpy y scikit-learn, dependen de clases, métodos y atributos, y debe saber por qué primero debe declarar un modelo de regresión (por ejemplo) como una instancia de una clase, y luego ejecute un método de ajuste.

Sin embargo, si bien es importante comprender la POO, hay muchas situaciones en las que es más eficiente evitar la POO, como han señalado otros.

La impresión que tengo es que el mercado de científicos de datos que carecen de habilidades de ingeniería de software (pero que tienen, por ejemplo, un grado cuantitativo y cierto conocimiento de R / SQL) se ha vuelto más concurrido recientemente, por lo que el mejor diferenciador es la capacidad de convertir el análisis de datos en el código de producción. Seguramente debe comprender OOP para hacer eso, incluso si no siempre lo usa.

¡A veces!

Si va a crear un Panel de datos. Muchos marcos para crear interfaces se basan en objetos (aunque esto se está volviendo menos necesario: consulte esta biblioteca de Python que aprovecha React: Dash User Guide and Documentation)

A veces tendrás que usar una biblioteca que espera que escribas clases. Scikit-learn y otras bibliotecas de ML para Python vienen a la mente. No tendrá que tener una comprensión profunda de los principios de OO para hacer esto, pero definitivamente sería útil estar razonablemente cómodo pensando en esos términos.

Si desea lanzar bibliotecas de Python o ayudar con un proyecto de código abierto basado en Data Science, se ocupará de los objetos. En este momento, si desea escribir Excepciones personalizadas, debe estar escribiendo objetos, y las Excepciones personalizadas que brindan comentarios útiles son una característica increíble para una biblioteca personalizada. Echa un vistazo a este artículo del creador de Keras, una famosa biblioteca de ML fácil de usar: diseño de experiencia de usuario para API

A veces el código no funciona. Incluso si está codificando principalmente de una manera funcional, algo en lo que confía podría romperse y no será obvio por qué. Si estás en Python, probablemente estés confiando en algunos objetos. Ser capaz de leer el código OO te hará mucho más capaz de parchear eso tú mismo.

Podría terminar trabajando con sistemas que se ejecutan de acuerdo con el código OO. También facilita la colaboración con ingenieros de software que escriben código OO.

¡Puede que la programación OO sea útil en algunos casos! Hay un elemento de subjetividad en todo esto. Algunas personas encuentran que los objetos ayudan a gestionar la complejidad, otras personas encuentran que agregan una complejidad innecesaria.

Personalmente, casi siempre escribo en un estilo funcional. Creo que para mis aplicaciones, los objetos agregan una gran cantidad de “gastos generales” innecesarios en términos de tiempo / pensamiento / atención. ¡Pero tiene su lugar en su cofre de herramientas! Aunque si estás en el proceso de aprendizaje, no lo priorizaría a menos que tengas una necesidad apremiante.

A2A: Por supuesto, pero pueden no saber que lo están usando.

Cada vez que utiliza un DataFrame de pandas , está utilizando un objeto creado dentro del paquete de pandas y que no es nativo de Python.

¿Un científico de datos usa clases para crear objetos? Es posible, pero diría que no “hacen OO” con tanta frecuencia como lo hace un programador.

Por eso, cuando enseño Python intermedio, enseño 3 pistas diferentes para estudiantes: Desarrollador, DevOps y Ciencia de datos. En la pista de Desarrollador, estamos muy enfocados en OO, mientras que en las otras pistas todavía enseño OO, pero el objetivo es que su conocimiento de OO sea una base sobre la cual puedan interactuar con los módulos que probablemente usarán en su trabajo. Entonces podrían crear clases si lo necesitan, pero mi expectativa es que probablemente no lo harán.

Sí. También uso patrones de diseño como los patrones Factory y Strategy. Usar OOP permite que mi código sea mantenible. También facilita el traslado del proyecto a la producción.

Por ejemplo, mire el siguiente código donde creo instancias de varios animales usando el patrón Factory y luego llamo a la función de miembro virtual make_sound() :

my_list = []
para i en rango (10):
my_list.append (make_random_animal ())

para p en mi_lista:
p.make_sound ()

Tengo que estar en desacuerdo con algunas de las respuestas: el uso de OOP no tiene que afectar el rendimiento, al igual que C ++ no es más lento que C.

Algunas estadísticas (2017):

  • El lenguaje más popular para el aprendizaje automático y la ciencia de datos es …

Y una comparación de R y Python:

  • R vs Python para ciencia de datos y estadísticas: la comparación definitiva

Lo evito como la peste. Afortunadamente, hay muchas herramientas que puede usar (R, Matlab) que contienen muy poca POO. Esa es una de las principales razones por las que me quedo estancado hasta que mi grupo puede encontrar un ingeniero de software cuando tengo que programar en Python.

Absolutamente lo hago. Cuando mis scripts se vuelven difíciles de administrar, abro el editor de Python y en realidad creo clases, que encapsulan la complejidad relacionada con la preparación de datos, ejecutar un modelo específico y visualizarlo.

También creo pruebas unitarias y me aseguro de que mi código esté limpio y claro.

De esta forma puedo gestionar procesos complejos incluso durante la fase de investigación.

OOP es útil para abstraer la complejidad. Tiendo a fabricar modelos bayesianos a mano cuando los uso, es útil no tener que mirar todo el funcionamiento interno del modelo todo el tiempo.

Después de construir la clase de modelo, empiezo a trabajar a un nivel superior, probando los parámetros del modelo y lo que no. Es mucho más fácil hacer esto con una interfaz limpia.

Sí. Cuando su caso de uso particular tiene muchas peculiaridades y requisitos, debe ser creativo. Para mí, la forma en que he resuelto mis problemas es recrear mis propias clases que simulan lo que otros paquetes ya hacen.