22 de junio de 2021

leer datos desde GitHub en R

Hola, esta es una entrada muy breve, donde describo cómo leer datos desde un fichero alojado en un repositorio GitHub en la Web. El problema tiene dos partes. 

Primero, nos aseguramos de acceder al formato original de los datos. Por ejemplo, para leer el fichero https://github.com/eead-csic-compbio/bioinformatics/blob/main/test_data/Ensembl_repeats.tsv , en formato TSV (texto separado por tabuladores), podemos obtener la ruta o path al fichero crudo haciendo click en el botón "Raw" a la derecha en la figura, que en este caso es https://raw.githubusercontent.com/eead-csic-compbio/bioinformatics/main/test_data/Ensembl_repeats.tsv :


 

Segundo, leemos el fichero directamente pasando su URL a la función read.csv de R indicando que las columnas están separadas por tabuladores y que la primera línea del fichero son los nombres de las columnas:

datos <- read.csv(
url("https://raw.githubusercontent.com/eead-csic-compbio/bioinformatics/main/test_data/Ensembl_repeats.tsv"),
sep="\t",
header=TRUE) 

 

Hasta pronto,

Bruno


15 de junio de 2021

entornos Python con pyenv

Hola,

si programas en Python o usas software escrito en este lenguaje es posible que te hayas enfrentado a la necesidad de usar una versión concreta que no tienes instalada en tu sistema, por ejemplo la versión 3.7.9. En esta entrada explico una manera de resolver este problema en Linux con ayuda de pyenv, que de hecho te permite tener múltiples versiones en paralelo, cada una con su propio espacio de dependencias. Espero que aquí quede más claro que en esta otra entrada.

Lo primero que necesitas es una partición en tu disco para pyenv:  

export PYENV_ROOT="/mi/particion/.pyenv"

curl https://pyenv.run | bash
  
# install python 3.7.9 (EOF June 2023)
pyenv install 3.7.9


Si todo va bien ahora debes añadir las siguientes líneas al final de tu fichero .bashrc:

if [[ -d "/mi/particion/.pyenv" ]]; then
    export PYENV_ROOT="/mi/particion/.pyenv"
    export PATH="$PYENV_ROOT/bin:$PATH"
    eval "$(pyenv init --path)"
    eval "$(pyenv virtualenv-init -)"
fi

 

Ahora ya puedes crear un entorno virtual sobre esta versión de Python, por ejemplo 'proyectox', e instalar dependencias específicas de ese proyecto:

pyenv virtualenv 3.7.9 proyectox
pyenv local proyectox
pip install --upgrade pip
 
# dependencias, tras clonar https://github.com/proyextox (ejemplo, no existe)
pip install -r proyectox/requirements.txt


Finalmente, ya puedes trabajar dentro de ese entorno:

pyenv local proyectox



Hasta pronto,

Bruno

9 de junio de 2021

comprueba si dos genomas FASTA son iguales

Hola, 

hoy mi colega Najla Ksouri y yo teníamos que comprobar si dos versiones del mismo genoma, una de Phytozome y otra de Ensembl Plants, eran iguales en secuencia. Para eso usamos este one-liner Perl que hace una digestión MD5 de las secuencias desde un fichero en formato FASTA, donde cada secuencia va precedida de una cabecera o header, capturada en la variable $h:

cat Prunus_persica.Prunus_persica_NCBIv2.dna.toplevel.fa |
    perl -MDigest::MD5=md5_hex -lne 'if(/^(>\S+)/){ $h=$1 } else { $fa{$h} .= $_ }
    END{ foreach $h (keys(%fa)){ print "$h\t".md5_hex(uc($fa{$h})) }}'
 

Éstas son las primeras líneas que imprime:

>scaffold_284	390b26eb24b1926aca0cbd2be8174139
>scaffold_112	9ed6d212a00a8018572c06d6c21fc78d
>scaffold_12	4d99812ab949deb933d84a5a9ebc5787
... 

Como se puede ver, la primera columna es la primera palabra de cada cabecera, y la segunda es la digestión MD5 de esa secuencia, que sería idéntica para dos secuencias iguales. Finalmente, veréis que llama al módulo core Digest::MD5, por tanto ya instalado, y que usa la función uc para convertir las secuencias a mayúsculas antes de digerirlas.

Hasta pronto,

Bruno