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)