بررسی اجمالی BLAST در برنامه نویسی بایوپایتون

3 سال پیش

 بررسی اجمالی BLAST در برنامه نویسی بایوپایتون

در این درس از آموزش های برنامه نویسی سایت سورس باران، ما در مورد بررسی اجمالی BLAST در برنامه نویسی بایوپایتون بحث خواهیم کرد.

پیشنهاد ویژه : آموزش طراحی وب سایت با پایتون

BLAST مخفف Basic Local Alignment Search Tool است. مناطق تشابه بین توالی های بیولوژیکی را پیدا می کند. بایوپایتون ماژول Bio.Blast را برای مقابله با عملکرد NCBI BLAST فراهم می کند. شما می توانید BLAST را در اتصال محلی یا از طریق اتصال به اینترنت اجرا کنید.

بگذارید این دو ارتباط را به طور خلاصه در بخش زیر توضیح دهیم:

اتصال از طریق اتصال

بایوپایتون ماژول Bio.Blast.NCBIWWW را برای فراخوانی نسخه آنلاین BLAST فراهم می کند. برای انجام این کار، ماژول زیر را باید وارد کنیم –

>>> from Bio.Blast import NCBIWWW

 

ماژول NCBIWW عملکرد qblast را برای س quال از نسخه آنلاین BLAST ، https://blast.ncbi.nlm.nih.gov/Blast.cgi فراهم می کند. qblast از تمام پارامترهای پشتیبانی شده توسط نسخه آنلاین پشتیبانی می کند.

برای دریافت راهنمایی در مورد این ماژول، از دستور زیر استفاده کنید:

>>> 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

 

معمولاً آرگومان های تابع qblast با پارامترهای مختلفی که می توانید در صفحه وب BLAST تنظیم کنید مشابه است. این درک تابع qblast را آسان می کند و همچنین منحنی یادگیری را برای استفاده از آن کاهش می دهد.

اتصال و جستجو

برای درک روند اتصال و جستجو در نسخه آنلاین BLAST، بیایید یک جستجوی توالی ساده (در فایل توالی محلی) در برابر سرور BLAST آنلاین از طریق بایوپایتون انجام دهیم.

مرحله ۱ – فایلی با نام blast_example.fasta در فهرست بایوپایتون ایجاد کنید و اطلاعات توالی زیر را به عنوان ورودی ارائه دهید

Example of a single sequence in FASTA/Pearson format: 
>sequence A ggtaagtcctctagtacaaacacccccaatattgtgatataattaaaattatattcatat
tctgttgccagaaaaaacacttttaggctatattagagccatcttctttgaagcgttgtc 

>sequence B ggtaagtcctctagtacaaacacccccaatattgtgatataattaaaattatattca
tattctgttgccagaaaaaacacttttaggctatattagagccatcttctttgaagcgttgtc

 

مرحله ۲ – ماژول NCBIWWW را وارد کنید.

>>> from Bio.Blast import NCBIWWW

 

مرحله ۳ – با استفاده از ماژول python IO، فایل توالی blast_example.fasta را باز کنید.

>>> 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'

 

مرحله ۴ – اکنون داده های توالی عبور تابع qblast را به عنوان پارامتر اصلی فراخوانی کنید. پارامتر دیگر نشان دهنده پایگاه داده (nt) و برنامه داخلی (blastn) است.

>>> result_handle = NCBIWWW.qblast("blastn", "nt", sequence_data) 
>>> result_handle 
<_io.StringIO object at 0x000001EC9FAA4558>

 

blast_results نتیجه جستجوی ما را در بر دارد. می تواند برای استفاده های بعدی در فایلی ذخیره شود و همچنین برای دریافت جزئیات تجزیه شود.

 

مرحله ۵ – عملکرد مشابه را می توان با استفاده از آبجکت Seq به جای استفاده از کل فایل fasta مانند زیر انجام داد –

>>> 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())

 

BLAST به طور خودکار شناسه ای برای توالی شما اختصاص می دهد.

 

مرحله ۶ – شی object result_handle کل نتیجه را خواهد داشت و می تواند برای استفاده های بعدی در یک فایل ذخیره شود.

>>> 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())

 

 

اجرای مستقل BLAST

در این بخش نحوه اجرای BLAST در سیستم محلی توضیح داده شده است. اگر BLAST را در سیستم محلی اجرا کنید، ممکن است سریعتر باشد و همچنین به شما امکان می دهد پایگاه داده خود را برای جستجو در توالی ایجاد کنید.

اتصال BLAST

به طور کلی، اجرای BLAST به صورت محلی به دلیل حجم زیاد، تلاش زیاد مورد نیاز برای اجرای نرم افزار و هزینه بالا توصیه نمی شود. BLAST آنلاین برای اهداف اساسی و پیشرفته کافی است. البته، ممکن است در بعضی مواقع از شما خواسته شود آن را به صورت محلی نصب کنید.

