Bioinfo Blog!

blog di bioinformatica e di esperienze di studio all’estero

leggere sequenze con biopython (Bio.SeqIO)

Posted by dalloliogm su settembre 25, 2007

Questo è un piccolo trucco che mi è tornato comodo lavorando con biopython.
A dire la verità, è descritto tale e quale in inglese sul wiki del progetto… ma credo valga la pena segnalarlo.

Parliamo di SeqIO di BioPython e del suo metodo to_dict().

Immaginate di avere un file fasta contenente multiple sequenze, come questo:

>seq1
ACGATCGATGCTAGCTAGCTAGCTAGCTGACGTACGTACGTAGTCAGCTAG
>seq2
CGATCGATCGGGCATTATCGATCTGATCGAGGGAAAAAAAAAAACAGTCAG
>seq3
CGATCGAGCGAGCTCGATCGACGTACGAGGGCGGAGCGATCGATCGATGC

Sarebbe comodo poter creare un dizionario che abbia come chiavi gli id di queste sequenze, e come valori le sequenze stesse:

sequenze = {'seq1': 'ACGATCGATGCTA...', 'seq2': 'CGATCGATCGGGC...', 'seq3': 'CGATCGAGCG'}

Vero?

Con BioPython, è possibile fare una cosa del genere con due righe di codice.
Ecco qui:

from Bio import SeqIO
sequenze = SeqIO.todict(SeqIO.parse(file('file_sequenze.fasta', 'r')), 'fasta')

Spiegamolo un po’ piu’ chiaramente!🙂

Bio.SeqIO è il modulo di biopython dedicato a leggere sequenze e file nei formati piu’ importanti utilizzati in bioinformatica: fasta, genbank, etc..

Il suo funzionamento di base è questo:

from Bio import SeqIO
nomefile = './fastafile.fasta'
fastafile= file(nomefile, 'r')
parser = SeqIO.parse(fastafile)
for sequence in parser:
print sequence.id, sequence.tostring()

Bisogna creare un file handle (con file() o open()) e darlo in pasto a SeqIO.parse per creare un oggetto parser.
Su di questo, possiamo iterare per ottenere qualsiasi attributo ci interessi di ciascuna sequenza contenuta nel file (id, seq, complemento, etc..).

E’ piu’ facile utilizzarlo (consiglio di approfondire sul wiki di biopython) che spiegarlo.

Gli oggetti creati con questo metodo non sono stringhe di sequenza semplici, ma degli oggetti Bio.Seq di biopython.
Potete lavorarci come se fossero delle stringhe normali… ma in piu’ possiedono metodi comodi come reverse_complement, e possono essere dati in pasto ad altri moduli di biopy.

Questo sistema funziona con diversi tipi di formati oltre a fasta: per esempio, genbank e ebml.
Inoltre, in questi giorni sulla mailing list di biopython si sta discutendo su possibili migliorie da apportare a questo modulo per permettergli di gestire grossi file di sequenze in memoria (link).

links:

  1. Progetto biopython: http://biopython.org/wiki/Main_Page
  2. SeqIO tutorial: http://biopython.org/wiki/SeqIO
  3. Discussione recente su SeqIO e file di sequenze enormi: http://lists.open-bio.org/pipermail/biopython/2007-September/003748.html
  4. Super-sintetica descrizione dell’oggetto Seq: http://biopython.org/wiki/Seq

8 Risposte to “leggere sequenze con biopython (Bio.SeqIO)”

  1. E’ un vero peccato che Biopython abbia strumenti utili solo per l’analisi di sequenza (DNA o proteica), per molte cose (leggi: annotazione di geni, per esempio) ho dovuto reinventare la ruota perche’ non c’era niente di utilizzabile.

  2. dalloliogm said

    Gia’, anche se a dire la verita’ a biopython mancano diverse cose.

    Lo stesso codice per tradurre una sequenza, per esempio, non e’ molto facile da maneggiare.

    Insomma ci vuole ancora un bel po’ di lavoro: io mi chiedo perche’ non applichino per prendere dei finanziamenti da google/summer of code o cose del genere.

  3. dalloliogm said

    p.s.: cmq, una osservazione: scrivere codice in python con wordpress e’ una fatica!

  4. Saruman said

    Salve, mi sto avvicinando da qualche tempo alla Bioinformatica. Dove potrei reperire un manuale su come programmare utilizzando le librerie di BioPython. Grazie mille per l’eventuale intessamento.

  5. dalloliogm said

    ciao… purtroppo non c’e’ molto a riguardo: c’e’ il tutorial ufficiale e quello dell’istituto Pasteur che e’ abbastanza completo e contiene qualche diagramma UML (anche se vecchio) che ti potrebbe aiutare a imparare piu’ facilmente.

    Se hai dubbi la cosa migliore e’ chiedere… puoi farlo su questo blog, su openbiosource o sul forum di molecularlab; oppure, se preferisci l’inglese, sulla ml di biopython e su nodalpoint.

  6. dalloliogm said

    Ciao scusami, mi sono accorto solo adesso che sei un programmatore..
    Cmq le risposte dovrebbero andare bene lo stesso: puoi dare un’occhiata anche alla documentazione creata con epydoc (http://biopython.org/DIST/docs/api/public/trees.html) ma tieni presente che biopython e’ ancora un progetto parzialmente incompleto e che a seconda di quello che tu voglia fare, potresti trovare altre librerie piu’ adatte allo scopo (vedi TAMO nel mio ultimo post)

  7. Saruman said

    Ti ringrazio per i suggerimenti dati, se dovessi incontrare dei problemi non mancherò di chiedere. Buona giornata

    Mi son preso la libertà di aggiungere il link a tale blog su quello mio personale. Se ciò crea problemi, non esitate a notificarmelo, grazie.

  8. dalloliogm said

    Figurati!
    Ho visto il tuo post su openbiosource: bene, cerchero’ di darti una mano da li’!
    Grazie anche per il link, qualche collegamento in entrata fa sempre piacere🙂

Sorry, the comment form is closed at this time.

 
%d blogger cliccano Mi Piace per questo: