---
# System prepended metadata

title: 'Laboratorio I:'
tags: [Laboratorio, Prácticas, Estudiantes, UAX]

---

###### tags: `UAX` `Estudiantes` `Laboratorio` `Prácticas`
# Curso 23-24. Laboratorio I: 
 <font color = 'gray'>
    <p style="text-align:right;">Prof.: Laura J. Marcos-Zambrano </font>
   
:::warning
:memo: Deberás entregar un pdf con los comandos usados para cada actividad y un print de pantalla en el caso que así se indique. La fecha límite para entregar las actividades es el Viernes 13/10/23. 
:::
## a) LINUX:

:::info
**Objetivos:** Manipular la terminal de Linux y reconocer comandos básicos. Diseñar un script sencillo usando el lenguaje bash. 
:::

Para este ejercicio usaremos el Terminal de Linux, para ello tienes dos opciones (i) entrando a través de la máquina virtual de UBUNTU creada en tu ordenador siguiendo [este](https://hackmd.io/@laurichi13/H13G0jQes) tutorial, o (ii) si no has podido instalar y cargar la máquina virtual, usando la aplicación GitBash de *Git for Windows* que permite emular una terminal con lenguaje bash y que puedes descargar [aquí](https://gitforwindows.org/). 

Recuerda tener a mano el [Seminario I](https://hackmd.io/@laurichi13/rJOYbaXeo) donde hay algunos comandos básicos que hemos aprendido.

#### Preparación: 
1. Abrir la línea de Comandos. 
2. Ubicar el directorio en el que estás trabajando. (Usa el comando `pwd`)
3. Crea una carpeta llamada `laboratorio1`
4. Dirigirte a la carpeta/directorio creado. 
5. Descarga los siguientes ficheros en una carpeta nueva en tu escritorio: 
    * [microarray.csv](https://drive.google.com/file/d/1F-aD-NauPObtY-L9mKbNIYNMvZbtGkmb/view?usp=sharing)
    * [file.vcf](https://drive.google.com/file/d/1om_WzEuVqdJ_xM-zKCPctAGh58f8Wnn0/view?usp=sharing) 
    * [file2.vcf](https://drive.google.com/file/d/1uu9G_t3tn838pnSbsm957VK8maTLDJA6/view?usp=sharing)
    * [untrimmed_fastq](https://drive.google.com/drive/folders/1qtWJHc-4SM09eDjdDUawLeuVsWyKfA3W?usp=sharing) Contiene dos archivos, descargar los dos.
* Mueve los ficheros descargados a la carpeta `laboratorio1`
* El comando `nano` es un editor de textos del terminal que te permite ver ficheros, úsalo para ver los archivos descargados. 
```bash=1
nano file.vcf
```
> Para salir teclea ctrl X

### Manejo básico de la línea de comandos: 

**Ejercicios:**
* Seleccionar la línea 116 del fichero `microarray.csv`, indica el comando usado. 
* Usa el fichero con formato vc `file.vcf` selecciona aquellos snps que han pasado todos los filtros (Tienen el texto PASS). Selecciona también aquellos snps que no han pasado el filtro de calidad (Tienen eltexto q10) indica el comando usado. Guardalos en un archivo .txt nuevo.(:eyes: Usa los comandos `grep` `>`)
* Tenemos un nuevo fichero `file2.vcf` que ha perdido la información de la cabecera. Sabemos que la cabecera del fichero `file.vcf` nos vale, añadir la cabecera de `file.vcf` al fichero `file2.vcf` creando un nuevo fichero. 
:eyes: Primero usa un comando que te permita seleccionar la cabecera del archivo `file.vcf` y guardarla en un archivo nuevo, luego añade el contenido de `file2.vcf`. Indica los comandos usados. 
### Crear un Script:

Una de las mayores ventajas de usar la línea de comandos es la capacidad de escribir "scripts". Los scripts permiten guardar comandos para ejecutarlos en otro momento y además se pueden juntar varios comandos. 

**Ejemplo:** Generalmente una de los primeros pasos al obtener unos resultados de secuenciación es extraer las lecturas incorrectas e investigar que está pasando con ellas.
Vamos a utilizar las secuencias descargadas en la carpeta `untrimmed_fastq`
Las malas lecturas tienen muchas N, así que vamos a buscar NNNNNNNNNN con `grep`
Queremos el registro FASTQ completo, así que también vamos a obtener la línea de arriba de la secuencia y las dos líneas de abajo. También queremos buscar en todos los archivos que terminan en .fastq, así que vamos a usar el comodín `*.fastq`

El comando sería el siguiente: No lo ejecutes aún!

```bash=1
grep -B1 -A2 NNNNNNNNNN *.fastq > bad_reads.txt
```
> -A (--after-context) y -B (--before-context) - imprimir las líneas después y antes (respectivamente) del patrón coincidente

Vamos a crear un nuevo archivo para poner este comando. Lo llamaremos `bad-reads-script.sh` No se requiere la terminación "sh", pero al usar esa extensión nos dice que es un script de shell.

```bash=1
nano bad-reads-script.sh
```

Ahora escribe el comando grep anterior en el archivo creado y guárdalo. 

>Para salir tienes que teclear ctrl X y luego decir que sí quieres guardar los cambios tecleando Y. 


Ahora para ejecutar el script, escribe en la terminal 

```bash=1
bash bad-reads-script.sh
```

Parecerá que no pasó nada, pero ahora, si observas el archivo `bad_reads.txt`, puedes ver que hay lecturas en el archivo. (Utiliza nano o cat para verlo)

**Ejercicio:**
* ¿Cuántas lecturas incorrectas hay en los dos archivos FASTQ combinados? (Usa el comando `wc -l` para saberlo). 
* Queremos que el script `bad-reads.script.sh` nos diga cuándo está terminado. Modifica el script añadiendo al final el comando `echo` para que diga "Terminado!" y guarda el archivo. Ejecuta el script actualizado. (Indica los comandos usados en el nuevo script)

### Automatización de operaciones en varios archivos mediante bucles:

Los comandos `for` `do` y `done` permiten crear automatizaciones de tareas, es necesario asignar variables para almacenar diferentes valores al hacer un bucle. 

**Ejemplo:** Ahora vamos a ver los archivos fastq en el directorio untrimmed_fastq con un bucle `for` para poder ejecutar varias tareas en el mismo archivo.

Escribe el siguiente comando en un archivo llamado script1.bash

`nano script1.bash`

```bash=1
for filename in *.fastq
   do echo $filename
done
```
>usamos `*.fastq` para que busque todos los archivos que tengan la terminación .fastq
* ¿Qué sucede? 

Para agregar otra tarea a ejecutar en el mismo nombre de archivo, la tarea se escribe debajo de la primera, no es necesario repetir el `do` . Cada línea en el bucle se ejecutará una tras otra:

Escribe: 

```bash=1
for filename in *.fastq
   do echo $filename
   wc -l $filename
done
```

* ¿Qué sucede? 

**Ejercicio:**

* Escribe un script llamado `fastq_script.sh` para imprimir todos los nombres de archivos fastq, contar el número de líneas y encontrar el número de lecturas incorrectas en cada archivo. Verifica que el script funciona e indica los comandos usados. 

## b) R y RStudio 

:::info
**Objetivos:** Operar en el entorno R. Manejar comandos básicos de la librería tidyverse para filtrar y seleccionar datos y calcular estadísticos simples. 
:::

#### Preparación: 
1. Abrir RStudio. 
2. Abrir un Script de R y guardarlo como `laboratorio1.R`
>Guarda todo lo que hagas en el script porque te será útil para recordar las funciones y comandos usados.
4. Descargar el archivo [toy.csv ](https://drive.google.com/file/d/1b8-JEERbx_7MyOO8LkmC1qMP_GCYqpC1/view?usp=sharing)


### Manejo del paquete tidyverse para manipulación de datos.

Cargar librería `tidyverse` y dataset `starwars`. 

```r=1
library(tidyverse)
data(starwars)
``` 
>:sleuth_or_spy: Inspecciona el dataset.
### Filtrar y seleccionar datos:
```r=1
#Ejemplos usando select
# Seleccionar todas las columnas menos el nombre
starwars %>% select(-name)
#Seleccionar sólo las columnas que tienen subraya (_)
starwars %>% select(contains("_"))
#Seleccionar sólo las columnas que empiezan con "s"
starwars %>% select(starts_with("s"))
#Crear un data frame con los nombres y planeta de origen (homeworld)
homeworld <- starwars %>% select(name, homeworld)
#Filtrar datos 
#Filtrar por especies: sólo humanos
human <- starwars %>% filter(species == "Human")
#Filtrar por especies: sólo humanos del planeta Tatooine
starwars %>% filter(species == "Human", homeworld == "Tatooine")
#Crear un nuevo datframe con todas las especies menos los Droides
starwars_nodroids <- starwars %>% filter(species != "Droid")
```
* ¿Cuántos registros cumplen las condiciones finales?

A la hora de filtrar y seleccionar te serán utiles los condicionales: 
| Símbolo | Significado           |
| ------- | --------------------- |
| <       | Menor que             |
| >       | Mayor que             |
| ==      | Igual que             |
| <=      | Menor o igual que     |
| >=      | Mayor o igual que     |
| !=      | Diferente que         |
| %in%    | Pertenece al conjunto |
| is.na   | Es NA                 |
| !is.na  | No es NA              |
### Seleccionar y agrupar datos 
```r=1
#Usamos group_by y tally
starwars %>% group_by(species) %>% tally()

#Añadiendo otra variable
starwars %>% group_by(species, gender) %>% tally()

#Si lo quieres guardar en el environment recuerda asignarle un nombre
table_gender <- starwars %>% group_by(species, gender) %>% tally()
```

### Calcular algunos estadísticos 
>na.rm=T quiere decir que elima los NA (valores No Asignados o sin datos)

```r=
starwars %>% group_by(species) %>% summarise(mean_height = mean(height, na.rm = T),mean_mass = mean(mass,na.rm = T))
```
* ¿Cómo calcularías la desviación estándar (sd) de esos parámetros? Recuerda consultar con `?` si no sabes como usar una función o comando. Por ejemplo: `?summarise()` ,`?sd()`.

### Crear gráficos y modificar algunos elementos.

```r=1
#Hacer un gráfico de la altura vs. la masa de los personajes
ggplot(starwars, aes(height, mass)) + geom_point()

#Puedes modificar el color 
ggplot(starwars, aes(height, mass)) + geom_point(colour = "red")

#Modificando el color y el punto
ggplot(starwars, aes(height, mass)) + geom_point(colour = "purple", pch = 3)

#Modificando el color y el fondo 
ggplot(starwars, aes(height, mass)) + geom_point(colour = "red") + theme_light()
```
* Al crear los gráficos puedes observar que hay un punto que corresponde a un personaje con una masa muy grande. Inspecciona el datset, filtra usando las funciones de tidyverse, crea un nuevo dataframe sin ese personaje y crea de nuevo el gráfico final. (Exporta el gráfico con la opción exportar en el panel derecho y adjúntalo en el pdf)

![](https://i.imgur.com/kN0AAan.png)


**Ejercicio:**

* Descarga el dataset `toy.csv` cargalo en R studio usando la función `read_csv` de la libreria `tidyverse`. Tienes que poner la dirección donde has guardado el archivo descargado. En el ejemplo, el archivo está en la carpeta "Descargas"

```r=1
toy <- read_csv("Descargas/toy.csv")
```
> IMC es Indice de Masa Corporal, IMC_clas: clasificación de acuerdo al IMC. 
> IAS significa Indice de Alimentación Saludable; IAS_clas: clasificación de acuerdo al IAS.
> CCintura significa Circunferencia de cintura. 


* Inspecciona el dataset, haz un resumen de la media (mean) de las variables (Peso, Altura,IMC, IAS, CCintura). Agrupando por sexo.
* Haz una tabla sólo con los pacientes femeninos ¿Cuántos registros cumplen las condiciones? ¿De estos cuantos tienen Sobrepeso (Overweight)? :sleuth_or_spy: Usa select y filter. 
* Haz un gráfico usando ggplot relacionando el IMC (Indice de masa corporal) con el peso (Weight_Kg) de **todos los pacientes.**
    * Repítelo filtrando sólo los pacientes categorizados como "Overweight" y "Obesity".


**Ejercicio:**
* Utiliza los comandos adecuados para instalar los paquetes de R `ape` `phangorn` y `phytools` que utilizaremos en el laboratorio de la siguiente semana. Carga las librerías y envia un print de pantalla con el output, demostrando que la instalación fue exitosa o si hubo algún problema.

```r=1
install.packages("ape")
install.packages("phangorn")
install.packages("phytools")
```

---

<font color = 'gray'>
    <p style="text-align:left;">Práctica de shell basada en datos de COMAV Bioinformatics y Introduction to the Command Line for Genomics Data Carpenteries. Práctica de R basada en Speciation & Population Genomics: a how-to-guide
 </font>  


