• Publicidad

Separar y contar ocurrencias de una cadena

Perl aplicado a la bioinformática

Separar y contar ocurrencias de una cadena

Notapor Victorio » 2011-12-29 12:55 @579

Estimados:

Necesito una pequeña ayudita en cuanto a un programa:

Tengo una cadena de ADN: actgactgactg... en forma de $cadena, y quiero coger los elementos de 2 en 2 o en n veces y contar las veces que suceden.

Lo he probado como substrings en la secuencia que te digo de ejemplo: ac, ct, tg, ga... y numerar las veces que aparecen cada tipo.

He intentado con arrays, con hashes y con toda clase de bucles y no me sale nada.

Muchas gracias por anticipado, confío en que me ayuden.
Victorio
Perlero nuevo
Perlero nuevo
 
Mensajes: 2
Registrado: 2011-12-18 10:30 @479

Publicidad

Re: Separar y contar ocurrencias de una cadena

Notapor explorer » 2011-12-29 13:19 @597

Bienvenido a los foros de Perl en español, Victorio.

Hace muy poco hemos comentado cómo generar las distintas combinaciones de secuencias de bases.

Entonces sería así:
Por cada combinación...
... Hacemos un bucle con index() para localizar el número de veces que esa secuencia aparece
... Informamos del número de veces que se repite
JF^D Perl programming & Raku programming. Grupo en Telegram: https://t.me/Perl_ES
Avatar de Usuario
explorer
Administrador
Administrador
 
Mensajes: 14476
Registrado: 2005-07-24 18:12 @800
Ubicación: Valladolid, España

Re: Separar y contar ocurrencias de una cadena

Notapor Victorio » 2011-12-29 16:31 @729

Gracias, funciona muy bien para lo que está diseñado. No obstante lo que yo buscaba era indexar todas las ocurrencias de la cadena, no sólo la que yo busco.

Ejemplo:
ac: 2 veces
gt: 23 veces
...

Un saludo
Victorio
Perlero nuevo
Perlero nuevo
 
Mensajes: 2
Registrado: 2011-12-18 10:30 @479

Re: Separar y contar ocurrencias de una cadena

Notapor explorer » 2011-12-29 18:34 @815

Es que precisamente, generamos todas las combinaciones (hasta de una longitud máxima), y contamos las veces que aparecen...

Con este programa
Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
  1. #!/usr/bin/perl
  2. use 5.010;
  3. use strict;
  4. use warnings;
  5. use diagnostics;
  6.  
  7. use Algorithm::Combinatorics 'variations_with_repetition';
  8.  
  9. my $secuencia;
  10. while (<DATA>) {                                                # leemos todas las líneas
  11.     chomp;                                                      # quitar finales de línea    
  12.     $secuencia .= uc $_;                                        # pasamos a mayúsculas, y agregamos
  13. }
  14.  
  15. #say "[$secuencia]";
  16.  
  17. for my $n (1 .. 8) {
  18.  
  19.     my @combinaciones = variations_with_repetition(['A','T','C','G'], $n);
  20.  
  21.     for my $x (@combinaciones) {
  22.         my $seq = join '', @$x;
  23.  
  24.         my $pos        = 0;
  25.         my $encontrado = 0;
  26.          
  27.         while (1) {                                             # Bucle infinito
  28.             $pos = index $secuencia, $seq, $pos;                # Buscamos $seq en $secuencia a partir de $pos
  29.  
  30.             last if $pos == -1;                                 # No encontrado, terminamos
  31.  
  32.             $encontrado++;                                      # Sí, encontrado una vez más
  33.             $pos++;                                             # Saltamos a la siguiente posición de búsqueda
  34.         }
  35.          
  36.         if ($encontrado) {
  37.             say "[$seq] $encontrado veces";
  38.         }
  39.     }
  40. }
  41.  
  42. __DATA__
  43. cccgctcagctcctggggcttctgctgctctggctcccaggtgccagatgtgccatccag
  44. ttgacccagtctccatcctccctgtctgcatctgtaggagacagagtcaccatcacttgc
  45. cgggcaagtcagggcataagcagtgctttagcctggtatcagcagaaaccagggaaagct
  46. cctaagctcctgatctatgatgcctccagtttggaaagtggggtcccatcaaggttcagc
  47. ggcagtggatctgggacagatttcactctcaccatcagcagcctgcagcctgaagatttt
  48. gcaacttattactgtcaacagtttaatacttacccgctcactttcggcggagggaccaag
  49. gtggagatcaaacga
Coloreado en 0.003 segundos, usando GeSHi 1.0.8.4
sale:
Sintáxis: [ Descargar ] [ Ocultar ]
Using text Syntax Highlighting
[A] 85 veces
[T] 89 veces
[C] 107 veces
[G] 94 veces
[AA] 17 veces
[AT] 18 veces
[AC] 16 veces
[AG] 33 veces
[TA] 11 veces
[TT] 20 veces
[TC] 32 veces
[TG] 26 veces
[CA] 37 veces
[CT] 33 veces
[CC] 30 veces
[CG] 7 veces
[GA] 20 veces
[GT] 18 veces
[GC] 28 veces
[GG] 28 veces
[AAA] 4 veces
[AAT] 1 veces
...
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: 14476
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 0 invitados