Untitled
unknown
plain_text
4 years ago
7.1 kB
4
Indexable
import React from 'react'; import CodeEditor from '../../../../components/CodeEditor'; import classes from '../Lesson.module.scss'; const Lesson12 = () => ( <div className={classes.root}> <h1>GENOM KAO NISKA</h1> <p className={classes.indent1x}> DNK možemo predstaviti pomoću jednog njegovog lanca (drugi lanac dobijamo njegovim komplementiranjem). Taj DNK lanac predstavljamo kao niz njegovih nukleotida koje ćemo označavati prema azotnim bazama koje sadrže tj. slovima A (Adenin), C (Citozin), G (Guanin) i T (Timin). </p> <img alt="" src="/assets/lesson12/pic1.svg" className={classes.indent2x} /> <p className={classes.indent1x}> {`Tada deo DNK lanca koji je prikazan na slici možemo predstaviti kao nisku S koja sadrži elemente iz skupa {A, C, G, T}.`} </p> <img alt="" src="/assets/lesson12/pic2.svg" className={classes.indent2x} /> <p className={classes.indent1x}> {`Dakle, genom određenog organizma možemo predstaviti kao nisku čiji su karakteri iz skupa {A, C, G, T}.`} </p> <p className={classes.indent1x}> Na primer, deo genoma enterobakterije fag lambda je prikazan ispod. </p> <img alt="" src="/assets/lesson12/pic3.svg" className={classes.indent2x} /> <h2 className={classes.indent1x}>Rad sa niskama</h2> <p className={classes.indent2x}>Dužina niske:</p> <CodeEditor code={` s = 'ACGTGCTAGCTAGCAG' len(s)`} result={` 16`} customClass={classes.indent3x} /> <pre className={`${classes.code} ${classes.indent2x}`} /> <p className={classes.indent2x}>Podniske date niske s:</p> <CodeEditor code={` s[2:6]`} result={` GTGC`} customClass={classes.indent3x} /> <CodeEditor code={` s[:5]`} result={` ACGTG`} customClass={classes.indent3x} /> <CodeEditor code={` s[-4:]`} result={` GCAG`} customClass={classes.indent3x} /> <p className={classes.indent2x}>Konkatenacija (nadovezivanje) dve niske p i q:</p> <CodeEditor code={` p = 'GCTAA' q = 'ACAAA' p + q`} result={` GCTAAACAAA`} customClass={classes.indent3x} /> <p className={classes.indent2x}>Poređenje dve niske:</p> <CodeEditor code={` p == q`} result={` False`} customClass={classes.indent3x} /> <p className={classes.indent2x}> Funkcija s.join(l) vraća nisku dobijenu nadovezivanjem elemenata liste l tako da je između svakog elementa te liste dodata niska s: </p> <CodeEditor code={` baze = ['A', 'C', 'G', 'T'] ','.join(baze)`} result={` A,C,G,T`} customClass={classes.indent3x} /> <p className={classes.indent2x}> Rad sa bibliotekom random. Ako dodamo seed tada će nam pri svakom pokretanju vraćati isti element, inače će vraćati različiti: </p> <CodeEditor code={` import random random.choice('ACGT')`} result={` A`} customClass={classes.indent3x} /> <p className={classes.indent2x}>*ovde pri svakom pokretanju vraća G:</p> <CodeEditor code={` random.seed(7) random.choice('ACGT')`} result={` G`} customClass={classes.indent3x} /> <p className={classes.indent2x}>Pravimo nisku dužine 10 (svako slovo je nasumično birano):</p> <CodeEditor code={` sekvenca = ''.join([random.choice('ACGT') for _ in range(10)]) sekvenca`} result={` CTAAAGACAA`} customClass={classes.indent3x} /> <h2 className={classes.indent1x}>Manipulacija sa DNK niskama</h2> <p className={classes.indent2x}> Funkcija koja traži najveći zajednički prefiks za dve niske s1 i s2: </p> <CodeEditor code={` def najduziZajednickiPrefiks(s1,s2): i = 0 while i < len(s1) and i < len(s2) and s1[i] == s2[i]: i += 1 return s1[:i] najduziZajednickiPrefiks('AAATGCA','AACGATAAA')`} result={` AA`} customClass={classes.indent3x} /> <p className={classes.indent2x}> Funkcija koja određuje komplementaran DNK lanac datom DNK lancu: </p> <CodeEditor code={` komplement = {'A':'T', 'C':'G', 'G':'C', 'T':'A'} komplement['T']`} result={` A`} customClass={classes.indent3x} /> <CodeEditor code={` def obrnutiKomplement(s): t = '' for i in range(len(s)): t = komplement[s[i]] + t return t obrnutiKomplement('CGATGATA')`} result={` TATCATCG`} customClass={classes.indent3x} /> <h2 className={classes.indent1x}>Kako parsiramo dati genom</h2> <p className={classes.indent2x}> Datoteka sa genomom enterobakterije fag lambda izgleda na sledeći način: </p> <CodeEditor code={` >gi|9626243|ref|NC_001416.1| Enterobacteria phage lambda, complete genome GGGCGGCGACCTCGCGGGTTTTCGCTATTTATGAAAATTTTCCGGTTTAAGGCGTTTCCGTTCTTCTTCG TCATAACTTAATGTTTTTATTTAAAATACCCTCTGAAAAGAAAGGAAACGACAGGTGCTGAAAGCGAGGC TTTTTGGCCTCTGTCGTTTCCTTTCTCTGTTTTTGTCCGTGGAATGAACAATGGAAGTCAACAAAAAGCA GCTGGCTGACATTTTCGGTGCGAGTATCCGTACCATTCAGAACTGGCAGGAACAGGGAATGCCCGTTCTG ...`} customClass={classes.indent3x} /> <p className={classes.indent2x}>Preuzimamo datoteku koja sadrži genom ove bakterije:</p> <CodeEditor code={` !wget http://d28rh4a8wq0iu5.cloudfront.net/ads1/data/lambda_virus.fa`} customClass={classes.indent3x} /> <p className={classes.indent2x}>Čitamo genom iz datoteke:</p> <CodeEditor code={` def procitajGenom(imeDatoteke): genom = '' with open(imeDatoteke,'r') as f: for line in f: if not line[0] == '>': genom += line.rstrip() return genom genom = procitajGenom('lambda_virus.fa')`} customClass={classes.indent3x} /> <p className={classes.indent2x}> Određujemo broj pojavljivanja nukleotida u genomu ove bakterije koristeći biblioteku collections i bez nje: </p> <CodeEditor code={` pojavljivanja = {'A':0, 'C':0, 'G':0, 'T':0} for i in range(len(genom)): pojavljivanja[genom[i]] += 1 pojavljivanja`} result={` {'A': 12334, 'C': 11362, 'G': 12820, 'T': 11986}`} customClass={classes.indent3x} /> <CodeEditor code={` import collections collections.Counter(genom)`} result={` Counter({'A': 12334, 'C': 11362, 'G': 12820, 'T': 11986})`} customClass={classes.indent3x} /> <p className={classes.indent3x}> Na osnovu ovih podataka možemo videti da imamo približan broj svih baza u datom genomu. </p> </div> ); export default Lesson12;
Editor is loading...