MySQL – Utilizando Banco de Dados para organizar e interpretar seus dados

 

Análise de transcriptoma usando a base de dados Kegg Orthology

 

  1. Inicialmente vamos ver como poderíamos proceder para analisar resultados de BLAST sem o uso de MySQL. Vamos fazer um megablast de 25 mil CDS humanos como query e 500 mil transcritos de tumor de mama como database.

 

$ megablast -i h.sapiens.nuc –d tumor.seq –D 3 –F F –a 4 –p 96 –s 100 –o megakegg

 

Legenda:

-i                = input

-d               = database

-D 3           = saida tabulada

-F F           = filtro de baixa complexidade desligado (F = False)

-a 4            = use 4 processadores

-p 96          = mínima identidade 96% (seqüenciamento pode ter até 4% de erro)

-s 100         = mínimo escore 100

-o               = nome do arquivo de saída

 

  1. Interprete o resultado com comandos de Shell

 

$ cat megakegg | awk ‘{print $1}’ | sort | uniq –c | sort –k 1,1 –n –r > resultado

 

Legenda:

awk                       = nenhuma condição (aspas) e ação de imprimir coluna 1 (chaves)

sort                        = ordena as queries (já estão ordenadas, só pra garantir)

uniq                       = mostra cada query uma única vez

uniq –c                   = idem, mas mostra quantas de cada 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

sort –r                    = reverso, ordena do maior para o menor

 

3.       Selecione algum hit e procure a identificação no arquivo h.sapiens.nuc

 

$ cat h.sapiens.nuc | grephsa:1234”

 

 

Não é muito pratico proceder dessa forma para cada CDS. É necessário fazer a analise em larga escala então esta na hora de aprender um pouco de MySQL. Para isso vamos preparar os arquivos e tabelas a serem utilizadas.

 

 

1) No seu /home/SEU_NOME/ crie um novo diretório e entre nele: 

mkdir mysql_aula

cd mysql_aula


2) Copie o conteúdo de mysql_aula para seu novo diretório

