Prefacio
Este trabajo se ha traducido utilizando IA. Agradecemos tus opiniones y comentarios: translation-feedback@oreilly.com
La ciencia de datos ocurre en el código. Tanto si estás construyendo un sistema de aprendizaje automático, explorando tus datos por primera vez, visualizando la distribución de tus datos o ejecutando un análisis estadístico, tus habilidades de codificación y cálculo son las que lo hacen posible. Si estás trabajando en código de producción, estas habilidades son esenciales para escribir código exitoso y mantenible. Incluso si no trabajas en un equipo de software de producción, te resultará beneficioso escribir un código más sólido y reproducible que otros científicos de datos puedan utilizar fácilmente. Y si trabajas solo, las buenas prácticas acelerarán tu codificación y te ayudarán a retomar el código después de un descanso.
No siempre vi el valor de una buena ingeniería. Al principio de mi carrera en la ciencia de datos, me uní a un equipo en el que yo era el único científico de datos. Mis compañeros de equipo eran ingenieros de software y diseñadores, y me preocupaba que fuera difícil mejorar mis habilidades sin otros científicos de datos de los que aprender. Expresé mi preocupación a mi compañero de trabajo, un desarrollador. Me dijo: "Pero aprender a escribir mejor código te permitirá hacer más ciencia de datos". Este comentario se me quedó grabado, y desde entonces he descubierto que mejorar mis conocimientos de ingeniería de software ha sido increíblemente beneficioso para hacer ciencia de datos. Me ha ayudado a escribir código que es más fácil de usar para mis compañeros de trabajo y que sigue siendo fácil de cambiar cuando vuelvo a él muchos meses después.
Mi objetivo con este libro es guiarte en tu viaje para escribir mejor código de ciencia de datos. Describiré las buenas prácticas para tareas comunes, como las pruebas, la gestión de errores y el registro. Te explicaré cómo escribir código que sea más fácil de mantener y que siga siendo robusto a medida que crezcan tus proyectos. Te mostraré cómo hacer que tu código sea fácil de usar para otras personas, y al final de este libro serás capaz de integrar tu código de ciencia de datos en una base de código mayor.
Podrías pensar que los conocimientos de ingeniería de software son menos útiles en la era de la IA generativa. ¿Acaso ChatGPT no puede escribir tu código por ti? Yo diría que el contenido de este libro sigue siendo igual de útil incluso cuando puedes acelerar tu codificación con un asistente de IA. Como mostraré a lo largo de este libro, hay muchas opciones disponibles para cada función que escribas, y es increíblemente útil comprender los principios de por qué puedes elegir una línea de código en lugar de otra. Tendrás que evaluar la salida de cualquier asistente de IA y comprobar que ha hecho una buena elección para el problema en el que estás trabajando. Este libro te ayudará a hacerlo.
¿A quién va dirigido este libro?
Este libro está dirigido a los científicos de datos, pero también resultará útil a las personas que trabajan en campos estrechamente relacionados, como los analistas de datos, los ingenieros de aprendizaje automático (ML) y los ingenieros de datos. Explicaré principios de ingeniería de software bien establecidos que serán útiles para cualquiera que escriba código, pero los ejemplos que utilizaré para ilustrar estos principios serán más familiares para los científicos de datos.
He intentado que este libro sea accesible para los científicos de datos que son relativamente nuevos en este campo. Tal vez acabes de terminar una licenciatura en ciencia de datos o estés empezando tu primer trabajo en la industria. Este libro cubrirá las habilidades prácticas de ingeniería de software que no siempre se incluyen en los cursos introductorios de ciencia de datos. O tal vez no hayas hecho un curso formal de ciencia de datos. Tal vez seas autodidacta o te estés pasando a la ciencia de datos desde las matemáticas u otra ciencia. Sea cual sea el camino que tomes hacia la ciencia de datos, este libro es para ti.
Los científicos de datos más experimentados también aprenderán mucho, y este libro te resultará especialmente útil si tienes un trabajo en el que interactúas a menudo con desarrolladores de software. Aprenderás las habilidades que te ayudarán a trabajar eficazmente en una base de código mayor y cómo escribir código Python que funcione eficazmente en producción.
Asumo que ya conoces los fundamentos de la ciencia de datos, incluyendo la exploración de datos, la visualización de datos, el manejo de datos, el ML básico y las habilidades matemáticas que los acompañan. También asumo que ya sabes lo básico de cómo programar en Python: cómo escribir funciones y sentencias de flujo de control, y lo básico de cómo utilizar módulos como NumPy, Matplotlib, pandas y scikit-learn. Si esto es nuevo para ti, te recomiendo los siguientes libros:
-
Manual de Ciencia de Datos en Python, de Jake VanderPlas (O'Reilly, 2023)
-
Ciencia de datos desde cero por Joel Grus (O'Reilly, 2019)
-
Aprender Ciencia de Datos por Sam Lau, Joseph Gonzalez y Deborah Nolan (O'Reilly, 2023)
Este no es un libro para desarrolladores de software que buscan aprender ciencia de datos y habilidades de aprendizaje automático. Si esta es tu situación, te recomiendo AI and Machine Learning for Coders de Laurence Moroney (O'Reilly, 2020).
¿Por qué Python?
Todos los ejemplos de código de este libro están escritos en Python, y muchos de los capítulos describen herramientas específicas de Python. En los últimos años, Python se ha convertido en el lenguaje de programación más popular para la ciencia de datos. La siguiente cita procede de una encuesta realizada en 2021 por Anaconda a más de 3.000 científicos de datos:
"El 63% de los encuestados dijeron que siempre o con frecuencia utilizan Python, lo que lo convierte en el lenguaje más popular incluido en la encuesta de este año. Además, el 71% de los educadores enseñan Python, y el 88% de los estudiantes afirmaron que se les enseña Python como preparación para entrar en el campo de la ciencia de datos/ML."
Python tiene un conjunto extremadamente sólido de bibliotecas de código abierto para la ciencia de datos, con un buen respaldo y una saludable comunidad de mantenedores. Las grandes empresas que marcan tendencia han elegido Python para sus principales marcos de ML, como TensorFlow (Google) y PyTorch (Meta). Por ello, Python parece ser especialmente popular entre los científicos de datos que trabajan en la producción de código de aprendizaje automático, donde las buenas habilidades de codificación son particularmente importantes.
En mi experiencia, la comunidad Python ha sido amable y acogedora, con muchos eventos excelentes que me han ayudado a mejorar mis habilidades. Es mi lenguaje de programación preferido, así que fue una elección fácil para este libro.
Lo que no está en este libro
Como mencioné en "¿A quién va dirigido este libro?", no se trata de una introducción a la ciencia de datos ni de una introducción a la programación. Además, ninguno de los siguientes temas aparece en este libro:
Instalación de Python: Asumo que ya has instalado una versión reciente de Python (3.9 o posterior) y que tienes algún tipo de IDE (entorno de desarrollo integrado) donde escribir código, como VS Code o PyCharm. No describiré cómo instalar Python, pero explicaré cómo configurar un entorno virtual en el Capítulo 10.
Otros lenguajes de programación: Este libro sólo trata de Python, por las razones expuestas en "¿Por qué Python?". No he incluido ejemplos en R, Julia, SQL, MATLAB ni ningún otro lenguaje.
Guión de línea de comandos: La línea de comandos o shell scripting es una potente forma de trabajar con archivos y texto. No lo incluyo aquí porque otras fuentes lo tratan con gran detalle, como Data Science at the Command Line de Jeroen Janssens (O'Reilly, 2021).
Python avanzado: Los ejemplos de este libro contienen código relativamente sencillo. Para obtener información sobre código Python más avanzado, recomiendo Robust Python de Patrick Viafore (O'Reilly, 2021).
Guía de este libro
En este libro, empiezo recorriendo las buenas prácticas a nivel de escritura de funciones individuales y entro en detalles sobre cómo puedes mejorar tu codificación. En capítulos posteriores, describiré cómo puedes tomar ese código y facilitar su uso a otra persona, y explicaré algunas técnicas comunes de implementación y buenas prácticas para trabajar en software.
Este libro está dividido en 14 capítulos. He aquí un resumen de su contenido:
El capítulo 1, "¿Qué es un buen código?", presenta los fundamentos de cómo escribir código que sea sencillo, modular, legible, eficiente y robusto.
El Capítulo 2, "Analizar el rendimiento del código", describe cómo medir el rendimiento de tu código y analiza algunas opciones para hacer que tu código de ciencia de datos funcione de forma más eficiente.
Enel Capítulo 3, "Utilizar eficazmente las estructuras de datos", se analizan las ventajas y desventajas de elegir las estructuras de datos con las que trabajas. La estructura de datos que elijas puede marcar una gran diferencia en la eficacia de tu código.
El capítulo 4, "Programación orientada a objetos y programación funcional", describe los fundamentos de estos estilos de programación. Utilizados correctamente, pueden ayudarte a escribir código bien estructurado y eficaz.
El capítulo 5, "Errores, registro y depuración", te explica qué hacer cuando se rompe el código, cómo generar errores útiles y estrategias para identificar de dónde proceden esos errores.
El Capítulo 6, "Formateo del código, Lintingy comprobación de tipos", describe cómo estandarizar tu código utilizando herramientas que pueden automatizar este proceso.
El Capítulo 7, "Probando tu código", trata de cómo hacer que tu código sea robusto a los cambios en las entradas mediante pruebas. Éste es un paso vital para escribir código fácil de mantener.
El capítulo 8, "Diseño y refactorización", trata de cómo estructurar tus proyectos de forma estandarizada y coherente, y de cómo pasar de un cuaderno a un guión.
El Capítulo 9, "Documentación", te muestra cómo hacer que tu código sea legible para otras personas, incluidas las buenas prácticas para nombrar y comentar tu código.
El capítulo 10, "Compartir tu código: Control de versiones, dependencias y empaquetado", cubre los aspectos básicos del control de versiones mediante Git y cómo gestionar las dependencias de tu proyecto en entornos virtuales. También muestra los pasos necesarios para convertir un script en un paquete Python.
El Capítulo 11, "APIs", introduce el concepto de API, muestra cómo puedes utilizarlas e incluye un ejemplo básico utilizando FastAPI.
El capítulo 12, "Automatización e Implementación", describe los aspectos básicos de la implementación de código, cómo automatizar tus implementaciones de código utilizando CI/CD (Integración Continua/Instalación o Entrega Continua) y Acciones de GitHub, y cómo implementar tu código en un entorno en la nube en un contenedor Docker.
En el Capítulo 13, "Seguridad", se tratan los riesgos de seguridad habituales, cómo se pueden mitigar y algunas de las amenazas de seguridad exclusivas del aprendizaje automático.
El capítulo 14, "Trabajar en software", te presenta las prácticas habituales en los equipos de desarrollo de software, incluidas las formas de trabajo ágiles, describe las funciones habituales en los equipos de software y presenta la comunidad en general.
El Capítulo 15, "Próximos pasos", concluye con algunas reflexiones sobre cómo podría cambiar la codificación en el futuro y algunas sugerencias sobre lo que puedes hacer a continuación.
Orden de lectura
No es necesario que leas los capítulos de este libro en orden, pero te recomiendo que empieces leyendo el Capítulo 1. En este capítulo, explicaré los fundamentos de cómo escribir un buen código, e introduciré temas que trataré con más detalle en el resto del libro. También presentaré varios de los ejemplos de código que utilizaré a lo largo del libro.
Tras el Capítulo 1, muchos de los capítulos pueden leerse por sí solos, con estas excepciones:
-
Debes leer el Capítulo 2 antes de leer el Capítulo 3.
-
Debes leer los capítulos 6, 7, 10 y 11 antes de leer el capítulo 12.
Algunos capítulos incluyen una sección que profundiza en un tema de aprendizaje automático. Estas secciones siempre incluyen ML en el nombre de la sección, y si tu trabajo no implica ML puedes saltarte estas secciones sin perderte nada que necesites para entender el resto del capítulo.
Convenciones utilizadas en este libro
En este libro se utilizan las siguientes convenciones tipográficas:
- Cursiva
-
Indica nuevos términos, URL, direcciones de correo electrónico, nombres de archivo y extensiones de archivo.
Constant width
-
Se utiliza en los listados de programas, así como dentro de los párrafos para referirse a elementos del programa como nombres de variables o funciones, bases de datos, tipos de datos, variables de entorno, sentencias y palabras clave.
Constant width bold
-
Muestra comandos u otros textos que deben ser tecleados literalmente por el usuario.
Constant width italic
-
Muestra el texto que debe sustituirse por valores proporcionados por el usuario o por valores determinados por el contexto.
Consejo
Este elemento significa un consejo o sugerencia.
Nota
Este elemento significa una nota general.
Advertencia
Este elemento indica una advertencia o precaución.
Utilizar ejemplos de código
El material complementario (ejemplos de código, ejercicios, etc.) se puede descargar en https://github.com/catherinenelson1/SEforDS.
Este libro está aquí para ayudarte a hacer tu trabajo. En general, si se ofrece código de ejemplo con este libro, puedes utilizarlo en tus programas y documentación. No es necesario que te pongas en contacto con nosotros para pedirnos permiso, a menos que estés reproduciendo una parte importante del código. Por ejemplo, escribir un programa que utilice varios trozos de código de este libro no requiere permiso. Vender o distribuir ejemplos de los libros de O'Reilly sí requiere permiso. Responder a una pregunta citando este libro y el código de ejemplo no requiere permiso. Incorporar una cantidad significativa de código de ejemplo de este libro en la documentación de tu producto sí requierepermiso.
Agradecemos la atribución, pero en general no la exigimos. Una atribución suele incluir el título, el autor, la editorial y el ISBN. Por ejemplo "Ingeniería de software para científicos de datos por Catherine Nelson (O'Reilly). Copyright 2024 Catherine Nelson, 978-1-098-13620-8".
Si crees que el uso que haces de los ejemplos de código no se ajusta al uso legítimo o al permiso concedido anteriormente, no dudes en ponerte en contacto con nosotros en permissions@oreilly.com.
Aprendizaje en línea O'Reilly
Nota
Durante más de 40 años, O'Reilly Media ha proporcionado formación tecnológica y empresarial, conocimientos y perspectivas para ayudar a las empresas a alcanzar el éxito.
Nuestra red única de expertos e innovadores comparten sus conocimientos y experiencia a través de libros, artículos y nuestra plataforma de aprendizaje online. La plataforma de aprendizaje en línea de O'Reilly te ofrece acceso bajo demanda a cursos de formación en directo, rutas de aprendizaje en profundidad, entornos de codificación interactivos y una amplia colección de textos y vídeos de O'Reilly y de más de 200 editoriales. Para más información, visita https://oreilly.com.
Cómo contactar con nosotros
Por favor, dirige tus comentarios y preguntas a sefordatascientists@gmail.com o al editor:
- O'Reilly Media, Inc.
- 1005 Gravenstein Highway Norte
- Sebastopol, CA 95472
- 800-889-8969 (en Estados Unidos o Canadá)
- 707-827-7019 (internacional o local)
- 707-829-0104 (fax)
- support@oreilly.com
- https://www.oreilly.com/about/contact.html
Tenemos una página web para este libro, donde se enumeran erratas, ejemplos y cualquier información adicional. Puedes acceder a esta página en https://oreil.ly/software-engineering-data-scientists.
Para obtener noticias e información sobre nuestros libros y cursos, visita https://oreilly.com.
Encuéntranos en LinkedIn: https://linkedin.com/company/oreilly-media
Míranos en YouTube: https://youtube.com/oreillymedia
Agradecimientos
Muchas gracias a todos los que me habéis ayudado con este libro. Vuestros comentarios, opiniones, debates y apoyo han sido muy valiosos.
Ha sido un placer absoluto trabajar con el equipo de O'Reilly. Gracias a Virginia Wilson por ser una editora magnífica y comprensiva. He disfrutado mucho trabajando contigo. Gracias a Nicole Butterfield por su valiosa dirección general y su ayuda con el proceso de propuesta del libro. Gracias a Jeff Bleiel por las minuciosas revisiones de varios de los capítulos y a Chris Faucher por hacer que el proceso de producción transcurriera sin problemas.
Muchas gracias a mis revisores técnicos William Jamir Silva, Ganesh Harke, Jo Stichbury, Antony Milne, Jess Males y Swetha Kommuri. Vuestros comentarios han sido superconstructivos y han hecho que el libro final sea mucho mejor. He apreciado mucho vuestra atención al detalle y vuestras útiles sugerencias. Gracias a Rob Masson por sus magníficos comentarios sobre el borrador final y sus reflexivas discusiones a lo largo delproceso de escritura.
Gracias a Carol Willing, Ricardo Martín Brualla, Chris Trudeau, Michelle Liu, Maryam Ehsani, Shivani Patel, John Sweet, Andy Ross y Abigail Mesrenyame Dogbe por sus valiosos debates técnicos y sus perspicaces conversaciones. También me he beneficiado enormemente de formar parte de la comunidad más amplia de Python y PyLadies; gracias a todos los voluntarios que le dedican su tiempo.
Por último, gracias a mis increíbles amigos y familia por todo vuestro apoyo. Rob, mamá, Richard, Lina, Salomé, Ricardo, Chris, Kiana y Katie, os aprecio muchísimo a todos.
Get Ingeniería de Software para Científicos de Datos now with the O’Reilly learning platform.
O’Reilly members experience books, live events, courses curated by job role, and more from O’Reilly and nearly 200 top publishers.