# 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. 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.

## Características y ejemplos
### Secuencias

Un concepto central de Biopython es la secuencia biológica, que aparece representada por la clase Seq. 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.

### 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.

### 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. Estos 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.

### 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.

### 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 realizadas 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.
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. 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. 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. Estos 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. 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.

### 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.