Biopython - operacje we / wy sekwencji

Biopython zapewnia moduł Bio.SeqIO do odczytu i zapisu sekwencji odpowiednio zi do pliku (dowolnego strumienia). Obsługuje prawie wszystkie formaty plików dostępne w bioinformatyce. Większość oprogramowania zapewnia różne podejście do różnych formatów plików. Jednak Biopython świadomie podąża za jednym podejściem, aby przedstawić użytkownikowi przeanalizowane dane sekwencji za pośrednictwem obiektu SeqRecord.

Dowiedzmy się więcej o SeqRecord w następnej sekcji.

SeqRecord

Moduł Bio.SeqRecord zapewnia SeqRecord do przechowywania metainformacji o sekwencji, a także samych danych sekwencji, jak podano poniżej -

  • seq - To jest rzeczywista sekwencja.

  • id - Jest to podstawowy identyfikator danej sekwencji. Typ domyślny to ciąg.

  • name - jest to nazwa sekwencji. Typ domyślny to ciąg.

  • opis - Wyświetla czytelne dla człowieka informacje o sekwencji.

  • adnotacje - jest to słownik dodatkowych informacji o sekwencji.

SeqRecord można zaimportować w sposób określony poniżej

from Bio.SeqRecord import SeqRecord

Zrozummy niuanse analizy pliku sekwencji przy użyciu rzeczywistego pliku sekwencji w następnych sekcjach.

Parsowanie formatów plików sekwencji

Ta sekcja wyjaśnia, jak analizować dwa najpopularniejsze formaty plików sekwencji, FASTA i GenBank.

FASTA

FASTAto najbardziej podstawowy format pliku do przechowywania danych sekwencji. Pierwotnie FASTA jest pakietem oprogramowania do dopasowywania sekwencji DNA i białek opracowanym podczas wczesnej ewolucji bioinformatyki i używanym głównie do wyszukiwania podobieństwa sekwencji.

Biopython udostępnia przykładowy plik FASTA, do którego można uzyskać dostęp pod adresem https://github.com/biopython/biopython/blob/master/Doc/examples/ls_orchid.fasta.

Pobierz i zapisz ten plik w katalogu próbek Biopython jako ‘orchid.fasta’.

Moduł Bio.SeqIO zapewnia metodę parse () do przetwarzania plików sekwencji i można go importować w następujący sposób -

from Bio.SeqIO import parse

parse () zawiera dwa argumenty, pierwszy to uchwyt pliku, a drugi to format pliku.

>>> file = open('path/to/biopython/sample/orchid.fasta') 
>>> for record in parse(file, "fasta"): 
...    print(record.id) 
... 
gi|2765658|emb|Z78533.1|CIZ78533 
gi|2765657|emb|Z78532.1|CCZ78532 
.......... 
.......... 
gi|2765565|emb|Z78440.1|PPZ78440 
gi|2765564|emb|Z78439.1|PBZ78439 
>>>

Tutaj metoda parse () zwraca iterowalny obiekt, który zwraca SeqRecord przy każdej iteracji. Będąc iterowalnym, zapewnia wiele wyrafinowanych i łatwych metod oraz pozwala zobaczyć niektóre funkcje.

Kolejny()

metoda next () zwraca następny element dostępny w iterowalnym obiekcie, którego możemy użyć do uzyskania pierwszej sekwencji, jak podano poniżej -

>>> first_seq_record = next(SeqIO.parse(open('path/to/biopython/sample/orchid.fasta'),'fasta')) 
>>> first_seq_record.id 'gi|2765658|emb|Z78533.1|CIZ78533' 
>>> first_seq_record.name 'gi|2765658|emb|Z78533.1|CIZ78533' 
>>> first_seq_record.seq Seq('CGTAACAAGGTTTCCGTAGGTGAACCTGCGGAAGGATCATTGATGAGACCGTGG...CGC', SingleLetterAlphabet()) 
>>> first_seq_record.description 'gi|2765658|emb|Z78533.1|CIZ78533 C.irapeanum 5.8S rRNA gene and ITS1 and ITS2 DNA' 
>>> first_seq_record.annotations 
{} 
>>>

Tutaj seq_record.annotations jest pusty, ponieważ format FASTA nie obsługuje adnotacji sekwencji.

rozumienie listy

Możemy przekonwertować iterowalny obiekt na listę, używając funkcji rozumienia list, jak podano poniżej

