Gnuplot e a complexidade de algoritmos

Esta semana, me peguei usando pela primeira vez o gnuplot. E o mais curioso disto, para analisar, a grosso modo, o comportamento de um programa que recebe como entrada uma matriz de dados, no caso, o haploview.

Não vamos entrar em detalhes aqui, mas o haploview é um aplicativo JAVA usado para estudar haplótipos, e a pergunta que eu tinha que responder era “qual o tamanho máximo de um dataset que eu posso usar dado um heap de tamanho X?”. Lógico que a resposta correta inclui “e se seu cliente te perguntar o que muda se você puder usar isso + X?”.

É interessante porque não é o tipo de pergunta que a gente se faz normalmente. Geralmente, você assume que o tamanho da entrada nunca vai ser grande demais, ou se você alocar um heap grande o suficiente, ainda que ao custo de alguma lentidão por conta do trabalho extra do garbage collector, as coisas funcionarão.

O mais comum são as pessoas fazerem o profiling em busca de gargalos, mas eu não ouço falar muito de gente que tenta descobrir até onde o sistema aguenta.

Bem, não é este exatamente o caso do haploview. É um software de terceiros e nem quem fez o software tem idéia de qual a ordem de complexidade (o big “O”) do sistema, muito menos da capacidade máxima.

E se tratando de dados “bioinformáticos”, sempre é fácil que as coisas se tornem rapidamente grandes demais. E a última coisa que se quer é morrer com um doloroso “OutOfMemory”. Você tem que saber os limites.

Basicamente, um dataset é uma grande matriz de dados, e como o haploview é uma caixa preta, podemos considerar que o número de linhas da entrada (no caso, o número de indivíduos) é uma dimensão e o número de colunas (o número de marcadores) é outra dimensão.

Vamos plotar no gráfico valores em 3 direções: [a] variando apenas o número de indivíduos, [b] variando apenas o número de marcadores e [c] variando ambos, proporcionalmente (diagonalmente). Assim podemos ter uma idéia, ainda que não muito refinada, do comportamento do sistema.

De posse destes pontos, você pode observar uma tendência na relação entre o consumo de memória e a entrada de dados. Conforme a “cara” do gráfico, você pode achar mais adequado tentar interpolar com algum tipo de superfície. No meu caso, uma superfície levemente abaulada ficou bem interpolada com uma superfície polinomial do tipo ax^2 + by^2 + cxy + d. Deu complexidade quadrática na veia.

Nesta hora, o gnuplot se revelou de uma simplicidade franciscana, já que você pode passar para ele uma função e mandar ele fazer o “fit” e achar os valores de a, b, c e d, passando como entrada um arquivo tabular (”data.txt”) com os valores de cada eixo em cada coluna.

set title “Haploview memory usage”
set xlabel “Individuals”
set ylabel “Markers”
set zlabel “Used Memory”
g(x,y) = a*x**2 + b*y**2 + c*x*y + d
fit g(x,y) ‘data.txt’ using 1:2:3:(1) via a, b, c, d
splot ‘data.txt’ using 1:2:3, g(x,y)

Você pode achar útil esta apostila em português sobre o gnuplot, pelo menos até que saia o livro.

Claro que existem uma série de outras boas ferramentas como matlab, R, octave, scilab e etc, mas se você quer algo rápido, gnuplot pode ser uma boa saída. E se for prá gerar coisas bem coloridas e visualmente atrativas prá colocar naquele seu paper, você pode tentar estas opções aqui também, prá ficar com aquela cara de Scientific American ;-) .

Biotecnologia, Desenvolvimento, Visualização Cientifica 2 Comentários

Doençômetro

O NYT colocou no ar um “doençômetro“, mapeando os diferentes tipo de doenças em forma de grafo colorido e interativo, bastante interessante. Isso tudo para ilustrar uma matéria que fala sobre um debate recente a respeito da definição do que é “doença”, buscando encontrar novas classificações e relações que possam melhorar a compreensão da ciência e, como um dos efeitos, buscar novos tratamentos e remédios.

Em outras palavras, se ao invés dos sintomas, os cientistas classificarem as doenças quanto a, por exemplo, alterações em trechos de uma determinada cadeia molecular, é possível que remédios usados para uma doença possam ser utilizados para outra que esteja relacionada.

O que procurar é mais fácil que saber onde procurar, algumas vezes…

Biologia, Data Mining, Usabilidade, Visualização Cientifica 2 Comentários

Visualizando software como cidades

Richard Wettel é um estudante de doutorado na Suíça, e desenvolveu uma tecnologia bem interessante para visualização de bases de código. O CodeCity usa a metáfora de cidades para apresentar os componentes de uma base de código orientada por objetos de forma tridimensional, bem bonitinha. Classes são prédios e pacotes são os bairros. Diversas métricas, como tamanho, complexidade e outras podem ser representadas como características dos prédios (altura, cor, e assim por diante).

Não sei se serve pra alguma coisa útil, mas que é bonitim é. Abaixo, o CodeCity visualizando o próprio código:

CodeCity

Visualização Cientifica 2 Comentários

Fold-it: um jogo online em prol da ciência

Lembram do meu último post sobre dois artigos que descrevem a criação bio-computacional de enzimas artificiais? Pois é, o David Baker, autor daqueles papers, lançou uma nova “moda”. Um jogo online chamado fold-it. O objetivo é competir para criar conformações, ou enovelamentos (ou ainda foldings), mais prováveis pra uma proteína. Quanto melhor for o enovelamento, mais pontos o jogador ganha.

