Biopython
Biopython | ||
---|---|---|
Desarrollador(es) | ||
? | ||
Información general | ||
Apareció en | 2000 | |
Diseñado por | Chapman B, Chang J | |
Última versión estable | 1.65 | |
Última versión en pruebas | (2014 de diciembre del 17 (2006 años, 11 meses y -1972 días)) | |
Sistema operativo | Multiplataforma | |
Licencia | Licencia Biopython | |
El proyecto 'Biopython' es el nombre que recibe una serie de aplicaciones y programas informáticos pensados para cuantificar y hacer cálculos con datos biológicos, programados por una comunidad internacional. Su objetivo principal es el de desarrollar el mayor número posible de bibliotecas informáticas basadas en el lenguaje de programación Python, que tengan aplicaciones bioinformáticas y que estén disponibles para un público lo más amplio posible.[1][2] Esto es posible gracias a una licencia de código abierto específica, llamada licencia Biopython, que es muy poco restrictiva.
Biophython permite representar secuencias biológicas y anotaciones de genomas y es capaz de comunicar con las bases de datos biológicos en línea del NCBI para hacer cálculos. Además, gracias a diversos módulos, puede ser utilizada para trabajar sobre proyectos relativos al alineamiento de secuencias, cálculo de estructuras proteicas, genética de poblaciones, filogenética e inteligencia artificial.
Historia
El desarrollo de Biopython comenzó en 1999 y su primera versión fue publicada en julio de 2000. Fue desarrollado en un periodo de tiempo y con objetivos similares a los de otras aplicaciones bioinformáticas, como BioPerl, BioRuby y BioJava. Entre los primeros desarrolladores se cuentan Jeff Chang, Andrew Dalke and Brad Chapman, aunque más de 100 colaboradores han contribuido al proyecto hasta la fecha. En 2007 comienza un proyecto similar llamado PyCogent.
Diseño
Siempre que es posible, en las aplicaciones Biopython se usa el lenguaje de programación Python, de manera que sea más fácil de utilizar para los usuarios de este lenguaje. Biopython es capaz de leer y modificar la mayoría de formatos habituales para cada una de sus áreas de actividad, y su licencia es compatible con la mayoría de licencias de código abierto, de manera que puede ser utilizado para crear una gran variedad de proyectos informáticos.[2]
Características y ejemplos
Secuencias
Un concepto central de Biopython es la secuencia biológica, que aparece representada por la clase Seq
.[3] El objeto Seq
de Biopython es similar a las cadenas de caracteres Python en muchos aspectos: es capaz de sostener la notación de secciones de Python, puede ser concatenada con otras cadenas de caracteres y es inmutable. Además, es capaz incluir diferentes métodos específicos para secuencias determinadas y permite elegir el alfabeto biológico que se quiere utilizar.
>>> # Este código crea una secuencia de ADN y realiza ciertas manipulaciones típicas.
>>> from Bio.Seq import Seq
>>> from Bio.Alphabet import IUPAC
>>> 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.translate()
Seq('RLLV', IUPACProtein())
Anotación de secuencias genéticas
La clase SeqRecord
describe secuencias genéticas, junto con información como su nombre, descripción y características bajo la forma de objetos SeqFeature
. Cada objeto SeqFeature
especifica el tipo de característica y su ubicación. Los tipos de característica posible son "gene" (gen), "CDS" (secuencia codificante), "repeat_region" (repetición de la región), "mobile element" (elemento móvil) u otros, y la posición de estas características en la secuencia puede ser exacta o aproximativa.
>>> # Este código carga una secuencia anotada a partir de un archivo y muestra algunos de sus contenidos.
>>> 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())
Mecanismos de entrada y de salida
Biopython es capaz de leer y escribir un cierto número de formatos comunes de secuencias genéticas, incluyendo FASTA, FASTQ, GenBank, Clustal, PHYLIP y NEXUS. Cuando lee archivos, la información descriptiva del archivo puede ser utilizada para completar los miembros de las clases Biopython, tales como SeqRecord
. Esto permite la conversión de archivos de un formato a otro.
Los archivos de secuencias de gran tamaño pueden exceder los límites de recursos memoria de un ordenador, así que Biopython ofrece varias opciones para acceder a los registros de grandes archivos. Éstos pueden ser cargados directamente en la memoria de las estructuras de datos de Python, como listas o diccionarios, proporcionando un acceso rápido a ellos aunque más caro en memoria. Por otra parte, los archivos pueden ser leídos a partir del disco duro si es necesario, con un rendimiento más lento pero con requerimientos de memoria más reducidos.
>>> # Este código carga un archivo que contiene múltiples secuencias y guarda cada una de ellas 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')
Acceso a bases de datos en línea
Gracias al módulo Bio.Entrez, los usuarios de Biopython pueden descargar datos biológicos a partir de las bases de datos NCBI. Cada una de las funciones proporcionadas por el motor de búsqueda Entrez está disponible a través de las funciones de este módulo, incluyendo la búsqueda y descarga de registros.
>>> # Este código descarga genomas de la base de datos de nucleótidos del NBIC y los guarda en un archivo FASTA.
>>> from Bio import Entrez
>>> from Bio import SeqIO
>>> output_file = open('all_records.fasta', "w")
>>> Entrez.email = 'my_email@example.com'
>>> 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'))
Filogenia
El módulo Bio.Phylo proporciona herramientas para visualizar y trabajar con árboles filogenéticos. Es posible leer y grabar varios tipos de formato, incluyendo los formatos Newick, NEXUS y phyloXML. Las manipulaciones habituales y transversales pueden ser realizdas gracias a los objetos Tree
y Clade
. Por ejemplo, se puede convertir y fusionar archivos de árbol, extraer subconjuntos de un árbol, cambiar las raíces de un árbol y analizar características de las ramas tales como su longitud o su puntuación.[5]
Los árboles enraizados pueden ser dibujados en formato ASCII o usando matplotlib (ver Figura 1), y la biblioteca Graphviz puede ser utilizada para dibujar presentaciones sin enraizar (ver Figura 2).
Diagramas de genoma
El módulo GenomeDiagram proporciona métodos para visualizar secuencias en Biopython.[7] Las secuencias pueden ser dibujadas en una forma linear o circular (ver Figura 3), y varios formatos de salida son posibles, incluyendo pdfs y pngs. Los diagramas son creados haciendo pistas y luego añadiendo las características de las secuencias en esas pistas. Si se hace un bucle con las características de cada secuencia y se usan sus atributos para decidir cómo y por qué se añaden a las pistas del diagrama, se puede ejercer un control preciso sobre la apariencia final del diagrama. También se pueden dibujar enlaces entre las diferentes pistas, lo cual permite comparar múltiples secuencias en un solo diagrama.
Estructura macromolecular
El módulo Bio.PDB permite cargar estructuras moleculares a partir de archivos tipo PDB y mmCIF, y fue añadido a Biopython en 2003.[8] El objeto Structure
es central en este módulo, y organiza la estructura macromolecular de manera jerárquica: los objetos Structure
objects contienen objetos Model
. Éstos a su vez contienen objetos Chain
, que contienen objetos Residue
, que contienen objetos Atom
. Los átomos y residuos desordenados tienen sus propias clases, DisorderedResidue
y DisorderedAtom
, que describen sus posiciones imprecisas.
Usando Bio.PDB, los usuarios pueden navegar entre los componentes individuales de un archivo de estructura macromolecular, pudiendo examinar cada átomo de la proteína. También se pueden realizar los análisis habituales, como medir distancias o ángulos, comparar residuos y calcular la profundidad de los residuos.
Genética de poblaciones
El módulo Bio.Popgen añade soporte a Biopython para Genepop, un paquete informático para el análisis estadístico de genética de poblaciones.[9] Esto permite hacer análisis basados en el Equilibrio de Hardy-Weinberger, 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 de genética de poblaciones utilizando la teoría de la coalescencia junto con el programa fastimcoal2.[10]
Controladores wrapper para herramientas de líneas de comandos
Muchos de los módulos de Biopython contienen controladores wrapper de líneas de comandos para las herramientas más usadas, de manera que estas herramientas puedan ser usadas en el interior de Biopython. Estos controladores incluyen BLAST, Clustal, PhyML, EMBOSS y SAMtools. Los usuarios pueden subclasificar un controlador wrapper genérico para añadir soporte para cualquier otra herramienta de líneas de comandos.
Véase también
Referencias
- ↑ Cock, Peter JA; Antao, Tiago; Chang, Jeffrey T; Chapman, Brad A; Cox, Cymon J; Dalke, Andrew; Friedberg, Iddo; Hamelryck, Thomas; Kauff, Frank; Wilczynski, Bartek; de Hoon, Michiel JL (20 de marzo de 2009). «Biopython: freely available Python tools for computational molecular biology and bioinformatics». Bioinformatics (en inglés) 25 (11): 1422-3. PMC 2682512. PMID 19304878. doi:10.1093/bioinformatics/btp163. Consultado el 4 de enero de 2015.
- ↑ a b Ver la página web de Biopython para buscar más artículos académicos que describen Biopython, y una lista de más de cien publicaciones que emplean o citan Biopython.
- ↑ Chang, Jeff; Chapman, Brad; Friedberg, Iddo; Hamelryck, Thomas; de Hoon, Michiel; Cock, Peter; Antao, Tiago; Talevich, Eric et al. (29 de mayo de 2014). «Biopython Tutorial and Cookbook». Consultado el 4 de enero de 2015.
- ↑ Zmasek, Christian M; Zhang, Qing; Ye, Yuzhen; Godzik, Adam (24 de octubre de 2007). «Surprising complexity of the ancestral apoptosis network». Genome Biology (en inglés) 8 (10). doi:10.1186/gb-2007-8-10-r226. Consultado el 9 de septiembre de 2014.
- ↑ Talevich, Eric; Invergo, Brandon M; Cock, Peter JA; Chapman, Brad A (21 de agosto de 2012). «Bio.Phylo: A unified toolkit for processing, analyzing and visualizing phylogenetic trees in Biopython». BMC Bioinformatics (en inglés) 13 (209). doi:10.1186/1471-2105-13-209. Consultado el 9 de septiembre de 2014.
- ↑ NCBI fechaacceso=10 de septiembre de 2014 (ed.). «Klebsiella pneumoniae strain KPS77 plasmid pKPS77, complete sequence» (en inglés).
- ↑ Pritchard, Leighton; White, Jennifer A; Birch, Paul RJ; Toth, Ian K (marzo de 2006). «GenomeDiagram: a python package for the visualization of large-scale genomic data». Bioinformatics (en inglés) 22 (5): 616-617. doi:10.1093/bioinformatics/btk021.
- ↑ Hamelryck, Thomas; Manderick, Bernard (10 de mayo de 2003). «PDB file parser and structure class implemented in Python». Bioinformatics (en inglés) 19 (17). doi:10.1093/bioinformatics/btg299. Consultado el 10 de septiembre de 2014.
- ↑ Rousset, François (enero de 2008). «GENEPOP'007: a complete re-implementation of the GENEPOP software for Windows and Linux». Molecular Ecology Resources (en inglés) 8. doi:10.1111/j.1471-8286.2007.01931.x. Consultado el 11 de septiembre de 2014.
- ↑ Excoffier, Laurent; Foll, Matthieu (1 de marzo de 2011). «fastsimcoal: a continuous-time coalescent simulator of genomic diversity under arbitrarily complex evolutionary scenarios». Bioinformatics (en inglés) 27 (9). doi:10.1093/bioinformatics/btr124. Consultado el 11 de septiembre de 2014.