>>> seq_iter = SeqIO.parse(open('path/to/biopython/sample/orchid.fasta'),'fasta') 
>>> all_seq = [seq_record for seq_record in seq_iter] >>> len(all_seq) 
94 
>>>

Tutaj użyliśmy metody len, aby uzyskać całkowitą liczbę. Możemy otrzymać sekwencję o maksymalnej długości w następujący sposób -

>>> seq_iter = SeqIO.parse(open('path/to/biopython/sample/orchid.fasta'),'fasta') 
>>> max_seq = max(len(seq_record.seq) for seq_record in seq_iter) 
>>> max_seq 
789 
>>>

Możemy również filtrować sekwencję za pomocą poniższego kodu -

>>> seq_iter = SeqIO.parse(open('path/to/biopython/sample/orchid.fasta'),'fasta') 
>>> seq_under_600 = [seq_record for seq_record in seq_iter if len(seq_record.seq) < 600] 
>>> for seq in seq_under_600: 
...    print(seq.id) 
... 
gi|2765606|emb|Z78481.1|PIZ78481 
gi|2765605|emb|Z78480.1|PGZ78480 
gi|2765601|emb|Z78476.1|PGZ78476 
gi|2765595|emb|Z78470.1|PPZ78470 
gi|2765594|emb|Z78469.1|PHZ78469 
gi|2765564|emb|Z78439.1|PBZ78439 
>>>

Zapisanie kolekcji obiektów SqlRecord (przeanalizowanych danych) do pliku jest tak proste, jak wywołanie metody SeqIO.write, jak poniżej -

file = open("converted.fasta", "w) 
SeqIO.write(seq_record, file, "fasta")

Tej metody można skutecznie użyć do konwersji formatu określonego poniżej -

file = open("converted.gbk", "w) 
SeqIO.write(seq_record, file, "genbank")

GenBank

Jest to bogatszy format sekwencji dla genów i zawiera pola dla różnego rodzaju adnotacji. Biopython udostępnia przykładowy plik GenBank, do którego można uzyskać dostęp pod adresemhttps://github.com/biopython/biopython/blob/master/Doc/examples/ls_orchid.fasta.

Pobierz i zapisz plik w katalogu próbek Biopython jako ‘orchid.gbk’

Ponieważ Biopython zapewnia jedną funkcję, parsuj, aby przeanalizować cały format bioinformatyczny. Przetwarzanie formatu GenBank jest tak proste, jak zmiana opcji formatu w metodzie analizy.

Kod do tego samego podano poniżej -

>>> from Bio import SeqIO 
>>> from Bio.SeqIO import parse 
>>> seq_record = next(parse(open('path/to/biopython/sample/orchid.gbk'),'genbank')) 
>>> seq_record.id 
'Z78533.1' 
>>> seq_record.name 
'Z78533' 
>>> seq_record.seq Seq('CGTAACAAGGTTTCCGTAGGTGAACCTGCGGAAGGATCATTGATGAGACCGTGG...CGC', IUPACAmbiguousDNA()) 
>>> seq_record.description 
'C.irapeanum 5.8S rRNA gene and ITS1 and ITS2 DNA' 
>>> seq_record.annotations {
   'molecule_type': 'DNA', 
   'topology': 'linear', 
   'data_file_division': 'PLN', 
   'date': '30-NOV-2006', 
   'accessions': ['Z78533'], 
   'sequence_version': 1, 
   'gi': '2765658', 
   'keywords': ['5.8S ribosomal RNA', '5.8S rRNA gene', 'internal transcribed spacer', 'ITS1', 'ITS2'], 
   'source': 'Cypripedium irapeanum', 
   'organism': 'Cypripedium irapeanum', 
   'taxonomy': [
      'Eukaryota', 
      'Viridiplantae', 
      'Streptophyta', 
      'Embryophyta', 
      'Tracheophyta', 
      'Spermatophyta', 
      'Magnoliophyta', 
      'Liliopsida', 
      'Asparagales', 
      'Orchidaceae', 
      'Cypripedioideae', 
      'Cypripedium'], 
   'references': [
      Reference(title = 'Phylogenetics of the slipper orchids (Cypripedioideae:
      Orchidaceae): nuclear rDNA ITS sequences', ...), 
      Reference(title = 'Direct Submission', ...)
   ]
}