Linguagens Python e R na Bioinformática: qual escolher e como utilizar?

As linguagens Python e R possuem grande utilidade na bioinformática. Aprenda a tratar dados, gerar gráficos e construir mapas!

A bioinformática é uma aliada valiosa na medicina de precisão. Com o uso de tecnologias avançadas e ferramentas computacionais, conseguimos analisar dados biológicos de forma mais profunda, resultando em diagnósticos precisos e tratamentos personalizados para cada paciente.

O profissional que deseja ingressar nesta profissão  acaba se deparando com inúmeras tecnologias, e por muitas vezes, não começa seus estudos por dúvidas de qual caminho seguir. Uma das primeiras dúvidas é: qual linguagem de programação começar a estudar?

Uma rápida pesquisa na internet, ou uma consulta a colegas de grupo, geralmente acaba em uma das duas opções: Python ou R.

Quer dicas sobre qual destas duas linguagens é mais adequada aos seus objetivos? Acompanhe o texto! Nele, ensinamos também como utilizar ambas para tratar dados tabulares, gerar gráficos e criar mapas.

Tratamentos de dados tabulares

Uma tarefa rotineira do Python e R na bioinformática é trabalhar com dados tabulares, ou seja, conjuntos de informações organizadas em linhas e colunas (planilhas), o que permite a análise detalhada por diferentes ferramentas.  

Seja para validar as regiões presentes em um arquivo .bed – que representa de forma tabular posições em um genoma -, os resultados de uma análise de BLAST, ou as informações extraídas de um banco de dados, a regra é clara: devemos fazer isto de forma automatizada, de modo a otimizar o tempo de trabalho, e evitar erros humanos.

Então vamos verificar na prática, como trabalhar com um arquivo com resultados de BLAST, seja em Python ou em R. Nossa tarefa será simples:

  1. Ler o arquivo de entrada (o input) e obter os resultados que passem no filtro de similaridade de pelo menos 60%;
  2. Remover resultados duplicados para uma mesma sonda;
  3. Anotar os dados do blast de acordo com uma tabela do banco de referência;
  4. Criar diferentes gráficos com as informações tratadas.

Tratamento dos dados com Python 

Para realizar esta tarefa, vamos utilizar a biblioteca Pandas. Esta biblioteca é uma ferramenta poderosa para manipulação e análise de dados, sendo amplamente utilizada na ciência de dados. E é considerada uma das principais ferramentas para a manipulação de dados em Python.

#carregando a biblioteca pandas com o nome de pd

import pandas as pd

#lendo os resultados tabulares do blast

resultados_blast = pd.read_table("https://raw.githubusercontent.com/dezordi/tutoriais/main/01_python_e_r/blast.output.tsv")

#lendo o banco de dados tabular

banco_de_dados = pd.read_table("https://raw.githubusercontent.com/dezordi/tutoriais/main/01_python_e_r/db.tsv")

#filtrando os resultados pela identidade e removendo as demais linhas para a mesma sonda

resultados_blast_filtrados = resultados_blast.query("pident >= 60").drop_duplicates(subset="qseqid", keep="first")

#anotando os resultados do blast com as informações presentes no banco de dados

resultados_blast_filtrados_anotados = pd.merge(resultados_blast_filtrados, banco_de_dados, left_on='sseqid', right_on='Accession')

#printando os resultados na tela

print(resultados_blast_filtrados_anotados[["qseqid", "Family", "Genus", "Species", "Protein"]])

Onde obtemos:

Tratamento dos dados com R 

Em R, vamos utilizar a biblioteca dplyr. Esta biblioteca fornece uma sintaxe simples e eficiente para trabalhar com grandes conjuntos de dados em R, sendo uma das principais bibliotecas para processamento de dados em formato Dataframe.

#carregando a biblioteca dplyr

library(dplyr)

#lendo os resultados tabulares do BLAST

resultados_blast <- read.table("https://raw.githubusercontent.com/dezordi/tutoriais/main/01_python_e_r/blast.output.tsv", header = TRUE, sep = "\t")

#lendo os resultados tabulares do BLAST

banco_de_dados <- read.table("https://raw.githubusercontent.com/dezordi/tutoriais/main/01_python_e_r/db.tsv", header = TRUE, sep = "\t")

#filtrando os resultados pela identidade, removendo as demais linhas para a mesma sonda e anotando os resultados do BLAST com as informações presentes no banco de dados

resultados_blast_filtrados_anotados <- resultados_blast %>% filter(pident >= 60) %>% 
filter(!duplicated(qseqid)) %>%
merge(banco_de_dados, by.x = "sseqid", by.y = "Accession", all.x = TRUE, all.y = FALSE)

#printando os resultados na tela

print(resultados_blast_filtrados_anotados[, c("qseqid", "Family", "Genus", "Species", "Protein")])

Onde obtemos o mesmo resultado do código em python, apenas em outra ordem.

Criação de gráficos (plots) 

Outra tarefa rotineira em bioinformática é a plotagem de dados, ou seja, a criação de imagens gráficas. Seja para entender os dados ao início de uma análise, sumarizar os resultados encontrados, ou até tentar entender um conjunto enorme de informações, imagens gráficas são aliadas poderosas na rotina dos bioinformatas.

Seguindo com os dados gerados no exemplo anterior, vamos criar um gráfico de setores tanto em Python, quanto em R. Nesta tarefa a ideia é sumarizar o tamanho total de alinhamento que temos de cada um dos vírus identificados.

Plotagem de dados com Python

Para esta tarefa, vamos utilizar o módulo pyplot da biblioteca matplotlib. Esta biblioteca é uma das principais bibliotecas para visualização de dados em Python, oferecendo uma ampla variedade de funções para diferentes tipos de gráficos.

# segunda tarefa: carregar o módulo pyplot da biblioteca matplotlib com o nome de plt

import matplotlib.pyplot as plt

#sumarizando o tamanho dos alinhamentos por espécie

tamanho_por_especie_viral = resultados_blast_filtrados_anotados.groupby("Species")["length"].sum()

#criando o gráfico

plt.pie(tamanho_por_especie_viral, labels=tamanho_por_especie_viral.index, autopct='%1.1f%%', startangle=90, counterclock=False, pctdistance=0.6)

#assegurando que o gráfico está em formato circular

plt.axis('equal')

#adicionando o título do gráfico

plt.title("Criando o plot com Python")

#mostrando o gráfico em uma interface que permite realizar algumas modificações e salvá-lo como png

plt.show()

Plotagem de dados com R

Com a linguagem R vamos utilizar a biblioteca ggplo2, onde é possível criar uma variedade de gráficos, assim como na biblioteca matplotlib de Python, sendo muito utilizada em projetos de ciências de dados, estatística e bioinformática.

#carregando a biblioteca ggplot2

library(ggplot2)

#sumarizando o tamanho dos alinhamentos por espécie

tamanho_por_especie_viral <- resultados_blast_filtrados_anotados %>% group_by(Species) %>% summarize(length = sum(length))

#transformando os valores em porcentagem

tamanho_por_especie_viral$length <- prop.table(tamanho_por_especie_viral$length)

#criando o gráfico e adicionando título

plot <- ggplot(tamanho_por_especie_viral, aes(x="", y = length, fill = Species)) +
 geom_bar(width = 1, stat = "identity") +
 coord_polar("y", start = 0) +
 ggtitle("Criando o plot com R") + 
 theme(plot.title = element_text(hjust = 0.5)) +
 theme(axis.text.x=element_blank(),
       axis.text.y=element_blank(),
       axis.ticks=element_blank())+
 geom_text(aes(label = paste0(round(length*100, 2),"%")), position = position_stack(vjust = 0.5))

#mostrando o gráfico em uma interface que permite realizar algumas modificações e salvá-lo como png

plot

E ao final das tarefas, temos 2 plots muito similares! Porém cada um com as opções gráficas padrões de suas respectivas bibliotecas.

Plot da esquerda criado com Python, e da direita com R.

Confecção de mapas

