class: title-slide, middle, center background-image: url(data:image/png;base64,#imagenes/liigh_unam_logo.png) background-position: 10% 50% background-size: 15% .center-column[ # Conceptos básicos de bioinformática y pseudocódigo ### ⚔<br/>Nivel básico ####Dra. Evelia Coss #### 2023/09/22 ] .left[.footnote[R-Ladies Theme[R-Ladies Theme](https://www.apreshill.com/project/rladies-xaringan/)]] --- background-image: url(data:image/png;base64,#imagenes/liigh_unam_logo.png) background-position: 10% 10% background-size: 10% class: middle, center # Sobre mi ---- .left-col[ ###
Dra. Evelia Lorena Coss-Navarrete Investigadora Posdoctoral en el Laboratorio Internacional de Investigación sobre el Genoma Humano [(LIIGH), UNAM](https://twitter.com/LIIGH_UNAM), campus Juriquilla [
Dra Alejandra Medina-Rivera](https://liigh.unam.mx/profile/dra-alejandra-medina-rivera/) [
EveliaCoss.github.io](https://eveliacoss.github.io/) ] .center-col[ ###
Miembro - [LupusRGMX](https://twitter.com/LupusRgmx) - [Proyecto JAGUAR](https://twitter.com/PJaguarLATAM) - [Rladies Morelia](https://www.facebook.com/profile.php?id=100093337606435) - [CDSB - Mexico](https://twitter.com/CDSBMexico) - [RIABIO](https://twitter.com/RiaBioNet) ] .right-col[ ###
Formación académica - Doctorado en Biotecnología de Plantas, [Cinvestav, Langebio](https://twitter.com/uga_langebio), [
Dra Selene Fernandez-Valverde](https://twitter.com/SelFdz) - Maestría en Biotecnología de Plantas, [Cinvestav, Unidad Irapuato](https://twitter.com/CinvestavIra) - Ing. en Biotecnología, [UPSIN](https://www.facebook.com/UPSINSINALOA) ] --- class: center, middle
# Dia 1. Conceptos básicos de bioinformática y pseudocódigo --- ## Bioinformática se conforma de la computación, biológica, matemáticas y estadística La bioinformática, en relación con la **genética y la genómica**, es una **subdisciplina científica** que implica el uso de **ciencias informáticas** para *recopilar, almacenar, analizar, diseminar datos biológicos*, como secuencias de ADN y aminoácidos o anotaciones sobre esas secuencias [NIH, 2023](https://www.genome.gov/es/genetics-glossary/Bioinformatica). Uno de sus objetivos es: **Aumentar el entendimiento de la salud y la enfermedad, en ciertos casos, se usan para proveer mejor atención médica** [NIH, 2023](https://www.genome.gov/es/genetics-glossary/Bioinformatica). .left[ NIH: National Human Genome Research Institute ] --- ## Ciencia de datos - La ciencia de datos se dedica al estudio de grandes **bases de datos** complejos que se amasan a través de múltiples proyectos de investigación (ejemplo: [gapminder](https://www.gapminder.org/), [BioProject](https://www.ncbi.nlm.nih.gov/bioproject/)). - Tambien puede guiar en decisiones comerciales. - Con respecto a los estudios genómicos, ese trabajo requiere experiencia en disciplinas **científicas cuantitativas**, como *bioinformática, biología computacional y bioestadística*. .content-box-gray[ Ejemplo: Certificado profesional de [Google Data Analytics](https://www.coursera.org/professional-certificates/google-data-analytics) ] --- ## La bioinformática dentro de la genómica 1) **Calidad de los datos**. Paso **FUNDAMENTAL**. Incluye la manipulación y limpieza. 2) **Análisis estadístico** >EJEMPLO: Significancia estadística, significancia biológica, modelos estadísticos acorde al problema. 3) **Generar interpretaciones de los experimentos.** Conocer el método empleado y los archivos de salida. > EJEMPLOS: > Con los datos de RNA-Seq estaremos analizando expresión de los genes. > Con datos de GWAS estaremos buscando variantes genéticas. 4) **Bioinformática predictiva** >EJEMPLO: Predicciones de funciones, elementos genómicos, redes de co-expresión, etc --- ## Un algoritmo nos permite resolver un problema Un algoritmo es un método para resolver un problema mediante una serie de pasos **definidos, precisos** y **finitos**. - **Preciso**: implica el *orden* de realización de cada uno de los pasos. - **Definido**: si se sigue dos veces, se obtiene el mismo resultado. Es *reproducible*. - **Finito**: Tiene un numero determinado de pasos, implica que tiene un *fin*. Un algoritmo podemos definirlo como un programa. Ejemplo: Un **paquete** de instalacion en R es un programa. .content-box-gray[ **EJEMPLO:** > **Problema:** No me gusta dedicarle tiempo a crear diapositivas bonitas. Me gusta mas enfocarme en el contenido. Entonces utilice el paquete [📦 Xaringan <img src="data:image/png;base64,#imagenes/hex-xaringan.png" width="25px"/>](https://github.com/yihui/xaringan#xaringan) para resolver mi problema. > El paquete Xaringan es un algoritmo. Que me permitio resolver mi problema. ] --- ## Pseudocódigo - El pseudocódigo es una manera de escribir algoritmos de forma *poco estricta* (con una sintaxis relajada) o estructura de *datos poco detalladas*. Intentando organizar los **pasos necesarios** para generar el algoritmo. - **Lenguaje sencillo y fácil de leer para las personas**. - Los pasos descritos **pueden posteriormente traducirse en algún lenguaje de programación**, con la ventaja de no estar regido por las normas de un lenguaje de programación en particular. - El pseudocódigo tambien va a utilizar una serie de *palabras claves* o palabras especies que va a indicarnos lo que significa el algoritmo. --- ## Importancia de aprender Pseudocódigo - **Es la base de cualquier lenguaje de programación**. - Si tu aprendes pseudocódigo puedes **escalar lo aprendido a TODOS los lenguajes de programación**. - Puedes usar el pseudocódigo para **encontrar ejemplos en internet para poder resolver tu problema**. - En el mundo de la Bioinformática / programación vamos a emplear las palabras *Código o Script* para hacer referencia a un algoritmo. - **Mayor facilidad en la comprension del código o Script de los creadores de diversos paquetes (programas).** --- ## Alguien ya resolvió ese problema años antes o uno similar, nunca dudes de buscar en internet… también está chat GPT .center[ <img src="imagenes/meme_preguntas.jpg", width="500" height="400"> ] --- ## Pasos .pull-left[ 1. Análisis del problema / Definir el problema 2. Diseño del algoritmo / Diseño del programa 3. Codificación / Escribir el código 4. Compilación y ejecución del programa 5. Verificación / Realizar pruebas 6. Depuración / Detectar los errores y corregirlos 7. Documentación ] .pull-right[ <img src="img/homersapien.jpg"; width="500" height="300"> ] --- ## Paso 1: Análisis del problema / Definir el problema .pull-left[ > **Problema:** Realizar un algoritmo que solicite al usuario dos numeros enteros, realice su suma y la imprima en pantalla. ] .pull-right[.center[ <img src="img/Homero_inteligente.jpg"; width="500" height="300"> ] ] --- ## Paso 2: Diseño del algoritmo / Diseño del programa - ¿Cuáles son las variables o datos necesarios para ejecutar el programa (*input*)? - ¿Qué es lo que tengo que hacer para resolver el problema? - ¿Cuáles son las variables o datos de salida (*output*)? .center[ <img src="https://i0.wp.com/codigoespagueti.com/wp-content/uploads/2015/03/Homero-Simpson-predijo-la-masa-del-Boson-de-Higgs.jpg",width="500" height="400"> ] --- ## Ejercicio > **Problema:** Realizar un algoritmo que solicite al usuario dos numeros enteros, realice su suma y la imprima en pantalla. ---- ```r # ---Algoritmo(Sumar)--- #- Input: Declarar variables (a y b). #- Output: Resultado de la suma (variable c). #- Pasos: # --INICIO-- # 1) Solicitar al usuario los datos de entrada. # 2) Realizar la suma de los datos de entrada. # 3) Mostrar el resultado. # --FIN_INICIO-- # --- Fin_de_Algoritmo(Sumar) --- ``` --- ## Ejercicio > **Problema:** Realizar un algoritmo que solicite al usuario *dos numeros enteros*, realice su suma y la imprima en pantalla. ---- Traduccion a Pseudocódigo: ```r # ---Algoritmo(Sumar)--- # 1) Solicitar al usuario los datos de entrada. # --INICIO-- ESCRIBA("Digite el primer numero (entero)") Lea(a) ESCRIBA("Digite el segundo numero (entero)") Lea(b) # 2) Realizar la suma de los datos de entrada. c <- a + b # 3) Mostrar el resultado. ESCRIBA("La suma es:", c) # --FIN_INICIO-- # --- Fin_de_Algoritmo(Sumar) --- ``` --- ## Diagramas de flujo Nos permiten ilustrar los pasos contenidos en un algoritmo. .left-col[ <img src="img/DiagramaF1.png"; width="500" height="400"> ] .center-col[ <img src="img/DiagramaF2.png"; width="500" height="400"> ] .right-col[ <img src="img/DiagramaF3.png"; width="500" height="100"> ] Imagenes tomadas de [Lucidchart](https://www.lucidchart.com/pages/es/que-es-un-diagrama-de-flujo) Pueden generar sus diagramas en Powerpoint, [Canva](https://www.canva.com/graphs/workflow-diagrams/), en [R](https://hbiostat.org/rflow/doverview.html), [Lucidchart](https://www.lucidchart.com/pages/es/que-es-un-diagrama-de-flujo), etc. --- ## Diagrama de flujo de la sumatoria .center[ <img src="imagenes/Flowchart_ejemplo1.png"> ] --- ## Lenguajes de programación Todo lo anterior está bien, pero ahora como hago que la computadora ejecute el algoritmo. .pull-left[.center[ <img src="img/MatarFlanders.jpeg", width="300" height="300"> ] ] .pull-right[ En Bioinformática los lenguajes de programación más empleados para: - Manipulación de datos son: **R, Python y Bash (shell)**. - Limpieza de datos de secuenciación: **Python y Bash (shell)**. - Generar graficas: **R y Python** ] --- ## Empezando a usar R - Declaración de variables en R ```r a <- 3 b <- 1 ``` - Operaciones matemáticas en R ```r 3 + 1 # [1] 4 a + b # [1] 4 ``` - Almacenar resultados en una nueva variable ```r 3 + 1 # [1] 4 c <- a + b c # [1] 4 print(c) # [1] 4 ``` --- ## Paso 3: Codificación / Escribir el código > **Problema:** Realizar un algoritmo que solicite al usuario *dos numeros enteros*, realice su suma y la imprima en pantalla. ---- ```r # ---Algoritmo(Sumar)--- # 1) Solicitar al usuario los datos de entrada (variable a y b). # --INICIO-- { a <- readline("Digite el primer numero: "); b <- readline("Digite el segundo numero: "); } # Convertir la entrada en numeros enteros a <- as.integer(a); b <- as.integer(b); # 2) Realizar la suma de los datos de entrada. c <- a + b # 3) Mostrar el resultado. print(c) # --FIN_INICIO-- # --- Fin_de_Algoritmo(Sumar) --- ``` --- ## Paso 4: Compilación y ejecución del programa .center[ <img src="img/Boton.jpg"> ] --- ## Paso 4: Compilación y ejecución del programa > **Problema:** Realizar un algoritmo que solicite al usuario *dos numeros enteros*, realice su suma y la imprima en pantalla. ```r # ---Algoritmo(Sumar)--- # 1) Solicitar al usuario los datos de entrada (variable a y b). # --INICIO-- { a <- readline("Digite el primer numero: "); b <- readline("Digite el segundo numero: "); } # Convertir la entrada en numeros enteros a <- as.integer(a); b <- as.integer(b); # 2) Realizar la suma de los datos de entrada. c <- a + b # 3) Mostrar el resultado. print(c) # --FIN_INICIO-- # --- Fin_de_Algoritmo(Sumar) --- ``` --- ## Entendiendo el funcionamiento del código .center[ <img src="imagenes/Flowchart_ejemplo1_p2.png"> ] --- ## Paso 5: Verificación / Realizar pruebas R arroja en mensajes los *errores* encontrados en el Código. A veces unos más claros que otros. Como recomendación **SIEMPRE usa R en su versión en inglés**. De esta manera puedes encontrar la respuesta a tu problema más rápido, solo necesitaras copiarlo y pegarlo en tu navegador. Debes tomar en cuenta: - No dejar espacios cuando declaras una variable. EJEMPLO: mi variable. - Cuida la escritura de tus variables. No repitas el mismo nombre porque esta variable se sobrescribe. - Siempre verifica la declaración de tu variable en el ambiente (Environment), si no existe R te arrojara error. - Carga siempre los paquetes que vas a usar **ANTES de ejecutar el código**. - Realiza pruebas para verificar la salida de tu programa. --- ## Paso 6: Depuración / Detectar los errores y corregirlos > **Problema:** Realizar un algoritmo que solicite al usuario *dos numeros enteros*, realice su suma y la imprima en pantalla. ---- ```r # Verificar el formato de las variables str(a) # num 3 str(b) # num 1 str(c) # num 4 # O pueden buscar el de todas las variables str(a,b,c) # num 3 ``` EJERCICIO: > 1. Realiza la suma de 7 + 6 e imprime el resultado. > 2. Realizar un algoritmo que solicite al usuario *3 numeros enteros*, realice su suma y la imprima en pantalla > Volver a correr el código y verificar la salida. --- ## Paso 7: Documentación .content-box-gray[ - *Autor (author)*: Su nombre - *Dia (date)*: Fecha de creación - *Paquetes (packages)* - *Directorio de trabajo (Working directory)*: En que carpeta se encuentra tu datos y programa. - *Información descriptiva del programa (Description)*: ¿Para qué sirve el programa? Ej: El siguiente programa realiza la suma de dos numeros enteros a partir de la entrada del usuario y posteriormente la imprime en pantalla. - *Usage* ¿Cómo se utiliza? - *Argumentos (Arguments)* - *Información de entrada (Data Inputs)*: Ej: Solo numeros enteros (sin decimales). - *Información de salida (Outpus)*: Graficas, figuras, tablas, etc. ] --- .center[ <img src="imagenes/meme_documentacion.jpg"> ] --- ## Ejemplo: Función suma Google : [Sum Function usage](https://www.rdocumentation.org/packages/base/versions/3.6.2/topics/sum) .center[ <img src="imagenes/sum_function.png", width="500" height="400"> ] --- ## Ejercicio 1) ¿Cuál es el error del siguiente código? ```r my_variable <- 10 my_varable #Error: object 'my_varable' not found ``` > NOTA: Es importante mantener la jerarquia de operaciones. 2) Obten el resultado de las siguientes operaciones ```r 2+3*7-6/3 # [1] 21 (2+3)*7-(6/3) # [1] 33 (2+3)*(7-6)/3 # [1] 1.666667 ``` --- ## Ejercicio 3) Obtener perímetro de un rectángulo que mide 7 cm de ancho (altura, h) y 10 cm de largo (base, b). Genera su diagrama de flujo e imprime su resultado. .center[ <img src="imagenes/rectangulo.jpg", width="300" height="100"> ] ```r # 1) Declarar las variables b <- 10 h <- 7 P <- 2*(b + h) # 2) Realizar el calculo del perimetro print(P) # 3) Mostrar el resultado. # [1] 34 ``` --- ## Siempre toma lo mejor de los mejores y aprende de sus códigos .center[ <img src="imagenes/meme_bioinfo.jpg", width="500" height="400"> ] --- # Bibliografias - Bioinformatica, NIH, 2023 (https://www.genome.gov/es/genetics-glossary/Bioinformatica) - Bioinformática: “Welcome to the Welcome”, Julio Collado Vides, CCG. - Pseudocodigo, Diagramas de Flujo y algo de C de [Pascual Coronel](https://slideplayer.es/slide/13658656/) - [R: Introduction and Data Management](https://bouchat.github.io/IntroDataMgmt20Jan.html)