APOSTILA - Introduçao à Programação com Python
APOSTILA - Introduçao à Programação com Python
Copyright © 2019
2 Tópicos Avançados . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 25
2.1 Criando Funções 25
2.1.1 Variável local vs global . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 27
2.2 Importando bibliotecas e pacotes 27
2.3 Criando Gráficos com Matplotlib 29
2.4 Manipulando dados com Pandas 32
2.4.1 Análise Breast Cancer . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 44
2.5 Biopython 49
2.5.1 Manipulação de Sequências . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 50
2.5.2 API Entrez do NCBI . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 51
2.5.3 Diagrama Genômico . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 51
2.5.4 BLAST . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 52
2.5.5 KEGG . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 52
2.5.6 PDB . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 53
5
AUTORES
Abra um novo arquivo .py, salve e execute. Este script simplesmente retorna a frase Hello
World!. Nós solicitamos ao computador que nos mostrasse o texto que está como argumento da
função print(). Qualquer outra coisa que você escreva ele irá imprimir no shell.
Caso tenha interesse, em nosso canal você encontrará vídeos básicos sobre programação e
bioinformática [0].
8 Capítulo 1. A Linguagem Python e a Programação
Além do texto a ser impresso, a função print pode ter outros argumentos, o sep e end. O sep
define o separador dos argumentos de texto, por exemplo:
Caso esses argumentos não sejam especificados, os valores default são: sep=’ ’ e end=’\n’,
espaço e quebra de linha, respectivamente.
Note que armazenamos o valor digitado em uma variável chamada "x". Então imprimimos o
valor dessa variável na função print(). Em python string é apenas um dos tipos de variáveis. Existem
ainda os tipos que armazenam dados numéricos inteiros e flutuantes, int() e float(), respectivamente.
Os tipos binários ou booleanos, bool, que podem receber valores True ou False.
Existem tipos que armazenam sequência de dados, são as listas, sets, tuplas e dicionários. Cada
tipo de variável será detalhada a seguir.
dados numéricos, texto, sequências e lógicos. A seguir temos exemplos destes tipos no Listing ??.
Nomeamos a variável e atribuímos um valor a ela utilizando o sinal de igual. Diferentemente de
outras linguagens, em Python não há a necessidade de especificar o tipo da variável, ou declará-la
antes utilizar.
Para visualizar o tipo da variável, utilizamos a função type() que retorna o tipo da variável.
Alguns outros exemplos podem ser vistos no site www.w3schools.com [0].
# Flutuante
y = 2.555
print(y, type(y))
# Complexo
z = 3+5j
print(z, type(z))
# String
w = "bioinformática"
print(w, type(w))
# Lista
j = [10, 11, 55]
print(j, type(j))
# Tupla
k = (6,8,9)
print(k, type(k))
# Dicionário
m = {"A":"Adenina", "C":"Citosina"}
print(m, type(m))
# Lógico
n = True
print(n, type(n))
Os tipos numéricos podem ser inteiro, real ou complexo. Note que no tipo complexo a parte
imaginária é acompanhado do j, não confunda esta letra com o nome da variável da lista. São coisas
distintas com o mesmo sinal gráfico. Na representação do número complexo o j está "grudado"no
número. Portanto, caso o módulo de "j"seja igual a 1, deve-se escrever 1j, e não apenas j, uma vez
apenas j poderá ser o nome dado a uma variável. Conforme dito anteriormente, o valor de uma
variável pode ser alterado a qualquer momento e para tipos diferentes de dados.
print('x = ', x)
Operações com dados numéricos serão vistos em Operadores Aritméticos. Vamos trabalhar e
apresentar algumas funções para os outros tipos de variáveis. As principais funções envolvendo
essas variáveis serão abordadas neste documento, porém, outras funções podem ser vistas neste link
http://www.codeskulptor.org/docs.html [0].
As variáveis podem ainda ser classificadas como local ou global. Mas isso será melhor analisado
no capítulo sobre funções.
# Tamanho da sequência
print('Tamanho da seq1: ', len(seq1))
print('Tamanho da seq2: ', len(seq2))
Nenhuma destas funções alteram o valor original das variáveis. Permitindo que sejam ma-
nipuladas, porém, sem que se perca o dado original. Vale lembra que algumas vezes deseja-se
alterar o valor original, sendo necessária a atualização da variável. Caso quisessemos contabilizar o
1.2 Tipos de dados 11
conteúdo GC% das duas sequências, seria necessário alterar os "GG"para "gg"na seq2. No exemplo
abaixo vamos utilizar o método lower(), e algumas operações aritméticas.
seq2_t = len(seq2)
seq2_GC = 100*( seq2.count('g') + seq2.count('c') )/seq2_t
print('GC% da seq2: ', seq2_GC)
Os tipos string também podem ser concatenados com o sinal "+". Pode-se unir duas ou mais
strings "somando-as".
A variável string, assim como as sequências ordenas (arrays), tem os elementos que a compõem
relacionados a sua posição. Por exemplo, o primeiro elemento possui índice 0, o segundo indice 1 e
assim sucessivamente. Ou ainda, o último elemento possui índice -1, o penúltimo -2 etc. O acesso
a cada elemento, ou range de elementos, é feito através dos colchetes. Para selecionar apenas
uma parte da string, ou qualquer outra sequência ordenada como listas, basta inserir o intervalo de
índices dentro dos colchetes. O primeiro índice é adcionado e o último não.
# O úlitmo elemento
print('pos -1: ', seq[-1])
# O penúlitmo elemento
print('pos -2: ', seq[-2])
# SLICE
# Do segundo elemento ao quinto
print('seq[2:5]: ', seq[2:5])
lembrar que em Python uma lista pode ter elementos de diferentes tipos, como numéricos, textuais,
lógicos ou ainda outras listas, Listing 1.13.
Um elemento de uma lista pode ser uma outra lista, possibilitando a criação de uma matriz, ou
array com dimensão m × n. O tipo tuple, ou tupla, é basicamente uma lista em os elementos não
podem ser alterados. Já os tipos set() são conjuntos não ordenados de dados. Seus elementos são
acessados através do loop for, que será visto a seguir.
Código 1.13: Métodos aplicados à listas
# Declaração e atribuição de valor àvariável seq
codons = ['AUG', 'UCA', 'CGC', 'UAA', 'UAG']
# Tamanho da lista
print('len: ', len(codons))
# Ordenar os elementos
codons.sort()
print('codons: ', codons)
'UUG':'Leucina',
'GAU':'Ácido aspártico',
'GAC':'Ácido aspártico',
'UAA':'Stop'}
# Lista de palavras-chave
print(codonAmino.keys())
# Tamanho do dicionário
print( len(codonAmino.values() )
Outras funções de conversão de tipos são: int(), complex(), str(), bool(), list(), tuple(), dict().
Que convertem os valores em inteiro, complexo, string, lógico, lista, tupla e dicionário, respectiva-
mente.
resolvido pela operação mais à esquerda. A mesma lógica se aplica à adição e subtração. Para
lembrar dessa ordem, pode-se lembrar da sigla PEMDAS.
P Parênteses, então
E Exponenciação, então
MD Multiplicação e Divisão, esquerda para a direita, então
AS Adição e Subtração, esquerda para a direita
Para visualizar o resultado, usa-se a função print (colocar referência do capítulo), que terá como
argumento o que se deseja ver na tela.
Exercício: Dada a eq. que descreve o movimento de um ponto material. Utilizando python,
calcule a distância percorrida pelo móvel para t = 20s.
s = 20 + 12 × t + 4 × t 2 (1.1)
Monte um script em que o valor de t é inserido pelo usuário através da função input().
Exemplo: Qual o resultado das expressões abaixo? Tente resolver, apenas use python para
conferir sua resposta.
1. (7 > 3) and (5 > 2)
2. (3 == 2) or (1 > 0)
3. True and (9 <= 9) and (not False)
4. (0 a0 == 0 a0 )
5. (0 G0 == 0 g0 )
a = 7
b = 3
if a > b:
print('a é maior que b')
else:
print('a não é maior que b')
# O código acima deve retornar 'a émaior que b'
a = 1
b = 5
if a > b:
print('a é maior que b')
else:
print('a não é maior que b')
# O código acima deve retornar 'a não émaior que b'
Podemos montar a mesma estrutura utilizando a função input(), para criar uma interação com
o usuário. Criamos duas entradas input. Lembrando que essa função lê a entrada como string,
portanto, transformamos em int ou float.
Código 1.20: Estrutra Condicional 2
a = input('Digite um número: ')
b = input('Digite outro número: ')
a = int(a)
b = int(b)
if a > b:
print('a é maior que b')
else:
print('a não é maior que b')
Uma mesma estrutura também pode combinar mais uma comparação usando elif. Por exemplo:
Código 1.21: Estrutra Condicional 3
a = input('Digite um número: ')
b = input('Digite outro número: ')
a = int(a)
b = int(b)
if a > b:
print('a é maior que b')
elif b > a:
print('b é maior que a')
else:
print('a e b são iguais')
Exercícios resolvidos: Utilizando a função input, projete uma estrutura condicional que
imprima o nome da base nitrogenada relacionada à letra que o usuário digitar. Lembre-se que:
Símbolo Nome
a Adenina
c Citosina
g Guanina
t Timina
u Uracila
18 Capítulo 1. A Linguagem Python e a Programação
Resolução:
if base == 'a':
print('Adenina')
elif base == 'c':
print('Citosina')
elif base == 'g':
print('Guanina')
elif base == 't':
print('Timina')
elif base == 'u':
print('Uracila')
else:
print('Símbolo não reconhecido')
Note que o código não é sensível a letras maiúsculas. Para A, C, G, T e U sejam reconhecidas,
deve-se também inserir essas possibilidades nas condições. Com o operador lógico or faz-se o
seguinte:
Outra maneira de se fazer isso é transformando a entrada do usuário em letra minúscula com o
método lower(). Dessa forma basta comparar apenas com minúsculas.
if base == 'a':
print('Adenina')
elif base == 'c':
print('Citosina')
elif base == 'g':
print('Guanina')
elif base == 't':
print('Timina')
elif base == 'u':
print('Uracila')
else:
print('Símbolo não reconhecido')
1.7 Estruturas de Repetição 19
Exercício proposto Projete um script que retorne a base complementar da inserida pelo usuário.
Use como esqueleto um dos exemplos anteriores.
A cada nova iteração o valor de i é atualizado somando-se um ao valor anterior. E quando i for
igual a 5, a condição i<5 será falsa, interrompendo assim o loop.
Dentro do loop é possível inserir a estrutura if... else. Caso queira-se imprimir apenas os valores
pares enquanto a condição seja satisfeita, pode-se fazer o seguinte:
Lembrando que um número pode ser considerado par caso o resto de sua divisão por 2 seja
igual zero.
Caso exista alguma condição em que o loop deva ser encerrado antes, pode-se utilizar o
comando break. Por exemplo, caso queira-se encerrar o loop se o valor de i for igual a 11. Faz-se o
seguinte:
Pode-se também utilizar o operador continue. Este operador interrompe a iteração atual e
continua com a próxima iteração. Suponha que se queira mostrar os números de um a cinco com
exceção do número três. Pode-se fazer o seguinte:
continue
print(i)
É possível acessar todos os elementos de uma lista ou caracteres de uma string com o loop
while. Para isso é necessário saber o tamanho da lista ou string, ou seja, quantos elementos ela
possui. Lembre-se que é possível acessar cada elemento de uma sequência ordenada indicando o
seu índice. Caso tenha dúvidas quanto a isso, volte ao capítulo sobre strings ou listas.
Utilizando como base o exemplo XXXX, pode-se com o loop while solicitar a entrada de uma
sequência para o usuário, e não apenas uma base. Então retornar a base complementar. Para melhor
visualizar a sequência complementar, na função print insira o argumento end=”.
i = 0
while i < len(seq):
if seq[i] == 'a':
print('t', end='')
elif seq[i] == 'c':
print('g', end='')
elif seq[i] == 'g':
print('c', end='')
elif seq[i] == 't':
print('a', end='')
else:
print('N', end='')
i += 1
Muitas vezes sequências de bancos de dados possuem um caractere que indica o fim da
sequência, por exemplo, “acgggttaatcct/”. A barra indica o fim da sequência. Se esse for o caso,
ao invés de utilizar a função len(), pode-se projetar a condição do while para valores diferentes do
caracter terminador, no caso a barra “/”.
i = 0
while seq[i] != '/':
if seq[i] == 'a':
print('t', end='')
elif seq[i] == 'c':
print('g', end='')
elif seq[i] == 'g':
print('c', end='')
elif seq[i] == 't':
print('a', end='')
else:
print('N', end='')
1.7 Estruturas de Repetição 21
i+=1
Uma alternativa é utilizar o break quando o caractere terminador aparecer. Neste caso, o while
deve repetir indefinidamente, até que o loop seja interrompido pelo break.
i = 0
while True:
if seq[i] == 'a':
print('t', end='')
elif seq[i] == 'c':
print('g', end='')
elif seq[i] == 'g':
print('c', end='')
elif seq[i] == 't':
print('a', end='')
elif seq[i] == '/':
break
else:
print('N', end='')
i+=1
Nestes dois últimos casos é importante que se tenha certeza que o caractere terminador esteja na
sequência, caso contrário o loop while será infinito. Uma maneira de ser verificar se um determinado
caractere está em determinada sequência é utilizando o operador not in.
i = 0
while barraPresente:
if seq[i] == 'a':
print('t', end='')
elif seq[i] == 'c':
print('g', end='')
elif seq[i] == 'g':
print('c', end='')
elif seq[i] == 't':
print('a', end='')
elif seq[i] == '/':
break
else:
print('N', end='')
22 Capítulo 1. A Linguagem Python e a Programação
Exercício proposto: Tomando-se como base o exercício anterior. Projete um tradutor de bases
complementares de DNA que solicite sequências ao usuário indefinidamente até que o usuário
escreva FIM. A Dica: utilize loop while com a função input dentro.
Note que não há necessidade da criação da variável auxiliar “i” para contar a quantidade de
repetições e acessar os itens da sequência pelo índice. Os elementos da sequência são armazenados,
neste exemplo, na variável base. A cada nova iteração o valor da variável base é atualizado. O
nome dessa variável pode ser qualquer um, como x, i, j etc. Substituindo no exemplo XXX o while
por for, temos:
Também é possível utilizar o operador break, da mesma forma como foi utilizado no loop while.
Assim como o operador continue. Neste exemplo, quando nenhum caractere for reconhecido pelo
programa, o código irá pular o caractere ao invés de imprimir “N”.
else:
continue
A entrada de dados de um programa pode ser feita pela função input() ou por um arquivo fasta,
por exemplo.
Para isso utilizamos a função open(). E armazenamos o conteúdo do arquivo em uma variável.
2. Tópicos Avançados
Caso quiséssemos inserir novos inputs, teríamos que repetir o processo todas as vezes. Se
o algoritmo fosse maior que este de conversão de temperatura seria exaustivo repetí-lo. E prici-
palmente, caso tivéssemos que alterar algo na fórmula do cálculo, teríamos que modificar todo o
código repetidas vezes. Por isso, montar uma função é a forma mais fácil e mais organizada de
estruturar seu código.
26 Capítulo 2. Tópicos Avançados
Uma função é declarada pelo operador def, seguido do nome da função e os parâmetro de
entrada. Perceba que igualmente aos operadores if, else, elif, while e for, a definição é concluída
com ":". Vamos ao exemplo de conversão de temperaturas.
Veja que o código é muito mais limpo, fácil de entender. E caso a fórmula precise de ajuste,
basta alterar a função uma única vez. A função pode ter mais de um argumento ou nenhum,
depende do que se deseja fazer. A função também pode ou não retornar algum resultado. Abaixo
um exemplo sem argumento, com vários argumentos e outro com a função retornando um valor.
# Chamadas da função
converteTemperatura()
converteTemperatura()
converteTemperatura()
# Exponenciação
print('4^7 = ', math.pow(4,7))
# Neperiano e = 2.7182...
print('e = ', math.e)
# pi = 3.1415...
print('pi = ', math.pi)
# Logaritmo
print('log(10000, 10) = ', math.log(10000, 10))
Caso necessite, durante a execução o código, do tempo exato, pode-se utilizar o múdulo time.
Código 2.9: Módulo time intervalo de tempo
import time
# intervalo de tempo de uma execução
t1 = time.time()
time.sleep(5) # pausa a execução em 5 s
print('t2 - t1 = ', time.time()-t1, 'segundos')
2.3 Criando Gráficos com Matplotlib 29
Outro módulo muito usado em bioinformática é o regex, nesta apostila ele tem um tópico
próprio para ele: Expressões Regulares Regex.
Além dos módulos nativos da linguagem Python, existem pacotes de terceiros que podem ser
instalados e usados da mesma maneira, com o operador import. A seguir aprenderemos a utilizar
o pacote Pandas para manipulação de dados, Scypi para estatística, Matplotlib para gráficos e
Biopython para aplicações em bioinformática.
O principal pacote para visualização de gráficos em Python é o Matplotlib. Existem uma vasta
documentação e inúmeros exemplos em seu site.
https://matplotlib.org
Com os seguintes dados do eixo x = [−2, −1, 0, 1, 2, 3, 4, 5] e do eixo y = [0.25, 0.5, 1, 2, 4, 8, 16, 32],
podemos rapidamente plotar o gráfico da seguinte maneira:
# Mostra o gráfico
plt.show()
A saída do código acima é a Figura 2.1. Note que não há título, nomes dos eixos nem linhas
de grade. No próximo script vamos inserir essas informações e o estilo da linha. Partiremos do
princípio de que o comando de importação do pacote foi executado.
30 Capítulo 2. Tópicos Avançados
# Insere título
plt.title('Crescimento em função do tempo')
# Insere o nome do eixo x
plt.xlabel('Tempo (h)')
# Insere o nome do eixo y
plt.ylabel('População (milhões)')
# Insere o grid
plt.grid(True) # em apenas um dos eixos plt.grid(True, axis='x')
# Mostra o gráfico
plt.show()
2.3 Criando Gráficos com Matplotlib 31
O método plot() tem a seguinte ordem de argumentos: o eixo x, o eixo y e o estilo da linha.
Numa mesma função pode-se inserir mais de uma sequência de dados nesta mesma ordem. Suponha
que queiramos plotar o crescimento de três espécies diferentes.
É possível com os métodos bar, pie, hist, scatter plotar diversos outros tipos de gráficos. Porém,
existem algumas maneiras muito mais simples e fáceis de utilizar o Matplotlib. Com Pandas e
Seaborn, por exemplo, que são pacotes que iremos ver a seguir.
Além das aplicações diretas ao DataFrame inteiro, pode-se selecionar uma coluna e aplicar as
fórmulas, ou ainda, selecionar dados a partir de uma condição. Por exmeplo, apenas às sépalas que
com comprimento maior que 6.0. Os códigos a seguir partem do princípio que as linhas 2 e 6 do
Script 2.14 foram executadas.
Podemos agrupar os dados com referência aos valores de uma coluna com a função groupby().
Essa função cria um novo objeto, e as funções vistas em 2.14 podem ser aplicadas ao objeto.
specieGroup.max()
specieGroup.min()
specieGroup.describe()
O pacote Matplotlib para criação de gráficos pode ser utilizado diretamente pelo pacote Pandas.
Para plotar um gráfico com dados do DataFrame, além do pacote Pandas, deve-se importar o pacote
Matplotlib. Então utilizar o método plot() do Pandas. Vamos visualizar rapidamente para entender
pandas na próxima seção.
df = pd.read_csv('dadosIris.csv', index_col=0)
Note que o gráfico automaticamente gera a legenda com os nomes das colunas. Perceba também
que ao invés do d f .plot, também seria possível plotar apenas d f [[0 sepall enght 0 ,0 sepalw idth0 ]]. Ou
qualquer outro DataFrame derivado.
Caso esteja usando a IDE Jupyter, pode-se inserir o comando %mat plotlib inline. Dessa
maneira o gráfico será plotado na chamada d f .plot(), sem a necessidade do comando plt.show() a
cada plotagem.
df = pd.read_csv('dadosIris.csv', index_col=0)
df.plot()
Caso quiséssemos ter uma idéia de qual é a relação entre o comprimento e a largura das sépalas,
podemos fazer utilizar o gráfico tipo scatter.
df[['sepal_length', 'sepal_width']].plot(x='sepal_length',
y='sepal_width',
kind='scatter')
2.4 Manipulando dados com Pandas 37
A distribuição dos dados pode ser feita pelo gráfico histograma ou boxplot.
# Histograma
df.plot(kind='hist', stacked=True, bins=20, alpha=.5)
# Boxplot
df.plot(kind='box')
# Barras
df[df['species']=='setosa'][['sepal_length',
'sepal_width']].plot(kind='bar')
38 Capítulo 2. Tópicos Avançados
Para gráficos com melhor qualidade, e com a mesma facilidade de plotagem, utilize o pacote
Seaborn. Os exemplos foram tirados de https://seaborn.pydata.org, mas os dados são do arquivo
"dadosIrirs.csv". Vamos a alguns exemplos e aplicações.
df = pd.read_csv('dadosIris.csv', index_col=0)
Figura 2.11: Gráfico seaborn scatter. Direita sem definir o argumento hue. Esquerda com hue=’species’
Outro gráfico scatter interessante de se analisar é o scatterplot matrix. Neste gráfico todas as
variáveis são traçadas contra todas, criando vários scatters e curvas de distribuição.
df = pd.read_csv('dadosIris.csv', index_col=0)
df = pd.read_csv('dadosIris.csv')
Uma variação do boxplot é o violinplot, em que pode-se dimensionar além dos quartis, a
distribuição dos dados.
df = pd.read_csv('dadosIris.csv')
Podemos também plotar o gráfico de regressão linear dos dados. O seaborn permite plotar
todas as variáveis species em um único gráfico ou em gráficos separados.
df = pd.read_csv('dadosIris.csv')
import pandas as pd
df = pd.read_csv('data.csv')
df.shape
df.info()
df.head()
df.tail()
2.4 Manipulando dados com Pandas 45
df['radius_mean']
df[cols]
# Exmplo de Lista
a = [25,88,100,23,99,77]
a[2:]
a[3:5]
# Função iloc
df.iloc[:,:]
df.set_index('id')
df.head()
df.set_index('id', inplace=True)
# Função loc
df.loc[:,:]
df.loc[:,'id':'fractal_dimension_mean']
df.loc[:,'id','fractal_dimension_mean']
df.mean()
df.median()
df.std()
df.max()
df.min()
df.sum()
df.quantile(q=.5)
df.median()
df.corr()
df.cov()
df.describe()
df.describe().T
df[cols].mean()
df.describe()
## apply
def c_radius(value):
return 2*value
df.apply(c_radius)
df.head()
46 Capítulo 2. Tópicos Avançados
##Expressões Aritméticas
#Condicionais
df['radius_mean'].median()
13.37
df['radius_mean']>=13.37
df[df['radius_mean']>=13.37]
df[df['radius_mean']>=13.37].min()
df[df['radius_mean']<13.37]
df[df['radius_mean']<13.37].max()
df.loc[,'class_radius'] = 'H'
df.loc[(df['radius_mean']>=13.37),'class_radius'] = 'H'
df.loc[(df['radius_mean']<13.37),'class_radius'] = 'L'
df.head()
df.drop('class_radius', axis=1)
df.head()
##NP select
import numpy as np
##groupby
df.groupby('class_radius').mean()
df.groupby('class_radius').corr()
df.groupby('diagnosis').mean()
df.groupby('diagnosis').corr()
df.groupby(['diagnosis','class_radius']).mean()
df.groupby(['diagnosis','class_radius']).corr()
##merge
import random
AGE = []
SEX = []
df.shape
df.shape[0]
random.seed(222)
for i in range(df.shape[0]):
AGE.append(random.randint(20,75))
SEX.append(random.choice(['H','F']))
df['id'].sort_values()
df['id'].sort_values().tolist()
diferentes nomes
dfMerge = df.merge(df2, how='inner', right_on='ident', left_on='id')
##CONCAT
df3 = dfMerge.iloc[:10,:]*0
pd.concat([dfMerge, df3])
##Pivot
dfMerge.pivot(index='id', columns='diagnosis', values='radius_mean')
dfMerge.pivot(index='id', columns='diagnosis', values='radius_mean').fillna(0)
##Pivot_table
dfMerge.pivot_table(index='sex', columns='diagnosis', values='radius_mean')
##Transposta
dfMerge.pivot_table(index='sex', columns='diagnosis', values='radius_mean',
aggfunc='count').T
##Graficos
48 Capítulo 2. Tópicos Avançados
dfMerge['radius_mean'].plot()
dfMerge['radius_mean'].plot(kind='bar')
dfMerge['radius_mean'].plot(kind='bar', figsize=(15,7))
##Graficos
dfMerge['radius_mean'].plot()
dfMerge['radius_mean'].plot(kind='bar')
dfMerge['radius_mean'].plot(kind='bar', figsize=(15,7))
##SEABORN
import seaborn as sns
sns.boxplot(data=dfMerge[['texture_mean', 'radius_mean']])
sns.pairplot(data=dfMerge)
2.5 Biopython 49
##HEATMAP
dfMerge.groupby('diagnosis').corr()
sns.heatmap(dfMerge.groupby('diagnosis').corr())
Pivot_table
dfMerge.pivot_table(index='sex',columns='diagnosis',values='radius_mean')
dfMerge.pivot_table(index='sex',columns='diagnosis',values='radius_mean',
aggfunc='mean')
sns.heatmap(dfMerge.pivot_table(index='sex',columns='diagnosis',values='
radius_mean', aggfunc='std'),
annot=True, fmt=".2f")
sns.heatmap(dfMerge.pivot_table(index='class_radius',columns='diagnosis',values
='radius_mean', aggfunc='count'),
annot=True, fmt=".2f")
##ClusterMap
sns.clustermap(dfMerge.groupby('diagnosis').corr())
sns.clustermap(dfMerge.pivot(index='id',columns='diagnosis',values='radius_mean
').fillna(0))
2.5 Biopython
Biopython O Biopython é uma biblioteca destinada para manipulação de dados biológicos. Os
tradicionais arquivos FASTA, amplamente utilizados em bioinformática, podem ser processados
utilizando o Biopython. O arsenal de recursos da biblioteca também inclui: desenho de plasmídeos
para engenharia genética, criação de diagramas para análise genômica e execução de algoritmos de
aprendizado de máquina. Existe um tutorial oficial do Biopython, bastante completo, que pode ser
acessado através do endereço: biopython.org/DIST/docs/tutorial/Tutorial.html.
50 Capítulo 2. Tópicos Avançados
#Fita Complementar
dnaC = dnaM.complement()
dnaC
#Transcrito
rnaMen = dnaC.transcribe()
rnaMen
prot = rnaMen.translate(to_stop=True)
prot
prot = rnaMen.translate(table=6)
prot
align
align[0]
print(pairwise2.format_alignment(*align[0]))
print(pairwise2.format_alignment(*align[-1]))
#Alinhamento prot
from Bio.SubsMat import MatrixInfo as matlist
matrizBlosum = matlist.blosum62
seq1 = 'MSLSAKDKANVKAFFDKVAPKAEEIGRETL'
seq2 = 'SRTLFVYQTVKAFIGRETLFDKVAPKEE'
matrizPam = matlist.pam120
align = pairwise2.align.globaldx(seq1, seq2, matrizPam)
print(pairwise2.format_alignment(*align[0]))
print(matlist.available_matrices)
Entrez.email = '[email protected]'
handle = Entrez.esearch(db='nucleotide', term='SARS-CoV-2 human', retmax='10')
record = Entrez.read(handle)
record
seq_record=SeqIO.parse(seq_handle, 'fasta')
SeqIO.write(seq_record, 'covHuman.fasta', 'fasta')
#LER FASTA
arq = open('covHuman.fasta','r')
seqs = []
for i in SeqIO.parse(arq,'fasta'):
seqs.append(i)
seqs
seqs[0]
seqs[0].seq
seqs[1].seq
seqs[0].seq.complement()
seqs[0].seq.transcribe()
seqs[0].seq.transcribe().translate()
gc = GC(seq[0].seq)
print(gc)
print(100 - gc)
##Genbank
gd_diagram.draw(
format="circular", ##linear
circular=True,
pagesize=(20*cm,20*cm),#"A4",
start=0,
end=len(record),
circle_core=0.7
)
gd_diagram.write("plasmid_linear.png", "png")
Image(filename='plasmid_linear.png')
2.5.4 BLAST
print(blast_qresult)
2.5.5 KEGG
result = REST.kegg_info("kegg").read()
print(result)
result = REST.kegg_info("pathway").read()
print(result)
result = REST.kegg_list("pathway").read()
print(result)
result = REST.kegg_list("drug").read()
print(result)
result = REST.kegg_find('disease','covid').read()
print(result)
result = REST.kegg_get("cpd:C00051").read()
print(result)
request = REST.kegg_get('ec:5.4.2.2')
f = open('ec_5422.txt', 'w')
f.write(request.read())
f.close()
records = Enzyme.parse(open('ec_5422.txt'))
record = list(records)[0]
2.5.6 PDB
pdb = PDBList()
pdb.retrieve_pdb_file('2FAT', pdir = '/', file_format = 'mmCif')
struct
struct.header
struct.header['structure_method']
struct.header['resolution']
struct[0]
model = struct.get_models()
models = list(model)
models[0]
chains = list(models[0].get_chains())
chains
chains[0].id
chains[1].id
residueL = list(chains[0].get_residues())
residueH = list(chains[1].get_residues())
residueH
residueH[0]
residueH[0].resname
atoms = list(residueL[0].get_atoms())
atoms
atoms[0].name
atoms[0].coord
atoms[0].get_vector()
atoms[0]-atoms[2]