💻 Б3: Seq објекти¶
Опис на барање
Да се напише пример за работа со Seq објекти, како што е опишано во поглавје 3, и да се обрне внимание на процесите транскрипција и транслација.

На Rosalind има многу интересни проблеми каде мислев дека можеби е интересно да се обидам да ги решам со користење на Bio.Seq
објекти. За ова барање ги решив точно следните проблеми:
Complementing a Strand of DNA: http://rosalind.info/problems/revc/
Transcribing DNA into RNA: http://rosalind.info/problems/rna/
Translating RNA into Protein: http://rosalind.info/problems/prot/
Computing GC Content: http://rosalind.info/problems/gc/
Finding a Motif in DNA: http://rosalind.info/problems/subs/
Rosalind профил
Профилот каде може да се види дека ги решив: http://rosalind.info/users/zelenkastiot/
1. Complementing a Strand of DNA¶
Овој проблем е поврзан со стрингови од ДНА, каде комплементи се паровите: A-T и C-G.
Обратен комплемент (reverse complement) од ДНА стринг а стринг формиран со зимање на стрингот во обратен редослед и применување на комплемент, т.е. менување на базните парови со своите комплементарни парови (пример “GTCA” ако е влез, соодветен излез е “TGAC”)
Влез:
/rosalind/rosalind_revc.txt
текст фајл со ДНА стринг со должина од најмногу 1000 базни паровиИзлез: Обратен комплемент од стрингот
from Bio.Seq import Seq
with open('rosalind/rosalind_revc.txt', 'r') as file:
sample_dataset = file.read().replace('\n', '')
input_dna = Seq(sample_dataset)
output_rna = input_dna.reverse_complement()
print(output_rna)
GCTTTGTTAATCGGCTAAAACACTATCTCTCGCACTAGGCAGCCCAAAGTCCTCCATACGGAGCTTGCGTCGTATCGTAGTAGCTGCAATCTACCTGGGCGGTGGTGGATGAGCGTGAGCTAAAGCGGGACATCTGTATGGCAAGTAGTCTGCCGTGAACGAGCCAGCCCCTACGGTGTGGACACGTCCTTCAGGTGGTATGGATACGGACACCACATCTGTAGCTTTTGACGTCAGAGAGAGACGTATGAGGGGCGAGACGAGTGATATCTGCACCACCATGCCGGACACGGCGCAGTGGCCATGTATATTTAACGCCTAGTGCCACGAAACTAGGTTCTCTACACTGACACGTACGCCCACGTGCTCAACCTTATGCTGCACATGTCCGTATTTTGTCAATGACTTTGCCACCTTTTACCTCCGTGGTCCATGCGGAGTTTAGAAGTGTTACGCTTGGAGTAATCTCGCCCCCGTTTGGTGGACTGGCACCCGCAGACAGGCCAGAAAGAGCCCGTCCCTGGCACAGTTCCTGGGATAGTAAGGGAATTTACCGCAACTGGCTCACGCCGTTGGTGAAGCTCAGAGCACGTGCCCAGGCTTAGAGTTTCCGCTTAGATGCTCTACGGTAGCACTAAACCAAAATGTTAGGGAATGCCCGGAAAGTTTAATGTGCTTGCAGATAATCATATGCTATTGACCTAGAGACAGTCGAACGCCTCCTCAGGTTCCTAGCAATCCACTTTTGCAATACACATAACTCTTAGCATTATGACCGGAAGCCTAGCTCCTGTAACACCTCCTCTTGTCGGTCCTAACCTATCATCGTGAGCATTTACGGACACTTTAGTTATGCGCTAGCTAATGATATCTTGTGTCTTTTCTAATCAATGAGGCCGGGTAAAACCGCTGCTGCGAGGAA
2. Transcribing DNA into RNA¶
Овој проблем е поврзан со процесот на транскрипција каде идејата е при даден фајл со ДНА стринг преку процесот на транскрипција да се добие соодветната РНА.
Влез:
/rosalind/rosalind_rna.txt
- текст фајл со ДНА стринг со должина од најмногу 1000 базни паровиИзлез: РНА стринг добиен од транскрипција на ДНА стрингот
Решение (Со примена на Bio.Seq):
from Bio.Seq import Seq
with open('rosalind/rosalind_rna.txt', 'r') as file:
sample_dataset = file.read().replace('\n', '')
input_dna = Seq(sample_dataset)
output_rna = input_dna.transcribe()
print(output_rna)
GAAGUGCCUUAGUAGCUAACAGAGGUUCGUACAACAGCGAUGACUUUUGACAAGAUACCAGGCUGCGGCGAAUUUGAGAGGAAUGAUUAAGCAUGGCACACGGGGUGCGCAAGGAGUAUUUCGGGGACCGGGACCUCCAGCGUGCGGCGGCUGGUGAGCUGAGCGUACGCGGCGGCAGGGGCCGUUUACACACCAGGUAGGGUUUUAGAGCCGAUAGAAGUCUAGGUAGCCAUAUGUAGGGCAUCUAGAUUUUCAUAGGUCCUAGGCACCUACGAGAUCCCCAACUAACCAUAGCGGUGACGACGGGUGAUGAGAAAAUUCGGUUUGGUACCAAUGAAACGAUGGACAGAGACAACUGCAUAGGGUGCGGCGUGGCCCAAUCUCCUCUCUCCAUCGCGCAGCGGCUUAAUCCAGCGUGCGUUAUCGAUAAAUUCGCGUAGUAGAGUGAAGACUUGGGCUCUUCCGCGAUGAUGCCUUCCUGUCAUAAGGGGACCUUUAGGACAUUCACGGGUACUUUUGCCUUCCACGCGAGAGGUUGUAGUUGCCGGUCAUGUCGGUACGACCUAGAAAAGUAUGAAUGCCAGGCGUGGGGUUCAUGUACGGCACCCGUUGUUCUCGCUGUUUAGGAAUGGCCAAAUAGUACUUUACUAAGGAAGGAAGAAUUUCCUUCACAAUGCAAAGCAGGGACGCUCCCGACCGCACACCGCAGAGAUAAAUGCUUAAACAACGCUCUAUCGACGUAAGAUGGGAUGCAGCCUCAACCUAAGUUGUGCAAUCACUGUAACGGGCCGCAAGUACAAUGUAGAUAGUGCCUGCCCCUUGGCAAUCACCCUUGCGUUUUCGACAUUAGUUGCAGCUGUCGGAUUGACGUCUUAGGAGUCGUGAUACUUUAGGCAAGAGGGUGCGGUGGCGAAGACAGAACACUGCAUGCUACUCGCCAGUCUAUUUCAUUGGUGUCUCGCAAGGU
Решение (Со операции на стрингови):
rna = sample_dataset.replace("T", "U")
print(output_rna)
GAAGUGCCUUAGUAGCUAACAGAGGUUCGUACAACAGCGAUGACUUUUGACAAGAUACCAGGCUGCGGCGAAUUUGAGAGGAAUGAUUAAGCAUGGCACACGGGGUGCGCAAGGAGUAUUUCGGGGACCGGGACCUCCAGCGUGCGGCGGCUGGUGAGCUGAGCGUACGCGGCGGCAGGGGCCGUUUACACACCAGGUAGGGUUUUAGAGCCGAUAGAAGUCUAGGUAGCCAUAUGUAGGGCAUCUAGAUUUUCAUAGGUCCUAGGCACCUACGAGAUCCCCAACUAACCAUAGCGGUGACGACGGGUGAUGAGAAAAUUCGGUUUGGUACCAAUGAAACGAUGGACAGAGACAACUGCAUAGGGUGCGGCGUGGCCCAAUCUCCUCUCUCCAUCGCGCAGCGGCUUAAUCCAGCGUGCGUUAUCGAUAAAUUCGCGUAGUAGAGUGAAGACUUGGGCUCUUCCGCGAUGAUGCCUUCCUGUCAUAAGGGGACCUUUAGGACAUUCACGGGUACUUUUGCCUUCCACGCGAGAGGUUGUAGUUGCCGGUCAUGUCGGUACGACCUAGAAAAGUAUGAAUGCCAGGCGUGGGGUUCAUGUACGGCACCCGUUGUUCUCGCUGUUUAGGAAUGGCCAAAUAGUACUUUACUAAGGAAGGAAGAAUUUCCUUCACAAUGCAAAGCAGGGACGCUCCCGACCGCACACCGCAGAGAUAAAUGCUUAAACAACGCUCUAUCGACGUAAGAUGGGAUGCAGCCUCAACCUAAGUUGUGCAAUCACUGUAACGGGCCGCAAGUACAAUGUAGAUAGUGCCUGCCCCUUGGCAAUCACCCUUGCGUUUUCGACAUUAGUUGCAGCUGUCGGAUUGACGUCUUAGGAGUCGUGAUACUUUAGGCAAGAGGGUGCGGUGGCGAAGACAGAACACUGCAUGCUACUCGCCAGUCUAUUUCAUUGGUGUCUCGCAAGGU
Проверка за излезот:
print(output_rna == rna)
True
3. Translating RNA into Protein¶
Овој проблем е поврзан со транскрипција од РНА во протеини. 20 најчести аминокиселни се означуваат користејќи ги сите 20 букви од Англиската азбука (сите освен B, J, O, U, X и Z). Стрингови од протеини се создаваат од овие 20 симболи. Овие секвенци заедно со ДНА и РНА секвенците исто така се вика генетски стринг.
Влез:
/rosalind/rosalind_prot.txt
текст фајл со РНА стринг со должина од најмногу 1000 базни паровиИзлез: Протеинска секвенца (без стоп кодони)
Следната табeла е таа што се користи за процесот на транслација:
from Bio.Data import CodonTable
standard_rna_table = CodonTable.unambiguous_rna_by_name["Standard"]
print(standard_rna_table)
Table 1 Standard, SGC0
| U | C | A | G |
--+---------+---------+---------+---------+--
U | UUU F | UCU S | UAU Y | UGU C | U
U | UUC F | UCC S | UAC Y | UGC C | C
U | UUA L | UCA S | UAA Stop| UGA Stop| A
U | UUG L(s)| UCG S | UAG Stop| UGG W | G
--+---------+---------+---------+---------+--
C | CUU L | CCU P | CAU H | CGU R | U
C | CUC L | CCC P | CAC H | CGC R | C
C | CUA L | CCA P | CAA Q | CGA R | A
C | CUG L(s)| CCG P | CAG Q | CGG R | G
--+---------+---------+---------+---------+--
A | AUU I | ACU T | AAU N | AGU S | U
A | AUC I | ACC T | AAC N | AGC S | C
A | AUA I | ACA T | AAA K | AGA R | A
A | AUG M(s)| ACG T | AAG K | AGG R | G
--+---------+---------+---------+---------+--
G | GUU V | GCU A | GAU D | GGU G | U
G | GUC V | GCC A | GAC D | GGC G | C
G | GUA V | GCA A | GAA E | GGA G | A
G | GUG V | GCG A | GAG E | GGG G | G
--+---------+---------+---------+---------+--
Решение:
from Bio.Seq import Seq
with open('rosalind/rosalind_prot.txt', 'r') as file:
sample_dataset = file.read().replace('\n', '')
messenger_rna = Seq(sample_dataset)
protein_seq = messenger_rna.translate(to_stop=True)
print(protein_seq)
METQHTLPCNCRELDKTGSHVVRSGLAYVFAHHITLYRASYGMVSLLSRGHTSGTLLRPMASIRQLCQILDINKLKNQDVLLRYPNGVGLRSVWTSYVVIIFQRWSRRANPLSVIAVLTVYLDMFRGNCSQRRDGRSSDYFYQTSSRPCLLLGAYSLGAIPVTPLNQTTVPPIRCLALQGMQNTAGFAAIESVYRTTCRQLNQREGLSTPSRLRELIWPARYLPVRCECNNGLNTVYSVTVRISSKATTIRTCCRPTYYLLEVMLTRPDSGERTRRAAKYHKHDHIPSARRARRRRVGNPFNTAKTVYGRKDATVHSSSTLAFTSCEGHGGPACHESLASSTARGRLVTKSNKSGPSRRAILFIPQLIEHIMSMERGQWTFTNPSASTRGTKSWGPSWDKRSPGLKPPVAVGIRTRLYGPVLYRMNDRPLMSHIAYGAQSYNQLFRRKCEILFLSPAGPWSACRSQRMLNTTGSCDTFVDAALTLSLYTVNVWEPISNTDPITRAPLVLSRQINSEGIGIHNRPSTSIRVCTGTSNRIQHNILDSGSDLMATPVCDLRGLVCSDRAELPIHSPGGKASSLRWTPSNRPNGNIYSRYASLSDCVLCCSRRLETQVSRQSPRMIRDLLSGFTDMRNVWDRVSCLDAARRALGATSRSTFAGERRWCLVSNVSRKRLSFTTDFISIRTQHGIPSNSLSTNKGSRDTPVCAGDDVSVECPRKESKAKIKFLVLGGVRGSLTGRRKISMLDPTKSSRALAAMGTLVIRIMAVVDDWISSPACTHQDTQLEDLNWVTETWAFRAVGIGLSSAQYHVHRGQRTQHTAARCVLPRRRVRTDDKPIGYIGDRDRPVEDSNGSCSECGRRTERCRNRATRLLTYTRKQLLITGRHNQIRLEIPRLGARCCHYILQVQPQPLSISKLLLENFFGTQTAPDTLSLPSSQDMLPINRPLRFVNIQWRDLPIRGALQATLTLGALLSPFGPCFPMFVSKRPSQFRFNGASSLSGFTYYIIRGCRRSASKREHTPWHLKLPTTHPSPQLVPDPANLKCTKWKWANRTRVLAKTDCCFNAVGRRPASAYHMKMPSQNLSRHIVKKSLVTVGEASQVEHHCINVKVMAKDTGLSGATILWSFKVLRCFVECRPSHRRSGRMLIQFVGAFRNLRLGMRLVSGVDCTFLHLLKISLWSGVSGPERRMHGWLQIGATPRRARLNAKTNLLHLRETDVQTVPTDTAVGSGPLIIVESTALIAVVPEMTIALCQREMVFLYRCRGSQNNAPGRGQVSKHRPQPSKSQGAYRPRSILSCSPVSAPYSTSVPDSRECRESQPTTALRNYRVSGIIAGASASTLNYLTGSCVLFLLRTRCHVAWRAANTTNVDSRSYLPAARLTTSLGEIWIARVEKLRLSNARTALADAVSPNCPSNTFRCPTSFLGNAHLRMYTMLTWFIPLTVSVKGYTGFLNAQVASTDRSKECGSVHGLAMVAWEYAALVVSWRLQGVAILMQLKRIVQITITSTFGRIVCCTKPHLKHFGPGGPRMLSSACIWRGARWINAPARAPESLAHASAGVTRVFSLRNRPSQLHTIHGTACNVKGNEAKHVPNQYPTGGSENVYPPMLIPVCIGTDGDKDHTVMLGAGSLPPRRGGCKSQFTTTLSGTLLDPLALCSSTIVAPVVVANKTRRPRRRSIVNLAGKRQARHRDEVLNTGHALRASHSFVPPCHVPHPGKSPFTRTDHNVVGGHTGFSCRPRKDRGISNAQLESLDPGNLRAQVPLVDALRLSGLLGHSVKLNRYWFVAAYHLGRVGSSELRTAQPTYRGAVDIGNSWGTAGFKSRRLRQSSDKAYGARRLTSEVSNTRVSLPMHYVSIHCEGLTDHHAQRSLKNTSLIRPSRDSRRLPRTSENKQILPRPSCRLSHWPSNTHPGAPTSVNPYLRHRGIRDHCAPRCAGRTTYCEQSAGIFELAHAGEKATIHKPIRWDIEAGLIGCCVCSGAPYTNDLYASPRLLRVPKRRLRCLIALSRSHYILTPINMWENGTNNAEFSGINGTVGIAHDDSAYKGYRPADSQATRRSDTGWCLIPDRLWSKDYLVPFSLTYDDTTTACTALTFDPVRKSLGVGLFSQHHESNLPIPVMEASTAYVKKIGIRTAVSQAGDGAFTSLVADRRIKLGLKFILLLGLVYWFNIRNKPLCRMAKSWRFLFNLSATSSKSFAIADRGSGLEIADKIRDFTGRSTWRMVCSVLQVNERGNNYITDMDALWSYYPRYVIGRGIVVKKCSFPAEAKRDAMTEIGTDDYAKEGTDLLIPSGYGNETSCSSGAEDPYPPLTMWSGGLRILMQPNLCQYKSGTTSQGYFCIFHFGSPLAVSSHWSSSTGRRPPPLFSALQHIPVKLLTTRINACAGDYHDNVPWPPSGYSVSSLYCSSTTRLAHFLGQEFHELRRPWLIEGLPSSIEASCQQTQQDCYRRPAAPIFYSVLKLALVPLRPIIVGGLGCLEPAIVYSYFTTNLTRRVGPRSENLYLRLLRVVDTVTCNNCGKLGTPDLCYCSDMLLKLNRSELESVHWVCRLSGPENSSKHISTLSDSPKFLWDYYVNCSATVTSKRPMSRAGACSHRRSHVGHTSTDVKSVRSLLGCVLRLTVWSRIFGARRWRETQGRVVRSLHLRRRIFPDWSGHGLRLSCHDSRDYVVRAIRARSYEGSLIFLSSILTACLCQQCLAQERRQRPLWDGTQPTPVLRIVHDCTRPPGRFPLDCSPSVPMPLRDMHICAIHSKYSTETCSRTSIGELRTPQPEYIPERWQVFGGLERSIGDLTSVLHWFDSGYLRHNISIYPRIGRRRRSVIMTAFACIRLYRIQTVAVCFSGIACKAREKTTHSFGFLSLDEHQWSELASTTTDNCFRALSGVTAIYVRGTLLSRAECARDLESIEPHCVRSTHRRRYVRESWAVMRFTRMRSGKRFFPLSVYNLVQGDQVNKLDQSRSGSNMDWWQEVTEGPSNTIKNLSDYSPDLGASNEGLRRVWLSTIFIFEEIAQISFLPLGVKPCYPLSHPFENLPSVILNSAAERGVGPGSEPHRPPRMGGKVSSCNLRGSREVIFYISCCGTGIKPGKKAHRLRIHFPPFKTRFPTSRSLRYALARSTTNIRRSLNSIKDDQFLDSWTAGAIKSYWSSIVWGARDMTRRRELIYQCTTPG
4. Computing GC Content¶
Овој проблем е поврзан со процентот на GC во ДНА секвенца.
Влез:
/rosalind/rosalind_gc.txt
FASTA фајл со неколку ID и своите секвенциИзлез: Најголемиот GC процент од целиот FASTA фајл
dict_records = {}
for seq_record in SeqIO.parse("rosalind/rosalind_gc.fasta", "fasta"):
seq_temp = seq_record.seq
dict_records[seq_record.id] = 100 * float(seq_temp.count("G") + seq_temp.count("C")) / len(seq_temp)
dict_records
{'Rosalind_0344': 49.22907488986784,
'Rosalind_2995': 50.100806451612904,
'Rosalind_0589': 51.345029239766085,
'Rosalind_6146': 46.45006016847172,
'Rosalind_7650': 51.56081808396125,
'Rosalind_1350': 48.55670103092783,
'Rosalind_1601': 51.83374083129584,
'Rosalind_1751': 48.466257668711656,
'Rosalind_1226': 50.89179548156956}
max_value = max(dict_records.values()) # најголема вредност
max_keys = [k for k, v in dict_records.items() if v == max_value] # клуч со максимална вредност
print(max_keys[0])
print(f'{max_value:.6f}')
Rosalind_1601
51.833741
5. Finding a Motif in DNA¶
Овој проблем е поврзан со стрингови од ДНА и подстрингови од ДНА, познати како Motif. Наоѓање на вакви интерави од ДНА во геноми од различни организми (најчесто различен вид) покажува кон тоа дека тој подинтервал има иста функција кај двата организми.
Motif е често споделувано парче од DNA, честа задача во молекуларна биологија е да се бараат вакви подстрингови.
Влез:
/rosalind/rosalind_subs.txt
текст фајл со ДНА (прв ред), подстринг т.е. парче ДНА (втор ред)Излез: Сите позиции каде се јавува тој подстринг
file = open('rosalind/rosalind_subs.txt', 'r')
Lines = file.readlines()
dna_string = Lines[0].strip()
sub_string = Lines[1].strip()
found = []
k = 0
while k < len(dna_string)-3:
current_codon = dna_string[k:k+(len(sub_string))]
if current_codon == sub_string:
found.append(k+1)
k+=1
for i in range(len(found)):
print(found[i], end=" ")
13 75 118 125 175 213 220 255 285 292 299 395 473 480 580 587 594 704 728 739 765 874