13.01.16 Bioinformatyka Laboratorium 9 Rozwiązania należy
Transkrypt
13.01.16 Bioinformatyka Laboratorium 9 Rozwiązania należy
13.01.16 Bioinformatyka Laboratorium 9 Rozwiązania należy przesłać najpóźniej do dn. 20.01.16 Zadanie 1. Zmiana wielkości znaków Python posiada funkcję zmiany wielkości znaków w ciągu znaków, to samo można wykonać w Biopythonie dla obiektu Seq, przy czym brany jest pod uwagę rodzaj alfabetu: >>> from Bio.Seq import Seq >>> from Bio.Alphabet import generic_dna >>> dna_sek = Seq("acgtACGT", generic_dna) >>> dna_sek Seq(’acgtACGT’, DNAAlphabet()) >>> dna_sek.upper() Seq(’ACGTACGT’, DNAAlphabet()) >>> dna_sek.lower() Seq(’acgtacgt’, DNAAlphabet()) Opcja ta jest użyteczna przy przeszukiwaniu sekwencji bez względu na wielkość znaków: >>> "GTAC" in dna_sek False >>> "GTAC" in dna_sek.upper() True Należy zwrócić uwagę, że alfabety IUPAC funkcjonują tylko dla sekwencji pisanych dużymi literami: >>> from Bio.Seq import Seq >>> from Bio.Alphabet import IUPAC >>> dna_sek = Seq("ACGT", IUPAC.unambiguous_dna) >>> dna_sek Seq(’ACGT’, IUPACUnambiguousDNA()) >>> dna_sek.lower() Seq(’acgt’, DNAAlphabet() Napisz skrypt zmiana.py, który zmieni litery na małe w zadeklarowanej przez użytkownika sekwencji nukleotydowej Zadanie 2 Porównywanie obiektów Seq Jak rozróżnić czy dwie sekwencje są jednakowe np. czy jest to DNA, RNA czy białko? Biopython wykorzystuje obiekty alfabetu jako część obiektu Seq, aby uchwycić tę informację. Ale jak rozróżnić dwie zmienne? Biopython wykonuje test równości (opcja domyślna obiektów Pythona) sprawdza w pamięci czy ma do czynienia z tymi samymi obiektami: >>> from Bio.Seq import Seq >>> from Bio.Alphabet import IUPAC >>> sek1 = Seq("ACGT", IUPAC.unambiguous_dna) >>> sek2 = Seq("ACGT", IUPAC.unambiguous_dna) >>> sek1 == sek2 False >>> sek1 == sek1 True W tym samym celu można wykorzystać funkcję id Pythona >>> id(sek1) == id(sek2) False >>> id(sek1) == id(sek1) True Zwykle w użytkowaniu mamy do czynienia z tym samym alfabetem, lub co najmniej z tym samym typem sekwencji (DNA, RNA lub białko) i dlatego aby sprawdzić czy dwie sekwencje są jednakowe, porównujemy je jako ciągi znaków (strings): >>> str(sek1) == str(sek2) True >>> str(sek1) == str(sek1) True Napisz skrypt o nazwie porownaj.py, który pozwoli na porównanie dwóch sekwencji podanych przez użytkownika. Użytkownik podaje też rodzaj alfabetu dla każdej z dwóch porównywanych sekwencji. Program powinien umożliwiać następująca komunikację z użytkownikiem: Podaj pierwsza sekwencje do porównania: >>>AAAGGGTTTAAA Podaj alfabet dla pierwszej sekwencji: >>> IUPAC.unambiguous_dna Podaj druga sekwencje do porównania: >>>AAAGGGTTTAAA Podaj alfabet dla drugiej sekwencji: >>> IUPAC.unambiguous_dna Wynik porownania: >>>True Zadanie 3 Obiekty MutableSeq W Pythonie, obiekt Seq może być tylko odczytywany, jeśli chcemy, aby obiekt Seq funkcjonował jako ciąg znaków, używamy metody . tomutable(), patrz przykład poniżej: >>> seq[0]=’T’ Traceback (most recent call last): File "<stdin>", line 1, in ? AttributeError: ’Seq’ instance has no attribute ’__setitem__’ >>> mut_seq = seq.tomutable() >>> mut_seq MutableSeq(’CCGGGTT’, IUPACUnambiguousDNA()) testujemy teraz: >>> mut_seq[0]=’T’ >>> mut_seq MutableSeq(’TCGGGTT’, IUPACUnambiguousDNA()) Dla sekwencji: "TTTATTCACAATAGGAGGATTAACGGGAGTAGTTCTCGCAAACTCCTCAATCGACATT ATCCTACACGATACCTACTACG” utwórz obiekt MutableSeq, korzystając z alfabetu IUPAC.unambiguous_dna. Następnie dokonaj następujących operacji na tej sekwencji: podmień zasady na 5, 10, 15 i 20 miejscu na „C”, usuń pierwszą napotkaną zasadę A, odwróć tak zmodyfikowaną sekwencję, a na koniec przekształć ją z powrotem na obiekt Seq Zadanie 4. BLAST - NCBI (Przypomnijmy raz jeszcze) BLAST jest to algorytm służący do lokalnego przyrównywania sekwencji aminokwasów białek lub nukleotydów DNA. Umożliwia porównywanie zadanej sekwencji z sekwencjami zawartymi w biologicznych bazach danych i ocenę ich podobieństwa. Różne typy BLAST-a służą do porównywania różnych rodzajów sekwencji. Korzystając ze strony NCBI, wybierz BLAST w dziale Popular resources lub bezpośrednio ze strony http://blast.ncbi.nlm.nih.gov/Blast.cgi a) określ z jakiego organizmu pochodzi następująca sekwencja: MGSSHHHHHHSSGLVPRGSHMAVVGGLGGYMLGSAMSRPLIHFGNDYEDRYYRENMYRYPNQ VYYRPVDQYNNQNNFVHDCVNITVKQHTVTTTTKGENFTETDIKIMERVVEQMCITQYQQESQA AYQRAA Zapoznaj się z rezultatem wyszukiwań, korzystając z podsumowania graficznego wyszukanych dopasowań, obejrzyj wyszukane dopasowania, zwróć uwagę na wartości takie jak: score, e-value, identities oraz gaps Zadanie 5. BLAST w Biopythonie dostęp online Aby skorzystać z wersji online BLAST-a należy skorzystać z modułu Bio.Blast.NCBIWWW oraz funkcji qblast która posiada 3 argumenty: argument 1 – rodzaj BLAST-a (np. blastn, blastp, blastx, tblast, tblastx) Szczegółowe informacje dostępne na stronie: http://www.ncbi.nlm.nih.gov/BLAST/blast_program.shtml argument 2– specyfikacja bazy danych (podstawowe bazy nr - dla sekwencji białkowych, nt dla nukleotydowych) http://www.ncbi.nlm.nih.gov/BLAST/blast_databases.shtml argument 3 – sekwencja własna lub w formacie FASTA lub numer identyfikacyjny GI np. >>> from Bio.Blast import NCBIWWW >>> result_handle = NCBIWWW.qblast("blastn", "nt", "8332116") >>> print(result_handle.read()) pobierz i zapisz do własnego katalogu plik m_cold.fasta www: https://raw.githubusercontent.com/lincolnn/Bioinformatics/master/biopython1.57/Doc/examples/m_cold.fasta (wprowadź powyższy kod do konsoli i obejrzyj dopasowania) >>> >>> >>> >>> from Bio.Blast import NCBIWWW from Bio import SeqIO record = SeqIO.read("m_cold.fasta", format="fasta") result_handle = NCBIWWW.qblast("blastn", "nt", record.seq) Domyślnie rezultat jest zwracany jest postaci XML'a (pozostałe formaty dostępne po ustawieniu format_type keyword: "HTML", "Text", "ASN.1", or "XML"). >>> from Bio.Blast import NCBIWWW >>> fasta_string = open("m_cold.fasta").read() >>> result result_handle = NCBIWWW.qblast("blastn", "nt",fasta_string.format("HTML")) Przykład zapisu wyniku do pliku: >>> save_file = open("my_blast.xml", "w") >>> save_file.write(result_handle.read()) >>> save_file.close() >>> result_handle.close() Otrzymany wynik możemy sparsować posługując się: >>> from Bio.Blast import NCBIXML >>> blast_records = NCBIXML.parse(result_handle) >>> blast_record = blast_records.next() >>> from Bio.Blast import NCBIXML >>> blast_records = NCBIXML.parse(result_handle) >>blast_record = blast_records.next() W przypadku gdy szukaliśmy większą ilość sekwencji, otrzymamy dla każdej sekwencji jeden wynik BLAST-a, natomiast w przypadku gdy szukaliśmy tylko jednej należy korzystać z pierwszego obiektu zwracanego przez iterator blast_records (blast record to klasa stworzona do obsługi wyników BLAST-a więcej informacji: biopython.org/DIST/docs/api/Bio.Blast.Record-module.html) Przegląd wyników: >>>for alignment in blast_record.alignments: >>>'Alignment----------------------------------') >>> 'title:', alignment.title >>> 'length:', alignment.length for hsp in alignment.hsps: >>> 'HSP : ' >>>'e value:', hsp.expect >>> hsp.query[0:75] + '...' >>> hsp.match[0:75] + '...' >>> hsp.sbjct[0:75] + '...' BLAST-a można uruchamiać lokalnie (BLAST lokalny jest zwykle szybszy i pozwala tworzyć własne bazy danych do przeszukania) w tym celu należy skorzystać z NCBI binarki Do komunikacji z lokalnym blastem można użyć wrappera NCBI BLASTX z modułu Bio.Blast.Applications (dokumentacja dostępna na stronie: biopython.org=DIST=docs=api=Bio.Blast.Applications-module.html). >>> from Bio.Blast.Applications import NcbiblastxCommandline >>> help(NcbiblastxCommandline) >>> blastx_cline1 = NcbiblastxCommandline(query="opuntia.fasta", db="nr", evalue=0.001,outfmt=5, out="opuntia.xml") >>> blastx_cline1 >>>blastx_cline2=NcbiblastxCommandline(cmd='blastx', out='opuntia.xml', outfmt=5, query='opuntia.fasta',db='nr', evalue=0.001) >>> blastx_cline2 Zadanie 6. Dla sekwencji: MKSILDGLADTTFRTITTDLLGSPFQEKMTAGDNPQLVPADQVNITEFYNKSLSSFKENEENIQCGE NFMDIECFMVLNPSQQLAIAVLSLTLGTFTVLENLLVLCVILHSRSLRCRPSYHFIGSLAVADLLGS VIFVYSFIDFHVFHRKDSRNVFLFKLGGVTASFTASVGSLFLTAIDRYISIHRPLAYKRIVTRPKAVV AFCLMWTIAIVIAVLPLLGWNCEKLQSVCSDIFPHIDETYLMFWIGVTSVLLLFIVYAYMYILWKA HSHAVRMIQRGTQKSIIIHTSEDGKVQVTRPDQARMDIRLAKTLVLILVVLIICWGPLLAIMVYDVF GKMNKLIKTVFAFCSMLCLLNSTVNPIIYALRSKDLRHAFRSMFPSCEGTAQPLDNSMGDSDCLH KHANNAASVHRAAESCIKSTVKIAKVTMSVSTDTSAEAL korzystając z Bio.Blast określ: 5 pierwszych dopasowań. wypisz podstawowe informacje dla nich tj. tytuł dopasowanej sekwencji i długość dopasowania średnią długość dopasowania (oblicz i wypisz) średnią wartość E dla tych sekwencji.