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', ...)
]
}