Biopython - BLAST'a Genel Bakış
BLAST şu anlama gelir: Basic Local Alignment Search Tool. Biyolojik diziler arasındaki benzerlik bölgelerini bulur. Biopython, NCBI BLAST işleminin üstesinden gelmek için Bio.Blast modülü sağlar. BLAST'ı yerel bağlantıda veya İnternet bağlantısı üzerinden çalıştırabilirsiniz.
Aşağıdaki bölümde bu iki bağlantıyı kısaca anlayalım -
İnternet üzerinden çalışıyor
Biopython, BLAST'ın çevrimiçi sürümünü çağırmak için Bio.Blast.NCBIWWW modülü sağlar. Bunu yapmak için aşağıdaki modülü içe aktarmamız gerekiyor -
>>> from Bio.Blast import NCBIWWW
NCBIWW modülü, BLAST çevrimiçi sürümünü sorgulamak için qblast işlevi sağlar, https://blast.ncbi.nlm.nih.gov/Blast.cgi. qblast, çevrimiçi sürüm tarafından desteklenen tüm parametreleri destekler.
Bu modül hakkında herhangi bir yardım almak için aşağıdaki komutu kullanın ve özellikleri anlayın -
>>> help(NCBIWWW.qblast)
Help on function qblast in module Bio.Blast.NCBIWWW:
qblast(
program, database, sequence,
url_base = 'https://blast.ncbi.nlm.nih.gov/Blast.cgi',
auto_format = None,
composition_based_statistics = None,
db_genetic_code = None,
endpoints = None,
entrez_query = '(none)',
expect = 10.0,
filter = None,
gapcosts = None,
genetic_code = None,
hitlist_size = 50,
i_thresh = None,
layout = None,
lcase_mask = None,
matrix_name = None,
nucl_penalty = None,
nucl_reward = None,
other_advanced = None,
perc_ident = None,
phi_pattern = None,
query_file = None,
query_believe_defline = None,
query_from = None,
query_to = None,
searchsp_eff = None,
service = None,
threshold = None,
ungapped_alignment = None,
word_size = None,
alignments = 500,
alignment_view = None,
descriptions = 500,
entrez_links_new_window = None,
expect_low = None,
expect_high = None,
format_entrez_query = None,
format_object = None,
format_type = 'XML',
ncbi_gi = None,
results_file = None,
show_overview = None,
megablast = None,
template_type = None,
template_length = None
)
BLAST search using NCBI's QBLAST server or a cloud service provider.
Supports all parameters of the qblast API for Put and Get.
Please note that BLAST on the cloud supports the NCBI-BLAST Common
URL API (http://ncbi.github.io/blast-cloud/dev/api.html).
To use this feature, please set url_base to 'http://host.my.cloud.service.provider.com/cgi-bin/blast.cgi' and
format_object = 'Alignment'. For more details, please see 8. Biopython – Overview of BLAST
https://blast.ncbi.nlm.nih.gov/Blast.cgi?PAGE_TYPE = BlastDocs&DOC_TYPE = CloudBlast
Some useful parameters:
- program blastn, blastp, blastx, tblastn, or tblastx (lower case)
- database Which database to search against (e.g. "nr").
- sequence The sequence to search.
- ncbi_gi TRUE/FALSE whether to give 'gi' identifier.
- descriptions Number of descriptions to show. Def 500.
- alignments Number of alignments to show. Def 500.
- expect An expect value cutoff. Def 10.0.
- matrix_name Specify an alt. matrix (PAM30, PAM70, BLOSUM80, BLOSUM45).
- filter "none" turns off filtering. Default no filtering
- format_type "HTML", "Text", "ASN.1", or "XML". Def. "XML".
- entrez_query Entrez query to limit Blast search
- hitlist_size Number of hits to return. Default 50
- megablast TRUE/FALSE whether to use MEga BLAST algorithm (blastn only)
- service plain, psi, phi, rpsblast, megablast (lower case)
This function does no checking of the validity of the parameters
and passes the values to the server as is. More help is available at:
https://ncbi.github.io/blast-cloud/dev/api.html
Genellikle, qblast işlevinin argümanları temelde BLAST web sayfasında ayarlayabileceğiniz farklı parametrelere benzer. Bu, qblast işlevinin anlaşılmasını kolaylaştırır ve kullanmak için öğrenme eğrisini azaltır.
Bağlanma ve Arama
BLAST çevrimiçi sürümüne bağlanma ve arama sürecini anlamak için, Biopython aracılığıyla çevrimiçi BLAST sunucusuna karşı basit bir dizi araması (yerel sıralama dosyamızda mevcuttur) yapalım.
Step 1 - adlı bir dosya oluşturun blast_example.fasta Biopython dizininde ve aşağıdaki sıra bilgisini girdi olarak verin
Example of a single sequence in FASTA/Pearson format:
>sequence A ggtaagtcctctagtacaaacacccccaatattgtgatataattaaaattatattcatat
tctgttgccagaaaaaacacttttaggctatattagagccatcttctttgaagcgttgtc
>sequence B ggtaagtcctctagtacaaacacccccaatattgtgatataattaaaattatattca
tattctgttgccagaaaaaacacttttaggctatattagagccatcttctttgaagcgttgtc
Step 2 - NCBIWWW modülünü içe aktarın.
>>> from Bio.Blast import NCBIWWW
Step 3 - Sıra dosyasını açın, blast_example.fasta python IO modülünü kullanarak.
>>> sequence_data = open("blast_example.fasta").read()
>>> sequence_data
'Example of a single sequence in FASTA/Pearson format:\n\n\n> sequence
A\nggtaagtcctctagtacaaacacccccaatattgtgatataattaaaatt
atattcatat\ntctgttgccagaaaaaacacttttaggctatattagagccatcttctttg aagcgttgtc\n\n'
Step 4- Şimdi sıra verilerini ileten qblast işlevini ana parametre olarak çağırın. Diğer parametre veritabanı (nt) ve dahili programı (blastn) temsil eder.
>>> result_handle = NCBIWWW.qblast("blastn", "nt", sequence_data)
>>> result_handle
<_io.StringIO object at 0x000001EC9FAA4558>
blast_resultsaramamızın sonucunu tutar. Daha sonra kullanılmak üzere bir dosyaya kaydedilebilir ve ayrıca ayrıntıları almak için ayrıştırılabilir. Bunu nasıl yapacağımızı önümüzdeki bölümde öğreneceğiz.
Step 5 - Aynı işlevsellik, aşağıda gösterildiği gibi tüm fasta dosyasını kullanmak yerine Seq nesnesi kullanılarak da yapılabilir -
>>> from Bio import SeqIO
>>> seq_record = next(SeqIO.parse(open('blast_example.fasta'),'fasta'))
>>> seq_record.id
'sequence'
>>> seq_record.seq
Seq('ggtaagtcctctagtacaaacacccccaatattgtgatataattaaaattatat...gtc',
SingleLetterAlphabet())
Şimdi, Seq nesnesini geçen qblast işlevini, ana parametre olarak record.seq'i çağırın.
>>> result_handle = NCBIWWW.qblast("blastn", "nt", seq_record.seq)
>>> print(result_handle)
<_io.StringIO object at 0x000001EC9FAA4558>
BLAST, sekansınız için otomatik olarak bir tanımlayıcı atayacaktır.
Step 6 - result_handle nesnesi tüm sonuca sahip olacak ve daha sonra kullanılmak üzere bir dosyaya kaydedilebilir.
>>> with open('results.xml', 'w') as save_file:
>>> blast_results = result_handle.read()
>>> save_file.write(blast_results)
Sonuç dosyasını nasıl ayrıştıracağımızı sonraki bölümde göreceğiz.
Bağımsız BLAST Çalıştırma
Bu bölüm BLAST'ın yerel sistemde nasıl çalıştırılacağını açıklamaktadır. BLAST'ı yerel sistemde çalıştırırsanız, daha hızlı olabilir ve ayrıca dizilere karşı arama yapmak için kendi veritabanınızı oluşturmanıza olanak tanır.
BLAST bağlanıyor
Genel olarak, BLAST'ı yerel olarak çalıştırmak, büyük boyutu, yazılımı çalıştırmak için gereken ekstra çaba ve ilgili maliyet nedeniyle önerilmez. Online BLAST, temel ve ileri düzey amaçlar için yeterlidir. Elbette bazen yerel olarak yüklemeniz gerekebilir.
Çok fazla zaman ve yüksek ağ hacmi gerektirebilecek sık sık çevrimiçi aramalar yaptığınızı düşünün ve özel sıra verileriniz veya IP ile ilgili sorunlarınız varsa, yerel olarak kurmanız önerilir.
Bunu yapmak için aşağıdaki adımları izlememiz gerekiyor -
Step 1- Verilen bağlantıyı kullanarak en son patlama ikili dosyasını indirin ve kurun - ftp://ftp.ncbi.nlm.nih.gov/blast/executables/blast+/LATEST/
Step 2- Aşağıdaki bağlantıyı kullanarak en son ve gerekli veritabanını indirin ve paketinden çıkarın - ftp://ftp.ncbi.nlm.nih.gov/blast/db/
BLAST yazılımı, sitelerinde çok sayıda veritabanı sağlar. Bize indirmek edelim alu.n.gz patlama veritabanı sitesinden dosyayı ve alu klasöre açmak. Bu dosya FAŞTA formatındadır. Bu dosyayı blast uygulamamızda kullanmak için önce dosyayı FAŞTA formatından blast veritabanı formatına dönüştürmemiz gerekiyor. BLAST, makeblastdb uygulamasının bu dönüşümü yapmasını sağlar.
Aşağıdaki kod parçacığını kullanın -
cd /path/to/alu
makeblastdb -in alu.n -parse_seqids -dbtype nucl -out alun
Yukarıdaki kodu çalıştırmak girdi dosyası alu.n'yi ayrıştıracak ve BLAST veri tabanını alun.nsq, alun.nsi vb. Çoklu dosyalar olarak oluşturacaktır. Şimdi, sırayı bulmak için bu veri tabanını sorgulayabiliriz.
BLAST'ı yerel sunucumuza kurduk ve ayrıca örnek BLAST veritabanına sahibiz, alun ona karşı sorgulamak için.
Step 3- Veritabanını sorgulamak için örnek bir sıra dosyası oluşturalım. Bir dosya search.fsa oluşturun ve aşağıdaki verileri içine koyun.
>gnl|alu|Z15030_HSAL001056 (Alu-J)
AGGCTGGCACTGTGGCTCATGCTGAAATCCCAGCACGGCGGAGGACGGCGGAAGATTGCT
TGAGCCTAGGAGTTTGCGACCAGCCTGGGTGACATAGGGAGATGCCTGTCTCTACGCAAA
AGAAAAAAAAAATAGCTCTGCTGGTGGTGCATGCCTATAGTCTCAGCTATCAGGAGGCTG
GGACAGGAGGATCACTTGGGCCCGGGAGTTGAGGCTGTGGTGAGCCACGATCACACCACT
GCACTCCAGCCTGGGTGACAGAGCAAGACCCTGTCTCAAAACAAACAAATAA
>gnl|alu|D00596_HSAL003180 (Alu-Sx)
AGCCAGGTGTGGTGGCTCACGCCTGTAATCCCACCGCTTTGGGAGGCTGAGTCAGATCAC
CTGAGGTTAGGAATTTGGGACCAGCCTGGCCAACATGGCGACACCCCAGTCTCTACTAAT
AACACAAAAAATTAGCCAGGTGTGCTGGTGCATGTCTGTAATCCCAGCTACTCAGGAGGC
TGAGGCATGAGAATTGCTCACGAGGCGGAGGTTGTAGTGAGCTGAGATCGTGGCACTGTA
CTCCAGCCTGGCGACAGAGGGAGAACCCATGTCAAAAACAAAAAAAGACACCACCAAAGG
TCAAAGCATA
>gnl|alu|X55502_HSAL000745 (Alu-J)
TGCCTTCCCCATCTGTAATTCTGGCACTTGGGGAGTCCAAGGCAGGATGATCACTTATGC
CCAAGGAATTTGAGTACCAAGCCTGGGCAATATAACAAGGCCCTGTTTCTACAAAAACTT
TAAACAATTAGCCAGGTGTGGTGGTGCGTGCCTGTGTCCAGCTACTCAGGAAGCTGAGGC
AAGAGCTTGAGGCTACAGTGAGCTGTGTTCCACCATGGTGCTCCAGCCTGGGTGACAGGG
CAAGACCCTGTCAAAAGAAAGGAAGAAAGAACGGAAGGAAAGAAGGAAAGAAACAAGGAG
AG
Sıra verileri alu.n dosyasından toplanır; dolayısıyla, veritabanımızla eşleşir.
Step 4 - BLAST yazılımı, veri tabanında arama yapmak için birçok uygulama sağlar ve biz blastn kullanırız. blastn application requires minimum of three arguments, db, query and out. db aramaya karşı veritabanını ifade eder; query eşleşecek sıradır ve outsonuçların saklanacağı dosyadır. Şimdi, bu basit sorguyu gerçekleştirmek için aşağıdaki komutu çalıştırın -
blastn -db alun -query search.fsa -out results.xml -outfmt 5
Yukarıdaki komutu çalıştırmak, results.xml dosya aşağıda verildiği gibi (kısmen veri) -
<?xml version = "1.0"?>
<!DOCTYPE BlastOutput PUBLIC "-//NCBI//NCBI BlastOutput/EN"
"http://www.ncbi.nlm.nih.gov/dtd/NCBI_BlastOutput.dtd">
<BlastOutput>
<BlastOutput_program>blastn</BlastOutput_program>
<BlastOutput_version>BLASTN 2.7.1+</BlastOutput_version>
<BlastOutput_reference>Zheng Zhang, Scott Schwartz, Lukas Wagner, and Webb
Miller (2000), "A greedy algorithm for aligning DNA sequences", J
Comput Biol 2000; 7(1-2):203-14.
</BlastOutput_reference>
<BlastOutput_db>alun</BlastOutput_db>
<BlastOutput_query-ID>Query_1</BlastOutput_query-ID>
<BlastOutput_query-def>gnl|alu|Z15030_HSAL001056 (Alu-J)</BlastOutput_query-def>
<BlastOutput_query-len>292</BlastOutput_query-len>
<BlastOutput_param>
<Parameters>
<Parameters_expect>10</Parameters_expect>
<Parameters_sc-match>1</Parameters_sc-match>
<Parameters_sc-mismatch>-2</Parameters_sc-mismatch>
<Parameters_gap-open>0</Parameters_gap-open>
<Parameters_gap-extend>0</Parameters_gap-extend>
<Parameters_filter>L;m;</Parameters_filter>
</Parameters>
</BlastOutput_param>
<BlastOutput_iterations>
<Iteration>
<Iteration_iter-num>1</Iteration_iter-num><Iteration_query-ID>Query_1</Iteration_query-ID>
<Iteration_query-def>gnl|alu|Z15030_HSAL001056 (Alu-J)</Iteration_query-def>
<Iteration_query-len>292</Iteration_query-len>
<Iteration_hits>
<Hit>
<Hit_num>1</Hit_num>
<Hit_id>gnl|alu|Z15030_HSAL001056</Hit_id>
<Hit_def>(Alu-J)</Hit_def>
<Hit_accession>Z15030_HSAL001056</Hit_accession>
<Hit_len>292</Hit_len>
<Hit_hsps>
<Hsp>
<Hsp_num>1</Hsp_num>
<Hsp_bit-score>540.342</Hsp_bit-score>
<Hsp_score>292</Hsp_score>
<Hsp_evalue>4.55414e-156</Hsp_evalue>
<Hsp_query-from>1</Hsp_query-from>
<Hsp_query-to>292</Hsp_query-to>
<Hsp_hit-from>1</Hsp_hit-from>
<Hsp_hit-to>292</Hsp_hit-to>
<Hsp_query-frame>1</Hsp_query-frame>
<Hsp_hit-frame>1</Hsp_hit-frame>
<Hsp_identity>292</Hsp_identity>
<Hsp_positive>292</Hsp_positive>
<Hsp_gaps>0</Hsp_gaps>
<Hsp_align-len>292</Hsp_align-len>
<Hsp_qseq>
AGGCTGGCACTGTGGCTCATGCTGAAATCCCAGCACGGCGGAGGACGGCGGAAGATTGCTTGAGCCTAGGAGTTTG
CGACCAGCCTGGGTGACATAGGGAGATGCCTGTCTCTACGCAAAAGAAAAAAAAAATAGCTCTGCTGGTGGTGCATG
CCTATAGTCTCAGCTATCAGGAGGCTGGGACAGGAGGATCACTTGGGCCCGGGAGTTGAGGCTGTGGTGAGCC
ACGATCACACCACTGCACTCCAGCCTGGGTGACAGAGCAAGACCCTGTCTCAAAACAAACAAATAA
</Hsp_qseq>
<Hsp_hseq>
AGGCTGGCACTGTGGCTCATGCTGAAATCCCAGCACGGCGGAGGACGGCGGAAGATTGCTTGAGCCTAGGA
GTTTGCGACCAGCCTGGGTGACATAGGGAGATGCCTGTCTCTACGCAAAAGAAAAAAAAAATAGCTCTGCT
GGTGGTGCATGCCTATAGTCTCAGCTATCAGGAGGCTGGGACAGGAGGATCACTTGGGCCCGGGAGTTGAGG
CTGTGGTGAGCCACGATCACACCACTGCACTCCAGCCTGGGTGACAGAGCAAGACCCTGTCTCAAAACAAAC
AAATAA
</Hsp_hseq>
<Hsp_midline>
|||||||||||||||||||||||||||||||||||||||||||||||||||||
|||||||||||||||||||||||||||||||||||||||||||||||||||||
|||||||||||||||||||||||||||||||||||||||||||||||||||||
|||||||||||||||||||||||||||||||||||||||||||||||||||||
|||||||||||||||||||||||||||||||||||||||||||||||||||||
|||||||||||||||||||||||||||
</Hsp_midline>
</Hsp>
</Hit_hsps>
</Hit>
.........................
.........................
.........................
</Iteration_hits>
<Iteration_stat>
<Statistics>
<Statistics_db-num>327</Statistics_db-num>
<Statistics_db-len>80506</Statistics_db-len>
<Statistics_hsp-lenv16</Statistics_hsp-len>
<Statistics_eff-space>21528364</Statistics_eff-space>
<Statistics_kappa>0.46</Statistics_kappa>
<Statistics_lambda>1.28</Statistics_lambda>
<Statistics_entropy>0.85</Statistics_entropy>
</Statistics>
</Iteration_stat>
</Iteration>
</BlastOutput_iterations>
</BlastOutput>
Yukarıdaki komut python içinde aşağıdaki kod kullanılarak çalıştırılabilir -
>>> from Bio.Blast.Applications import NcbiblastnCommandline
>>> blastn_cline = NcbiblastnCommandline(query = "search.fasta", db = "alun",
outfmt = 5, out = "results.xml")
>>> stdout, stderr = blastn_cline()
Burada birincisi, püskürtme çıktısının bir tutamağıdır ve ikincisi, püskürtme komutu tarafından üretilen olası hata çıktısıdır.
Çıktı dosyasını komut satırı bağımsız değişkeni (out = “results.xml”) olarak sağladığımız ve çıktı biçimini XML olarak ayarladığımızdan (outfmt = 5), çıktı dosyası geçerli çalışma dizinine kaydedilecektir.
BLAST Sonucunun Ayrıştırılması
Genellikle, BLAST çıktısı NCBIXML modülü kullanılarak XML formatı olarak ayrıştırılır. Bunu yapmak için aşağıdaki modülü içe aktarmamız gerekiyor -
>>> from Bio.Blast import NCBIXML
Şimdi, open the file directly using python open method ve use NCBIXML parse method aşağıda verildiği gibi -
>>> E_VALUE_THRESH = 1e-20
>>> for record in NCBIXML.parse(open("results.xml")):
>>> if record.alignments:
>>> print("\n")
>>> print("query: %s" % record.query[:100])
>>> for align in record.alignments:
>>> for hsp in align.hsps:
>>> if hsp.expect < E_VALUE_THRESH:
>>> print("match: %s " % align.title[:100])
Bu, aşağıdaki gibi bir çıktı üretecektir -
query: gnl|alu|Z15030_HSAL001056 (Alu-J)
match: gnl|alu|Z15030_HSAL001056 (Alu-J)
match: gnl|alu|L12964_HSAL003860 (Alu-J)
match: gnl|alu|L13042_HSAL003863 (Alu-FLA?)
match: gnl|alu|M86249_HSAL001462 (Alu-FLA?)
match: gnl|alu|M29484_HSAL002265 (Alu-J)
query: gnl|alu|D00596_HSAL003180 (Alu-Sx)
match: gnl|alu|D00596_HSAL003180 (Alu-Sx)
match: gnl|alu|J03071_HSAL001860 (Alu-J)
match: gnl|alu|X72409_HSAL005025 (Alu-Sx)
query: gnl|alu|X55502_HSAL000745 (Alu-J)
match: gnl|alu|X55502_HSAL000745 (Alu-J)