Uploaded avatar of iHiD

¡Llegó Abril analítico!

@iHiD
hace Más de 3 años
Video

¡Hola a todos! Ya tuvimos Functional February y Mechanical March. Ahora es el turno de Analytical April, en el que nos vamos a enfocar en lenguajes que son geniales para la ciencia de datos.

Como ya esperas de los últimos meses, en este video Erik y yo te vamos a dar un repaso rápido de qué trata el mes y de los distintos lenguajes que vamos a explorar.

Como siempre, Erik nos va a hablar de los lenguajes en un momento, pero yo voy a empezar dando algunos de los detalles prácticos del mes.

Entonces, primero, los lenguajes destacados de este mes. Tenemos solo tres este mes: Julia, Python y R. Cada uno de estos lenguajes es bastante distinto, y obviamente Python es un lenguaje muy versátil, pero este mes te vamos a animar a que intentes usar estos lenguajes con una mentalidad de ciencia de datos.

Para obtener la insignia de Analytical April necesitas completar cinco ejercicios en uno de esos lenguajes. Vamos a explorar las diferencias entre ellos en un momento, pero en términos de Exercism, nuestro track de Python tiene un temario fantástico, así que te recomiendo mucho que lo pruebes. También esperamos lanzar un temario de Julia durante el mes: gran parte del trabajo ya está hecho y solo necesita un poco de pulido. R no tiene temario, pero tiene un montón de ejercicios interesantes para que juegues.

Tenemos cinco ejercicios destacados para probar:

  • etl: en el que puedes explorar cómo reformar datos a un formato distinto
  • largest-series-product: donde puedes practicar formas eficientes de buscar patrones en un string de dígitos
  • saddle-points: para explorar el trabajo con arrays/matrices multidimensionales
  • sum-of-multiples: para practicar el filtrado y la suma de una secuencia de números
  • word-count: convertir un string en palabras y contarlas

Un recordatorio de que, además de la insignia de Analytical April, hay una insignia #12in23 de todo el año que puedes obtener al resolver los distintos ejercicios destacados en cualquier momento del año. ¡Así que necesitarás resolver esos 5 ejercicios en Python, R o Julia en algún momento de este año para obtener esa insignia! Para la lista completa de ejercicios, hay una publicación del foro enlazada desde la página de Analytical April.

Por último, antes de entrar en los lenguajes, un recordatorio de que durante marzo lanzamos nuestro nuevo servidor de Discord. Ha habido un montón de actividad divertida allí, así que asegúrate de echarle un vistazo. ¡El enlace está en la descripción de abajo!

Bien, exploremos los lenguajes. Veamos un repaso rápido de cada uno de los lenguajes y luego profundizaremos en sus características y casos de uso. Empecemos con Python.

Python

  • Concebido y desarrollado por Guido van Rossum a finales de la década de 1980 como sucesor del lenguaje de programación ABC. Publicado por primera vez en 1991.
  • Desarrollado en los Países Bajos, en el Centrum Wiskunde & Informatica (CWI) (famoso por ser el lugar donde Edsger Dijkstra hizo la mayor parte de su trabajo), un laboratorio de investigación financiado por el gobierno.
  • Guido programaba usando C y scripts de shell, pero ambos tenían desventajas. Python busca obtener lo mejor de ambos mundos, sin las desventajas.
  • Gestionado por la Python Software Foundation, y los cambios en el lenguaje ocurren a través de Python Enhancement Proposals (PEP) (similares a los RFC)

R

  • Creado por Ross Ihaka y Robert Gentleman en la Universidad de Auckland. R puede considerarse una implementación distinta del lenguaje S (con diferencias relativamente menores), al que le siguió S-plus, una implementación comercial (no abierta) de S. Aunque R comparte la mayor parte de la sintaxis con S, su semántica está inspirada en Scheme
  • Objetivo: crear un lenguaje mejor adaptado a la computación estadística y los gráficos, y más fácil de usar que el software comparable diseñado por científicos de la computación

