Categorias
Introdução à Programação para Bioinformática com Biopython

Prefácio

Este conteúdo faz parte do livro “Introdução à Programação para Bioinformática com Biopython“. Você pode adquirir a versão impressa desse livro aqui ou a versão para Kindle aqui. Para nos citar, consulte este link.

“Olá mundo!”

Não sabemos ao certo se é assim que um livro deveria começar, mas nesse instante nos parece correto, afinal essas são as primeiras palavras que quase todo programador escreve em seu primeiro código.

Boa parte das pessoas que adentram o mundo da programação acredita que programar seja difícil. Talvez realmente seja no começo, mas quando se começa a praticar, se torna algo simples e natural. É como andar de bicicleta! No começo você acha que vai cair, mas depois que você anda pela primeira vez, percebe o quão simples era. A única diferença é que se você aprender a andar de bicicleta, provavelmente se lembrará de como fazer isso pelo resto da vida. Infelizmente, para a programação não é assim! Tente se lembrar de como é a sintaxe de uma função que você usou uma única vez em toda sua vida há 5 anos atrás. Não é tão fácil assim! Programação é prática!

Mas não se preocupe com isso. No mundo da programação há muitos recursos que lhe ajudarão a “codificar”, como por exemplo: (i) parsers presentes em editores de texto, que são capazes de lhe avisar se um código está escrito errado, assim como seu editor de textos lhe avisa que escreveu uma palavra errada, lhe mostra em que linha exatamente está o erro e lhe dá dicas de como escrevê-la corretamente; (ii) “reaproveitamento de código”, afinal se você já escreveu um código para resolver um determinado problema, e no futuro tiver que resolver um problema parecido, por que deveria criar um novo código? Por quê reinventar a roda? Não é vergonha alguma consultar e reaproveitar seus próprios códigos; (iii) documentações oficiais das linguagens de programação, que podem ser encontradas facilmente nos Websites das linguagens ou em livros; e por fim, (iv) consultar a comunidade de desenvolvedores, afinal alguém já deve ter tido a mesma dúvida que você. Nada pode ser mais efetivo do que perguntar diretamente ao Google (ou a algum outro buscador): “como fazer um programa que faz [alguma coisa importante] em Python?” Você será encaminhado a uma série de blogs e fóruns, com boas dicas e tutoriais. A internet sempre lhe ajudará, mas não se acomode! Tente fazer primeiro, se não conseguir, não tenha medo, busque ajuda!

Nas próximas páginas entraremos no mundo mágico da programação para Bioinformática utilizando a linguagem Python e a biblioteca Biopython.

A quem se destina este livro?

Este livro se destina a profissionais de diversas formações que aspiram se tornar bioinformatas, como biólogos, geneticistas, biomédicos, microbiologistas, físicos, químicos e até mesmo a profissionais de tecnologia da informação. Esse livro se destina a todo aquele que quer se aventurar no universo da Bioinformática e deseja ter um guia para seus primeiros passos na programação para Bioinformática.

Assim, tentaremos explicar de maneira simples e didática os princípios básicos de programação através da linguagem Python. Em seguida, aprenderemos o básico do uso da biblioteca Biopython para análise de dados biológicos.

Ei, acalme-se! Não vamos começar a escrever códigos agora. Primeiro é necessário entender por que programação é importante, sobretudo importante para Bioinformática.

Por que aprender a programar na Bioinformática?

Simplesmente porque programar é importante para qualquer área, afinal nos tempos modernos podemos ver software em todos os lugares: nos computadores pessoais, smartphones, tablets, caixas eletrônicos, satélites, carros, televisores e até mesmo em geladeiras. É isso mesmo! Hoje em dia, já existem geladeiras no mercado capazes de analisar se falta algum produto e enviar avisos diretamente para seu smartphone: “olha, tá faltando leite”! E algumas vão mais além: enviam uma mensagem diretamente para o supermercado e pedem que o que falta seja entregue em sua casa, se você quiser, é claro!

Programar ajuda a aperfeiçoar o raciocínio lógico, as habilidades analíticas e, acima de tudo, programar é muito divertido! Você pode não achar isso uma verdade agora, mas vamos ver se sua opinião não mudará após desenvolver um programa que resolva um problema.

