Biopython - Dizi G / Ç İşlemleri
Biopython, sıraları bir dosyadan (herhangi bir akış) okumak ve dosyaya yazmak için Bio.SeqIO adlı bir modül sağlar. Biyoinformatikte bulunan neredeyse tüm dosya formatlarını destekler. Yazılımın çoğu, farklı dosya formatları için farklı yaklaşımlar sunar. Ancak Biopython, ayrıştırılmış dizi verilerini SeqRecord nesnesi aracılığıyla kullanıcıya sunmak için bilinçli olarak tek bir yaklaşımı izler.
Aşağıdaki bölümde SeqRecord hakkında daha fazla bilgi edinelim.
SeqRecord
Bio.SeqRecord modülü, SeqRecord'un aşağıda verildiği gibi sekansın meta bilgilerini ve sekans verilerini tutmasını sağlar -
seq - Bu gerçek bir dizidir.
id - Verilen dizinin birincil tanımlayıcısıdır. Varsayılan tür dizedir.
isim - Sıranın adıdır . Varsayılan tür dizedir.
açıklama - Dizi hakkında okunabilir bilgileri görüntüler.
ek açıklamalar - Sırayla ilgili ek bilgilerin bulunduğu bir sözlüktür.
SeqRecord aşağıda belirtildiği gibi içe aktarılabilir
from Bio.SeqRecord import SeqRecord
İlerleyen bölümlerde gerçek sıra dosyası kullanarak sıra dosyasını ayrıştırmanın nüanslarını anlayalım.
Sıralı Dosya Biçimlerini Ayrıştırma
Bu bölüm, en popüler iki dizi dosya biçiminin nasıl ayrıştırılacağını açıklar, FASTA ve GenBank.
FAŞTA
FASTAsıra verilerini depolamak için en temel dosya formatıdır. Başlangıçta FAŞTA, Biyoinformatiğin erken evrimi sırasında geliştirilen ve çoğunlukla dizi benzerliğini araştırmak için kullanılan DNA ve proteinin dizi hizalaması için bir yazılım paketidir.
Biopython, örnek bir FASTA dosyası sağlar ve şu adresten erişilebilir: https://github.com/biopython/biopython/blob/master/Doc/examples/ls_orchid.fasta.
Bu dosyayı indirin ve Biopython örnek dizininize şu şekilde kaydedin: ‘orchid.fasta’.
Bio.SeqIO modülü, sıra dosyalarını işlemek için parse () yöntemi sağlar ve aşağıdaki şekilde içe aktarılabilir -
from Bio.SeqIO import parse
parse () yöntemi iki bağımsız değişken içerir, birincisi dosya tanıtıcısı ve ikincisi dosya biçimidir.
>>> 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
>>>
Burada, parse () yöntemi her yinelemede SeqRecord döndüren yinelenebilir bir nesne döndürür. Tekrarlanabilir olması, birçok karmaşık ve kolay yöntem sağlar ve bazı özellikleri görmemize izin verir.
Sonraki()
next () yöntemi, aşağıda verildiği gibi ilk diziyi elde etmek için kullanabileceğimiz, yinelenebilir nesnede bulunan sonraki öğeyi döndürür -
>>> 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
{}
>>>
Burada seq_record.annotations boştur çünkü FAŞTA formatı sıra açıklamalarını desteklemez.
liste anlama
Yinelenebilir nesneyi, aşağıda verilen liste kavrayışını kullanarak listeye dönüştürebiliriz.
>>> 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
>>>
Burada toplam sayımı elde etmek için len yöntemini kullandık. Maksimum uzunluktaki diziyi aşağıdaki gibi alabiliriz -
>>> 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
>>>
Aşağıdaki kodu kullanarak sıralamayı da filtreleyebiliriz -
>>> 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
>>>
Bir SqlRecord nesneleri koleksiyonunu (ayrıştırılmış veriler) dosyaya yazmak, aşağıdaki gibi SeqIO.write yöntemini çağırmak kadar basittir -
file = open("converted.fasta", "w)
SeqIO.write(seq_record, file, "fasta")
Bu yöntem, biçimi aşağıda belirtildiği gibi dönüştürmek için etkili bir şekilde kullanılabilir -
file = open("converted.gbk", "w)
SeqIO.write(seq_record, file, "genbank")
GenBank
Genler için daha zengin bir sekans formatıdır ve çeşitli ek açıklama türleri için alanlar içerir. Biopython, örnek bir GenBank dosyası sağlar ve şu adresten erişilebilir:https://github.com/biopython/biopython/blob/master/Doc/examples/ls_orchid.fasta.
Dosyayı Biopython örnek dizininize indirin ve kaydedin. ‘orchid.gbk’
Biopython tek bir işlev sağladığından, tüm biyoinformatik formatını ayrıştırmak için ayrıştırın. GenBank formatının ayrıştırılması, ayrıştırma yöntemindeki format seçeneğini değiştirmek kadar basittir.
Aynı kod aşağıda verilmiştir -
>>> 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', ...)
]
}