Julia

  • Desarrollado por Jeff Bezanson, Stefan Karpinski, Viral B. Shah y Alan Edelman de forma abierta; actualmente tiene más de mil colaboradores
  • Objetivo: construir un lenguaje gratuito de alto nivel que tenga la velocidad de C, el dinamismo de Ruby, la metaprogramación de LISP, las habilidades de propósito general de Python, el soporte estadístico de R, el soporte de álgebra lineal de MatLab y la potencia de procesamiento de strings de Perl, todo ello siendo capaz de soportar ejecución masivamente paralela
  • Excelente para la computación científica, pero también un lenguaje de propósito general (el framework Genie para aplicaciones web)

Como con muchos lenguajes, los tres se crearon por insatisfacción :)

Bien. Entonces, en cuanto a casos de uso, ¿cuándo usarías cada uno de estos lenguajes en lugar de los otros?

Python

  • Lenguaje realmente de propósito general (sitios web, scripts, computación científica)
  • Se puede usar para muchos propósitos distintos: IA (TensorFlow), scripts de computación científica (NumPy), sitios web (Django), sistemas embebidos (micro python), interacción con hardware (por ejemplo, Raspberry Pi), juegos (EVE Online) y Python incluso llegó a Marte
  • Excelente para aprender a programar: gran cantidad de recursos y una comunidad enorme. Hay mucha orientación sobre cómo escribir código Pythonic (es decir, cómo escribir código Python idiomático; ejemplos: «Explícito es mejor que implícito» y «La legibilidad cuenta»). Muchos sistemas operativos lo traen instalado por defecto
  • Uno de los lenguajes más usados en este momento, así que hay mucha documentación, bibliotecas y una gran comunidad

R

  • R se usa en una gran variedad de lugares, por ejemplo, investigadores que analizan datos de experimentos, universidades que enseñan estadística y análisis de datos, el sector financiero, donde la estadística es clave (por ejemplo, para los seguros), lo mismo en el comercio minorista (Amazon usa R para el análisis de datos) y en la manufactura (John Deere calcula cuántas piezas de repuesto producir), el Servicio Meteorológico Nacional ayuda a predecir el clima y los desastres, el periodismo de datos (analizar datos del mundo real y darles sentido, a menudo con visualización), y se usa mucho en el sector de la salud, por ejemplo, para determinar la seguridad de un medicamento a partir de ensayos preclínicos

Julia:

  • Excelente para la computación científica, la minería de datos, el machine learning, el álgebra lineal y la computación distribuida. La notación se sentirá similar a la notación matemática, así que el paso de la ecuación al código es relativamente fácil
  • Computación distribuida: las tareas (= corrutinas) y los canales permiten ejecutar código en paralelo comunicándose entre sí, con soporte multiproceso mediante el paso de mensajes (ideal para la computación de alto rendimiento)
  • Se usa en el proyecto Celeste (una supercomputadora que ejecuta código Julia para analizar 178 terabytes de datos astronómicos) (como resultado, esto convierte a Julia en parte del club de los petaflops, al que en esa época solo pertenecían C, C++ y Fortran; Julia es el primer lenguaje dinámico, con mil billones de cálculos de punto flotante por segundo, un 1 con 15 ceros), Clima (la alianza de modelado climático) reúne a personas de Caltech, el MIT y el Jet Propulsion Laboratory de la NASA para desarrollar un modelo de pronóstico climático, CERN, ASML

¿Y desde el punto de vista de la programación, en qué se diferencian? ¿Son funcionales, orientados a objetos, etc.?

Python:

  • Dinámico y de tipado fuerte
  • Multiparadigma: imperativo, funcional, pero en realidad es un lenguaje orientado a objetos (todo es un objeto)
  • El intérprete por defecto, CPython, compila a bytecode y luego este se interpreta en una máquina virtual. PyPy es un reemplazo de CPython que compila a código máquina just-in-time

R:

  • Dinámico y de tipado fuerte
  • Multiparadigma, con un núcleo funcional, pero también admite estilos procedimentales u orientados a objetos

Julia:

  • Dinámico y de tipado fuerte, compilado just-in-time
  • Multiparadigma: imperativo, orientado a objetos (sobrecarga mediante despacho múltiple), funcional (funciones de orden superior, aplicación parcial, operador de tubería)
  • El código se compila just-in-time, de forma anticipada, en tiempo de ejecución

Y siguiendo con estos desde una perspectiva de programación, ¿alguno de los lenguajes tiene alguna característica destacada en particular?

