Escolar Documentos
Profissional Documentos
Cultura Documentos
BIOINFORMÁTICA
Elaboração
Produção
APRESENTAÇÃO....................................................................................................................................................................................... 4
INTRODUÇÃO.............................................................................................................................................................................................. 7
UNIDADE I
INTRODUÇÃO À PROGRAMAÇÃO................................................................................................................................................................................... 9
CAPÍTULO 1
LÓGICA DE PROGRAMAÇÃO E ALGORITMOS........................................................................................................................................... 9
CAPÍTULO 2
VARIÁVEIS, CONSTANTES E OPERADORES.............................................................................................................................................. 14
UNIDADE II
LINGUAGEM R E PYTHON E SUAS IDES.................................................................................................................................................................... 45
CAPÍTULO 1
IDES PARA R E PYTHON.................................................................................................................................................................................... 45
PROGRAMAÇÃO EM PYTHON........................................................................................................................................................................ 48
CAPÍTULO 3
LINGUAGEM R....................................................................................................................................................................................................... 63
UNIDADE III
USO DE BANCO DE DADOS.............................................................................................................................................................................................. 71
CAPÍTULO 1
O QUE SÃO BANCO DE DADOS....................................................................................................................................................................... 71
CAPÍTULO 2
TIPOS DE BANCOS DE DADOS....................................................................................................................................................................... 77
UNIDADE IV
ALGORITMOS DE BIOINFORMÁTICA.......................................................................................................................................................................... 85
CAPÍTULO 1
MODELOS DE ALGORITMOS ......................................................................................................................................................................... 85
CAPÍTULO 2
FONTES DE ALGORITMOS PARA USO EM BIOINFORMÁTICA......................................................................................................... 95
REFERÊNCIAS....................................................................................................................................................................................... 126
APRESENTAÇÃO
Caro aluno
Conselho Editorial
4
ORGANIZAÇÃO DO CADERNO
DE ESTUDOS E PESQUISA
A seguir, apresentamos uma breve descrição dos ícones utilizados na organização dos
Cadernos de Estudos e Pesquisa.
Provocação
Textos que buscam instigar o aluno a refletir sobre determinado assunto
antes mesmo de iniciar sua leitura ou após algum trecho pertinente para
o autor conteudista.
Para refletir
Questões inseridas no decorrer do estudo a fim de que o aluno faça uma
pausa e reflita sobre o conteúdo estudado ou temas que o ajudem em
seu raciocínio. É importante que ele verifique seus conhecimentos, suas
experiências e seus sentimentos. As reflexões são o ponto de partida para
a construção de suas conclusões.
Atenção
Chamadas para alertar detalhes/tópicos importantes que contribuam
para a síntese/conclusão do assunto abordado.
5
Organização do Caderno de Estudos e Pesquisa
Saiba mais
Informações complementares para elucidar a construção das sínteses/
conclusões sobre o assunto abordado.
Sintetizando
Trecho que busca resumir informações relevantes do conteúdo, facilitando
o entendimento pelo aluno sobre trechos mais complexos.
6
INTRODUÇÃO
7
Os dados biológicos estão distribuídos em BDB especializados, sendo que o maior
deles é o Centro Nacional de Informação de Biotecnologia (National Center for
Biotechnoly Information – NCBI), um banco de dados de uso gratuito que fornece
diversas ferramentas para as análises. O repositório do NCBI é vasto, contendo dados
de literaturas médica e científica, de sequenciamentos genômicos e proteicos, de dados
clínicos etc.
Objetivos
» Conceituar a lógica de programação e descrever os métodos para a criação
de algoritmos.
» Identificar a diferença básica entre os tipos de dados e compreender a
declaração de variáveis.
» Compreender os diferentes tipos de estruturas de decisão e de repetição.
CAPÍTULO 1
Lógica de programação e algoritmos
A palavra lógica é derivada da palavra grega, logos, e está associada ao raciocínio. Desta
forma, a lógica pode ser considerada como a arte de pensar corretamente. Ela trata das
formas de pensamento dedutivo, indutivo, hipotético, as quais visam à determinação do
que é verdadeiro ou não. Utilizamos a lógica no dia a dia para organizar o pensamento de
forma coerente; para permitir chegar a determinadas conclusões e, ainda, para escolher
caminhos para resolver problemas conhecidos. A lógica é, frequentemente, associada à
matemática, contudo sua aplicabilidade é muito mais ampla. Podemos utilizar a lógica
para definir etapas que devem ser realizadas para alcançar determinado objetivo. Uma
tarefa simples, como “retirar o carro da garagem”, envolve diversas etapas que devem
ser seguidas passo a passo: (1) pegar a chave; (2) abrir o carro; (3) entrar no carro; (4)
colocar a chave na ignição; (5) engatar a marcha ré; e (6) dirigir o carro. A definição
da ordem das etapas é realizada utilizando lógica, já que, pela lógica, sabemos que
não é possível dirigir o carro sem entrar nele primeiro. Desse modo, para alcançar o
objetivo final, deve-se seguir todas as etapas na ordem definida.
Lógica de programação
Aplicando os conceitos de lógica no âmbito computacional, é fácil compreender a
importância da lógica para a criação de algoritmos. A lógica de programação se iniciou
nos anos 1970 por meio de sistemas de dedução automatizados que testavam teoremas
e inteligência artificial.
A lógica de programação tem como objetivo mostrar métodos para solucionar problemas,
além de determinar a sequência lógica para o desenvolvimento de um programa
(ALMEIDA, 2008).
9
Unidade I | Introdução à programação
Um algoritmo pode ser definido como uma sequência de passos que visam atingir um
objetivo bem definido. Na medida em que precisamos especificar uma sequência de
passos, é necessário utilizar ordem, ou seja, “pensar em ordem”, portanto precisamos
utilizar lógica (FORBELLONE, 2005).
Representação de algoritmos
Descrição narrativa
10
Introdução à programação | Unidade I
Pseudocódigo
Fluxograma
11
Unidade I | Introdução à programação
Esse tipo de representação é mais sucinto que a textual, mas para construí-lo é necessário
aprender a simbologia dos fluxogramas. O quadro a seguir, representa os principais
simbolos utilizados no fluxograma.
Simbolo Aplicação
Utilizado para conectar os simbolos do fluxograma e, ainda, indicar o sentido dos dados.
» Definir quais os dados de entradas, ou seja, o que o usuário deve fornecer para
o algoritmo.
12
Introdução à programação | Unidade I
Linguagem de programação
Um programa, por sua vez, é um software computacional que realiza uma tarefa utilizando
uma linguagem de programação. Se fizermos uma pequena busca no Google utilizando
os seguintes termos de busca, “As 5 linguagens de programação mais utilizadas em
2020”, teremos o seguinte resultado: 1º Java, 2º JavaScript, 3º Python, 4º PHP e 5º C++.
É claro que o ranqueamento pode mudar com o tempo, visto que novas linguagens
surgem no mercado, o que faz com que outras se tornem obsoletas.
13
CAPÍTULO 2
Variáveis, constantes e operadores
Variáveis e constantes
Ao escrever um programa, para realizar determinada tarefa, é necessário definir quais
tipos de dados serão utilizados, dados esses que são fornecidos pelo usuário. Os dados
utilizados deverão ser armazenados na memória do computador. Para compreender
melhor essa forma de armazenamento, vamos utilizar a analogia de um arquivo,
daqueles utilizados em escritórios, cheios de gavetas etiquetadas, para armazenamento
de documentos ou de objetos. A memória é como se fosse esse grande arquivo, e as
gavetas são as variáveis que têm nomes (etiquetas) diferentes. Ainda, imagine que as
gavetas tenham tamanhos diferentes, isso representa os tipos diferentes de variáveis,
os quais podem ocupar mais ou menos espaço na memória.
Neste capítulo, iremos realizar algumas aplicações práticas em pseudocódigo. Para isso,
o VisualG será indicado para criar e executar algoritmos em português estruturado
(Portugol), por se tratar de um programa de domínio público, simples e ideal para
programadores iniciantes. Para baixá-lo, basta acessar: http://visualg3.com.br.
Variáveis
Tipos de variáveis
O tipo de uma variável, basicamente, está associado ao tipo de dado associado a ela. Se
uma variável armazenar um número, ela é do tipo numérica, se armazenar letras, é do
tipo caractere e, assim, por diante. Os tipos de dados são bem similares para qualquer
tipo de linguagem de programação e podem ser classificadas em duas principais
categorias: dados primitivos e dados derivados (customizados).
14
Introdução à programação | Unidade I
Dados Primitivos
Inteiro
Contém valores pertencentes ao conjunto dos números inteiros. Podem ser positivos,
negativos e nulos. Os valores inteiros não podem conter casas decimais Exemplo: -8,
-3, 0, 1, 2, 100.
Real
Contém valores pertencentes ao conjunto dos números reais. Além de poderem ser
negativos ou positivos, ainda, podem conter casas decimais, representadas por ponto
(“.”). Exemplo: -8.72, 0.0, 4.83.
Caractere
Lógicos ou booleanos
Informação que pode assumir apenas dois valores possíveis: verdadeiro (true) ou falso
(false); ou, ainda, sim (yes) ou não (not). Esses dados, também, são conhecidos como
booleanos, homenagem ao filósofo inglês George Boole, por causa da sua grande
contribuição à área de lógica matemática.
Dados derivados
15
Unidade I | Introdução à programação
Declaração de variáveis
A declaração de variável dentro de um algoritmo tem como objetivo fazer com que o
computador reserve um espaço para armazenar algum tipo de dado. Esse espaço será
identificado por um nome (que será o nome da variável). Em pseudocódigo, a declaração
da variável ocorre antes da atribuição de valores. Já em linguagens de programação,
é possível declarar e já atribuir variáveis com um valor na mesma linha do código. É
importante salientar que cada variável só pode armazenar um único dado por vez e
esse dado deve ser do mesmo tipo que foi declarado.
Algumas linguagens podem fazer distinção entre letra maiúscula e minúscula, conhecidas
como case-sensitive. Nesses casos, a variável “nome” é diferente de “Nome” e de “NOME”.
16
Introdução à programação | Unidade I
Entendendo o código
O algoritmo em português é estruturado da seguinte forma: algoritmo (identificação
do nome – é dado pelo usuário), descrições a respeito do código que não são
consideradas na execução do programa (identificadas pelas duas barras //), var
(seção de declaração das variáveis), início (local onde é escrito todo o código, com
os procedimentos) e fimalgoritmo (indica que o código finalizou).
Declaração das variáveis (linhas 7 e 8): as variáveis são declaradas dentro da seção
de declaração (var). Elas devem ter um identificador (exemplo: nome, idade) e tipo
de dados atribuído (exemplo: caracter e inteiro).
17
Unidade I | Introdução à programação
Linhas 15 e 16: comando escreval tem a mesma função do escreval das linhas
11 e 13, só que, aqui, além de imprimir, na tela, a informação contida entre aspas
“ ”, irá imprimir os valores contidos em cada variável.
Entendendo o código
Aqui, você já entendeu a estrutura do algoritmo, os comandos leia e escreval. Então,
o que faz o código da linha 14? A linha 14 resolve uma operação de soma. A linha
diz o seguinte: a variável soma recebe (representada pelos símbolos <-) o valor
armazenado na variável n1 somado (+) ao valor armazenado na n2. Lembre-se de
18
Introdução à programação | Unidade I
Constantes
Diferente das variáveis, que possuem valores que podem alterar durante a execução
do código, as constantes armazenam os valores fixos e inalteráveis. Uma constante
é bastante utilizada dentro de expressões matemáticas. Um exemplo clássico de uma
constante, não apenas dentro do âmbito computacional, é o valor de Pi (π) 3,1415. As
mesmas regras, para a nomeação de variáveis, aplicam-se para as constantes. Segue,
logo mais, um exemplo da utilização de uma constante em um pseudocódigo, o qual
tem como objetivo calcular o volume de um cilindro utilizando a seguinte expressão
matemática: V = π x r2 x h (onde V = volume do cilindro; π é a nossa constante, com
valor de 3.1415; r = raio e h = altura).
1 ALGORITMO “EXEMPLO 3”
2 // FUNÇÃO : VOLUME DE UM CILINDRO
3 // AUTOR :
4 // DATA :
5 // SEÇÃO DE DECLARAÇÕES
6 VAR
7 V, R, H: REAL
8 INICIO
9 // SEÇÃO DE COMANDOS
10 ESCREVAL (“DIGITE O VALOR DO RAIO DO CILINDRO “)
11 LEIA (R)
12 ESCREVAL (“DIGITE O VALOR DA ALTURA DO CILINDRO “)
13 LEIA (H)
14 PI <- 3.141515
15 V <- PI * R^2 * H
16 ESCREVAL (“O VOLUME DO CILINDRO É”, V)
17 FIMALGORITMO
19
Unidade I | Introdução à programação
Operadores lógicos
Exemplificando, imagine que você esteja preparando uma viagem para o exterior, mas,
para isso, você precisa poupar dinheiro e/ou ganhar mesada (quadro 4). Aplicando a
lógica booleana dentro deste contexto, teríamos os possíveis resultados: caso a condição
para viagem ao exterior seja poupar dinheiro e ganhar mesada, você apenas viajaria
caso as duas condições fossem verdadeiras. Contudo, se você necessitasse de apenas
uma das condições para viajar, você só não viajaria caso não conseguisse nem juntar
dinheiro e nem recebesse mesada.
20
Introdução à programação | Unidade I
No caso de negação, imagine que, para viajar, necessitasse de poupar dinheiro. Logo,
se poupar dinheiro, você viaja, se não poupar, você não viaja.
Operadores aritméticos
Os operadores aritméticos são utilizados para definir quais ferramentas serão utilizados
para a execução do processamento matemático. Eles podem ser classificados em duas
categorias: binários (aqueles utilizados em operações de radiciação, exponenciação,
divisão, multiplicação, adição e substração) e unários (aqueles utilizados para inverter
um valor numérico: negativo para positivo ou positivo para negativo).
Operador Descrição
+ (soma) Efetua a soma entre dois números.
- (subtração) Efetua a subtração entre dois números.
* (multiplicação) Efetua mutiplicação entre dois números.
/ (divisão) Efetua a divisão entre dois números (resulta em número com ponto flutuante).
\ ou div Efetua a divisão entre dois números inteiros e o resultado é um número inteiro (despreza a parte
fracionária).
% ou mod Retorna o resto da divisão de inteiros.
Fonte: elaboração do próprio autor.
21
Unidade I | Introdução à programação
9 inicio
10 // Seção de Comandos
11 A <- 1
12 B <- 3
13 C <- 5
14 D <- 25
15 soma <- A+B
16 subtracao <- D-C
17 multiplicacao <- D*B
18 divisao <- D/C
19 divDB <- D div B
20 modDB <- D mod B
21 escreval (“A soma de 1 e 3 é igual a “, soma)
22 escreval (“A subtração de 25 e 5 é igual a “, subtracao)
23 escreval (“A multiplicação de 25 e 3 é igual a a “, multi-
plicacao)
24 escreval (“A divisão de 25 e 5 é igual a “, divisao)
25 escreval (“O número inteiro, resultado da divisão de 25 e 3
é igual a “, divDB)
26 escreval (“O resto da divisão de 25 e 3 é igual a “, modDB)
27 fimalgoritmo
São aqueles que comparam ou relacionam dois valores ou variáveis. Essas comparações
podem utilizar os seguintes operadores.
Operadores Descrição
< Menor que
> Maior que
<= Menor ou igual a
>= Maior ou igual a
= ou == Igual a
22
Introdução à programação | Unidade I
!= Não igual a
<> Diferente de
Fonte: elaboração do próprio autor.
Quais operações serão executadas primeiro? Neste caso, primeiro será realizada a
divisão e a multiplicação, na ordem em que aparecem. Depois, as operações de soma
e de subtração. O algoritmo, abaixo, executa a expressão acima.
1 algoritmo “Exemplo 5”
2 // Função : prioridades de operações
3 // Autor :
4 // Data :
5 // Seção de Declarações
6 var
7 resultado: real
8 inicio
9 // Seção de Comandos
10 resultado <- 130+85-12/3*8
11 escreval (“O resultado da expressão é “, resultado)
12 fimalgoritmo
Prioridade Operadores
1º *, /, \
2º +, -, E e OU
3º =, <>, <, > <=, >=
Fonte: elaboração do próprio autor.
23
CAPÍTULO 3
Estruturas de decisão, repetição,
funções e procedimentos
A lógica da tomada de decisão pode ser definida pela relação entre variável versus
variável, variável versus constante ou constante versus variável. Existem dois tipos
principais de desvio condicional: desvio condicional simples ou composto. Quando
é necessário usar verificações lógicas sucessivas para a tomada de decisão que são
baseadas em diversas condições, pode-se utilizar desvios sequenciais, encadeados ou
por seleção. Todas estas tomadas de decisões podem ser simples ou compostas.
24
Introdução à programação | Unidade I
Esse tipo de desvio é processado apenas para o lado em que a condição for verdadeira.
Em português estruturado, essa tomada de decisão utiliza os comandos se, entao
e fimse (figura 3).
Exemplificando este tipo de desvio, considere um algoritmo que deve receber duas
notas de aluno, calcular a média e escrever na tela, caso o aluno seja aprovado. Imagine
que a condição de aprovação seja média com valor igual ou maior que 6. Perceba que,
neste caso, o algoritmo só imprime, na tela, caso a condição seja verdadeira. Não existe
desvio caso a condição seja falsa.
1 algoritmo “desvio condicional simples”
3 // Autor :
4 // Data :
5 // Seção de Declarações
6 var
25
Unidade I | Introdução à programação
8 inicio
9 // Seção de Comandos
12 leia (nota1)
14 leia (nota2)
19 fimse
20 fimalgoritmo
10
A média do aluno é: 9
26
Introdução à programação | Unidade I
Perceba que, neste último caso, nenhuma mensagem foi impressa na tela, pois o
programa não foi instruído desta forma. A mensagem aparece apenas quando a
condição é verdadeira.
Neste caso, as instruções, associadas ao desvio, são definidas tanto para a condição
verdadeira quanto para a falsa (figura 4). Em português estruturado, os comandos,
para este tipo de estrutura, são se, então, senao e fimse.
Utilizando, ainda, o exemplo de cálculo de média, perceba que, neste caso, uma
informação será impressa na tela caso a condição seja falsa.
3 // Autor :
4 // Data :
27
Unidade I | Introdução à programação
5 // Seção de Declarações
6 var
8 inicio
9 // Seção de Comandos
11 leia (nota1)
13 leia (nota2)
18 senao
20 fimse
21 fimalgoritmo
10
a média do aluno é: 9
28
Introdução à programação | Unidade I
E agora, caso a condição seja falsa. Perceba que, neste caso, há uma mensagem associada
a esse desvio condicional.
digite a nota 1 do aluno:
29
Unidade I | Introdução à programação
Utilizando, ainda, o exemplo de cálculo de média de aluno, mas, neste caso, vamos
introduzir uma outra operação que será executada, a de cálculo de frequência do
aluno. Os algoritmos, abaixo, são exemplos de desvio condicional sequencial, simples
e composto, para a problemática acima.
1 algoritmo “desvio condicional sequencial simples”
3 // Autor :
4 // Data :
5 // Seção de Declarações
6 var
30
Introdução à programação | Unidade I
8 inicio
8 // Seção de Comandos
10 leia (nota1)
12 leia (nota2)
14 leia (CH)
17 leia (faltas)
27 fimse
30 fimse
31 fimalgoritmo
Segue a execução do programa caso as duas condições sejam verdadeiras. Perceba que,
neste caso, a situação do aluno, em relação à nota e à frequência, é impressa na tela.
digite a nota 1 do aluno:
31
Unidade I | Introdução à programação
10
40
Segue a execução do programa, caso apenas um das condições seja verdadeira. Perceba
que, neste caso, apenas uma mensagem é impressa na tela sobre a situação do aluno.
digite a nota 1 do aluno:
10
40
12
32
Introdução à programação | Unidade I
Abaixo, segue a execução do programa caso as duas condições sejam falsas. Perceba
que, neste caso, não é impressa nenhuma mensagem sobre a situação do aluno. Apenas
o cálculo da média e da frequência.
digite a nota 1 do aluno:
40
12
33
Unidade I | Introdução à programação
34
Introdução à programação | Unidade I
3 // Autor :
4 // Data :
5 // Seção de Declarações
6 var
8 inicio CX
9 // Seção de Comandos
11 leia (nota1)
13 leia (nota2)
15 leia (CH)
17 leia (faltas)
35
Unidade I | Introdução à programação
28 fimse
29 fimse
30 fimalgoritmo
Neste caso, a situação do aluno só será informada apenas quando as duas condições
forem verdadeiras. Caso contrário, somente, será informada a média e a frequência.
digite a nota 1 do aluno:
40
Aluno aprovado
2 // Função :
3 // Autor :
4 // Data :
5 // Seção de Declarações
6 var
36
Introdução à programação | Unidade I
8 inicio
9 // Seção de Comandos
11 leia (nota1)
13 leia (nota2)
15 leia (CH)
17 leia (faltas)
28 senao
30 fimse
31 senao
37
Unidade I | Introdução à programação
33 fimse
34 fimalgoritmo
10
40
Aluno aprovado
38
Introdução à programação | Unidade I
Aluno reprovado
Estruturas de repetição
São aquelas que permitem a execução de um trecho do algoritmo mais de uma vez. O
trecho repetido é chamado de loop ou de laço. Algo importante, dentro deste contexto,
é que as repetições devem sempre ser finitas. Se elas não forem bem implementadas,
pode-se criar loops infinitos.
39
Unidade I | Introdução à programação
repetindo até 10
repetindo até 10
repetindo até 10
repetindo até 10
Fim da execução.
Execução da repetição.
A = 5
B = 8
A = 8
B = 10
A = 11
B = 12
A = 14
B = 14
*** Fim da execução.
*** Feche esta janela para retornar ao Visualg.
40
Introdução à programação | Unidade I
Este tipo estrutura de repetição difere das anteriores pois o código é repetido enquanto
a condição for falsa. E, neste caso, a avaliação da expressão ocorre no fim do loop. Ela
pode ser utilizada nas condições em que se desconhece a quantidade de vezes em que
o código deve ser executado. O algoritmo, abaixo, exemplifica este tipo de estrutura.
1 algoritmo “Exemplo8”
2 // Função : repita até
3 // Autor :
4 // Data :
5 // Seção de Declarações
6 var
7 i: inteiro
8 inicio
9 // Seção de Comandos
10 i <- 10
11 repita
12 escreval (i)
13 i <- i + 2
14 ate i > 20
15 fimalgoritmo
41
Unidade I | Introdução à programação
Funções
As funções são projetadas para realizar tarefas específicas dentro do programa principal.
Sua estrutura é similar a um algoritmo, com o início, a seção de declarações de variáveis,
a seção de comandos e o fim. Depois de criada, a função pode ser chamada dentro do
programa principal (figura 9).
Uma das grandes vantagens de utilizar funções dentro do programa é não ter que
repetir códigos toda vez que um método deve ser aplicado, basta criar a função uma
única vez e chamá-la dentro do programa sempre que for necessário.
42
Introdução à programação | Unidade I
3 // Autor :
4 // Data :
5 //Seção da sub-rotina
6 funcao CalculoVolume:real
7 var
8 vol: real
9 inicio
10 pi <- 3,141515
11 vol <- pi * r^2 * h
12 retorne vol
13 fimfuncao
14
15 // Seção do programa
16 var
17 r, h, volume: real
18 inicio
19 escreval (“Digite o valor do raio do cilindro: “)
20 leia (r)
21 escreval (“Digite o valor da altura do cilindro: “)
22 leia (h)
23 // o volume recebe o resultado da função CalculoVolume
24 volume <- CalculoVolume
25 escreval (“O volume do cilindro é :”, volume)
26 fimalgoritmo
Execução do algoritmo.
Digite o valor do raio do cilindro:
2
Digite o valor da altura do cilindro:
3
O volume do cilindro é : 37.6991118430775
*** Fim da execução.
*** Feche esta janela para retornar ao Visualg..
Procedimentos
43
Unidade I | Introdução à programação
Execução do algoritmo.
escreva um número
2
escreva outro número
4
6
*** Fim da execução.
*** Feche esta janela para retornar ao Visualg.
44
LINGUAGEM R E
PYTHON E SUAS IDES UNIDADE II
CAPÍTULO 1
IDEs para R e Python
Existem diversas IDEs para Python e R (quadro 8) e a escolha depende das funcionalidades
que cada IDE oferece e de como elas podem tornar as rotinas de desenvolvimento mais
rápidas e ágeis. Ainda, a escolha depende do nível de aprendizado do desenvolvedor.
Existem IDEs para iniciantes e outras, as que exigem um conhecimento maior sobre
a linguagem.
45
Unidade II | Linguagem R e Python e suas IDEs
Python
IDE Plataforma Descrição
Netbeans Linux, macOS, Solaris e Gratuito e de código aberto utilizado para várias linguagens,
Windows. incluindo Python. Foi lançado em 2000 pela Apache Software
Foundation.
Pycharm Linux, macOS e Windows. Desenvolvido especificamente para Python. A versão community é
código aberto. Foi lançado em 2010 pela JetBrains.
Pyzo Linux, macOS e Windows. Ambiente específico para Python, projetado para iniciantes.
Thonny Linux, macOS e Windows. Ambiente específico para Python, projetado para iniciantes.
Spyder Linux, macOS e Windows. Ambiente específico para Python, lançado em 2009.
PyDev Eclipse. É um plugin utilizado dentro do Eclipse, lançado em 2009.
R
IDE Plataforma Descrição
RStudio Linux, macOS e Windows. Software livre lançado especificamente pela RStudio Inc em 2008.
Atom Linux, macOS e Windows. IDE utilizada para diversas linguagems de programação e permite
instalação de pacotes R.
Eclipse Linux, macOS e Windows. IDE utilizada para diversas linguagems de programação, o que
permite instalação de pacotes R.
Fonte: elaboração do próprio autor.
Pyzo e RStudio
As IDEs Pyzo e RStudio são ambientes de computação gratuitos para a programação
em Python e R, respectivamente. São indicados para programadores iniciantes por
serem simples e interativos.
» Pyzo: é uma IDE Python com um design bastante prático. Consiste em um editor
de texto, um shell e diversas ferramentas que facilitam a codificação. Ele permite
várias maneiras de executar o código de forma bem interativa: diretamente no
shell, por meio de seleção de linhas específicas, por meio de um arquivo, por
meio de script etc.
46
Linguagem R e Python e suas IDEs | Unidade II
As duas IDEs estão disponíveis para Windows, MacOS e Linux e são bastante úteis
para os desenvolvedores iniciantes.
47
CAPÍTULO 2
Programação em Python
Linguagem Python
A linguagem de programação Python surgiu na Holanda no final da década de 1980.
Foi criada por Guido van Rossum no Centro Winskunde & Informática (CWI). O
nome, ao contrário do que todos pensam, não tinha relação com serpente, e foi mais
uma brincadeira de Guido, que era um grande fã da série britânica, “Monty Python’s
Flying Circus”, em português, Os malucos do circo. A associação, com uma cobra, surgiu
depois da publicação do livro “Programming Python” pela editora O’Reilly; a qual,
como tradição, utilizava ilustração de animais na capa de seus livros. Desta forma, o
logotipo oficial da linguagem passou a ser duas pítons.
Um dos principais motivos, pelos quais Python é uma ótima linguagem para
bioinformática, é o de sua capacidade de suportar arquivos de formto FASTA, GenBank,
Expasy, UniGene, ClustaIW etc. Além disso, são encontradas diversas bibliotecas
específicas para Python, o que facilita diversos tipos de análises de dados biológicos.
Instalando Python
Antes de utilizarmos o Python dentro de uma IDE, nós o utilizaremos sem uma GUI.
Para realizar a instalação de um terminal (console) Python, basta acessar o site: https://
www.python.org/downloads/. Neste primeiro momento, vamos trabalhar com alguns
códigos dentro de IDEs instaladas na máquina. Contudo, na última unidade, uma
alternativa será ensinada para trabalhar com os códigos sem necessitar de a realização
de instalações.
48
Linguagem R e Python e suas IDEs | Unidade II
Baixe a versão mais atual de acordo com o sistema operacional da sua máquina. Abra
o arquivo executável e siga o passo a passo da instalação. Ao abrir o Python, perceberá
que não há interface gráfica, apenas tela preta com um prompt que lembra muito o
ms-dos.
>>>6+4
10
# subtração
>>>6-2
4
# multiplicação
>>>6*3
18
# divisão
>>>6/2
49
Unidade II | Linguagem R e Python e suas IDEs
# exponencial
>>>6**2
36
>>>(30+(8-2)/2)*3
99.0
# div
>>>25//3
8
# mod
>>>25%3
1
Para as expressões booleanas, vamos utilizar alguns operadores de comparação (<, >,
==, != etc...).
# verifica de 4 é menor que 5
>>>4<5
True
>>>4>5
False
# verifica de 4 é igual a 4
>>>4==4
True
# verifica de 4 é diferente de 4
>>>4!=4
False
>>>4<=5
True
>>>4>=5
50
Linguagem R e Python e suas IDEs | Unidade II
False
>>>not (4>=5)
True
>>>x=5
>>>y=2
# multiplicação de x e y
>>>x*y
10
>>>z=3
>>>k=-2
# operação aritmética
>>>x+(z**k)/y
5.0555555555555
>>>l=z-k
# imprime na tela valor atribuído a variável ‘l’
>>>print (‘a subtração de z e k é igual a: ‘, l)
a subtração de z e k é igual a: 5
Podemos, ainda, utilizar as strings (str) para receber sequências de caracteres. Neste
caso, devemos utilizar os valores entre apóstrofo (´´).
# criação da string seq1 e atribuição de valor
>>>seq1 = ‘GCCGTT’
51
Unidade II | Linguagem R e Python e suas IDEs
>>>seq1
‘GCCGTT’
>>>seq2 = ‘GGCGTA’
>>>seq2
‘GGCGTA’
>>>seq1 == seq2
False
>>>seq1!=seq2
True
>>>seq1[0]
‘G’
>>>seq1[1]
‘C’
>>>seq1[1]==seq2[1]
False
>>>’CC’ in seq1
True
# verifica se ‘CC’ é uma substring da string seq2
>>>’CC’ in seq2
False
# concatenação de seq1 e seq2
>>> seq1+seq2
‘GCCGTTGGCGTA’
# repete seq1 cinco vezes
>>>seq1*5
52
Linguagem R e Python e suas IDEs | Unidade II
‘GCCGTTGCCGTTGCCGTTGCCGTTGCCGTT’
# determina o comprimento da string seq1
>>>len(seq1)
6
# determina o comprimento da concatenação de seq1 e seq2
>>>len(seq1+seq2)
12
# determina o tamanho da string seq1 repetida cinco vezes
>>>len(seq1*5)
30
Listas
Quando trabalhamos com análise de dados, na maioria das situações, esses dados estão
organizados em listas. Uma lista é, basicamente, uma sequência de tipos diferentes de
objetos (exemplos: números e strings). A seguir, estão demonstrados alguns exemplos
de atribuições de variáveis a listas.
# cria lista ‘sequencias’ e atribui valores
>>> sequencias+aminoácidos
[‘GCG’, ‘ATT’, ‘AAC’, ‘TTA’, ‘ALA’, ‘ISO’, ‘ASN’, ‘LEU’]
>>> sequencias.count(‘AAC’)
1
>>> sequencias.reverse()
>>> sequencias
[‘TTA’, ‘AAC’, ‘ATT’, ‘GCG’]
>>>len(sequencias)
4
Quando uma lista envolve valores numéricos, pode-se realizar operações e funções.
# cria lista “lst1” e atribui valores
53
Unidade II | Linguagem R e Python e suas IDEs
>>> lst1+lst2
[28, 36, 2, 4, 8, 123, 21, 4, 52, 8, 3, 50, 12]
# mostra o menor valor da lst1
>>> min(lst1)
2
# mostra o maior valor da lst1
>>> max(lst2)
52
soma todos os valores da lst1
>>> sum(lst1)
201
# soma todos os valores da lst1 e lst2
>>> sum(lst1+lst2)
351
>>>sequencias[1]=’aac’
>>>sequencias
[‘GCG’, ‘aac’, ‘AAC’, ‘TTA’]
>>> sequencias.append(‘GGA’)
>>> sequencias
[‘GCG’, ‘aac’, ‘AAC’, ‘TTA’, ‘GGA’]
>>>sequencias.insert(0, ‘AGT’)
>>> sequencias
[‘AGT’, ‘GCG’, ‘aac’, ‘AAC’, ‘TTA’, ‘GGA’]
54
Linguagem R e Python e suas IDEs | Unidade II
>>> sequencias.remove(‘AGT’)
>>>sequencias
[‘GCG’, ‘aac’, ‘AAC’, ‘TTA’, ‘GGA’]
>>>sequencias.sort()
[‘AAC’, ‘GCG’, ‘GGA’, ‘TTA’, ‘aac’]
>>> sequencias.pop()
‘aac’
>>> sequencias
[‘AAC’, ‘GCG’, ‘GGA’, ‘TTA’]
# .index() mostra a posição (índice) da ocorrência do item dentro
da lista
>>> sequencias.index(‘GGA’)
Se tentarmos executar uma função que está dentro de um módulo antes de importá-lo,
o programa mostrará uma mensagem de erro.
# ao tentar imprimir a raiz quadrada de 25 sem importar o
módulo, aparece mensagem de erro
>>> print(sqrt(25))
Traceback (most recent call last):
File “<stdin>”, line 1, in <module>
NameError: name ‘sqrt’ is not defined
55
Unidade II | Linguagem R e Python e suas IDEs
>>> math
<module ‘math’ (built-in)>
# imprime na tela a raiz quadrada de 25
>>> print(math.sqrt(25))
5.0
» análises de sequências.
» alinhamentos de sequências.
» entre outras.
Neste ponto, iremos utilizar uma IDE para Python. Lembre-se de que existe uma
variedade de IDE’s, das mais simples até as de maiores complexidades. A IDE, a ser
utilizada, aqui, é o Pyzo, uma alternativa gratuita, interativa e simples. Segue a lista
de tudo que deve ser instalado para a utilização da biblioteca Biopython.
» Instalação do Python
56
Linguagem R e Python e suas IDEs | Unidade II
» Instalando Pyzo
» Instalando Biopyhton
Para poder realizar a instalação do Biopyhton, alguns módulos precisam ser instalados
antes, tais como numpy e reportlab. Execute os comandos abaixo para instalá-los.
>>> pip install numpy
>>> pip install reportlab
57
Unidade II | Linguagem R e Python e suas IDEs
DNA_1
58
Linguagem R e Python e suas IDEs | Unidade II
Seq(‘ATGAAAGCCGAACGCTATTCCGCATAA’)
RNA_1
Seq(‘AUGAAAGCCGAACGCUAUUCCGCAUAA’)
DNA_1_complemento = DNA_1.complement()
DNA_1_complemento
# Seq(‘TACTTTCGGCTTGCGATAAGGCGTATT’)
» Função translate()
>>> RNA_1
Seq(‘AUGAAAGCCGAACGCUAUUCCGCAUAA’)
>>> AA_RNA1
Seq(‘MKAERYSA*’)
» Concatenando sequências
59
Unidade II | Linguagem R e Python e suas IDEs
>>> DNA_3
Seq(‘ATGAAAGCCGAACGCTATTCCGCATAATGGCATTCCAAGCGTAAATCGAACGAC’)
Observação: para saber mais sobre métodos do módulo Seq, basta digitar: help
(Seq) diretamente no shell. Após executar o comando, serão listados todos os métodos
que podem ser utilizados importando o módulo Seq.
Crie uma pasta dentro de C:\ e nomeie como scripts. Agora, crie um arquivo dentro
desta pasta utilizando um editor de texto para códigos (exemplo: Geany, disponível
em: https://www.geany.org/), com as sequências abaixo, e salve como multiseq.fasta.
CAATACCAAGGAATTTTTTTGGGCAATTGTATGAGGGAAATGAAGCTGGAGATATTGGTT
>seq2
CAACACCAAGCAATTTTTTTGGGCAATTGAATGAGGGAATTGAAGCTGGAGATATTGGTT
>seq3
CAATAGCAAGCAATTTTTTTGGGCAATAGAATGAGGGAAATGAAGCTGGAGATCTTGGTT
60
Linguagem R e Python e suas IDEs | Unidade II
>seq4
CAATACCAAGCAATTATTCTGGGCAATTGAATGAGGTAAATGAAGCTGGAGATATTGGTT
Agora, realize o alinhamento das sequências diretamente no shell de Pyzo a partir das
seguintes instruções.
# importa o modulo AlignIO que realiza alinhamentos
>>>alinhamento = AlignIO.read(“C:\scripts\multiseq.fasta”,
“fasta”)
>>>print (alinhamento)
CAATACCAAGGAATTTTTTTGGGCAATTGTATGAGGGAAATGAA...GTT seq1
CAACACCAAGCAATTTTTTTGGGCAATTGAATGAGGGAATTGAA...GTT seq2
CAATAGCAAGCAATTTTTTTGGGCAATAGAATGAGGGAAATGAA...GTT seq3
CAATACCAAGCAATTATTCTGGGCAATTGAATGAGGTAAATGAA...GTT seq4
Observação: para saber mais sobre métodos do módulo AlignIO, basta digitar: help
(AlignIO) diretamente no shell.
» Sub-pacotes do Biopython
61
Unidade II | Linguagem R e Python e suas IDEs
62
CAPÍTULO 3
Linguagem R
Linguagem R
R é uma linguagem de programação utilizada para manipulação e análise de dados
estatísticos. Fornece um conjunto de pacotes e bibliotecas muito mais amplo do que
Python (mais de 5.000) e é capaz de executar análises estatísticas bem complexas. A
linguagem foi derivada da linguagem S e desenvolvida por Robert Gentleman e Ross
Ihaka, em 1991, na Nova Zelândia, embora sua distribuição tenha iniciado em 1993
pela StatLib.
Por ser gratuito, R, rapidamente, tornou-se uma linguagem bastante popular entre
os estatísticos e os engenheiros. Porém, sua utilização se tornou muito mais ampla,
envolvendo as áreas médicas, biomédicas e biológicas. Sua popularidade se deve,
principalmente, ao fato de R conseguir processar e analisar grandes volumes de dados
e integrar com outas linguagens, tais como Java, SQL e Python. Além de ser gratuito,
R possui uma comunidade forte, formada por desenvolvedores do mundo todo que
contribuem com criações de diversos pacotes, o que torna a linguagem mais poderosa,
ainda, para a manipulação de dados.
Instalando R e RStudio
Para realizar a instalação do R, basta baixar a versão mais recente dentro do repositório
do CRAN no site (https://cran.r-project.org/), de acordo com seu sistema operacional.
Após baixar o programa, siga o passo a passo para instalação. Esse programa é o R
“puro”, que tem disponível apenas o console para realizar as codificações.
63
Unidade II | Linguagem R e Python e suas IDEs
64
Linguagem R e Python e suas IDEs | Unidade II
Abrindo o RStudio
Ao abrir o RStudio, é possível observar que ele é formado por janelas.
65
Unidade II | Linguagem R e Python e suas IDEs
Para carregar o pacote, basta digitar library() no console, como exemplificado abaixo.
> library(“Rcmdr”)
Utilizando RStudio
Criando Vetores
As variáveis dentro de R são conhecidas como vetores e eles podem armazenar qualquer
tipo de valores. Para criar um vetor e atribuir valores, basta utilizar a seguinte sintaxe
nome_do_vetor <-c(valor, valor, valor, n…). Lembre-se de que,
se for um valor do tipo string, é necessário colocar entre aspas. Se o vetor possuir mais
de um valor, é necessário colocar o “c”, logo após, o símbolo de atribuição <-. Desta
forma, os valores serão armazenados em colunas.
Vamos criar alguns vetores para realizar análises posteriores, conforme as informações
contidas na tabela a seguir.
66
Linguagem R e Python e suas IDEs | Unidade II
Crie os vetores utilizando as linhas de comandos a seguir, as quais devem ser executadas
diretamente no prompt do console.
# para criar vetor contendo valores de string, deve-se utilizar
os valores entre aspas.
> nome_gene<-c(‘GeneA’, ‘GeneB’, ‘GeneC’, ‘GeneD’)
> nivel_exp1<-c(1.2, 3.4, 5.2, 4.7)
> nivel_exp2<-c(3.4, 2.2, 1.3, 2.0)
> nivel_exp3<-c(1.0, 4.0, 2.8, 3.5)
> nivel_exp4<-c(2.8, 6.2, 3.8, 2.2)
> nivel_exp5<-c(1.8, 4.3, 1.6, 2.7)
67
Unidade II | Linguagem R e Python e suas IDEs
Criando fatores
Diferente dos vetores, os fatores são usados para representar variáveis categóricas,
tal como positivo ou negativo, feminino ou masculino, reagente ou não reagente,
baixo, médio ou alto. Esses objetos são criados por meio da função fator(). Os valores,
armazenados dentro de um fator, são chamados de levels (níveis).
> resultado <- factor(c(“positivo”, “negativo”, “indetermina-
do”))
Criando Listas
As listas são coleções de elementos que podem ser criadas utilizando a função list().
Esses elementos não precisam ser da mesma classe, logo, uma lista poderá conter
vetores ou outras listas. Abaixo, seguem alguns exemplos de como criar listas.
> nomes_de_genes <-list(“CTLA4”, “CD4”, “IL2RA”, “CD80”, “GITR”)
68
Linguagem R e Python e suas IDEs | Unidade II
Criando Dataframes
Os data frames podem ser utilizados como banco de dados, já que são úteis para armazenar
valor organizados em tabelas contendo linhas e colunas. Cada coluna representa uma
variável e cada linha armazena as observações dessas variáveis. O data frame por conter
n variáveis de diferentes classes. Existem várias formas de criar data frames em R.
Depois de juntar os elementos dos dois vetores em linhas e em colunas, basta convertê-
los em um data frame, utilizando a função as.data.frame().
> nivel_expressao<-as.data.frame(genes)
69
Unidade II | Linguagem R e Python e suas IDEs
2.2
nivel_exp5
1 1.8
2 4.3
2 1.6
4 2.7
Utilizando as mesmas variáveis do exemplo anterior, vamos criar o data frame diretamente
pela função data.frame(), sem a necessidade de criar os vetores previamente.
> data.frame(nome_gene=c(“Gene A”, “Gene B”, “Gene C”,
“Gene D”), nível_exp1=c(1.2, 3.4, 5.2, 4.7), nível_
exp2=c(3.4, 2.2, 1.3, 2), nível_exp3=c(1, 4, 2.8, 3.5),
nivel_exp4=c(2.8, 6.2, 3.8, 2.2))
3 1.6
70
USO DE BANCO DE
DADOS UNIDADE III
CAPÍTULO 1
O que são banco de dados
Histórico
A produção de conhecimento ou de informações sempre expressa a mesma preocupação:
“como guardá-las?” e “como acessá-las?”. As informações são armazenadas desde os
primórdios da humanidade e, desde as épocas mais primitivas, essas informações
eram armazenadas e catalogadas para facilitar, de alguma forma, o seu acesso. Até
algumas décadas atrás, antes da invenção do primeiro computador, as informações
eram armazenadas em livros, o que necessitava de espaços físicos gigantes e sistemas
de catalogação bem complexos para conseguir acessar a informação. Com o surgimento
dos primeiros computadores e com a evolução da tecnologia, esse armazenamento se
tornou mais fácil. Contudo, com o advento da internet, a quantidade de informações
geradas se tornou assustadora. Desta forma, o desenvolvimento de sistema de banco
de dados é vital para o armazenamento e a utilização dessas informações.
Na década de 1970, o pesquisador da IBM, Ted Codd, publicou o primeiro artigo sobre
banco de dados relacionais, o qual visava resolver os problemas que o IMS trouxeram. O
que Codd pretendeu ao desenvolver esse tipo de banco de dados era que o usuário fosse
71
Unidade III | Uso de banco de dados
72
Uso de banco de dados | Unidade III
Análise de requisitos
Nesta etapa, são definidos os requisitos dos dados: a descrição da informação dos
elementos dos dados; a definição dos relacionamentos entre os dados; a definição
das restrições que devem ser impostas ao acessar os dados; e a definição de softwares,
linguagem de programação, hardware etc.
Esta etapa é essencial para a criação do banco de dados. Neste modelo, é criada uma
representação de fácil compreensão que define como os dados serão armazenados,
classificados, acessados e manipulados. Existem duas formas de realizar a modelagem
de dados. A primeira é por meio de a Linguagem de Modelagem Unificada (Unified
73
Unidade III | Uso de banco de dados
No modelo lógico (figura 19) é construído com base no modelo conceitual. Nesta
etapa, são descritos, com mais detalhes, os dados que devem ser armazenados, todas
as entidades e suas relações e seus atributos. Além disso, é definido como o banco de
dados será implementado no SGBD.
74
Uso de banco de dados | Unidade III
75
Unidade III | Uso de banco de dados
O SGDB deve fornecer aos usuários uma visão mais abstrata dos dados, ocultando detalhes
de como os dados são armazenados, já que estes não são treinados em computação.
Desta forma, os desenvolvedores ocultam a complexidade da estrutura do sistema sob
diversos níveis de abstração.
76
CAPÍTULO 2
Tipos de bancos de dados
O banco de dado relacional foi proposto em 1970 por Codd. Até então, os sistemas de
BD eram baseados no modelo hierárquico e de rede, os quais apresentavam diversas
limitações. Desta forma, o BD relacional revolucionou a área de bancos de dados, sendo,
atualmente, o modelo mais dominante do mercado. Os dados do modelo relacional são
armazenados em tabelas com linhas e colunas (figura 21), uma forma de representação
bem simples e elegante que constitui um dos motivos pelos quais esse modelo superou
os mais antigos. As consultas desses dados são realizadas por meio de SGBD.
Atomicidade significa que, quando uma sequência de operações seja executada, ela será
executada totalmente ou não será executada, ou seja, será tudo ou nada. Consistência se
refere a quando uma operação for executada de forma a criar um estado para os dados,
se houver falha, os dados voltam ao seu estado original. A propriedade de Isolamento
garante que uma operação não é interferida por outra. E a Durabilidade garante que
os dados validados estejam disponíveis no estado correto, mesmo quando há alguma
falha ou quando o sistema é reiniciado.
77
Unidade III | Uso de banco de dados
78
Uso de banco de dados | Unidade III
79
Unidade III | Uso de banco de dados
80
CAPÍTULO 3
Uso de banco de dados em
bioinformática
Todos esses dados, se analisados, poderiam geram informações valiosas para diversas
áreas médicas, biomédicas, biológicas e farmacêuticas. Contudo, isso está longe de ser
obtido por diversos motivos. Se por um lado, houve um avanço no desenvolvimento
de novas tecnologias para as análises, de outro lado, temos a falta de capacitação
de profissionais capazes de dominar essas ferramentas. Nos últimos vinte anos, a
Biblioteca Nacional de Medicina (NLM) vem impulsionando os avanços significativos
em informática biomédica, possuindo um dos maiores repositórios do mundo de dados
biológicos (NCBI) integrado com mais de 40 bancos de dados de biologia molecular.
A figura, abaixo, mostra o crescimento de depósitos de sequências no GenBank até o
ano de 2019.
81
Unidade III | Uso de banco de dados
Os dados, obtidos pelos bancos de dados biológicos, podem estar em diversos formatos
e existem diversas formas de analisá-los. Uma alternativa, para não se usar um SGBD,
é armazenar os dados em arquivos e escrever o código específico para manipulá-los em
diferentes linguagens (como Python e R). Os principais bancos de dados biológicos,
que podem ser utilizados como fontes de informações para análises de bioinformática,
estão descritos a seguir.
82
Uso de banco de dados | Unidade III
O NCBI está integrado com mais de 40 bancos de dados de biologia molecular e oferece
diversas ferramentas de bioinformática, tais como GenBank, RefSeq, dbGaP e ClinVar.
Compreensivo
› GenBank.
» Análise de proteínas
› Swiss-Prot.
» Genomas e Mapas
› Entrez Genomes.
» Especializado
» Organismo Específico
83
Unidade III | Uso de banco de dados
» Funcional
» Tecnologia de Sequenciamento
Sistema de busca
O Entrez é o principal sistema de busca do NCBI e integra o banco de dados PubMed de
literatura biomédica com 38 outros bancos de dados de literatura e de dados moleculares.
As consultas do Entrez podem ser palavras únicas, frases curtas, sentenças identificadoras
de banco de dados, símbolos de genes ou nomes etc. Podem, ainda, utilizar-se de
operadores booleanos, como AND, OR e NOT.
Swiss-Prot
Esse banco de dados difere de outros por tentar minimizar redundâncias de sequências
armazenadas. Quando há algum conflito, eles são indicados.
84
ALGORITMOS DE
BIOINFORMÁTICA UNIDADE IV
CAPÍTULO 1
Modelos de algoritmos
85
Unidade IV | Algoritmos de bioinformática
FibonacciIterativo( n )
F1 <- 1
F2 <- 1
For i <- 3 to n
Fi <- Fi-1 + Fi-2
Return Fn
Busca exaustiva
A busca exaustiva ou a força bruta são um tipo de algoritmo que examina todas as
alternativas para encontrar uma solução particular. Imagine que você esqueceu onde
deixou seu telefone celular. Numa busca exaustiva, você olharia em cada lugar da casa
86
Algoritmos de bioinformática | Unidade IV
até encontrá-lo. Assim, é garantido que, se o celular estiver em algum lugar da casa,
eventualmente, você vai encontrá-lo. Porém, essa estratégia pode ser muito custosa,
já que o celular poderia estar no último lugar em que você procurou.
Tomemos, como exemplo, o exemplo anterior no qual seu celular está perdido em
algum lugar da casa. Já percebemos que o algoritmo de força bruta é um tanto quanto
custoso. Assim, pode-se pensar em alguma estratégia para evitar procurar em todos
os lugares. Você poderia pedir a alguém para ligar para o celular antes de começar a
procurar. Se o som do celular vier da cozinha, você poderá evitar procurar em todos
os outros cômodos da casa, tornando o algoritmo de força bruta um pouco mais
eficiente. No entanto, ainda, terá de procurar em toda a cozinha. Algoritmos desse
tipo podem ser aplicados se for possível, a partir dos dados do problema, verificar, de
alguma forma, qual o espaço de busca pode ser excluído.
Algoritmos gulosos
Programação dinâmica
87
Unidade IV | Algoritmos de bioinformática
direita para a esquerda. Um algoritmo eficiente que alinhe essas sequências pode
usar programação dinâmica através de uma matriz bidimensional que compute os
alinhamentos ótimos locais.
Vamos exemplificar essa matriz para alinhar 2 sequências AAAC e AGC, construindo
a matriz de programação dinâmica (i, j).
Seguindo esta fórmula que divide o problema do alinhamento entre duas sequências
em problemas menores, temos o que se segue.
Figura 25. Matriz das sequências com valores iniciais penalizando gaps (inserção ou deleção de nucleotídeos com –2
cumulativamente)
88
Algoritmos de bioinformática | Unidade IV
Figura 26. Computação da primeira célula da matriz inserindo o valor máximo entre as alternativas de
alinhamento para a primeira posição.
Figura 27. Computação da próxima célula da matriz inserindo o valor máximo entre as alternativas
de alinhamento para a posição, considerando o valor já calculado anteriormente à esquerda.
Figura 28. Computação da próxima célula da matriz inserindo o valor máximo entre as alternativas
de alinhamento para a posição, considerando o valor já calculado anteriormente acima.
89
Unidade IV | Algoritmos de bioinformática
Figura 30. Caminho de volta na matriz computada para encontrar melhores alinhamentos a partir
dos caminhos com maior pontuação acumulada.
90
Algoritmos de bioinformática | Unidade IV
Divisão e conquista
Um grande problema pode ser difícil de resolver, mas, se ele puder ser dividido em dois
problemas com metade do tamanho, sua solução pode ser facilitada significantemente. A
partir de essa premissa, algoritmos que utilizam o método dividir para conquistar dividem
o problema recursivamente em subproblemas; resolvem cada um dos subproblemas
individualmente; e, depois, combinam as soluções dos subproblemas na solução do
problema original.
O ponto crítico desse tipo de algoritmo é, justamente, a combinação das soluções, que
pode consumir muito processamento ou muita memória. O próprio alinhamento de
sequências, usando a matriz de programação dinâmica apresentado anteriormente,
ilustra esse problema. A programação dinâmica é, geralmente, um algoritmo eficiente
em termos de tempo, mas não de espaço, uma vez que a matriz pode ser muito grande
quando comparamos sequências grandes, como dois cromossomos. Para resolver o
problema de espaço em matrizes de programação dinâmica nos anos 1970, Hirschberg
(1975) propôs uma abordagem de divisão e a, conquista que era capaz de executar
o alinhamento usando espaço linear, mas ao custo de dobrar o tempo de execução.
Nesse algoritmo, a matriz era dividida em submatrizes e, depois, as soluções de cada
submatriz eram combinadas.
Machine Learning
91
Unidade IV | Algoritmos de bioinformática
uma proposta na qual o programador informa uma entrada e uma saída esperada e o
computador “aprende” regras que levam àquela saída.
Existem várias técnicas diferentes de Machine Learning que podem ser organizadas da
seguinte maneira.
Alinhamento de sequências
O estudo de moléculas é fundamental para entender a vida. A partir de tecnologias
modernas para obtenção de sequências de DNA, a quantidade de dados, a ser analisada,
tem alcançado patamares conhecidos como Big Data. A genômica, a transcritômica,
a proteômica e outras áreas, conhecidas como ômicas, têm produzido tamanha
quantidade de dados a qual deve alcançar, nos próximos quatro anos, a casa dos Zeta
Bytes (STEPHENS et al., 2015).
92
Algoritmos de bioinformática | Unidade IV
Isso cria uma demanda por análise de dados sem precedentes na história humana. Essas
análises são executadas por meio de algoritmos, os quais, no caso de a Bioinformática,
lidam, primordialmente, com sequências de DNA, RNA ou proteínas (resíduos de
aminoácidos), representados na forma de textos por letras de um alfabeto limitado,
como mostra o quadro a seguir.
Molécula Alfabeto
DNA A, C, G, T
RNA A, C, G, U
Aminoácidos G, A, L, V, I, P, F, S, T, C, Y, N, Q, D, E, R, K, H, W, M
Fonte: elaboração do próprio autor.
Isso quer dizer que um alinhamento é o posicionamento das sequências, com indicação
das posições em que as sequências são iguais e das que são diferentes, o que preserva a
ordem dos nucleotídeos ou dos aminoácidos de cada sequência. São considerados, num
alinhamento, os conceitos, como identidade, que é a quantidade de nucleotídeos ou de
aminoácidos idênticos e a similaridade que ocorre quando se alinha os aminoácidos ou
os nucleotídeos diferentes, mas que, naquele contexto, podem ter um papel biológico
similar.
J E R I C O A C O A R A
A R A R A C O A R A - -
O alinhamento, acima, teve zero identidade, ou seja, nenhuma letra foi idêntica a
outra. Porém, é possível fazer outros alinhamentos, nos quais haja mais identidade,
como o exemplo abaixo.
93
Unidade IV | Algoritmos de bioinformática
J E R I C O A C O A R A
- A R - A R A Q U A R A
local
Estratégia
global
94
CAPÍTULO 2
Fontes de algoritmos para uso em
bioinformática
Repositórios digitais podem ser entendidos como bases de dados que reúnem e organizam
dados ou arquivos online. Repositórios de códigos de uma linguagem de programação,
frequentemente, têm mecanismos de versionamento. Ou seja, é possível manter um
histórico dos arquivos e das modificações as quais, nele, ocorreram ao longo do tempo.
O versionamento é muito útil para controlar as versões do programa, permitir que
múltiplos programadores possam trabalhar em um mesmo código sem comprometer
o trabalho uns dos outros entre outras coisas.
Python
A maneira mais conhecida de instalar um programa em Python é por meio do programa
pip. Mas antes de verificar como instalar pacotes Python com pip, vamos entender melhor
o que é um pacote. A Python Packaging Authority (PyPA) é um grupo de trabalho
que mantém o núcleo de projetos de software usados para empacotar os programas em
Python. Como os programas em Python são, frequentemente, compostos de vários
arquivos de código fonte, convêm que eles sejam distribuídos como o conjunto que são.
95
Unidade IV | Algoritmos de bioinformática
fonte executável), sdist (arquivos comprimidos no formato “.tar.gz”) e wheel (um formato
de empacotamento especialmente desenhado para Python). Saiba mais em: https://
packaging.python.org/overview.
Anaconda
Muitas vezes, um pacote precisa de outro pacote para funcionar, o qual, por sua vez,
precisa de outro pacote para funcionar. São as chamadas dependências. Não raras vezes,
o bioinformata precisa investir um longo tempo instalando dependências antes de
instalar seu pacote de interesse. A iniciativa anaconda (https://www.anaconda.com)
tomou, para si, a tarefa de gerenciar as dependências e de fazer a instalação de pacotes
e suas dependências menos trabalhosa.
96
Algoritmos de bioinformática | Unidade IV
T4. GitHub
97
Unidade IV | Algoritmos de bioinformática
Licenças
A GNU, General Public License (GPL), é uma licença baseada em 4 liberdades: i) executar
o programa, para qualquer propósito; ii) acessar, estudar e adaptar o programa para as
suas necessidades; iii) redistribuir cópias do programa original; iv) distribuir cópias do
programa com seus aperfeiçoamentos. Softwares que utilizam de códigos distribuídos
por esta licença precisam, caso licenciados de outra forma, manter as mesmas liberdades.
A linguagem R é licenciada em GPL, enquanto a linguagem Python 3.x utiliza a licença
Python Software Foundation (PSF), que é compatível com a licença GPL.
Isso tem algumas implicações práticas: se você fizer qualquer melhoria nas linguagens
R ou Python 3, essas melhorias não podem ser distribuídas de uma forma incompatível
com a licença GPL. Mas se você apenas usa as linguagens para desenvolver um software,
você pode licenciar esse software de forma não compatível com GPL. Por isso, é
importante se atentar para as licenças dos pacotes de software que podem ser usadas,
tanto em Python quanto em R. Muitos deles são gratuitos apenas para fins científicos
e podem exigir um pagamento para fins comerciais ou industriais.
98
CAPÍTULO 3
Principais algoritmos em R e
Python para resolver problemas em
bioinformática
Pipelines e Scripts
Os pipelines ou worflows científicos podem ser entendidos como conjuntos de atividades
gerenciadas executadas por diferentes entidades de processamento. É comum, em
Bioinformática, aplicar pipelines para resolver os problemas em Biologia Molecular,
notadamente, aqueles relacionados às análises de sequência (WERCELENS et al., 2019).
Assim, uma vez que tais análises têm várias etapas e, em cada etapa, um ou mais
algoritmos podem ser combinados para resolver o problema, os pipelines podem,
também, ser entendidos como um encadeamento de programas, no qual a saída de
um programa serve como entrada para um próximo programa. Pipelines, com mesmos
propósitos em Bioinoformática, costumam ter etapas idênticas ou similares, mas que
podem usar diferentes programas e algortimos para a solução de cada etapa.
Montagem de genomas
A montagem de genomas consiste em combinar as reads, as quais são os fragmentos de
DNA oriundos do sequenciamento. As reads são sequências de caracteres com alfabeto
limitado (A,C,G,T) representando os nucleotídeos sequenciados.
99
Unidade IV | Algoritmos de bioinformática
Qualidade na escala PHRED Probabilidade de base call incorreto Acurácia de base call
10 1 em 10 90%
20 1 em100 99%
30 1 em1.000 99,9%
40 1 em10.000 99,99%
50 1 em100.000 99,999%
60 1 em1.000.000 99,9999%
Fonte: elaboração do próprio autor.
É possível gerar relatórios de qualidade das sequências e filtrá-las com softwares como
o fastqc (https://www.bioinformatics.babraham.ac.uk/projects/fastqc), quast (https://
github.com/ablab/quast), sickle (https://github.com/najoshi/sickle) e trimmomatic
(http://www.usadellab.org/cms/?page=trimmomatic).
Figura 33. Exemplo de relatório de qualidade das reads de um dado sequenciamento utilizando o software fastqc.
A figura, abaixo, mostra uma read em um arquivo do tipo fastq. Nela, é possível ver
que a primeira linha contém dados que identificam a read, os quais dependem do
sequenciador utilizado. A segunda linha contém o fragmento de DNA sequenciado. A
terceira linha é, apenas, um sinal de “+” que funciona como separador para a terceira
linha, a qual contém a qualidade referente a cada nucleotídeo sequenciado. O primeiro
nucleotídeo, “T”, tem, portanto, uma qualidade igual a 33 na escala PHRED, porque
o caracter “!” é correspondente ao número 33 na tabela ASCII.
100
Algoritmos de bioinformática | Unidade IV
101
Unidade IV | Algoritmos de bioinformática
Para garantir que, após o alinhamento, as reads sejam armazenadas tal qual elas
foram alinhadas, outro formato de arquivo é usado. O formato SAM (Sequence
Alignment/MAP) guarda o alinhamento das reads e pode ser lido por diversos softwares
como o IGV (Integrated Genome Viewer).
Figura 36. Exemplo de visualização de uma montagem no software IGV. As tiras cinzas representam as reads posicionadas
exatamente onde houve alinhamento umas contra as outras.
Montagem de novo
102
Algoritmos de bioinformática | Unidade IV
Análise de transcritoma
As reads, para a montagem de genoma, são oriundas de DNA genômico, ou seja,
contêm exons, introns, regiões intergênicas, enfim, tudo. Nos experimentos de RNA-
Seq, as reads contêm, apenas, RNA mensageiro, o RNA transcrito (por isso, a palavra
transcritoma) de determinados genes; para, posteriormente, fabricar proteínas, se for
RNA codificador de proteínas, ou agir em vários processos biológicos, como regulação,
se for RNA não codificador.
103
Unidade IV | Algoritmos de bioinformática
Uma consideração importante é a de que a maioria dos pipelines e dos softwares, para a
Bioinformática, é feita para o sistema operacional Linux. Assim, neste estudo de caso,
todo o ambiente do pipeline é executado em Linux, e o passo a passo, para reproduzir
o exprimento, está descrito abaixo, com comentários sobre os algoritmos utilizados
em cada software.
Se o sistema operacional que você usa não é um Linux, é possível baixar e “emular”
o Linux de dentro de seu sistema operacional (inclusive Windows) com todas as
ferramentas instaladas e configuradas, utilizando um software chamado Docker. Docker
é um software que “simula” sistemas operacionais em containers isolando a emulação,
sem a necessidade de instalar o sistema operacional emulado em seu computador. O
endereço, para baixar o Docker, é: https://www.docker.com. As instruções de instalação,
para Windows, estão em: https://docs.docker.com/docker-for-windows/install.
104
Algoritmos de bioinformática | Unidade IV
Vamos, agora, ao segundo passo, que é verificar a qualidade das reads. Para isso,
utilizaremos o software fastqc.
# Executando a análise de qualidade das reads
fastqc SRR13893512_1.fastq SRR13893512_2.fastq
105
Unidade IV | Algoritmos de bioinformática
106
Algoritmos de bioinformática | Unidade IV
Ainda, é possível ver outros dados estatísticos, como a qualidade média das reads
na figura abaixo. Nela, é possível notar que uma limitada quantidade de reads tem
qualidade média menor que 30.
107
Unidade IV | Algoritmos de bioinformática
Após a execução do comando acima, 95.558949% das reads atenderam aos critérios
estabelecidos. Após a filtragem, um novo relatório em .html é gerado pelo fastp. Entre
as informações lá contidas, o novo gráfico de qualidade é apresentado na figura abaixo.
Uma vez que temos, agora, as reads com requisitos estabelecidos de qualidade, vamos à
montagem delas. Para isso, vamos utilizar o software SPAdes genome assembler v3.13.0.
O algoritmo do SPAdes é baseado no grafo De Bruijn (COMPEAU, 2011). Neste caso,
as reads são quebradas em k-mers, que são substrings da read com tamanho k, as quais
são, então, ligadas por um grafo. Por exemplo, tomando a read AACCGG e um k=1,
108
Algoritmos de bioinformática | Unidade IV
Após a montagem que deve durar algo em torno de 3 horas, deverá haver diversos
arquivos e pastas com os resultados. Vamos verificar os mais importantes.
109
Unidade IV | Algoritmos de bioinformática
O SPAdes é escrito em C++ e Python, e faz várias montagens com diferentes k-mers.
Na figura acima, há uma pasta para cada k-mer, escolhida pelo SPAdes, sendo 127,
99, 77, 55, 33 e 21. Com a melhor montagem, o SPAdes gera um arquivo chamado de
scaffolds.fasta, o qual podemos considerar como o genoma semi-pronto. Se você abrir
o arquivo, verá que, no arquivo multi-fasta, há sequências com tamanhos menores
do que aqueles das reads depois de filtragem (35-250). São, possivelmente, reads que
foram cortadas na etapa de filtragem e não foram aproveitadas durante a montagem.
Podemos cortar do genoma qualquer sequência menor que um determinado limiar.
Vamos usar, aqui, 500 pares de bases como limiar. Para isso, vamos usar o software seqkit.
# Cortando sequências do genoma que são muito pequenas para se-
rem representativas
seqkit seq -m 1000 scaffolds.fasta -o genoma_K_Pneumoniae.fasta
O arquivo scaffolds.fasta que, nesta montagem teve 181 sequências finais, após o corte
de sequências menores que 100 bp, passou a ter 77 sequências finais e foi salvo no
arquivo genoma_K_Pneumoniae.fasta. O próximo passo é gerar algumas estatísticas
para analisar quão boa foi a montagem. Para isso, podemos utilizar o software quast,
que é escrito em Python.
110
Algoritmos de bioinformática | Unidade IV
Vamos, agora, entender melhor alguns dados gerados pelo quast. Os contigs são cada
sequência que foi possível montar com as reads. Há um total de 77 contigs no arquivo
genoma_K_Pneomoniae.fasta, dos quais 25 têm mais de 50 mil pares de bases, por
exemplo. O maior contig tem, sozinho, 455.585 bp. O tamanho total do genoma é de
5.769.659 bp. Repare que, inicialmente, tínhamos quase 3 GB de reads, representando
pedaços aleatórios desse genoma, o qual, agora, apresenta-se com pouco mais de 5 MB.
N50 é uma medida estatística que descreve o quão completo é o genoma. O número
N50 = 270.452 significa que este é o tamanho da sequência que representa 50% do
genoma se colocarmos todas as sequências em ordem decrescente de tamanho. Ou seja,
quanto maior o N50, menos fragmentada está a montagem. A figura, abaixo, mostra
um trecho do arquivo genoma_K_Pneomoniae.fasta.
111
Unidade IV | Algoritmos de bioinformática
Jupyter Notebooks
Usando anaconda, podemos instalar um ambiente Jupyter para executar os códigos
em Python e R. JupyterLab (https://jupyter.org) é um ambiente de desenvolvimento
interativo Web para códigos Python e R. Assim, cria-se o ambiente com anaconda.
# Criando um ambiente virtual anaconda chamado notebooks
conda create -n notebooks
# Entrando no ambiente virtual notebooks
conda activate notebooks
# Instalando o jupyter e o R no ambiente
conda install -c r r-essentials
112
Algoritmos de bioinformática | Unidade IV
cd apostila_bioinfo
jupyter-notebook
» Python_Notebook.ipynb; e
» R_Notebook.ipynb.
Python
(https://github.com/waldeyr/apostila_bioinfo/blob/main/Python_Notebook.ipynb)
113
Unidade IV | Algoritmos de bioinformática
114
Algoritmos de bioinformática | Unidade IV
Solução: calcular os nucleotídeos da fita de DNA que serão transcritos pela enzima
RNA polimerase.
Problema 04: obter a sequência de aminoácidos que será traduzida a partir de uma
fita de DNA.
115
Unidade IV | Algoritmos de bioinformática
Problema 05: obter a sequência de aminoácidos que será traduzida a partir de uma
fita de DNA em uma mitocôndria humana.
Solução: traduzir de DNA para aminoácidos usando uma tabela de códons mitocondriais
em vertebrados.
Problema 06: baixar e ler, em uma variável, o genoma original do vírus Sars-Cov-2
de Wuhan.
Solução: fazer uma requisição via URL e carregar o arquivo do genoma em formato
genbank para uma variável.
116
Algoritmos de bioinformática | Unidade IV
Solução: utilizar uma requisição via URL com o endereço onde está o arquivo.
117
Unidade IV | Algoritmos de bioinformática
118
Algoritmos de bioinformática | Unidade IV
Problema 11: obter detalhes de uma proteína a partir de seu ID no banco de dados
Uniprot.
R
(https://github.com/waldeyr/apostila_bioinfo/blob/main/R_Notebook.ipynb)
119
Unidade IV | Algoritmos de bioinformática
Passo 03: download e leitura dos arquivos. Os arquivos são baixados e lidos como um
dataframe chamado de dados.
Passo 04: criar uma dataframe auxiliar com os dados do desenho do experimento.
120
Algoritmos de bioinformática | Unidade IV
Passo 05: criação do objeto DGEList. O objeto DGEList é a forma com a qual o pacote
EdgeR organiza os dados para serem analisados.
Passo 06: anotação dos genes. A primeira coluna dos genes (ver passo 3) contém
números que são os identificadores de cada gene no NCBI. Usando o pacote org.
121
Unidade IV | Algoritmos de bioinformática
Passo 07: filtragem. Há muitos genes que não são expressos ou têm uma quantidade
significativa de reads. É possível estabelecer critérios e selecionar apenas genes expressos
que atendam a tais critérios. Neste exemplo, vamos utilizar uma métrica, chamada de
count per million (cpm), para selecionar, apenas, genes expressos > 1 cpm que estejam
em, pelo menos, 2 amostras.
122
Algoritmos de bioinformática | Unidade IV
Passo 08: Normalização. A normalização visa transformar os dados para uma escala
diferente evitando vieses por ordem de grandeza. O pacote EdgeR usa o método
trimmed mean of M-values (TMM) para a normalização.
123
Unidade IV | Algoritmos de bioinformática
Passo 09: expressão diferencial. Aqui, o primeiro passo será o de criar uma matriz com
o desenho do experimento. Em seguida, uma matriz de contraste entre os dois casos
que analisaremos: basal lactante e basal grávida. Depois disso, será possível calcular
a dispersão e a distribuição binomial negativa, o que nos dará a False Discovery Rate
(FDR).
124
Algoritmos de bioinformática | Unidade IV
125
REFERÊNCIAS
ALMEIDA, M. Curso essencial de lógica de programação. Universo dos Livros Editora, 2008.
ASCENCIO, A. F. G.; CAMPOS, E. A. V. Fundamentos da Programação de Computadores.
São Paulo: Prentice Hall, 2002.
CAN, T. Introduction to bioinformatics. Methods Mol Biol., v. 1107, pp. 51-71, 2014. (doi:
10.1007/978-1-62703-748-8_4. PMID: 24272431).
COMPEAU, P. E. C.; PEVZNER, P. A.; TESLER, G. Why are de Bruijn graphs useful for genome
assembly?. Nature biotechnology, v. 29, n. 11, pp. 987, 2011.
CRAN. The Comprehensive R Archive Network, 2010. Disponível em: https://cran.r-project.
org/. Acesso em: dez. 2020.
FORBELLONE, A. L. V.; EBERSPACHER, H. F. Lógica de Programação: construção de algoritmos
e estrutura de dados. 3. ed. São Paulo: Prentice Hall, 2005.
FU, N. Y. et al. EGF-mediated induction of Mcl-1 at the switch to lactation is essential for alveolar
cell survival. Nature Cell Biology, v. 17, n. 4, pp. 365-375, 2015.
GRÜNING, B. et al. Bioconda: Sustainable and Comprehensive Software Distribution for the Life
Sciences. Nature Methods, 2018. (doi:10.1038/s41592-018-0046-7).
HIRSCHBERG, D. S. A linear space algorithm for computing maximal common subsequences.
Communications of the ACM, v. 18, n. 6, pp. 341-343, 1975.
HUANG, Y.; ZHANG, P. Evaluation of machine learning approaches for cell-type identification
from single-cell transcriptomics data. Briefings in Bioinformatics, 2021.
JONES, N. C.; PEVZNER, P. A.; PEVZNER, P. An introduction to bioinformatics algorithms.
MIT press, 2004.
LUSCOMBE, N. M.; GREENBAUM, D.; GERSTEIN, M. What is bioinformatics? A proposed
definition and overview of the field. Methods Inf Med., v. 40, n. 4, pp. 346-358, 2001. (PMID:
11552348).
MARIANO, D.; BARROSO, J. R.; CORREIA, T. M. R. C. Introdução a programação para
bioinformática com Biopython. 3ª ed. Belo Horozinte. 2016.
OLIVEIRA, J. V. A. et al. SnoReport 2.0: new features and a refined Support Vector Machine to
improve snoRNA identification. BMC bioinformatics, v. 17, n. 18, pp. 73-86, 2016.
PBC. RStudio, 2021. Disponível em: https://rstudio.com/products/rstudio/download/. Acesso
em: 12 jan. 2021.
PYTHON SOFTWARE FOUNDATION, Python, 2001. Disponível em: https://www.python.org/
downloads/. Acesso em: 12 dez. 2020.
RAMARKRISHNAN, R.; GEHRKE, J. Sistemas de gerenciamento de banco de dados. 3. ed.
Porto Alegre : AMGH, 2011.
126
Referências
ROCHA, I. V. et al. Diverse and emerging molecular mechanisms award polymyxins resistance to
Enterobacteriaceae clinical isolates from a tertiary hospital of Recife, Brazil. Infection, Genetics
and Evolution, v. 85, pp. 104-584, 2020.
SANTOS, M. G.; SARAIVA, M. O.; GONÇALVES, P. F. Linguagem de Programação. Porto
Alegre: SAGAH, 2018.
SETUBAL, C.; MEIDANIS, J. Introduction to Computational Biology. Boston, MA, USA: PWS
Publishing Company,1997.
SILVA, S. A.; NOTARI, D. L.; DALL’ALBA, G. Bioinformática: contexto computacional e aplicações.
Caxias do Sul, RS: Educs, 2020.
STEPHENS, Z. D. et al. Big Data: astronomical or genomical?. PLoS Biol, v. 13, n. 7, 2015. (e1002195).
THE PYZO, Introdução a Pyzo, 2015. Disponível em: https://pyzo.org/start.html. Acesso em:
12 dez. 2020.
NML. Congressional Justification NLM, 2021. Department of Health and Human Services –
National Institute of Health. Disponível em: https://www.nlm.nih.gov/about/2021CJ_NLM.pdf.
Acesso em: 12 jan. 2021.
NOVAES, R. V. Introdução a bancos de dados. Roberto Vasconcelos Novaes, 2019. Disponível
em: https://www.robertonovaes.com.br/index.php/2019/02/19/aulas-12-13-e-14-introducao-
a-bancos-de-dados-o-modelo-relacional-jurimetria-e-analise-estatistica-do-direito-na-pratica/.
Acesso em: 12 dez. 2020.
WERCELENS, P. et al. Bioinformatics Workflows With NoSQL Database in Cloud Computing.
Evolutionary Bioinformatics, v. 15, pp. 117-693, 2019.
ZHANG, Z. et al. A greedy algorithm for aligning DNA sequences. Journal of Computacional
biology, v. 7, n. 12, p. 203-214, 2000.
127