Nos últimos tempos, grandes nomes da computação, como Mark Zuckerberg (criador do Facebook) e Bill Gates (fundador da Microsoft) se uniram para levar programação para pessoas de todas as idades através do Website <http://code.org>. Até mesmo o vencedor do prêmio Nobel da Paz, Barack Obama, aprendeu programação, e se tornou o primeiro presidente americano programador.

Bom, se você ainda não se convenceu de que programar é importante, lembre-se que uma das razões para o surgimento da Bioinformática é a grande quantidade de dados produzidos pelos equipamentos modernos, como Sequenciadores de Próxima-Geração. Analisar esses dados manualmente demandaria um grande tempo.

Alguns autores da área acreditam que os conhecimentos em programação não são fundamentais para bioinformatas, afinal há uma grande gama de programas para Bioinformática já desenvolvidos, cabendo ao bioinformata apenas saber utilizá-los. Em parte, discordamos disso! Saber como programar é importante, mas é claro, que não é necessário ter um conhecimento avançado da área. Muitas vezes o bioinformata enfrentará problemas em que um simples script que ordena dados ou que busca uma padrão específico poderá resolver. Saber como desenvolver esse script pode ser a chave para resolver o problema rapidamente.

Lembre-se que a Bioinformática é uma área vinculada tanto a Ciência da Computação quanto a Biologia, então cabe ao bioinformata ter conhecimento em ambas as áreas. E dominar uma linguagem de programação com precisão é um recurso que pode ser determinante para explicar ou não um problema biológico.

Por fim, se você espera encontrar dicas avançadas de programação, este talvez não seja um livro indicado para você. Mas se quer um livro que lhe indique um caminho para a programação na Bioinformática – pegue uma xícara de café e seus fones de ouvido, escolha uma música que lhe dê concentração, abra seu editor de textos e divirta-se codificando. Vamos lá?

O que são programas de computadores?

Programas de computadores (software) são conjuntos de instruções escritos através de uma linguagem de programação, que serão executadas ou interpretadas por um processador ou máquina virtual para realização de uma determinada tarefa.

Como exemplo de algumas funcionalidades básicas que programas devem realizar podemos citar: (i) entrada de dados: receber dados do teclado, de arquivos ou de algum outro dispositivo de entrada; (ii) saída de dados: o programa deve mostrar dados na tela (imprimir) ou enviar dados para um arquivo ou algum outro dispositivo de saída; (iii) realizar cálculos: um programa deve executar operações matemáticas, como adição, divisão, subtração e multiplicação; (iv) executar comandos condicionais: um programa deve poder executar certos trechos do código apenas se eles se adequarem a determinadas condições descritas também no código; (v) repetição: um programa deve poder executar determinadas ações repetidamente, podendo também aplicar variações às ações executadas.

Processadores (CPU) executam programas em linguagem binária: uma linguagem composta unicamente dos números 0 e 1. Entretanto, acreditamos que seria impossível ou pelo menos improdutivo (nunca diga “impossível”) escrevermos programas em binário, por isso utilizamos as chamadas linguagens de alto nível para codificar.

01001001 01101110 01110100 01110010 01101111
01100100 01110101 11100111 11100011 01101111
00100000 11100000 00100000 01010000 01110010
01101111 01100111 01110010 01100001 01101101
01100001 11100111 11100011 01101111 00100000
01110000 01100001 01110010 01100001 00100000
01000010 01101001 01101111 01101001 01101110
01100110 01101111 01110010 01101101 11100001
01110100 01101001 01100011 01100001 00100000
01100011 01101111 01101101 00100000 01000010
01101001 01101111 01110000 01111001 01110100
01101000 01101111 01101110

Veja acima o título deste livro escrito em linguagem binária. Este livro não tem por objetivo lhe ensinar matemática computacional, então, infelizmente, não aprenderemos a escrever em binário. Para esse exemplo, utilizei o Website <http://www.tradutordebinario.com/>.

Linguagens de programação de alto nível, como PHP, C, C++, C#, Java, JavaScript (não é a mesma coisa do que Java), Perl e nossa querida linguagem Python, utilizada nesse livro, possuem uma sintaxe próxima da nossa linguagem natural, em geral, na língua inglesa. Um exemplo é o comando “print“, encontrado em quase todas as linguagens de programação. O comando “print” imprime na tela alguma mensagem especificada pelo programador.