cp /home/bacharelado/mysql_aula/* . {opag}

 

3) 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 (\t) entre as colunas selecionadas

 

4) Acesse o MySQL, user name e senha serão fornecidos em sala

mysql -u <username> -p        <ENTER>

Informe a senha. Digite sem medo, o cursor não se move.

 

5) Comandos básicos. Como listar bancos de dados disponíveis?

Lembre-se: todos os comandos MySQL devem terminar com ponto e virgula (;).

show databases;

 

6) Crie um banco para você:

create database SEU_NOME;

 

7) Informe ao MySQL que você quer usa-la

use <username>;

 

8) Verifique que o banco ainda está vazio (sem tabelas):

show tables;

 

9) Crie uma tabela para armazenar os dados selecionados do BLAST (arquivo megakegg_tab):

create table result_blast (cds varchar(15), subject varchar(50), identity  double(5,2), evalue varchar(10), score int, index cds_idx (cds));

o comando index cds_idx (cds) adiciona um index na coluna cds, o que facilita as consultas.

 

10) Verifique sempre que quiser a estrutura das tabelas criadas:

desc result_blast;

 

11) Carregue o resultado do blast para a tabela:

load data local infile '/home/SEU_NOME/mysql_aula/megakegg_tab' into table result_blast;

 

12) Verifique o conteúdo da tabela:

select * from result_blast limit 10;

Veja que o mesmo arquivo agora se encontra em colunas no banco de dados.

 

13) A consulta anterior utilizando awk|sort|uniq já nos informou quais hsas deram mais hits e portanto estão mais presentes nessa amostra de tumor. Que tal utilizar o banco pra isso?

select *, count(*) from result_blast group by cds limit 10;

- mais simples ?

 

14) Crie uma tabela dessa contagem de hsas. Basta adicionar o comando create table ao comando anterior:

create table hsa_count select cds, count(*) as hits from result_blast group by cds;

 

15) Sempre verifique uma tabela criada:

select * from hsa_count limit 10;

 

16) Cansado de ver apenas símbolos, sem saber o que eles são? Crie uma tabela contendo descrições dos genes:

create table hsa_description (cds varchar(15), description varchar(400), index cds_idx (cds));

 

17) Carregue as descrições na tabela recém criada:

load data local infile 'hsa_description' into table hsa_description;

 

18) Mesmo uma tabela já criada pode ser alterada para conter mais informação. Altere a primeira tabela hsa_count para conter tambem uma coluna de descrição do gene:

alter table hsa_count add column description varchar(400);

 

19) Visualize a nova estrutura da tabela, ta bom.. so se quiser:

desc hsa_count;

 

20) Combinar tabelas é algo comum e muito usado em MySQL. Atualize a tabela hsa_count com dados de descricao dos genes, assim é muito mais fácil saber quem é quem:

update hsa_count, hsa_description set hsa_count.description = hsa_description.description where hsa_count.cds = hsa_description.cds;

- tranqüilo ne?

 

21) Verifique a tabela agora com dados novos:

select * from hsa_count limit 10;

- ahhh, agora sim!

 

22) Qual o nome do CDS que da mais hit mesmo?

select * from hsa_count order by hits desc limit 10;

-Ordenamos pela coluna hits e mostramos do maior para o menor (descendente).

 

23) Agora vamos relacionar nossos hsas a grupos KO? Crie uma tabela que relaciona KO e CDS:

create table hsa_ko (cds varchar(15), ko varchar(11), hits bigint default 0, index cds_idx (cds), index ko_idx(ko));

 

24) Perdido? Não sabe quantas tabelas já criou?

show tables;

 

25) Carregue os dados na tabela recém criada:

load data local infile '/home/SEU_NOME/mysql_aula/hsa_ko.list' into table hsa_ko;

                                              

26) Inclua a contagem de CDS na tabela recém criada:

update hsa_ko, hsa_count set hsa_ko.hits = hsa_count.hits where hsa_ko.cds = hsa_count.cds;

 

27) Verifique o numero de pares hsa x ko (inclusive os CDS que não tiveram hits):

select count(*) from hsa_ko;

 

28) Vamos excluir pares hsa x ko cujo CDS não obtiveram hits e não nos interessa:

delete from hsa_ko where hits = 0;

 

29) Verifique o numero de pares hsa x ko restantes:

select count(*) from hsa_ko;

Muito menos , claro, nem todos hsas estão presentes na amostra

 

30) Qual KO danadinho deu mais hit?

select * from hsa_ko order by hits desc limit 10;

 

31) Agora crie mais uma tabela contendo o numero de CDS e o total de hits para cada KO. Assim podemos mapear os KOs mais representativos na amostra e quais via metabólicas correspindentes.

create table ko_hits select ko, count(distinct cds) as total_cds, sum(hits) as total_hits from hsa_ko group by ko;

 

32) Verifica tabela criada:

select * from ko_hits limit 10;

 

33) Já sei, mais uma vez cansado de ver identificadores sem saber o que eles são neh. Então, pra finalizar,  crie maaaais uma tabela com descrições e vias metabólicas dos KOs:

create table ko_description (ko varchar(11) primary key, description varchar(170), path_desc varchar(150));

 

34) Popule (em mysqelês) essa tabela:

load data local infile '/home/SEU_NOME/mysql_aula/ko_data' into table ko_description;

 

35) Adicione colunas de descricao e pathway do ko na tabela ko_hits, ta lembrado como neh?

alter table ko_hits add column ko_desc varchar(400);

alter table ko_hits add column path_desc varchar(150);

 

36) Atualize a tabela ko_hits:

update ko_hits, ko_description set ko_hits.ko_desc = ko_description.description where ko_hits.ko = ko_description.ko;

update ko_hits, ko_description set ko_hits. path_desc = ko_description. path_desc where ko_hits.ko = ko_description.ko;

 

37) qual KO tem mais hits? A qual via ele pertence?

select * from ko_hits order by total_hits desc limit 10;

 

38) Efetue a busca LIKE na tabela de KOs:

select * from ko_hits where ko_desc like '%ATP%' limit 45;

Pense em outras proteinas e repita a consulta.

 

Agora voce ja sabe usar diversos comandos MySQL: select, create, show, load, alter, order by, update, limit, where, like, count ... Tudo que um biólogo precisa saber certo?

 

 

 

APRENDEU A “PERGUNTAR BEM”???