A pergunta que voces devem estar fazendo agora é: o que um cientista renomado quer lançando um jogo online? É claro que não é só pela diversão ;-) .

David Baker há anos vem estudando maneiras de computar o enovelamento de proteínas. O motivo é que o enovelamento, ou conformação final de uma proteína, influencia criticamente em sua função.

E criar uma enzima nova requer descobrir exatamente o folding dessa enzima a partir de sua seqüência de aminoácidos. O problema é que essa não é uma tarefa fácil – calcular o enovelamento de um proteína requer efetuar até trilhões de cálculos.

A idéia do jogo começou com o Rosetta, um algoritmo que usa o método de Monte Carlo para predizer a melhor conformação de uma proteína. Já existe há anos um programa de rede distribuída chamado Rosetta@home, que usa computadores voluntários do mundo inteiro com o objetivo de rodar o Rosetta, enquanto ociosos - um screen saver é aberto e mostra como o programa tenta descobrir o enovelamento de diversas proteínas.

Mas os usuários verificavam que esse programa fazia coisas visivelmente idiotas - o que era meio de se esperar, por ser um algoritmo força bruta. A idéia do David Baker foi de, ao invés de usar uma marreta pra solucionar o problema, usar a capacidade de resolver problemas 3D do cérebro humano, usando um jogo.

E o pior é que funciona – houve situações em que o jogador conseguiu achar corretamente a conformação uma proteína, com forma já conhecida, mais rápido que o computador! ;-)

Mas a grande “jogada” do David Baker é fazer com que os jogadores criem conformações novas para proteínas ainda não conhecidas. Essas conformações poderão servir para a síntese de drogas e enzimas ainda não conhecidas, de maneira mais rápida… e divertida ;-)

A pergunta que voces devem estar fazendo agora é: o que um cientista renomado quer lançando um jogo online? É claro que não é só pela diversão ;-) .

David Baker há anos vem estudando maneiras de computar o enovelamento de proteínas. O motivo é que o enovelamento, ou conformação final de uma proteína, influencia criticamente em sua função.

E criar uma enzima nova requer descobrir exatamente o folding dessa enzima a partir de sua seqüência de aminoácidos. O problema é que essa não é uma tarefa fácil – calcular o enovelamento de um proteína requer efetuar até trilhões de cálculos.

A idéia do jogo começou com o Rosetta, um algoritmo que usa o método de Monte Carlo para predizer a melhor conformação de uma proteína. Já existe há anos um programa de rede distribuída chamado Rosetta@home, que usa computadores voluntários do mundo inteiro com o objetivo de rodar o Rosetta, enquanto ociosos - um screen saver é aberto e mostra como o programa tenta descobrir o enovelamento de diversas proteínas.

Mas os usuários verificavam que esse programa fazia coisas visivelmente idiotas - o que era meio de se esperar, por ser um algoritmo força bruta. A idéia do David Baker foi de, ao invés de usar uma marreta pra solucionar o problema, usar a capacidade de resolver problemas 3D do cérebro humano, usando um jogo.

E o pior é que funciona – houve situações em que o jogador conseguiu achar corretamente a conformação uma proteína, com forma já conhecida, mais rápido que o computador! ;-)

Mas a grande “jogada” do David Baker é fazer com que os jogadores criem conformações novas para proteínas ainda não conhecidas. Essas conformações poderão servir para a síntese de drogas e enzimas ainda não conhecidas, de maneira mais rápida… e divertida ;-)



--> Biotecnologia, Inovação, Usabilidade, Visualização Cientifica 4 Comentários

Todos adoram diagramas

E todos adoram saber quem está relacionado com quem. É por isso que este site tem uma demo tão divertida

http://www.touchgraph.com/TGGoogleBrowser.html

É claro que a primeira coisa que eu procurei foi pelo meu blog pessoal ;-) afinal, eu quero saber quem fala mal ou bem de mim…

Esta generosa demo abre um applet JAVA (fora de moda, mas dá o recado) que deixa você pesquisar quais sites estão relacionados a uma determinada palavra ou expressão, mostrando pequenos agrupamentos de links coloridos. Experimente.

Ou seja, o ganha-pão da Touchgraph é fornecer visualização para redes. Eles oferecem versões customizadas para o facebook e para a amazon. Nada mal. Afinal, com o crescimento da internet, nossa tão querida rede, o que mais tem se proliferado ultimamente são justamente outras redes. E todas precisam ser visualizadas de alguma forma. E visualização também é a chave para ver, rapidamente, padrões nos seus dados.

Porque clusterizar não basta. Você tem que visualizar também. E às vezes, visualizar dá muito mais trabalho que clusterizar.

Data Mining, Visualização Cientifica 0 Comentários

Mapa do Conhecimento

Eu encomendei um tempo atrás este lindo (e quase ilegível) poster que mapeia a ciência através das diversas áreas de conhecimento e seus papers.

E o mais bacana: você pode baixar ele de graça também, mas por incrível que pareça, achei que saía mais barato encomendar o poster que baixar a imagem e imprimir numa gráfica.

O mapa foi criado a partir de 800.000 papers distribuídos em 776 diferentes paradigmas científicos (áreas de conhecimento). Organizar essa quantidade de informação num espaço tão pequeno é, obviamente, um esforço e tanto.

Quem quiser dar uma olhada numa empresa fera em visualização científica, visite o pessoal que fez este diagrama.

Não sei vocês, eu achei bacanão ;-)

Visualização Cientifica 1 Comentário