Análise
de transcriptoma usando a base de dados Kegg Orthology
BLAST
usando 25 mil CDS humanas como query versus 500 mil transcritos de
tumor de mama como database:
megablast -i h.sapiens.nuc -d tumor.seq -D 3 -F F -a 20 -p 97 -s
80 -o megakegg
-i = input
-d = database
-D 3 = saida tabulada
-F F = filtro de baixa complexidade desligado (F =
False)
-a 20 = use 20 processadores
-p 97 = mínima identidade 97% (sequenciamento
pode ter
até 3% de erro)
-s 80 = mínimo escore 80
-o = nome do arquivo de
saída
Interprete o resultado com
comandos de shell
cat megakegg | awk ‘{print $1}’ | sort | uniq -c | sort -k
1,1 -n -r > resultado
awk = nenhuma condição (aspas) e ação de
imprimir coluna 1 (chaves)
sort = ordena as queries
(até já estão ordenadas, só pra garantir)
uniq = mostra cada query uma
única vez
uniq -c = idem, mas mostra quantas de cada uma haviam
sort -k 1,1 = ordena pela coluna 1, que é o número de
ocorrências das queries
sort -n = entende valores como números ao invés de
palavras
sort -r = reverso, ordena do maior para o menor
Selecione algum hit e procure a identificação no arquivo
h.sapiens.nuc
$cat h.sapiens,nuc | grep “hsa:1234”
Há
como fazer de forma global usando banco de dados (MySQL)
Para isso é necessário preparar tabelas a serem
utilizadas. Bora aprender um pouco de MySQL?
1) ls /home/treinamento/mysql_aula e veja quantos arquivos
2) crie um diretorio mysql_aula:
mkdir mysql_aula
3) e entre nele com cd mysql_aula
4) copie o material para usar com cp
/home/treinamento/mysql_aula/* . {olhe o ponto!}
vc pode dar um less em alguns desses arquivos (saia
apertando "q")
5) Crie um arquivo tabulado com apenas algumas colunas do blast:
cat megakegg | awk -v OFS="\t" '($1 != "#") {print
$1,$2,$3,$11,$12}' > megakegg_tab
-v OFS = insere um tabulador entre as colunas
selecionadas
Mas pode ser feito com cut:
cat megakegg | grep
–v “#” | cut –f 1,2,3,11,12 > megakegg_tab
cat = joga o conteúdo do arquivo na
tela
grep = seleciona linhas contendo algo, mas com -v
seleciona linhas que não contêm algo
cut = como o nome diz, corta, e -f aponta as colunas
a pegar
> = sem aspas, no terminal, faz salvar com o nome
indicado após o sinal
6) Importante: estando nessa mesma pasta, onde estão os
arquivos, acesse o mySQL com seu username e password (user11 senha11):
mysql -u
<username> -p <ENTER>
7) Informe a senha
8) Listar bases de dados disponíveis é a primeira coisa
que se faz ao conectar!
show databases;
9) Informe ao mysql qual banco de dados vai usar (banco de dados tem o
mesmo nome do seu usuário: database11)
use
<database>;
10) Verifique que o banco ainda está vazio (sem tabelas):
show tables;
VEJA O PROCEDIMENTO
11) Crie uma tabela para armazenar os dados selecionados do BLAST:
create table result_blast (cds varchar(15), subject varchar(50),
identity double(5,2), evalue varchar(10), score int, index cds_idx
(cds));
12) Verifique a estrutura da tabela criada:
desc result_blast;
13) Carregue o resultado do blast para a tabela:
load data local
infile 'megakegg_tab' into table result_blast;
14) Verifique a tabela criada, um select vale por um ls em mysql!
select * from result_blast limit 10;
- veja que o mesmo arquivo agora se encontra em
colunas no banco de dados
15) a consulta anterior utilizando awk |sort|uniq já nos
informou quais "hsa" (CDSs) deram mais hits e portanto estão
mais presentes nessa amostra de tumor. Que tal utilizar o banco pra
isso?
select cds, count(cds)
from result_blast group by
cds limit 10;
- mais simples não? dizemos que vc deu um
count (a)grupando pelos cds
16) Crie uma tabela a partir dessa contagem de CDSs (basta acrescentar
create table ao select):
create table hsa_count select cds, count(cds)
as hits from result_blast
group by cds;
- repare só que vc renomeou counts como "hits"
17) Verifique a nova tabela criada hsa_count:
select * from hsa_count limit 10;
- e veja quantos hsa estão na tabela
com select count(*) from hsa_count;
18) Cansado de ver apenas símbolos "hsa", sem saber o que eles
são? Crie uma tabela contendo descrições
dos genes:
create table hsa_description (cds
varchar(15), description varchar(150), index cds_idx (cds));
19) Verifique a tabela criada, sempre é bom:
select * from hsa_description limit 10;
20) Carregue as descrições na tabela recém criada:
load data local
infile 'hsa_description' into table hsa_description;
21) Verifique os dados carregados, sempre bom também, vai que
tá errado:
select * from hsa_description limit 10;
22) Agora altere a primeira tabela hsa_count
para conter também a coluna de descrição
do
gene:
alter table hsa_count add column description
varchar(150);
23) Visualize nova estrutura da tabela, tá bom.. só se
quiser:
select * from hsa_count limit 10;
24) Atualize a tabela hsa_count
com as descrições dos genes:
update hsa_count, hsa_description set hsa_count.description = hsa_description.description
where hsa_count.cds = hsa_description.cds;
- tranquilo? vc igualou o campo description das duas
tabelas (pois em uma ele estava vazio) onde os cds eram os mesmos nas
duas tabelas.
25) Verifique a tabela agora com as descrições:
select * from hsa_count limit 10;
- ahhh, agora sim!
26) Qual o nome do carinha que da mais hit mesmo?
select * from hsa_count order by hits desc
limit 10;
- vc deu um order
by, de forma decrescente
Agora
vamos relacionar nossos "hsa" a grupos KO ao qual pertencem? O que
é KO mesmo?
Vamos simular o uso de uma database subindo o arquivo dump dela!
Imaginando que vc copiou para seu diretorio mysql_aula o arquivo databaseaula.sql (itens 2 a 4)... De fora do mysql fatemos isso:
mysql -u userX -psenhaX databaseX < databaseaula.sql
27) Crie uma tabela que relaciona KOs e CDS:
create table hsa_ko (cds varchar(15), ko
varchar(11), hits bigint default 0, index cds_idx (cds), index
ko_idx(ko));
desc hsa_ko;
28) Perdido? Não sabe quantas tabelas já criou?
show tables;
29) Carregue os dados na tabela recém criada:
load data local
infile 'hsa_ko.list' into table hsa_ko;
30) Inclua a contagem de hits na tabela recém criada, nela
só genes que tenham classificação KO vão
entrar:
update hsa_ko, hsa_count set hsa_ko.hits = hsa_count.hits where hsa_ko.cds = hsa_count.cds;
- mesma sintaxe de antes, faz o campo hits
pegar o valor da outra tabela sempre que o cds for o mesmo
31) Verifique o numero de pares "hsa" que têm KO (inclusive os
CDS que não tiveram hits):
select count(*)
from hsa_ko;
32) Vamos excluir pares hsa x ko cujo CDS não obtive hits e
não nos interessam:
delete from hsa_ko where hits = 0;
33) Verifique o numero de pares hsa x ko restantes:
select count(*)
from hsa_ko;
Muito menos né, claro, nem todos CDS que tem
KO estão transcritos na amostra
34) A qual KO o danadinho que deu mais hit pertence? Vamos dar uma olhada tambem em um KO especifico, o K00799
select * from hsa_ko order by hits desc limit
10;
select * from hsa_ko where ko='K00799';
35) Agora crie mais uma tabela contendo o número de CDSs e o
total de hits para cada ko.
create table ko_hits select ko,
count(distinct cds) as total_cds, sum(hits) as total_hits from hsa_ko group by ko;
- vc criou uma tabela com um select, tranquilo, com
atenção no ko, contou os cds que ele tem, somou seus hits
como total hits, (a)grupando por ko
36) Verifique tabela criada:
select * from ko_hits limit 10;
37) Já sei, mais uma vez cansado de ver identificadores sem
saber o que eles são né? Então crie maaaais uma
tabela com descrições dos KO:
create table ko_description (ko varchar(11)
primary key, description varchar(150));
38) Popule (em mysqelês se fala assim) essa tabela:
load data local
infile 'ko_desc' into table ko_description;
39) Verifique os dados:
select * from ko_description limit 10;
40) Adicione coluna de descrição do ko na tabela ko_hits, tá lembrado como
né?
alter table ko_hits add column ko_desc
varchar(150);
41) Atualize a tabela ko_hits
com as descrições:
update ko_hits, ko_description set ko_hits.ko_desc = ko_description.description where
ko_hits.ko = ko_description.ko;
- como anteriormente, faz o update de um campo que
estava NULL usando a outra tabela como referência, onde os ko
são os mesmos, claro
42) Dá uma oiadinha:
select * from ko_hits limit 10;
43) Qual KO tem mais hits?
select * from ko_hits order by total_hits desc
limit 10;
44) Pergunte ao Miguelito um KO legal. Efetue a busca LIKE na tabela de
KOs:
select * from ko_hits where ko_desc like
'%tumor%';
ou
select * from ko_hits where ko_desc like
'%catalase%';
- veja que % é usada como coringa, pode ter
qualquer coisa antes, ou depois
45) Pra finalizar, crie uma tabela que relaciona KOs e vias
metabólicas!!!
create table KOmap (path varchar(25), ko
varchar(25), path_desc varchar(150));
46) Popule a tabela:
load data local
infile 'KO2map' into table KOmap;
47) Agora é quebradera, já sabemos usar select, create,
show, load, alter, order by, update, limit, where, like, count ... Tudo
que um biólogo precisa saber certo? Errado, falta o JOIN!
Misture dados de tabelas distintas para facilitar a
observação dos resultados:
Aproveita, e mistura vários comandos vai...
select, join, order by e limit
select ko_hits.*, KOmap.path, KOmap.path_desc from ko_hits inner join KOmap on ko_hits.ko = KOmap.ko order by total_hits
desc limit 10;
Observe a redundância, um KO pertence a
diferentes vias metabólicas e elas podem ser visualizadas nessa
consulta.
- vc pode adicionar algum "where" usando LIKE (a
descrição contendo alguma coisa) para achar coisas nesse
JOIN
select ko_hits.*, KOmap.path, KOmap.path_desc from ko_hits inner join KOmap on ko_hits.ko = KOmap.ko where ko_desc like '%tumor%' order
by total_hits desc limit 10;
APRENDEU A PERGUNTAR BEM??? Além de mostrar
como bioinformatas trabalham com bases de dados, o tutorial ensina
quase todos os bons comandos de mySQL (ask well)
Kegg Pathway:
Pathway
tem as relações de vias bioquímicas.. E são
muitas!
Procure
em Pathway
informações sobre a via Prostate
cancer (item 6.2)
Que tal
verificar sistema de reparo de mismatch? Quer
os genes humanos? Simples, troque em
cima por Homo
sapiens e olhe para a direita.
Ah quer Corynebacterium diphtheriae NTCC?
Então selecione e olhe o lado esquerdo!
Mas que
tal Trichomonas vaginalis?
Quem é essa cara do lado esquerdo?
Encontre
POU5F1
(Oct4) no Kegg, veja o pathway em que está, E
desvende seu grupo de ortólogos (KO).
Faça o mesmo para IFNG
(Interferon Gamma). Verifique sua distribuição
taxonômica e compare com TETHERIN ou BST2 examinando seu KO K06731 e estudando sua distribuicao taxonomica.
Use um animal de cada grupo em Taxonomy
Common Tree do NCBI