IT Industrija
🔥 Najčitanije
🔥 Najčitanije
Biopython je skup open-source alata namenjenih developerima u oblasti bioinfromatike i računarske biologije — pred vama je deo tutorijala koji će vas uvesti u osnove korišćenja Pythona u biologiji.
Biopython je set biblioteka koje omogućuju rad sa stvarima koje su interesantne biolozima koji koriste kompjutere. Generalno, ovo znači da ćete morati da imate barem nešto programerskog znanja (u Pythonu, naravno) ili barem interesovanje za programiranje.
Posao Biopythona je da vam učini programerski deo posla lakšim snabdevanjem biblioteka za višekratnu upotrebu tako da vi možete da se usredsredite na vaš poseban problem, umesto da se bavite parsiranjem određenog formata fajla (naravno ako želite da pomognete pisanjem parsera koji ne postoji i doprinoseći njime Biopythonu, molim vas učinite to). Na kraju krajeva — posao Biopythona je da vas usreći.
Biopython često pruža više načina da se “uradi jedna ista stvar”, što mene ponekad frustrira, jer je nekada lakše kada znaš da je nešto moguće uraditi samo na jedan način.
Kako god, ovo je i značajna olakšica jer nam daje dosta fleksibilnosti i kontrole nad procesom. Tutorijal dole je tu da vam pomogne i pokaže vam redovan ili lak način da se neke stvari urade tako da vi možete da ih pustite u pogon.
Porecivo, (naravno!) centralni objekat u bioinformatici je sekvenca. Zbog ovoga krećemo od mehanizama Biopythona zaduženih za sekvence. Kada pomislim na sekvencu, prva stvar koja mi pada na pamet jeste string slova AGTACACTGGT koji deluje normalno jer je upravo ovo najčešći način na koji ih prikazuju u biološkim fajlovima.
Ipak, jednostavan string slova sam po sebi je izuzetno neinformativan — da li se radi o DNK ili proteinskoj sekvenci (okej, proteinu sa mnogo alanina, glicina, cistina i treonina) od kog organizma je potekla, šta je tako interesantno oko nje, i tako dalje.
Izazov u dizajniranju interfejsa za sekvencu je odabir načina predstavljanja koji je dovoljno informativan i može da uključi mnogo kompleksnije informacije, a da je u isto vreme memorijski lagan i lak za rad i sa jednostavnim sekvencama.
Pristup koji se zauzima u Biopython klasi sekvenciranja je korišćenje klase koja sadrži kompleksnije informacije, ali se njome može manipulisati kao da je jednostavan string. Ovo se ostvaruje korišćenjem preopterećenja operatora koje vodi tome da se manipulisanje objektima sekvence oseća kao manipulisanje Python stringa.
Klasa sekvence, koja se jednostavno naziva Seq, definiše se u fajlu Bio/Seq.py. Hajde da pogledamo Seq klasu malo bolje i vidimo šta može da ponudi.
Biopython Seq objekat ima dva bitna atributa:
Jasno je da je alfabet objekat bitna stvar koja čini Seq objekat nečim više od jednostavnog stringa. Trenutno dostupni alfabeti za Biopython su definisani u Bio/Alphabet modulu. Mi ćemo koristiti IUPAC alfabet da se bakćemo sa nekim od omiljenih objekata: DNK, RNK i proteini.
Bio/Alphabet/IUPAC.py pruža osnovne definicije proteina, DNK i RNK, ali uz to daje i mogućnost širenja i individualizacije osnovnih definicija.
Na primer, za proteine, tu je osnovni IUPACProtein klasa, ali postoji i ExtendedIUPACProtein klasa sa dodatnim elementima “Asx” (asparagin ili aspartanska kiselina), “Sec” (selenocistini) i “Glx” (glutamin ili glutaminska kiselina).
Za DNK imate kao opcije IUPACUnabiguousDNA, koja nudi osnovna slova, IUPACAmbiguousDNA (koja nudi ambiguity slova za svaku moguću situaciju) i ExtenedIUPACDNA, koja nudi slova za modifikovane baze. Slično, RNK može da se predstavi uz IUPACAmbiguousRNA ili IUPACUnambiguousRNA.
Prednost alfabet klase je dupla. Prvo, pruža ideju o tipu informacije koju data objekat sadrži. Drugo, nudi način za ograničenje informacija koje imate u data objektu, kao put za type checking.
Sada kada znamo s čim se suočavamo, hajde da bacimo pogled na korišćenje klase za interesantne zadatke.
Prvo kreirajte Sequence objekat od stringa informacije koju posedujemo. Kreiraćemo unambiougous DNK objekt:
>>> from Bio.Alphabet import IUPAC >>> my_alpha = IUPAC.unambiguous_dna >>> from Bio.Seq import Seq >>> my_seq = Seq('GATCGATGGGCCTATATAGGATCGAAAATCGC', my_alpha) >>> print my_seq Seq('GATCGATGGGCCTATATAGGATCGAAAATCGC', IUPACUnambiguousDNA())
Čak iako je ovo objekat sekvence, možemo se prema njemu ophoditi kao da je normalan Python string. Na primer, uzmimo parče sekvence:
>>> my_seq[4:12] Seq('GATGGGCC', IUPACUnambiguousDNA())
Dve stvari su interesantne. Prvo, ovo prati normalna pravila za Python sekvence. Prvi element sekvence je 0 (što je normalno za kompjuterske nauke, ali nije za biologiju). Kada odradite parče, uključena je prva stavka (na primer, 4 u ovom slučaju), a poslednja nije (12 u ovom slučaju), što je način na koji se stvari u Pythonu rade, ali naravno, ne nužno kako bi svi na svetu očekivali.
Glavni cilj je da zadržimo konzistenciju sa svim što Python radi. Druga stvar za primetiti je da je isečak odrađen na sequence data stringu, ali novi objekat koji je proizveden zadržava alfabet informacije od originalnog Seq objekta.
Seq objekat možete tretirati kao string na mnogo načina:
>>> len(my_seq) → pokazuje dužinu sekvence 32 >>> new_seq = my_seq[0:5] >>> print new_seq Seq('GATCG', IUPACUnambiguousDNA()) >>> my_seq + new_seq Seq('GATCGATGGGCCTATATAGGATCGAAAATCGCGATCG', IUPACUnambiguousDNA()) >>> my_seq[5] 'A' >>> my_seq == new_seq 0
U svim operacijama, zadržavamo alfabet. Ovo nam je od izuzetne pomoći u slučaju da nenamerno završimo pokušavajući da uradimo nešto čudno, recimo, dodamo proteinsku sekvencu i DNK sekvencu:
>>> protein_seq = Seq('EVRNAK', IUPAC.protein) >>> dna_seq = Seq('ACGT', IUPAC.unambiguous_dna) >>> protein_seq + dna_seq Traceback (most recent call last): File "<stdin>", line 1, in ? File "/usr/local/lib/python1.6/site-packages/Bio/Seq.py", line 42, in __add__ raise TypeError, ("incompatable alphabets", str(self.alphabet), TypeError: ('incompatable alphabets', 'IUPACProtein()', 'IUPACUnambiguousDNA()')
Ako vam zaista samo treba da string ubacite u nešto, ovo će biti lako za ekstrahovanje:
>>> my_seq.tostring() 'GATCGATGGGCCTATATAGGATCGAAAATCGC'
Sequence objekat nije mutirajući po pravilu, kako u mnogim primenama u biologiji želimo da osiguramo da ne menjamo podatke:
>>> my_seq[5] = 'G' Traceback (most recent call last): File "<stdin>", line 1, in ? AttributeError: 'Seq' instance has no attribute '__setitem__'
Ipak, možete ga konvertovati u mutirajuću sekvencu i uraditi prilično bilo šta god poželite sa njim:
>>> mutable_seq = my_seq.tomutable() >>> print mutable_seq MutableSeq('GATCGATGGGCCTATATAGGATCGAAAATCGC', IUPACUnambiguousDNA()) >>> mutable_seq[5] = 'T' >>> print mutable_seq MutableSeq('GATCGTTGGGCCTATATAGGATCGAAAATCGC', IUPACUnambiguousDNA()) >>> mutable_seq.remove('T') >>> print mutable_seq MutableSeq('GACGTTGGGCCTATATAGGATCGAAAATCGC', IUPACUnambiguousDNA()) >>> mutable_seq.reverse() >>> print mutable_seq MutableSeq('CGCTAAAAGCTAGGATATATCCGGGTTGCAG', IUPACUnambiguousDNA())
Sada kada priroda objekta sekvence ima malo smisla, naredna stvar ka kojoj gledamo je šta sve možemo raditi sa sekvencom. Bio/Tools direktorijum sadrži dva korisna modula za transkribovanje i prevod objekta sekvence.
Ovi alati rade na osnovu alfabeta sekvence. Na primer, pretpostavimo da želimo da transkribujemo naš my_seq objekat. Zapamtite da ovo sadrži unambiguous alfabet, pa će transribovanje učiniti sledeće:
>>> from Bio.Tools import Transcribe >>> transcriber = Transcribe.unambiguous_transcriber >>> my_rna_seq = transcriber.transcribe(my_seq) >>> print my_rna_seq Seq('GAUCGAUGGGCCUAUAUAGGAUCGAAAAUCGC', IUPACUnambiguousRNA())
Možete transkribovati RNK sekvencu i obrnuto:
>>> transcriber.back_transcribe(my_rna_seq) Seq('GATCGATGGGCCTATATAGGATCGAAAATCGC', IUPACUnambiguousDNA())
Za prevod našeg DNK objekta imamo nekoliko opcija. Prvo, možemo da koristimo bilo koji broj translacionih tabela u zavisnosti od toga šta znamo o DNK sekvenci.
Hajde da se prvo fokusiramo na dva odabira: Standardne translacione tabele i Translacione tabele za mitohondrijsku DNK kičmenjaka. Ove tabele označene su id brojevima 1 i 2. Sada kada znamo koje tabele gledamo, spremni smo da izvršimo osnovni prevod.
Prvo, moramo da uzmemo translatore koji koriste ove tabele. Kako radimo sa unambiguous DNK objektima, želimo da fetchujemo translatore da uzmu ovo u obzir:
>>> from Bio.Tools import Translate >>> standard_translator = Translate.unambiguous_dna_by_id[1] >>> mito_translator = Translate.unambiguous_dna_by_id[2]
Kada imamo zadovoljavajuće translatore, vreme je da i prevedemo sekvencu:
>>> my_seq = Seq('GCCATTGTAATGGGCCGCTGAAAGGGTGCCCGA', IUPAC.unambiguous_dna) >>> standard_translator.translate(my_seq) Seq('AIVMGR*KGAR', IUPACProtein()) >>> mito_translator.translate(my_seq) Seq('AIVMGRWKGAR', IUPACProtein())
Primetite da će difoltni prevod samo nastaviti kroz stop kodon. Ako ste svesni da prevodite neku vrstu open reading frame-a i želite da vidite sve do stop kodona, ovo se može lako obaviti sa funkcijom translate_to_stop:
>>> standard_translator.translate_to_stop(my_seq) Seq(‘AIVMGR’, IUPACProtein()) Moguće je i obrnuto prevoditi protein u DNK sekvencu:
>>> my_protein = Seq('AVMGRWKGGRAAG', IUPAC.protein) >>> standard_translator.back_translate(my_protein) Seq('GCTGTTATGGGTCGTTGGAAGGGTGGTCGTGCTGCTGGT', IUPACUnambiguousDNA())
Ovo je deo tutorijala posvećenog Biopythonu, originalno objavljenog ovde. Tekst smo preveli i uredili za potrebe Startita.
Objavio/la članak.
utorak, 12. Jul, 2016.
M.
sreda, 13. Jul, 2016.
Hvala za tekst, jako interesantno.