Muitas funções são similares em diversas linguagens. Assim, se você já conhece uma determinada linguagem e começa a desenvolver em outra, você conseguirá facilmente escrever alguns programas, mesmo nunca tendo escrito nenhum código naquela linguagem. Linguagens de programação são como idiomas. Se você fala português, provavelmente conseguirá entender algumas palavras em espanhol, mesmo sem nunca ter escutado essa língua, e poderá até mesmo arriscar algumas frases, que apesar de você não ter a fluência da língua, poderão ser entendidas por um cidadão nativo de um país que fala a espanhol. Entretanto, o mesmo não ocorrerá se você tentar falar chinês. Há linguagens bastante parecidas, mas também há linguagens com grandes diferenças.

A seguir, alguns conceitos básicos que você provavelmente irá ler neste livro.

Alguns conceitos básicos

  • Algoritmo: define-se como uma série de passos para que se possa resolver um problema computacionalmente tratável em tempo finito.
  • Hardware: é a parte física de um computador: placas, processadores e componentes eletrônicos em geral.
  • Software: é a parte lógica de um computador, um programa de computador que segue um determinado algoritmo, e que pode ser executável ou interpretável.
  • Script: conjunto de comandos organizados em um arquivo de texto e que será analisado por um interpretador ou por um compilador.
  • Função: como o próprio nome já diz é um trecho do código que tem uma função específica, recebendo variáveis e retornando alguma informação processada. Linguagens de programação já possuem funções nativas, o que permite que o programador execute ações sem ter que escrever o algoritmo. Entretanto, programadores podem construir suas próprias funções, o que auxilia na organização do código.
  • Interpretador: constitui num programa de computador que recebe um comando único ou script e os converte em linguagem de máquina para que possam sem processados pela CPU.
  • Paradigmas: representação de um padrão ou modelo; metodologia.
  • Iteração: sinônimo de repetição.
  • Indentação: estruturação e organização do código. Derivada do inglês indent.
  • Diretório: sinônimo a pasta.
  • Abstração: na computação pode-se compreender abstração como uma representação simples que explique todo um processo.
  • Programação estruturada (PE): método de programação em que o código é estruturado de maneira simples em três partes: sequência, decisão e iteração. A PE pode ser vista como uma programação linear, uma vez que os códigos são executados sequencialmente.
  • Programação orientada a objetos (POO): na programação orientada a objetos, o código é organizado por classes, que instanciam objetos.

Como este livro está organizado?

Optei por dividir este manuscrito em duas partes:

  1. Introdução à programação com Python: a qual apresentamos conceitos básicos de programação, exemplificados por códigos na linguagem Python;
  2. Programação para Bioinformática com Biopython: a qual são descritas algumas funções da biblioteca Biopython, além de exemplos aplicados a problemas biológicos.

Se você se dedicar algumas horas todos os dias, seria possível concluir a leitura deste livro em duas semanas. Mas não se esqueça de refazer todos os códigos descritos.

Configurando o ambiente de desenvolvimento

Por uma questão de didática, todos os exemplos citados nesse livro serão apresentados em scripts, ou seja, evitaremos utilizar o modo interativo do Python. Assim, antes de iniciarmos é necessário configurar seu ambiente de desenvolvimento e escolher uma boa IDE (do inglês Integrated Development Environment, ou na tradução para o português “Ambiente Integrado de Desenvolvimento”) ou até mesmo escolher um simples editor de textos. Os sistemas operacionais Windows, Linux e MacOS possuem seus editores padrões: Bloco de Notas, Gedit e Editor de Texto, respectivamente. Há editores que modificam as cores para ressaltar características específicas de uma determinada linguagem, e até mesmo editores que possuem parsers. Segue abaixo, algumas dicas:

  • Sublime text: é sem dúvidas nosso editor favorito e de muitos outros programadores. Simples e leve. Se escolher esse editor, sugerimos que experimente o esquema de cores “monokai”, permite que você programe por horas sem cansar sua visão. Compatível com Windows, Linux e MacOS. Permite ainda a execução de scripts diretamente do editor. Enquanto esse livro estava sendo escrito, todos os exemplos foram realizados com Sublime text 2. Onde conseguir: http://www.sublimetext.com
  • Notepad++: editor de código que suporta diversas linguagens. Suporte ao sistema operacional Windows Onde conseguir: http://notepad-plus-plus.org
  • Aptana Studio: ideal para gerenciamento de projetos grandes. Permite um sistema de sincronização com servidores via SFTP ou FTP. Onde conseguir: http://www.aptana.com
  • Visual Studio CODE: é um editor leve e gratuito desenvolvido pela Microsoft. Apesar disso, apresenta suporte a sistemas operacionais: Linux, MacOS, além de Windows é claro. Onde conseguir: https://www.visualstudio.com/products/code-vs

