1. Computación científica y ciencia de datos#

Ciencia: Scientia: Conocimiento

1.1. Los paradigmas de la ciencia:#

https://www.researchgate.net/profile/Marcio_Costa13/publication/331216708/figure/fig4/AS:728393284870152@1550673900958/The-four-science-paradigms-empirical-theoretical-computational-and-data-driven-Each.png
  • El primer paradigma es basado en observación y experimentación

  • El segundo paradigma agregó es el teórico, se basa en probar modelos y refutar hipótesis

  • El tercer paradigma es basado en simulaciones: Probamos modelos y análisamos fenómenos utilizando simulaciones computacionales

  • El cuarto paradigma es basado en los datos: Entender fenómenos en base a datos masivos generados por sensores o simulaciones

1.2. Tercer paradigma: Computación Científica#

Hoy en día muchos trabajos científicos e ingenieriles incluyen al menos uno de los siguientes aspectos

  • cálculos numéricos

  • simulaciones

  • modelamiento computacional

  • análisis de datos

En resumen

El computador se ha vuelto esencial para hacer ciencia

y por ende

El software se ha vuelto esencial para hacer ciencia

En este escenario surge

La computación científica es la disciplina que se encarga de desarrollar la teoría y las técnicas necesarias para resolver problemas matemáticos complejos de ciencias e ingeniería de forma eficiente

Ejemplo: Simulación de la unión de dos agujeros negros utilizando datos de LIGO

https://2.bp.blogspot.com/-h3SA26JUbB4/Vt86wugg1rI/AAAAAAAAzWE/DYuiVN4B8QA/s400/Two-Black-Holes-Merge-into-One.gif

1.3. Cuarto paradigma: Ciencia de los Datos#

Los avances tecnológicos han permitido la generación y captura de una enorme cantidad de datos

Considere por ejemplo las Redes Sociales, el Internet de las Cosas (IoT) o los proyectos smart-city

Esto también ocurre en las ciencias

  • Simulaciones con cada vez mayor nivel de resolución

  • Telescopios que cubren mayores áreas del cielo y con mayor profundidad

  • Digitalización de exámenes médicos

El término Big Data se ocupa para describir el escenario tecnológico actual respecto a la abundancia, altas tasas de generación y variedad de datos

En este escenario surge:

La ciencia de datos es la disciplina que busca extraer conocimiento (información) a partir de datos (masivos)

Ejemplo: Super-resolución en imágenes astronómicas usando modelo adversario generativo entrenado en datos de SDSS

https://scx1.b-cdn.net/csz/news/800/2017/1-neuralnetwor.png

Competencias

La computación científica y la ciencia de los datos combinan competencias de

  • Ciencias de la computación: Diseñar algoritmos eficientes y escalables para procesar grandes bases de datos

  • Matemáticas aplicadas y estadística: Diseñar modelos que caractericen y resuman los datos

Interdiscipina

La computación científica y la ciencia de los datos son paradigmas naturalmente interdisciplinares

Se debe colaborar con expertos del dominio para formular preguntas científicas e intepretar los resultados de nuestros rutinas computacionales

Reproducibilidad

Un buen software científico debe permitir la replicación y reproducibilidad de los resultados de los experimentos

1.4. ¿Qué podemos esperar de este curso?#

En este curso aprenderemos a manejar librerías de computación científica basadas en el lenguaje de programación Python

1.5. ¿Qué es Python?#

Python es un lenguaje de programación interpretado y multi-paradigma liberado en 1991 y ampliamente usado en ciencia de los datos

¿Por qué?

  • Enfoque en la simpleza, lo cual resulta en código más fácil de mantener y desarrollos más rápidos

  • Rico ecosistema de librerías abiertas para computo científico: Numpy, Scipy, Pandas, entre otras que serán estudiadas en este curso

¿Y que hay del desempeño de mis algoritmos versus lenguajes de programación de más bajo nivel?

  1. Trade-off entre tiempo de cómputo y horas hombre de programación

  2. Librerías de cómputo científico de Python: Están compiladas con librerías optimizadas de bajo nivel (e.g. BLAS, LAPACK)

  3. Si la función que necesito no está en las librerías: Integrar Python con lenguajes de bajo nivel (e.g. C++, Fortran)