El proyecto Biopython es una colección de código abierto de herramientas Python no comerciales para biología computacional y bioinformática , creada por una asociación internacional de desarrolladores. [1] [4] [5] Contiene clases para representar secuencias biológicas y anotaciones de secuencias , y es capaz de leer y escribir en una variedad de formatos de archivo. También permite un medio programático para acceder a bases de datos en línea de información biológica , como las del NCBI . Los módulos separados extienden las capacidades de Biopython a la alineación de secuencias , la estructura de proteínas , la genética de poblaciones , la filogenética , los motivos de secuencia y el aprendizaje automático . Biopython es uno de varios proyectos Bio* diseñados para reducir la duplicación de código en biología computacional . [6]
El desarrollo de Biopython comenzó en 1999 y se lanzó por primera vez en julio de 2000. [7] Se desarrolló durante un período de tiempo similar y con objetivos análogos a otros proyectos que agregaron capacidades bioinformáticas a sus respectivos lenguajes de programación, incluidos BioPerl , BioRuby y BioJava . Los primeros desarrolladores del proyecto incluyeron a Jeff Chang, Andrew Dalke y Brad Chapman, aunque más de 100 personas han hecho contribuciones hasta la fecha. [8] En 2007, se estableció un proyecto Python similar, llamado PyCogent . [9]
El alcance inicial de Biopython incluía el acceso, la indexación y el procesamiento de archivos de secuencias biológicas. Si bien este sigue siendo un objetivo principal, en los años siguientes se agregaron módulos que ampliaron su funcionalidad para cubrir áreas adicionales de la biología (consulte Características principales y ejemplos).
A partir de la versión 1.77, Biopython ya no es compatible con Python 2. [10]
Siempre que es posible, Biopython sigue las convenciones utilizadas por el lenguaje de programación Python para que sea más fácil para los usuarios familiarizados con Python. Por ejemplo, los objetos Seq
y SeqRecord
se pueden manipular mediante slicing , de una manera similar a las cadenas y listas de Python. También está diseñado para ser funcionalmente similar a otros proyectos Bio*, como BioPerl. [7]
Biopython es capaz de leer y escribir los formatos de archivos más comunes para cada una de sus áreas funcionales, y su licencia es permisiva y compatible con la mayoría de las otras licencias de software, lo que permite que Biopython se utilice en una variedad de proyectos de software. [5]
Un concepto central en Biopython es la secuencia biológica, y esta se representa mediante la Seq
clase. [11] Un objeto Biopython Seq
es similar a una cadena de Python en muchos aspectos: admite la notación de segmentos de Python, se puede concatenar con otras secuencias y es inmutable. Además, incluye métodos específicos de la secuencia y especifica el alfabeto biológico particular utilizado.
>>> # Este script crea una secuencia de ADN y realiza algunas manipulaciones típicas >>> from Bio.Seq import Seq >>> dna_sequence = Seq ( "AGGCTTCTCGTA" , IUPAC . unambiguous_dna ) >>> dna_sequence Seq('AGGCTTCTCGTA', IUPACUnambiguousDNA()) >>> dna_sequence [ 2 : 7 ] Seq('GCTTC', IUPACUnambiguousDNA()) >>> dna_sequence . reverse_complement () Seq('TACGAGAAGCCT', IUPACUnambiguousDNA()) >>> rna_sequence = dna_sequence . transcribe () >>> rna_sequence Seq('AGGCUUCUCGUA', IUPACUnambiguousRNA()) >>> rna_sequence . traducir () Seq('RLLV', IUPACProtein())
La SeqRecord
clase describe secuencias, junto con información como nombre, descripción y características en forma de SeqFeature
objetos. Cada SeqFeature
objeto especifica el tipo de característica y su ubicación. Los tipos de características pueden ser 'gen', 'CDS' (secuencia codificante), 'repeat_region', 'mobile_element' u otros, y la posición de las características en la secuencia puede ser exacta o aproximada.
>>> # Este script carga una secuencia anotada desde un archivo y visualiza parte de su contenido. >>> from Bio import SeqIO >>> seq_record = SeqIO . read ( "pTC2.gb" , "genbank" ) >>> seq_record . name 'NC_019375' >>> seq_record . description 'Providencia stuartii plasmid pTC2, complete sequence.' >>> seq_record . features [ 14 ] SeqFeature(FeatureLocation(ExactPosition(4516), ExactPosition(5336), strand=1), type='mobile_element') >>> seq_record . seq Seq("GGATTGAATATAACCGACGTGACTGTTACATTTAGGTGGCTAAACCCGTCAAGC...GCC", IUPACAmbiguousDNA())
Biopython puede leer y escribir en varios formatos de secuencias comunes, incluidos FASTA , FASTQ , GenBank, Clustal, PHYLIP y NEXUS . Al leer archivos, la información descriptiva del archivo se utiliza para completar los miembros de las clases de Biopython, como SeqRecord
. Esto permite convertir registros de un formato de archivo a otros.
Los archivos de secuencias muy grandes pueden exceder los recursos de memoria de una computadora, por lo que Biopython ofrece varias opciones para acceder a los registros en archivos grandes. Se pueden cargar completamente en la memoria en estructuras de datos de Python, como listas o diccionarios , lo que proporciona un acceso rápido a costa del uso de memoria. Alternativamente, los archivos se pueden leer desde el disco según sea necesario, con un rendimiento más lento pero con menores requisitos de memoria.
>>> # Este script carga un archivo que contiene múltiples secuencias y guarda cada una en un formato diferente. >>> from Bio import SeqIO >>> genomes = SeqIO . parse ( "salmonella.gb" , "genbank" ) >>> for genome in genomes : ... SeqIO . write ( genome , genome . id + ".fasta" , "fasta" )
A través del módulo Bio.Entrez, los usuarios de Biopython pueden descargar datos biológicos de las bases de datos del NCBI. Cada una de las funciones que ofrece el motor de búsqueda Entrez está disponible a través de las funciones de este módulo, incluidas la búsqueda y la descarga de registros.
>>> # Este script descarga genomas de la base de datos de nucleótidos del NCBI y los guarda en un archivo FASTA. >>> from Bio import Entrez >>> from Bio import SeqIO >>> output_file = open ( "all_records.fasta" , "w" ) >>> Entrez.email = "[email protected]" >>> records_to_download = [ "FO834906.1" , "FO203501.1" ] >>> for record_id in records_to_download : ... handle = Entrez.efetch ( db = " nucleotide " , id = record_id , rettype = " gb " ) ... seqRecord = SeqIO.read ( handle , format = " gb " ) ... handle.close ( ) ... output_file.write ( seqRecord.format ( " fasta " ) )
El módulo Bio.Phylo proporciona herramientas para trabajar con árboles filogenéticos y visualizarlos . Se admiten una variedad de formatos de archivo para lectura y escritura, incluidos Newick , NEXUS y phyloXML . Se admiten manipulaciones y recorridos de árboles comunes a través de los objetos Tree
y Clade
. Los ejemplos incluyen la conversión y cotejo de archivos de árboles, la extracción de subconjuntos de un árbol, el cambio de la raíz de un árbol y el análisis de características de las ramas, como la longitud o la puntuación. [13]
Los árboles con raíz se pueden dibujar en ASCII o usando matplotlib (ver Figura 1), y la biblioteca Graphviz se puede usar para crear diseños sin raíz (ver Figura 2).
El módulo GenomeDiagram proporciona métodos para visualizar secuencias dentro de Biopython. [15] Las secuencias se pueden dibujar en forma lineal o circular (ver Figura 3), y se admiten muchos formatos de salida, incluidos PDF y PNG . Los diagramas se crean creando pistas y luego agregando características de secuencia a esas pistas. Al recorrer las características de una secuencia y usar sus atributos para decidir si se agregan a las pistas del diagrama y cómo, se puede ejercer un gran control sobre la apariencia del diagrama final. Se pueden dibujar enlaces cruzados entre diferentes pistas, lo que permite comparar múltiples secuencias en un solo diagrama.
El módulo Bio.PDB puede cargar estructuras moleculares desde archivos PDB y mmCIF , y se agregó a Biopython en 2003. [16] El Structure
objeto es central para este módulo, y organiza la estructura macromolecular de manera jerárquica: Structure
los objetos contienen Model
objetos que contienen Chain
objetos que contienen Residue
objetos que contienen Atom
objetos. Los residuos y átomos desordenados obtienen sus propias clases, DisorderedResidue
y DisorderedAtom
, que describen sus posiciones inciertas.
Con Bio.PDB, se puede navegar por los componentes individuales de un archivo de estructura macromolecular, como examinar cada átomo de una proteína. Se pueden realizar análisis comunes, como medir distancias o ángulos, comparar residuos y calcular la profundidad de los residuos.
El módulo Bio.PopGen agrega soporte a Biopython para Genepop, un paquete de software para el análisis estadístico de la genética de poblaciones. [17] Esto permite realizar análisis del equilibrio de Hardy-Weinberg , el desequilibrio de ligamiento y otras características de las frecuencias alélicas de una población .
Este módulo también puede realizar simulaciones genéticas de poblaciones utilizando la teoría coalescente con el programa fastsimcoal2. [18]
Muchos de los módulos de Biopython contienen contenedores de línea de comandos para herramientas de uso común, lo que permite utilizar estas herramientas desde Biopython. Estos contenedores incluyen BLAST , Clustal , PhyML, EMBOSS y SAMtools . Los usuarios pueden crear una subclase de una clase contenedora genérica para agregar compatibilidad con cualquier otra herramienta de línea de comandos.
url
.1
.