Biopython: Biología Molecular Computacional en Python
Resumen
Biopython es un conjunto completo de herramientas de Python de libre acceso para la computación biológica. Proporciona funcionalidad para la manipulación de secuencias, entrada/salida de archivos, acceso a bases de datos, bioinformática estructural, filogenética y muchas otras tareas bioinformáticas. La versión actual es Biopython 1.87 (publicada el 30 de marzo de 2026). Soporta Python 3.10-3.14 y PyPy3.10, y requiere NumPy. Biopython 1.87 también aborda CVE-2025-68463 en Bio.Entrez.Parser al analizar archivos no confiables, por lo que se prefiere la versión 1.87+ para flujos de trabajo que analizan XML de Entrez suministrados externamente.
Cuándo Usar Esta Habilidad
Use esta habilidad cuando:
- Trabaje con secuencias biológicas (ADN, ARN o proteínas)
- Lea, escriba o convierta formatos de archivos biológicos (FASTA, GenBank, FASTQ, PDB, mmCIF, etc.)
- Acceda a bases de datos de NCBI (GenBank, PubMed, Proteína, Gen, etc.) a través de Entrez
- Ejecute búsquedas BLAST o analice resultados de BLAST
- Realice alineamientos de secuencias (pareados o múltiples)
- Analice estructuras de proteínas a partir de archivos PDB
- Cree, manipule o visualice árboles filogenéticos
- Encuentre motivos de secuencia o analice patrones de motivos
- Calcule estadísticas de secuencias (contenido GC, peso molecular, temperatura de fusión, etc.)
- Realice tareas de bioinformática estructural
- Trabaje con datos de genética de poblaciones
- Cualquier otra tarea de biología molecular computacional
Capacidades Principales
Biopython está organizado en subpaquetes modulares, cada uno abordando dominios bioinformáticos específicos:
- Manejo de Secuencias - Bio.Seq y Bio.SeqIO para manipulación de secuencias y E/S de archivos
- Análisis de Alineamientos - Bio.Align y Bio.AlignIO para alineamientos pareados y múltiples
- Acceso a Bases de Datos - Bio.Entrez para acceso programático a bases de datos de NCBI
- Operaciones BLAST - Bio.Blast para ejecutar y analizar búsquedas BLAST
- Bioinformática Estructural - Bio.PDB para trabajar con estructuras 3D de proteínas
- Filogenética - Bio.Phylo para manipulación y visualización de árboles filogenéticos
- Características Avanzadas - Motivos, genética de poblaciones, utilidades de secuencias y más
Instalación y Configuración
Instale la versión estable actual de Biopython con una versión explícita para reproducibilidad:
uv pip install "biopython==1.87"
Para el acceso a bases de datos de NCBI, siempre configure su dirección de correo electrónico (requerido por NCBI). Para software reutilizable, establezca un valor estable de Entrez.tool y registre la herramienta/correo electrónico con NCBI. Para límites de velocidad más altos (10 solicitudes/s en lugar de 3 solicitudes/s), lea solo NCBI_API_KEY del entorno; no codifique claves ni cargue variables de entorno no relacionadas:
import os
from Bio import Entrez
Entrez.email = "[email protected]" # requerido — use su correo electrónico real
Entrez.tool = "your_tool_name" # opcional pero recomendado para software reutilizable
# Opcional: regístrese en https://www.ncbi.nlm.nih.gov/account/settings/
if api_key := os.environ.get("NCBI_API_KEY"):
Entrez.api_key = api_key
Uso de Esta Habilidad
Esta habilidad proporciona documentación completa organizada por área de funcionalidad. Cuando trabaje en una tarea, consulte la documentación de referencia relevante:
1. Manejo de Secuencias (Bio.Seq & Bio.SeqIO)
Referencia: references/sequence_io.md
Úselo para:
- Crear y manipular secuencias biológicas
- Leer y escribir archivos de secuencias (FASTA, GenBank, FASTQ, etc.)
- Convertir entre formatos de archivo
- Extraer secuencias de archivos grandes
- Traducción, transcripción y complemento inverso de secuencias
- Trabajar con objetos SeqRecord
Ejemplo rápido:
from Bio import SeqIO
# Leer secuencias de un archivo FASTA
for record in SeqIO.parse("sequences.fasta", "fasta"):
print(f"{record.id}: {len(record.seq)} pb")
# Convertir GenBank a FASTA
SeqIO.convert("input.gb", "genbank", "output.fasta", "fasta")
2. Análisis de Alineamientos (Bio.Align & Bio.AlignIO)
Referencia: references/alignment.md
Úselo para:
- Alineamiento pareado de secuencias (global y local)
- Leer y escribir alineamientos múltiples
- Usar matrices de sustitución (BLOSUM, PAM)
- Calcular estadísticas de alineamiento
- Personalizar parámetros de alineamiento
Ejemplo rápido:
from Bio import Align
# Alineamiento pareado
aligner = Align.PairwiseAligner()
aligner.mode = 'global'
alignments = aligner.align("ACCGGT", "ACGGT")
print(alignments[0])
3. Acceso a Bases de Datos (Bio.Entrez)
Referencia: references/databases.md
Úselo para:
- Buscar bases de datos de NCBI (PubMed, GenBank, Proteína, Gen, etc.)
- Descargar secuencias y registros
- Obtener información de publicaciones
- Encontrar registros relacionados entre bases de datos
- Descarga por lotes con límites de velocidad adecuados
Ejemplo rápido:
from Bio import Entrez
Entrez.email = "[email protected]"
# Buscar en PubMed
handle = Entrez.esearch(db="pubmed", term="biopython", retmax=10)
results = Entrez.read(handle)
handle.close()
print(f"Se encontraron {results['Count']} resultados")
4. Operaciones BLAST (Bio.Blast)
Referencia: references/blast.md
Úselo para:
- Ejecutar búsquedas BLAST a través de servicios web de NCBI
- Ejecutar búsquedas BLAST locales
- Analizar la salida XML de BLAST
- Filtrar resultados por valor E o identidad
- Extraer secuencias de coincidencias
Ejemplo rápido:
from Bio.Blast import NCBIWWW, NCBIXML
# Ejecutar búsqueda BLAST
result_handle = NCBIWWW.qblast("blastn", "nt", "ATCGATCGATCG")
blast_record = NCBIXML.read(result_handle)
# Mostrar las mejores coincidencias
for alignment in blast_record.alignments[:5]:
print(f"{alignment.title}: Valor-E={alignment.hsps[0].expect}")
5. Bioinformática Estructural (Bio.PDB)
Referencia: references/structure.md
Úselo para:
- Analizar archivos de estructura PDB y mmCIF
- Navegar la jerarquía de estructura de proteínas (SMCRA: Estructura/Modelo/Cadena/Residuo/Átomo)
- Calcular distancias, ángulos y diedros
- Asignación de estructura secundaria (DSSP)
- Superposición de estructuras y cálculo de RMSD
- Extraer secuencias de estructuras
Ejemplo rápido:
from Bio.PDB import PDBParser
# Analizar estructura
parser = PDBParser(QUIET=True)
structure = parser.get_structure("1crn", "1crn.pdb")
# Calcular distancia entre carbonos alfa
chain = structure[0]["A"]
distance = chain[10]["CA"] - chain[20]["CA"]
print(f"Distancia: {distance:.2f} Å")
6. Filogenética (Bio.Phylo)
Referencia: references/phylogenetics.md
Úselo para:
- Leer y escribir árboles filogenéticos (Newick, NEXUS, phyloXML)
- Construir árboles a partir de matrices de distancia o alineamientos
- Manipulación de árboles (poda, re-enraizamiento, escalonamiento)
- Calcular distancias filogenéticas
- Crear árboles de consenso
- Visualizar árboles
Ejemplo rápido:
from Bio import Phylo
# Leer y visualizar árbol
tree = Phylo.read("tree.nwk", "newick")
Phylo.draw_ascii(tree)
# Calcular distancia
distance = tree.distance("Species_A", "Species_B")
print(f"Distancia: {distance:.3f}")
7. Características Avanzadas
Referencia: references/advanced.md
Úselo para:
- Motivos de secuencia (Bio.motifs) - Encontrar y analizar patrones de motivos
- Genética de poblaciones (Bio.PopGen) - Archivos GenePop, cálculos de Fst, pruebas de Hardy-Weinberg
- Utilidades de secuencias (Bio.SeqUtils) - Contenido GC, temperatura de fusión, peso molecular, análisis de proteínas
- Análisis de restricción (Bio.Restriction) - Encontrar sitios de enzimas de restricción
- Agrupamiento (Bio.Cluster) - Agrupamiento K-means y jerárquico
- Diagramas genómicos (GenomeDiagram) - Visualización de características genómicas
Ejemplo rápido:
from Bio.SeqUtils import gc_fraction, molecular_weight
from Bio.Seq import Seq
seq = Seq("ATCGATCGATCG")
print(f"Contenido GC: {gc_fraction(seq):.2%}")
print(f"Peso molecular: {molecular_weight(seq, seq_type='DNA'):.2f} g/mol")
Pautas Generales de Flujo de Trabajo
Lectura de Documentación
Cuando un usuario pregunta sobre una tarea específica de Biopython:
- Identifique el módulo relevante según la descripción de la tarea
- Lea el archivo de referencia apropiado usando la herramienta Read
- Extraiga patrones de código relevantes y adáptelos a las necesidades específicas del usuario
- Combine múltiples módulos cuando la tarea lo requiera
Ejemplos de patrones de búsqueda para archivos de referencia:
# Encontrar información sobre funciones específicas
rg -n "SeqIO.parse" references/sequence_io.md
# Encontrar ejemplos de tareas específicas
rg -n "BLAST" references/blast.md
# Encontrar información sobre conceptos específicos
rg -n "alignment" references/alignment.md
Escribir Código Biopython
Siga estos principios al escribir código Biopython:
-
Importe módulos explícitamente
from Bio import SeqIO, Entrez from Bio.Seq import Seq -
Establezca el correo electrónico de Entrez al usar bases de datos de NCBI; cargue solo
NCBI_API_KEYdel entorno si está presenteimport os from Bio import Entrez Entrez.email = "[email protected]" Entrez.tool = "your_tool_name" if api_key := os.environ.get("NCBI_API_KEY"): Entrez.api_key = api_key -
Use formatos de archivo apropiados - Verifique qué formato se adapta mejor a la tarea
# Formatos comunes: "fasta", "genbank", "fastq", "clustal", "phylip" -
Maneje archivos correctamente - Cierre los manejadores después de usarlos o use administradores de contexto
with open("file.fasta") as handle: records = SeqIO.parse(handle, "fasta") -
Use iteradores para archivos grandes - Evite cargar todo en la memoria
for record in SeqIO.parse("large_file.fasta", "fasta"): # Procesar un registro a la vez -
Maneje errores con gracia - Las operaciones de red y el análisis de archivos pueden fallar
from urllib.error import HTTPError try: handle = Entrez.efetch(db="nucleotide", id=accession) except HTTPError as e: print(f"Error: {e}")
Patrones Comunes
Patrón 1: Obtener Secuencia de GenBank
from Bio import Entrez, SeqIO
Entrez.email = "[email protected]"
# Obtener secuencia
handle = Entrez.efetch(db="nucleotide", id="EU490707", rettype="gb", retmode="text")
record = SeqIO.read(handle, "genbank")
handle.close()
print(f"Descripción: {record.description}")
print(f"Longitud de la secuencia: {len(record.seq)}")
Patrón 2: Pipeline de Análisis de Secuencias
from Bio import SeqIO
from Bio.SeqUtils import gc_fraction
for record in SeqIO.parse("sequences.fasta", "fasta"):
# Calcular estadísticas
gc = gc_fraction(record.seq)
length = len(record.seq)
# Encontrar ORFs, traducir, etc.
protein = record.seq.translate()
print(f"{record.id}: {length} pb, GC={gc:.2%}")
Patrón 3: BLAST y Obtener las Mejores Coincidencias
from Bio.Blast import NCBIWWW, NCBIXML
from Bio import Entrez, SeqIO
Entrez.email = "[email protected]"
# Ejecutar BLAST
result_handle = NCBIWWW.qblast("blastn", "nt", sequence)
blast_record = NCBIXML.read(result_handle)
# Obtener accesiones de las mejores coincidencias
accessions = [aln.accession for aln in blast_record.alignments[:5]]
# Obtener secuencias
for acc in accessions:
handle = Entrez.efetch(db="nucleotide", id=acc, rettype="fasta", retmode="text")
record = SeqIO.read(handle, "fasta")
handle.close()
print(f">{record.description}")
Patrón 4: Construir Árbol Filogenético a partir de Secuencias
from Bio import AlignIO, Phylo
from Bio.Phylo.TreeConstruction import DistanceCalculator, DistanceTreeConstructor
# Leer alineamiento
alignment = AlignIO.read("alignment.fasta", "fasta")
# Calcular distancias
calculator = DistanceCalculator("identity")
dm = calculator.get_distance(alignment)
# Construir árbol
constructor = DistanceTreeConstructor()
tree = constructor.nj(dm)
# Visualizar
Phylo.draw_ascii(tree)
Mejores Prácticas
- Siempre lea la documentación de referencia relevante antes de escribir código
- Use grep para buscar en archivos de referencia funciones o ejemplos específicos
- Valide los formatos de archivo antes de analizarlos
- Maneje datos faltantes con gracia - No todos los registros tienen todos los campos
- Almacene en caché los datos descargados - No descargue repetidamente las mismas secuencias
- Respete los límites de velocidad de NCBI - Use claves API, valores registrados de herramienta/correo electrónico para software reutilizable, e historial/agrupación de Entrez para trabajos grandes
- Pruebe con conjuntos de datos pequeños antes de procesar archivos grandes
- Mantenga Biopython actualizado para obtener las últimas funciones y correcciones de errores
- Use tablas de códigos genéticos apropiadas para la traducción
- Documente los parámetros de análisis para reproducibilidad
Solución de Problemas Comunes
Problema: "No handlers could be found for logger 'Bio.Entrez'"
Solución: Esto es solo una advertencia. Establezca Entrez.email para suprimirla.
Problema: "HTTP Error 400" de NCBI
Solución: Verifique que los IDs/accesiones sean válidos y estén formateados correctamente.
Problema: "ValueError: EOF" al analizar archivos
Solución: Verifique que el formato del archivo coincida con la cadena de formato especificada.
Problema: El alineamiento falla con "sequences are not the same length"
Solución: Asegúrese de que las secuencias estén alineadas antes de usar AlignIO o MultipleSeqAlignment.
Problema: Las búsquedas BLAST son lentas
Solución: Use BLAST local para búsquedas a gran escala, o almacene en caché los resultados.
Problema: Advertencias del analizador PDB
Solución: Use PDBParser(QUIET=True) para suprimir advertencias, o investigue la calidad de la estructura.
Problema: ImportError para Bio.HMM, Bio.MarkovModel o Bio.Application
Solución: Estos módulos fueron eliminados en Biopython 1.86. Use hmmlearn para HMMs y el módulo estándar subprocess en lugar de los envoltorios CLI de Bio.Application.
Problema: PairwiseAligner devuelve menos alineamientos después de actualizar a 1.86+
Solución: La puntuación de brecha predeterminada cambió de 0 a -1 en 1.86, eliminando alineamientos de empate triviales. Establezca aligner.gap_score = 0 para restaurar el comportamiento anterior si es necesario (consulte references/alignment.md).
Recursos Adicionales
- Documentación Oficial: https://biopython.org/docs/latest/
- Tutorial: https://biopython.org/docs/latest/Tutorial/
- Cookbook: https://biopython.org/docs/latest/Tutorial/ (ejemplos avanzados)
- GitHub: https://github.com/biopython/biopython