La Poliadenilción Alternativa (APA) es un proceso biológico que ocurre durante la maduración de ARN mensajero (ARNm), en el cual se utilizan diferente señales en teminacion (poliadenilación) en el mismo gen. Esto significa que una sola secuencia de ADN puede generar múltiples versiones de ARNm con diferentes longitudes en el extremo 3'. Elas variaciones pueden afectar la estabilidad del ARN, su ubicación en la célula y su traducción a proteínas. Como resultado, la APA desempeña un papel importante en la regulación de la expresión génica y puede estar asociada con procesos como la diferenciación celular y enfermedades como el cáncer.
El SCAPE-APA (Single Cell Analysis of Polyadenylation Events) es un package computacional desarrollado para identificar y cuantificar eventos de poliadenilación alternativa en datos de scRNA-seq. Nos permite estudiar cómo diferentes células utilizan diferentes sitios de poliadenilación en sus genes, revelando capas adicionales de regulación que no se detectan únicamente mediante el análisis clásico de expresión génica.
En este cuaderno, utilizaremos SCAPE-APA en el entorno de Google Colab para estimar eventos de poliadenilación alternativos en datos de scRNA-seq. El objetivo es ofrecer una introducción práctica e intuitiva a este tipo de análisis, demostrando cómo APA contribuye a la diversidad regulatoria entre células individuales.
# Instalamos python3-conda
# (!) indica que este es un comando para la terminal de Linux
!apt-get install -y python3-conda
Conda es un gestor de paquetes y entornos utilizado principalmente en ciencia de datos y bioinformática. Facilita la instalación de software y bibliotecas, incluso aquellas con dependencias complejas.
Un entorno virtual de Conda es un espacio aislado donde se pueden instalar versiones específicas de paquetes sin interferir con otras instalaciones del sistema. Esto evita conflictos y garantiza análisis reproducibles.
# Instalar el package condalab, que le permitirá utilizar Conda en Google Colab,
# junto con sus paquetes y funciones.
!pip install -q condacolab
import condacolab
condacolab.install()
✨🍰✨ Todo parece funcionar!
# Instalación de packages y herramientas numéricas para la visualización
# y gestión de datos en el entorno Conda.
# Creación del entorno scape_env con Python versión 3.11
!conda create -y -n scape_env python=3.11
# Instalación de los packages necesarios
!conda run -n scape_env conda install -y anaconda::numpy anaconda::scipy anaconda::pandas anaconda::matplotlib
!conda run -n scape_env conda install -y anaconda::click anaconda::tomli-w anaconda::requests
!conda run -n scape_env conda install -y conda-forge::psutil conda-forge::tomli-w
!conda run -n scape_env conda install -y bioconda::bedtools bioconda::pybedtools bioconda::pysam bioconda::gffutils
!conda run -n scape_env pip install taichi
!conda run -n scape_env pip install scape-apa
# Verificando la instalación de SCAPE-APA.
!conda run -n scape_env bash -c "unset MPLBACKEND && export MPLBACKEND=Agg && scape --help"
GitHub es una plataforma en línea donde los desarrolladores almacenan, comparten y colaboran en proyectos de código mediante el sistema de control de versiones Git.
El comando git clone se usa para copiar un repositorio completo desde GitHub (u otro servidor Git) a tu repositorio local. Descarga todos los archivos, el historial de versiones y la estructura del proyecto, lo que te permite trabajar localmente. Hagamos esto como SCAPE-APA.
# Obteniendo los archivos del repositorio de GitHub.
!git clone https://github.com/chengl7-lab/scape.git
# Moviéndonos al directorio del tutorial dentro de Scape
%cd scape/tutorial
# Lista de archivos dentro de la carpeta "ejemplo de juguete".
!ls -lh /content/scape/examples/toy-example/
# Cambiar directorio.
%cd /content/scape/examples/toy-example/
# Descargar el archivo de anotación "Mus_musculus.GRCm39.113.chr.gff3"
#wget es para descargar
# -O para definir la ubicación del archivo y su nombre
!wget -O /content/scape/examples/toy-example/Mus_musculus.GRCm39.113.chr.gff3 https://ftp.ensembl.org/pub/release-113/gff3/mus_musculus/Mus_musculus.GRCm39.113.chr.gff3.gz
# Comprobación del contenido interno.
# El encabezado se usa para comprobar el tipo de archivo.
# -n 20 especifica que se verán las primeras 20 líneas del archivo.
!head -n 20 /content/scape/examples/toy-example/Mus_musculus.GRCm39.113.chr.gff3
# Comprobar el tamaño del archivo
!wc -l /content/scape/examples/toy-example/Mus_musculus.GRCm39.113.chr.gff3
Las UTRs son regiones no traducidas del ARN mesajero, ubicadas en los extremos 5' y 3'del gen. La APA suele ocurrir en el extremo 3', dentro de la UTR 3'. Esto significa que definir correctamente la ubicación de estas regiones es esencial para detectar con precisión los diferentes eventos de APA que pueden ocurrir en un gen.
El comando gen_utr_annotation forma parte del flujo de trabajo de análisis de SCAPE-APA y su objetivo principal es generar anotaciones de UTR (Regiones No Traducidas) a partir de un archivo .gff3 que contiene las anotaciones genómicas de una especie.
# Llamar a SCAPE en el entorno Conda.
# Usar "unset MPLBACKEND" para eliminar la configuración inicial de Google Colab y
# "MPLBACKENG=Agg" para renderizar gráficos.
# scape gen_utr_annotation = Llamar a SCAPE con el comando "gen_utr_annotation".
# --gff_file = archivo ".gff3".
# --output_dir = Ruta de salida del archivo generado.
# --res_file_name = Nombre del archivo generado, con formato ".csv".
!conda run -n scape_env bash -c \
"unset MPLBACKEND && export MPLBACKEND=Agg && \
scape gen_utr_annotation \
--gff_file /content/scape/examples/toy-example/Mus_musculus.GRCm39.113.chr.gff3 \
--output_dir /content/scape/examples/toy-example/ \
--res_file_name example_annotation"
Necesitamos realizar adaptaciones para Google Colab, ya que no permite ejecutar scripts de Python directamente con el comando scape como en una terminal normal.
Para ejecutar SCAPE-APA en Google Colab, debe usar el comando conda run -n scape_env para asegurarse de que el entorno Conda correcto esté activado antes de ejecutar el comando scape.
No es necesario si ejecuta SCAPE-APA localmente en su terminal, ya que el entorno Conda ya estará activo.
Se vería así:scape gen_utr_annotation --gff_file /content/scape/examples/toy-example/Mus_musculus.GRCm39.113.chr.gff3 --output_dir /content/scape/examples/toy-example/ --res_file_name example_annotation
El comando prepare_input es un paso esencial en el proceso de SCAPE-APA y su objetivo es preparar datos de scRNA-seq para la detección de eventos de APA.
Al centrarse únicamente en las lecturas ubicadas en las regiones UTR, este paso reduce el ruido y centra el análisis en las áreas donde se producen eventos de APA. Esto mejora la precisión y la eficiencia de la detección, lo que permite una estimación más fiable de los diferentes sitios de poliadenilación en células individuales.
# scape prepare_input = Comando para preparar datos de un archivo ".bam".
# --utr_file = Ruta al archivo de anotación UTR generado anteriormente.
# --cb_file = Archivo de código de barras para identificar células en datos de scRNA-seq.
# --bam_file = Archivo ".bam" de lecturas alineadas.
!conda run -n scape_env bash -c \
"unset MPLBACKEND && export MPLBACKEND=Agg && \
scape prepare_input --utr_file /content/scape/examples/toy-example/example_annotation.csv \
--cb_file /content/scape/examples/toy-example/barcodes.tsv.gz \
--bam_file /content/scape/examples/toy-example/example.bam \
--output_dir /content/scape/examples/toy-example/"
# Comprobación de directorio.
!ls -lh /content/scape/examples/toy-example/
Samtools es una colección de herramientas de línea de comandos que se utilizan para manipular archivos de alineación de secuencias, específicamente en los formatos SAM (Alineación/Mapa de Secuencias) y BAM (versión comprimida de SAM).
Vamos a instalarlo:
# Instalación de samtools.
!apt-get install -y samtools
# Visualización del archivo ".bam" con samtools.
!samtools view /content/scape/examples/toy-example/example.bam | head -n 10
Samtools permite crear un índice del archivo bam, lo que permite que las herramientas bioinformáticas accedan rápidamente a regiones específicas del genoma dentro de ese archivo. Esto es esencial, por ejemplo, para visualizar alineaciones en exploradores de genomas o para análisis que implican la extracción de regiones específicas.
# Crear un índice
!samtools index /content/scape/examples/toy-example/example.bam
# Lista todos los archivos en el directorio especificado
# La barra vertical se llama pipe (|) es un operador que se utiliza para encadenar comandos,
# permitiendo que la salida de un comando se utilice directamente como entrada para el siguiente
# | grep ".pkl" = filtra la salida del comando anterior y muestra solo las líneas que contienen archivos con la extensión .pkl
!ls -lh /content/scape/examples/toy-example/ | grep ".pkl"
Con SCAPE-APA, es posible inferir cómo la célula utiliza diferentes señales de terminación del ARN, un proceso fundamental para comprender la regulación génica a nivel unicelular. La detección de estos eventos nos permite investigar patrones de expresión más precisos y sus posibles implicaciones en procesos biológicos o enfermedades.
Para ello, se utilizainfer_pa en regiones 3'UTR previamente anotadas.
# Comando para ejecutar el modelo de inferencia y detectar sitios de poliadenilación.
!conda run -n scape_env bash -c \
"unset MPLBACKEND && export MPLBACKEND=Agg && scape infer_pa \
--pkl_input_file /content/scape/examples/toy-example/pkl_input/example.100.1.1.input.pkl \
--output_dir /content/scape/examples/toy-example/"
Ejecución del comando infer_pa Este comando se encarga de inferir eventos de APA a partir de alineaciones de scRNA-seq y regiones UTR previamente anotadas.
#NO CORRAS
python infer_pa.py \
--utr_file /content/scape/examples/toy-example/Mus_musculus.GRCm39.113.utr_annot.csv \
--cb_file /content/scape/examples/toy-example/barcodes.tsv \
--bam_file /content/scape/examples/toy-example/example.bam \
--output_dir /content/scape/examples/toy-example/output/
El comando merge_pa se utiliza para agrupar los eventos APA detectados en pasos anteriores de SCAPE-APA, fusionando los resultados que pertenecen al mismo gen o región UTR.
Durante la inferencia, se pueden detectar múltiples sitios APA en diferentes células o réplicas. La función merge_pa permite fusionar eventos similares, lo que facilita la interpretación. Además, también reduce el ruido estadístico y ayuda en la visualización general de los patrones APA por gen, que pueden usarse en análisis posteriores, como agrupamiento, visualizaciones o asociación con metadatos celulares.
# Con "merge_pa", se recopilan los sitios de poliadenilación inferidos en el paso anterior,
# fusionando los sitios dentro del mismo gen o UTR.
# Genera dos archivos "res.TYPE.pk1", donde "TYPE" puede ser los sitios del gen
# o los UTR fusionados (gen - UTR).
!conda run -n scape_env bash -c \
"unset MPLBACKEND && export MPLBACKEND=Agg && \
scape merge_pa --output_dir /content/scape/examples/toy-example/"
# Lista de archivos en toy-example
!ls -lh /content/scape/examples/toy-example/
# Análisis SCAPE-APA para calcular la duración efectiva de los eventos APA detectados
!conda run -n scape_env bash -c z \
"unset MPLBACKEND && export MPLBACKEND=Agg && \
scape cal_exp_pa_len --output_dir /content/scape/examples/toy-example/"
# Lista de archivos en toy-example
!ls -lh /content/scape/examples/toy-example/
gen_utr_annotation
Pandas es una potente biblioteca para la manipulación y el análisis de datos en Python. Con ella, se puede trabajar con tablas (DataFrames) de forma similar a las hojas de cálculo de Excel o las tablas de SQL. Utilicémosla para analizar los datos.
import pandas as pd
# Carregar a anotação UTR
df_utr = pd.read_csv("/content/scape/examples/toy-example/example_annotation.csv")
# Exibir as primeiras linhas da tabela
df_utr.head()
import matplotlib.pyplot as plt
# Calcular o comprimento de cada UTR
df_utr["length"] = df_utr["end"] - df_utr["start"]
# Plotar um histograma de comprimento
plt.figure(figsize=(8, 5))
plt.hist(df_utr["length"], bins=30, edgecolor='black')
plt.xlabel("Longitud UTR (pb)")
plt.ylabel("Frecuencia")
plt.title("Distribución de la longitud UTR")
plt.show()
# Ejecutar merge_pa
!conda run -n scape_env bash -c \
"unset MPLBACKEND && export MPLBACKEND=Agg && \
scape merge_pa --output_dir /content/scape/examples/toy-example/ \
--utr_merge True"
# Verificar que "prepare_input" funcionó
# Esperar los archivos ".pk1"
import os
# Listar los archivos generados
os.listdir("/content/scape/examples/toy-example/pkl_input/")
# Visualización de parámetros mediante "infer_pa" (res.utr.pkl)
!conda run -n scape_env bash -c \
"unset MPLBACKEND && export MPLBACKEND=Agg && \
python -c 'import pickle; f=open(\"/content/scape/examples/toy-example/res.utr.pkl\", \"rb\"); \
print(pickle.load(f))'"
import matplotlib.pyplot as plt
# Dados do Sítio PA
pa_sites = ["PA1 (2965)", "PA2 (4171)"]
usage_probs = [0.16, 0.84]
# Criar Gráfico de Barras
plt.figure(figsize=(6, 4))
plt.bar(pa_sites, usage_probs, color=['blue', 'red'])
plt.xlabel("Sitios de poliadenilación")
plt.ylabel("Probabilidad de uso")
plt.title("Preferencia de sitios de poliadenilación en el UTR")
plt.ylim(0, 1)
# Mostrar gráfico
plt.show()
# merge_pa
# Revisar el contenido del archivo fusionado
with open("/content/scape/examples/toy-example/res.gene.pkl", "rb") as f:
try:
merged_pa = pickle.load(f)
print(merged_pa)
except EOFError:
print("O arquivo res.gene.pkl está vazio.")
# cal_exp_pa_len
df_exp_len = pd.read_csv("/content/scape/examples/toy-example/cluster_wrt_CB.gene.pa.len.csv")
# Mostrar las primeras líneas
df_exp_len.head()
plt.figure(figsize=(8, 5))
plt.hist(df_exp_len.iloc[:, 1], bins=30, edgecolor='black')
plt.xlabel("Longitud esperada de poliadenilación (pb)")
plt.ylabel("Frecuencia")
plt.title("Distribución de la longitud esperada de PA")
plt.show()
#ex_pa_cnt_mat
df_counts = pd.read_csv("/content/scape/examples/toy-example/res.utr.cnt.tsv.gz", sep="\t")
# Mostrar las primeras líneas
df_counts.head()
plt.figure(figsize=(8, 5))
plt.hist(df_counts.iloc[:, 1], bins=30, edgecolor='black')
plt.xlabel("Número de eventos de poliadenilación")
plt.ylabel("Frecuencia")
plt.title("Distribución de eventos de poliadenilación")
plt.show()