Python:

  • Sintaxis agradable: la sensibilidad a los espacios en blanco hace que el ámbito sea fácil de ver. El código suele ser fácil de leer; por ejemplo, condiciones Boolean legibles para las personas (and/or)
  • Expresivo: puedes hacer mucho con bastante poco código (comprensiones de listas, generadores, decoradores)
  • Enorme cantidad de bibliotecas disponibles para una gran variedad de propósitos
  • Como ya se mencionó, es realmente un lenguaje de propósito general, ya que se puede usar en muchos escenarios distintos

Julia

  • Despacho múltiple. Decide qué función llamar según los tipos de todos los argumentos (como la sobrecarga de funciones)
  • Dinámico pero con un rendimiento excelente. El rendimiento de Julia puede rivalizar con el de Fortran y acercarse al de C. El código «normal» suele ser eficiente (no se necesitan trucos locos; de hecho, se recomiendan funciones más pequeñas). Bibliotecas para ejecutar código en GPU
  • Computación distribuida: las tareas (= corrutinas) y los canales permiten ejecutar código en paralelo comunicándose entre sí, con soporte multiproceso mediante el paso de mensajes (ideal para la computación de alto rendimiento)
  • Excelente para la computación científica, la minería de datos, el machine learning, el álgebra lineal y la computación distribuida. La notación se sentirá similar a la notación matemática, así que el paso de la ecuación al código es relativamente fácil

R:

  • Tipos de datos flexibles: el vector es el tipo central; incluso los escalares son vectores. Los vectores pueden tener metadatos asociados (por ejemplo, los nombres de sus elementos). Los arrays son heterogéneos (pueden tener elementos con tipos distintos). Un tipo especial, el dataframe, para colecciones de vectores (todos de la misma longitud).
  • Las operaciones vectorizadas permiten actualizar vectores de forma concisa, eficiente y legible
  • R es un conjunto integrado de utilidades de software para la manipulación de datos, el cálculo y la representación gráfica. Con RStudio es fácil explorar, visualizar y manipular datos. Excelente para la minería de datos
  • Una gran comunidad, amigable y diversa. La R for Data Science Online Learning Community es una comunidad de estudiantes de R de todos los niveles que trabajan juntos para mejorar sus habilidades. Hay un grupo abierto de Slack donde sus miembros pueden mantenerse en contacto y ayudarse entre sí con los problemas.

Si alguien no está seguro de cuál probar durante abril, ¿cómo le recomendarías tomar la decisión?

Como todo en informática: ¡depende! En este caso, diría que depende sobre todo de tus objetivos y tu experiencia personal.

Si eres relativamente nuevo en la programación, te interesa la IA o el machine learning, o quieres aprender un lenguaje que puedas usar para muchas cosas distintas, probablemente te recomendaría empezar con Python: Hay una cantidad gigantesca de recursos disponibles para Python, que incluye muchos cursos en línea gratuitos Python se usa por todas partes con la IA y el machine learning Python se puede usar para un gran número de propósitos El track de Python tiene el Modo de aprendizaje activado, lo que puede ayudarte a aprender los conceptos centrales del lenguaje de una forma divertida

Si te interesa hacer trabajo estadístico, quieres explorar y visualizar datos, o sientes curiosidad por una forma distinta de trabajar con datos, el lenguaje R es una gran opción: Los tipos de datos de R se basan en colecciones de datos (vectores/arrays) y las operaciones se pueden aplicar a colecciones con facilidad (sin necesidad de bucles) El IDE RStudio es genial para explorar y visualizar datos R tiene un excelente soporte para el análisis estadístico R permite graficar datos con facilidad

Si te interesa la computación científica, quieres ejecutar código de forma concurrente, te importa mucho el rendimiento, o quieres aprender un lenguaje moderno y elegante que ofrece algo distinto de la mayoría de los demás lenguajes, te recomendaría Julia:

  • El despacho múltiple será nuevo para muchos y es increíblemente potente
  • Julia es excelente para la computación científica
  • El sistema de tipos de Julia es flexible y expresivo
  • Julia tiene un rendimiento excelente
  • Julia es genial para la ejecución concurrente

Por supuesto, si tienes tiempo, ¡te recomendaría que pruebes los tres! Nunca sabes realmente qué lenguaje vas a disfrutar hasta que lo pruebas.

sábado, 01 de abril de 2023 · ¿Te resultó útil?