Por fim, outra tarefa muito comum é a criação de mapas com informações de determinadas amostras. Esse tipo de imagem tem se tornado muito útil durante a pandemia da Covid-19, onde mapas foram utilizados para demonstrar o número de pessoas infectadas por cidade, estado ou país, por exemplo.

Seguindo a nossa tarefa, vamos fazer um mapa-múndi com o número de vírus por país que deram match nos resultados de BLAST tratados nas etapas anteriores.

Criação de mapas com Python

Para esta tarefa, vamos utilizar o módulo express da biblioteca plotly, que permite a criação de gráficos interativos e a associação de diferentes tipos de dados à coordenadas geográficas de forma simplificada.

#carregando o método express da biblioteca plotly como px

import plotly.express as px

#obtendo o número de sequências por país

sequencias_por_pais = resultados_blast_filtrados_anotados.groupby("Country").size().reset_index(name='sequencias')

#criando o gráfico

fig = px.scatter_geo(data_frame=sequencias_por_pais,
                    locations=sequencias_por_pais['Country'],
                    locationmode='country names',
                    color=sequencias_por_pais['sequencias'],
                    size=sequencias_por_pais['sequencias'],
                    hover_name=sequencias_por_pais['Country'],
                    title='Número de sequências por país',
                    )

#mostrando o gráfico em uma interface que permite realizar algumas modificações e salvá-lo como png

fig.show()

Criação de mapas com R

Em R, vamos usar a mesma biblioteca! Sim, algumas bibliotecas são disponibilizadas para as duas linguagens, e a Plotly é uma delas.

#caregando a biblioteca plotly

library(plotly)

#obtendo o número de sequências por país

sequencias_por_pais <- resultados_blast_filtrados_anotados %>% group_by(Country) %>% summarize(sequencias = n())

#criando o gráfico

fig <- plot_geo(data = sequencias_por_pais,
               locations = ~Country,
               locationmode = "country names",
               color = ~sequencias,
               size = ~sequencias,
               hover_name = ~Country,
               title = "Número de sequências por país")

#mostrando o gráfico em uma interface que permite realizar algumas modificações e salvá-lo como png

fig

E neste caso, os resultados são quase idênticos, uma vez que a mesma biblioteca foi utilizada nas duas linguagens de programação.

Imagem de cima criada na linguagem Python, e de baixo criada na linguagem R.

Quando usar cada linguagem?

A escolha entre Python e R na bioinformática geralmente depende do objetivo e do tipo de tarefa a ser realizada. Ambos possuem suas próprias vantagens e desvantagens.

Python é uma linguagem de propósito geral, ou seja, você pode usar ela para tratar dados tabulares, criar gráficos, construir uma ferramenta ou até uma aplicação web.

É comum cargos de bioinformática na indústria solicitarem experiência com Python, pois muitos processos dentro da empresa são construídos nesta linguagem, e programar com ela será necessário para realizar manutenção dos códigos da empresa, e para criar novas ferramentas.

Por outro lado, a linguagem R é específica para estatística e análise de dados, e vem sendo aprimorada com novas bibliotecas para atender novas áreas. Além disso, em R há disponível o projeto Bioconductor, que visa a criação de diversas bibliotecas para análise de dados biológicos, sendo muito utilizado no meio acadêmico e em alguns projetos no meio privado.

Conclusão

As linguagens Python e R na bioinformática são amplamente utilizadas na análise de dados. Neste artigo, aprendemos a tratar dados tabulares, plotá-los em um gráfico de setores e a criar mapas utilizando ambas as linguagens.

De modo geral, ambos Python e R na bioinformática provam sua utilidade, em alguns projetos será necessário utilizar a linguagem Python, em outros R. Continue acompanhando os conteúdos da Varsomics para entender como ambas as linguagens são utilizadas no dia-a-dia dos bioinformatas!

Referências

Biblioteca Pandas (Python)

Biblioteca dplyr (R)

Biblioteca matplotlib (Python)

Biblioteca ggplot2 (R)

Bibliotecas Plotly (R e Python)

Dezordi, F. Tutoriais: Python e R. Disponível em: <https://github.com/dezordi/tutoriais/tree/main/01_python_e_r>.

Relacionados