Outras IDEs e editores

Se nenhuma das opções acima lhe atender, o site Python Brasil preparou uma lista com as IDEs mais populares para desenvolvimento em Python (http://wiki.python.org.br/IdesPython). Segue abaixo algumas opções:

Idlehttp://www.python.org

Komodo-Edithttp://www.activestate.com/komodo_edit/

NetBeanshttp://netbeans.org/features/python/index.html

NINJA-IDEhttp://ninja-ide.org/

SPEhttp://pythonide.blogspot.com/

Spyder 2http://code.google.com/p/spyderlib/

Pidahttp://pida.co.uk/

Eric4http://www.die-offenbachs.de/eric/index.html

Boa-Constructorhttp://boa-constructor.sf.net

Eclipsehttp://www.eclipse.org

DrPythonhttp://drpython.sourceforge.net/

IPythonhttp://ipython.scipy.org/

KDevelophttp://www.kdevelop.org/

PythonWinhttp://pywin32.sf.net/

PythonCardhttp://pythoncard.sourceforge.net

TruStudiohttp://trustudio.unipro.ru

PyPEhttp://pype.sourceforge.net/index.shtml

Material suplementar

Todos os scripts e exemplos preparados neste livro foram disponibilizados em: <https://github.com/dcbmariano/biopython>. Antes de começar a leitura do próximo capítulo, acesse o diretório e faça download dos dados contidos nesse repositório (clique em Download Zip).

Padrão de nomeação dos scripts:

  • cX_sY.py

Como por exemplo, no script c1_s1.py:

  • c1 indica que o script é exibido no capítulo 1;
  • s1 indica que se trata do primeiro script exibido no capítulo.

Quer aprender mais? Conheça nossos cursos profissionalizantes à partir de R$19,99:

Livro Introdução à Programação para Bioinformática com Biopython

Capítulo 1
Introdução ao Python

Capítulo 2
Comandos condicionais

Capítulo 3
Laços de repetição

Capítulo 4
Trabalhando com strings

Capítulo 5
Listas

Capítulo 6
Manipulando arquivos

Capítulo 7
Funções

Capítulo 8
Princípios da orientação a objetos

Capítulo 9
Introdução ao Biopython

Capítulo 10
Sequências

Capítulo 11
BLAST

Capítulo 12
PDB

Capítulo 13
Visualização de dados em Python

Capítulo 14
Outras coisas interessantes que se pode fazer com Biopython

Capítulo 15
Hierarquia do Biopython

Por favor, nos cite:

MARIANO, D. C. B.; BARROSO, J. R. P. M. ; CORREIA, T. S. ; de MELO-MINARDI, R. C. . Introdução à Programação para Bioinformática com Biopython. 3. ed. North Charleston, SC (EUA): CreateSpace Independent Publishing Platform, 2015. v. 1. 230p .

Por Diego Mariano

Doutor em Bioinformática pela Universidade Federal de Minas Gerais com atuação na área de ciência de dados e aprendizado de máquina aplicados ao aperfeiçoamento de enzimas usadas na produção de biocombustíveis. Mestre em Bioinformática, também pela UFMG, atuando na área de desenvolvimento de sistemas Web para montagem de genomas. Atualmente realiza estágio pós-doutoral no Departamento de Ciência da Computação da UFMG com foco em desenvolvimento de sistemas Web para Bioinformática, análise exploratória e visualização de dados. Tem conhecimentos nas linguagens: PHP, JavaScript, Python, R, Perl, HTML, CSS e SQL.

Deixe uma resposta

O seu endereço de e-mail não será publicado. Campos obrigatórios são marcados com *