O documento discute a plataforma Rosalind para aprendizado de bioinformática através da resolução de problemas bioinformáticos. Apresenta alguns problemas como contar nucleotídeos em DNA, transcrever DNA para RNA, determinar o complemento de uma fita de DNA e traduzir RNA para proteínas. Também discute formatos FASTA, NCBI, BLAST, k-mers e grafos de De Bruijn aplicados em reconstrução de genomas.
16. Complementing a Strand of DNA
• Inverte a string
• ‘A’ e ‘T’ são complementares um do outro
assim como ‘C’ e ‘G’.
• Entrada: AAAACCCGGT
– String invertida: TGGCCCAAAA
• Saída: ACCGGGTTTT
17. Complementing a Strand of DNA
• http://rosalind.info/problems/revc/
• “s” representa uma string
• “l” representa uma lista
• “d” representa um dicionário
18. Counting Point Mutations
• Problema da classe de alinhamento.
• Serão dadas duas strings de tamanhos iguais.
• A Hamming distance entre duas strings “s” e
“t” é o número de símbolos correspondentes
que são diferentes em “s” e “t”.
21. Translating RNA into Protein
• Nesse problema é dada como entrada uma
string RNA “s” correspondente a uma fita de
mRNA.
• A saída é uma string proteína codificada a
partir de “s”.
22. Translating RNA into Protein
• Para resolver esse problema, o Rosalind
fornece uma tabela de códons para mapear
cada aminoácido.
24. Translating RNA into Protein
• Resumindo: cada conjunto de 3 letras da
string RNA corresponde a um aminoácido.
• Exemplo:
• string RNA: AUGGCC
• “AUG” corresponde a “M” na tabela.
• “GCC” corresponde a “A” na tabela.
26. Finding a Motif in DNA
• http://rosalind.info/problems/subs/
• Nesse problema são dadas como entrada duas
strings “s” e “t”.
• A saída são todas as posições em que “t”
ocorre em “s”.
27. Finding a Motif in DNA
• Exemplo de entrada:
s = GATATATGCATATACTT
t = ATAT
• Saída: 2 4 10
29. Enumerating Gene Orders
• Problema da classe “Rearranjos de Genoma”.
• Uma permutação de tamanho “n” é um
ordenamento dos inteiros positivos:
– {1, 2, ..., n}
• A entrada é um inteiro n <= 7.
• A saída é composta pelo número de
permutações seguido de uma lista de todas as
permutações.
37. Finding a Shared Motif
• http://rosalind.info/problems/lcsm/
• Problema interessante onde o Rosalind
fornece várias strings (cadeias de DNA) como
entrada e quer como saída a maior substring
comum a todas as strings fornecidas.
38. Finding a Shared Motif
• Em um primeiro momento você poderá
pensar em gerar todas as substrings possíveis
de apenas uma das strings, armazenar elas
numa lista e percorrer o restante das strings
para saber qual é a substring comum e de
maior tamanho.
• itertools.combinations() faz isso...
39. Finding a Shared Motif
• Como gerar todas as substrigs de uma string?
• Para a string “ABCD”:
• “A”, “B”, “C”, “D”, “AB”, “AC”, “AD”, “BC”, “BD”,
“CD”, “ABC”, “ABD”, “ACD”, “BCD”, “ABCD”.
• Fácil não é mesmo ?
40. Finding a Shared Motif
• Para uma string de tamanho 4, serão geradas
15 substrings.
• Para uma string de tamanho 10, serão geradas
1023 substrings.
• Para uma string de tamanho 20 são geradas
1.048.575 substrings.
• E para uma string do caso de teste do
Rosalind? Obs.: strings de tamanho 1000
42. Finding a Shared Motif
• A exceção aconteceu porque eu tentei
armazenar um número muito grande de
elementos numa lista. Qual a solução?
a) Otimizar meu código
b) Comprar mais memória RAM
c) Mudar o algoritmo
d) Implementar em Java (Haha)
43. Finding a Shared Motif
• Solução trivial para o problema seria não
guardar as substrings.
• A cada substring gerada você verifica nas
outras strings. Isso resolve.
• Alguns casos de testes foram testados, o
programa levou entre 5 a 8 segundos.
• Será que podemos melhorar isso?
44. Finding a Shared Motif
• Uma possível otimização é não fazer
verificação de uma determinada substring
caso ela tenha tamanho menor do que a
maior substring guardada até o momento.
• Para um determinado caso de teste, essa
otimização diminuiu o tempo de 6.2 segundos
para 3.7 segundos.
45. Arquivos FASTA
• Formato FASTA é um arquivo baseado em
texto para representar sequências genéticas
onde os nucleotídeos ou aminoácidos são
representados usando códigos de uma única
letra.
• Linhas do arquivo que começam com “>” ou
“;” representam comentários (descrição da
sequência).
47. NCBI
• NCBI: National Center of Biotechnology
Information
• http://www.ncbi.nlm.nih.gov/
• NCBI dentre outras funções, armazena dados
da sequenciação de genomas.
50. BLAST
• Basic Local Alignment Search Tool
• É a ferramenta de alinhamento mais utilizada
atualmente.
• Alinha uma sequência de entrada contra uma
base de dados desejada.
52. K-mers
• Composição k-mer é uma coleção de todas as
substrings k-mer de texto.
• Composição k-mer para TATGGGGTGC com
k=3:
• {TAT, ATG, TGG, GGG, GGG, GGT, GTG, TGC}
53. Grafos De Bruijn
• Reconstrução de strings
• Como era feito: procura-se um caminho no
grafo que visita cada nó somente uma vez
(caminho hamiltoniano).
• Problema: mais de um caminho encontrado.
• Novo grafo desenvolvido: Grafo de Bruijn
• O Grafo de Bruijn representa melhor uma
composição k-mer.
54. Grafos De Bruijn
• O foco agora é nas arestas.
• Caminhos eulerianos: passa por uma aresta
somente uma vez.
55. Construção do Grafo De Bruijn
• Exemplo de sequência: TAATG com k = 3
• Composição k-mer:
– {TAA, AAT, ATG}
• {TAA, AAT, ATG} são as arestas do grafo.
• Os nós são formados por prefixos e sufixos de
cada mer.
• Prefixo de TAA: TA
• Sufixo de TAA: AA
56. Construção do Grafo De Bruijn
• Continuação... {TAA, AAT, ATG}
TAA AAT ATG
TA ATAA TG
57. Desafio
• String Reconstruction from Read-Pairs
Problem
– http://rosalind.info/problems/4i/
– Grafos De Bruijn
– Caminhos eulerianos
– Reconstrução de genomas
58. Sugestões de estudo
• https://www.youtube.com/pycursos
– Playlist Python para Bioinformatas
• Livro: