bioinfusion

blog di vita bioinformatica stremata

Visualizzazione di network di interazione tra proteine (sulla base di parole chiave)

Pubblicato da fuliggians su 11 Settembre 2007

Parlando di protein-protein interaction, risulta spesso difficoltoso creare classi e categorie per poter assemblare cluster funzionali di proteine. Le informazioni circa interazioni funzionali sono o non disponibili, o limitate a piccoli e ben specifici gruppi proteici, oppure sono sottoposte a una diaspora che costringe il bioinformatico a raccogliere i dati dalle fonti e database più diversi.
Eppure, è comune in proteomica avere a che fare con enormi liste di proteine identificate in un unico complesso; un’analisi quantitativa può anche fornire informazioni importantissime quali per esempio la lista delle le proteine più espresse. Eppure al contempo non si è in grado di collezionare in modo semplice le relazioni che vigono tra di esse. Questo perchè uno studio funzionale non è certo un’analisi di routine da condurre, e le conseguenti annotazioni presenti nei vari DB non hanno una forma compiuta, facilmente accessibile, come avviene invece per esempio nelle analisi genomiche.

Per superare questo limite ci viene in aiuto il fatto che la visualizzazione delle reti biologiche sta diventando un’operazione sempre più comune per l’analisi di dataset di grosse dimensioni. Questi network fanno riferimento ad un’ampia varietà di interazioni biologiche, similarità di sequenza, vie metaboliche, regolazioni geniche o interazioni proteiche (evviva).
Il mio obiettivo in questo caso è trovare un modo automatico di dare una rappresentazione visiva delle interazioni che possono esserci tra le proteine che compongono il complesso analissato. Interazioni nel senso più ampio, non solo quelle funzionali.

Dunque, la mia piccola ricetta comprende:
1) una lista di proteine identificate con il relativo score di identificazione
2) un server SRS che mi permetta di accedere comodamente a swissprot
3) uno script perl realizzato ad hoc
4) un software di visualizzazione di network

Spieghiamo le cose con ordine. La lista di proteine possiamo ottenerla da un’analisi di spettrometria di massa, usando per esempio come software di ricerca Mascot. Un piccolo lavoro di parsing ci permette di ottenere una semplice lista di proteine identificate.
SRS è un sistema che permette di interrogare database biologici. All’interno di uno script perl è possibile inserire query che sfruttano la potenzialità del comando getz per estrarre facilmente la sequenza fasta e tutte le altre informazioni della relativa proteina.
L’assunto di base è che il database SWISSPROT contiene tra i vari dati che fornisce un campo molto utile KEYWORD. Ovvero una lista di parole chiave che identificano genericamente le caratteristiche della proteina, e che quindi danno un sunto di tutte le sue proprietà desunte dai vari paper.
Estraiamo allora per ogni protein ID (che abbiamo dalla lista di proteine identificate) i vari keyword, e li associamo allo score di identificazione.
Infine diamo in pasto il risultato ad un software per la visualizzazione di network.
Ce ne sono di ogni tipo. Ve ne propongo uno piccolo, dinamico, 2D: BIOLAYOUT JAVA. Lo potete trovare descritto qui e già scaricato nel box dei file del blog. Un breve studio della sua sintassi mi permette di generare un file da dargli in pasto.
Ecco il risultato, una bella immagine che può far bella figura nel mio paper, e che mi dà un’idea complessiva delle interazioni tra proteine, quali sono fosforilate, quali hanno una struttura 3D conosciuta, ecc…

biolayout.jpg

Non male per 100 righe di programma:

our $file=$ARGV[0];
## file di 2 colonne: 1) ACC 2) IDENTIFICATION SCORE

our %Hkw=%Hkw2=%Hkc={};
our %Hscore=%Hclass={};
our $numClass=30;
our $max=0;
open(FID,”<$file”) or die;
@readedData=<FID>;
close FID;
foreach (@readedData) {
chomp;
@line=();
@line=split /\t/,$_;
$Hscore{$line[0]}=sprintf(“%d”,$line[1]);
if ($line[1]>$max) {$max=sprintf(“%d”,$line[1]);}
print “$_\n”;
&keyExtractor($line[0]);

}
&scoreCluster();
&writeResult();

########################################################
########################################################

sub writeResult {
%hfin={};
open (FID2,”>result2D.txt”) or die;
$count=1;
$maxNode=0;
foreach $pp (keys %Hkc) {if ($Hkc{$pp}>$maxNode) {$maxNode=$Hkc{$pp};}}

#foreach $r (keys %Hkc) {print “$r\t$Hkc{$r}\n”;}

ID: foreach $id2 ( keys %Hkw ) {
if ($Hkc{$id2} == 1) {next ID;}
if ($Hkc{$id2}<$maxNode*0.5) {next ID;}
PR: for $p2 ( keys %{ $Hkw{$id2} } ) {
print FID2 “$p2 $id2\n”; # $Hclass{$p2}\n”;
}
}
%Hcs={};
%Horder={};
foreach $kk (keys %Hkc) {
if ($Hkc{$kk} == 1) {next;}
if ($Hkc{$kk}<$maxNode*0.5) {next;}
$Horder{$kk}=$Hkc{$kk};
print FID2 “//NODECLASS $kk $count\n”;
print FID2 “//CLASSNAME $count $kk\n”;
#print FID2 “//NODECOLOR $kk -154\n”;
#print FID2 “//NODESIZE $kk $Hkc{$kk}\n”;
$Hcs{$kk}=$count;
$count++;
}
foreach $kkk (sort { $Horder{$a} cmp $Horder{$b} } (keys %Horder)) {
for $pp (keys %{ $Hkw{$kkk}}) {
print FID2 “//NODECLASS $pp $Hcs{$kkk}\n”;
print FID2 “//NODESIZE $pp $Hclass{$pp}\n”;
}
}
print FID2 “//EDGESTROKE 1.0\n//EDGECOLOR -5582930\n”;
close FID2;

}

sub scoreCluster {
$divisore=$max/$numClass;
foreach $k (keys %Hscore) {
if ($Hscore{$k} eq ”) {next;}
$int=sprintf(“%d”,$Hscore{$k}/$divisore)+1;
$Hclass{$k}=$int;

}

}

sub keyExtractor {
my $id= shift @_;
my $numKeysW=0;
$id2=”;
if ($id ne ”) {
$id3=$id;
$id3 =~ s/gi.//;
$query = “fastacmd -d nr -s $id3 |”;
open (HANDLE, “$query”);
while ($linea=<HANDLE>) {
chomp($linea);
if ($linea =~ /\>/) {
$linea =~ /sp\|([\w\d]*)\|.*/;
$id2=$1;
}
else {last;}
}
close HANDLE;
if ($id2 eq ”) {return;}
print “$id – $id2\n”;
my $query=”getz -e \’[uniprot_swissprot -acc:$id2]\’ |”;
$totalSEQ=();
$ck=0;
open (HANDLE, “$query”);
while ($line2=<HANDLE>) {
chomp($line2);
if ($line2 =~ /^KW.(.*)/) {
@data=();
@data=split /;/,$1;
foreach $d (@data) {
$d =~ s/\s//g;
$d =~ s/\.//g;
if (!$Hkw{$d}{$id}) {$Hkc{$d}++;}
$Hkw{$d}{$id}=1;
}

}
}
close HANDLE;
}
else {next;}
}

Lascia un commento

XHTML: Puoi usare questi tag: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <pre> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>