در نظر داشته باشید که  انجام جستجوی مکرر بصورت آنلاین ممکن است به زمان زیاد و حجم بالای شبکه نیاز داشته باشد و اگر داده های توالی اختصاصی یا مشکلات مربوط به IP دارید، نصب آن به صورت محلی توصیه می شود.

برای انجام این کار، باید مراحل زیر را دنبال کنیم –

مرحله ۱ – جدیدترین blast باینری را با استفاده از لینک داده شده دانلود و نصب کنید – ftp://ftp.ncbi.nlm.nih.gov/blast/executables/blast+/LATEST/

مرحله ۲ – جدیدترین پایگاه داده مورد نیاز را با استفاده از لینک زیر دانلود و آن پک کنید – ftp://ftp.ncbi.nlm.nih.gov/blast/db/

 

نرم افزار BLAST پایگاه های داده بسیاری را در سایت خود فراهم می کند. اجازه دهید فایل alu.n.gz را از سایت پایگاه داده blast دانلود کرده و آن را در پوشه alu باز کنیم. این فایل با فرمت FASTA است. برای استفاده از این فایل در برنامه blast خود، ابتدا باید فایل را از قالب FASTA به قالب پایگاه داده blast تبدیل کنیم. BLAST برنامه makeblastdb را برای انجام این تبدیل فراهم می کند.

از قطعه کد زیر استفاده کنید –

cd /path/to/alu 
makeblastdb -in alu.n -parse_seqids -dbtype nucl -out alun

 

با اجرای کد بالا، فایل ورودی، alu.n تجزیه می شود و پایگاه داده BLAST به عنوان چندین فایل alun.nsq ،alun.nsi و غیره ایجاد می شود.

اکنون، می توانیم این پایگاه داده را جستجو کنیم تا توالی را پیدا کنیم.

ما BLAST را در سرور محلی خود نصب کرده ایم و همچنین دارای پایگاه داده BLAST نمونه ای هستیم که می توان از آن درخواست کرد.

 

مرحله ۳ – اجازه دهید ما یک فایل توالی نمونه برای ایجاد سال از پایگاه داده ایجاد کنیم. یک فایل search.fsa ایجاد کنید و داده های زیر را در آن قرار دهید.

 

>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

 

داده های توالی از فایل alu.n جمع آوری می شوند. از این رو، با پایگاه داده ما مطابقت دارد.

 

مرحله ۴ – نرم افزار BLAST برنامه های زیادی برای جستجوی پایگاه داده فراهم می کند و ما از blastn استفاده می کنیم. برنامه blastn حداقل به سه آرگومانdb، query و out نیاز دارد. db به پایگاه داده در برابر جستجو اشاره دارد. query توالی مطابقت ها است و  out فایلی برای ذخیره نتایج است. برای اجرای این query ساده، دستور زیر را اجرا کنید –

blastn -db alun -query search.fsa -out results.xml -outfmt 5

 

با اجرای دستور بالا، در فایل results.xml همانطور که در زیر آورده شده است جستجو و خروجی را به شما می دهد.

<?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>

 

دستور بالا را می توان با استفاده از کد زیر در داخل پایتون اجرا کرد –

>>> from Bio.Blast.Applications import NcbiblastnCommandline 
>>> blastn_cline = NcbiblastnCommandline(query = "search.fasta", db = "alun", 
outfmt = 5, out = "results.xml") 
>>> stdout, stderr = blastn_cline()

 

در اینجا، اولین دسته مربوط به خروجیBLAST و دیگری خطای احتمالی تولید شده توسط دستور BLAST است.

از آنجا که ما پرونده خروجی را به عنوان آرگومان خط فرمان (out = “results.xml”) فراهم کرده ایم و قالب خروجی را به صورت XML تنظیم کرده ایم (outfmt = 5)، فایل خروجی در فهرست کار فعلی ذخیره می شود.

تجزیه نتایج BLAST

به طور کلی، خروجی BLAST با استفاده از ماژول NCBIXML به صورت قالب XML تجزیه می شود. برای انجام این کار، ماژول زیر را باید وارد کنیم:

>>> from Bio.Blast import NCBIXML

 

اکنون، فایل را مستقیماً با استفاده از python open method باز کرده و از روش تجزیه NCBIXML استفاده کنید، همانطور که در زیر آورده شده است:

>>> 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])

 

خروجی

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)

 

منبع.

لیست جلسات قبل آموزش برنامه نویسی بایوپایتون

  1. آموزش برنامه نویسی بایوپایتون (Biopython)
  2. معرفی برنامه نویسی بایوپایتون
  3. آموزش نصب بایوپایتون
  4. ایجاد یک برنامه ساده در برنامه نویسی بایوپایتون
  5. آموزش دنباله در برنامه نویسی بایوپایتون
  6. عملیات توالی پیشرفته در برنامه نویسی بایوپایتون
  7. آموزش توالی ورودی/خروجی در برنامه نویسی بایوپایتون
  8.  آموزش هم‌ترازسازی توالی در برنامه نویسی بایوپایتون
0
برچسب ها :
نویسنده مطلب erfan molaei

دیدگاه شما

بدون دیدگاه