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.

Podobne dokumenty