• Publicidad

Sumar los valores de abundancia de proteínas

Perl aplicado a la bioinformática

Sumar los valores de abundancia de proteínas

Notapor 3mgcantarero » 2018-05-22 06:29 @312

Hola.

Estoy intentando crear un script que me permita sumar los valores de abundancia (emPAI) de proteínas que pertenecen a un mismo género bacteriano.

El archivo de partida es un texto separado por tabuladores, de forma que la primera columna es el accesion number de la proteína, la segunda el valor a sumar (emPAI), la tercera el valor normalizado (nemPAI), la cuarta el Género y la quinta la familia.

He empezado con un hash pero no sé realmente que estoy sumando... ¿Alguna ayuda? Adjunto lo que llevo de script y un trozo de archivo de ejemplo.

Muchas gracias.

Mónica
Adjuntos
Sum_by_Genus.pl
(1.01 KiB) 133 veces
BASAL_11 Families.txt
(2.84 KiB) 133 veces
3mgcantarero
Perlero nuevo
Perlero nuevo
 
Mensajes: 4
Registrado: 2017-11-12 04:41 @237

Publicidad

Re: Sumar los valores de abundancia de proteínas

Notapor explorer » 2018-05-24 11:52 @536

Dos cosillas...

Los números en la tabla vienen con coma (,), por lo que Perl no puede sumarlos, ya que Perl sigue (por defecto) la notación anglosajona de separar los decimales con punto (por cierto, en la última ortografía de la RAE (diciembre 2010) se aconseja usar esta notación).

Así que hay que hacer una breve transformación de comas a puntos.

Y la acumulación por género, pues para eso, acertadamente, usamos un hash, indexado por el género.

Lo que pasa es que no haces la acumulación mientras vas leyendo la tabla, cosa que sí puedes hacer como te pongo más abajo. Solo te faltaría hacer un bucle final -que sí tienes- para recorrer las claves y sacarlas al archivo resultado.

Esta es mi versión:
Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
  1. #!/usr/bin/perl
  2. use v5.14;                                              # activa modo estricto y say()
  3.  
  4. my $archivo = 'BASAL_11 Families.txt';
  5.  
  6. my %generos;                                            # aquí haremos las sumas, por género
  7.  
  8. open my $IN,  '<', $archivo        or  die "No puedo leer [$archivo]: $!\n";
  9.  
  10. while (<$IN>) {
  11.     chomp;
  12.  
  13.     my($protein, $emPAI, $nemPAI, $genus, $family) = split /\t/;
  14.  
  15.     next if not $emPAI or $emPAI !~ /^[0-9.,]+$/;       # saltamos a la siguiente línea si no tenemos un número
  16.  
  17.     $emPAI =~ s/[,]/./;                                 # lo pasamos a notación de punto decimal
  18.     $emPAI += 0;                                        # nos aseguramos que es un número
  19.  
  20.     $generos{ $genus } += $emPAI;                       # acumulamos $emPAI segun el $genus al que pertenece
  21. }
  22.  
  23. close $IN;
  24.  
  25. #use Data::Dumper;
  26. #say Dumper \%generos;
  27.  
  28. open my $OUT, '>', 'Resultado.txt' or  die "No puedo escribir [Resultado.txt]: $!\n";
  29.  
  30. for my $genus (sort keys %generos) {
  31.     say $OUT "$genus $generos{$genus}";
  32. }
  33.  
  34. close $OUT;
Coloreado en 0.003 segundos, usando GeSHi 1.0.8.4
Esta es la salida que obtengo:
Sintáxis: [ Descargar ] [ Ocultar ]
Using text Syntax Highlighting
Achromobacter 0.63
Acidaminococcus 1.27
Actinobacillus 0.21
Actinomyces 0.08
Aeromonas 0.14
Aggregatibacter 0.08
Akkermansia 0.23
Alistipes 4.03
Anaerococcus 0.32
Anaerofustis 2.17
Coloreado en 0.000 segundos, usando GeSHi 1.0.8.4
JF^D Perl programming & Raku programming. Grupo en Telegram: https://t.me/Perl_ES
Avatar de Usuario
explorer
Administrador
Administrador
 
Mensajes: 14480
Registrado: 2005-07-24 18:12 @800
Ubicación: Valladolid, España


Volver a Bioinformática

¿Quién está conectado?

Usuarios navegando por este Foro: No hay usuarios registrados visitando el Foro y 1 invitado