IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Bioinformatique Perl Discussion :

couper une séquence fasta en petite séquence


Sujet :

Bioinformatique Perl

  1. #21
    Membre régulier
    Profil pro
    Inscrit en
    Mars 2013
    Messages
    124
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2013
    Messages : 124
    Points : 94
    Points
    94
    Par défaut
    je ne comprends pas vraiment l'énoncé du problème, mais s'il sagit d'essayer d'imiter le coté aléatoire d'un phénomène naturel, alors il faudrait couper selon une plage d'aléatoire et recommencer l'opération autant de fois que nécessaire, jusqu'a obtenir la moyenne voulue.
    je pense

  2. #22
    Membre averti
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mai 2013
    Messages
    247
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mai 2013
    Messages : 247
    Points : 406
    Points
    406
    Par défaut
    Citation Envoyé par vidici Voir le message
    je ne comprends pas vraiment l'énoncé du problème, mais s'il sagit d'essayer d'imiter le coté aléatoire d'un phénomène naturel, alors il faudrait couper selon une plage d'aléatoire et recommencer l'opération autant de fois que nécessaire, jusqu'a obtenir la moyenne voulue.
    je pense
    en fait, si j'ai bien compris, Isabella cherche à créer des séquences aléatoires afin de pouvoir faire les même traitements que sur son jeu de données réelles.
    Ainsi tu peux trouver les résultats sur/sous-exprimés par rapports à quelque chose d'aléatoire et donc potentiellement intéressant à étudier

  3. #23
    Rédacteur/Modérateur

    Avatar de Lolo78
    Homme Profil pro
    Conseil - Consultant en systèmes d'information
    Inscrit en
    Mai 2012
    Messages
    3 612
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Conseil - Consultant en systèmes d'information
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mai 2012
    Messages : 3 612
    Points : 12 469
    Points
    12 469
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par 6ril23 Voir le message
    heu ça me parait pas foncièrement différent de ce que je fais: le désaventage de ta méthode, tu vas devoir tester que la sous séquence ne dépasse pas de chaque côté de la séquence.
    Oui, j'avais mal lu ton code, ça ressemble sans doute. Sauf que pour la longueur du fragment tu fais un rand 50, ce qui donne un nombre aléatoire entre 0 et 50, et empêche que la moyenne soit de 50 (ça va générer une moyenne de l'ordre de 25). Il faudrait donc ajouter 25 au nombres aléatoires générés pour avoir les longueurs de fragments susceptibles d'avoir une moyenne proche de 25.

  4. #24
    Membre régulier
    Profil pro
    Inscrit en
    Mars 2013
    Messages
    124
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2013
    Messages : 124
    Points : 94
    Points
    94
    Par défaut
    Citation Envoyé par 6ril23 Voir le message
    en fait, si j'ai bien compris, Isabella cherche à créer des séquences aléatoires afin de pouvoir faire les même traitements que sur son jeu de données réelles.
    Ainsi tu peux trouver les résultats sur/sous-exprimés par rapports à quelque chose d'aléatoire et donc potentiellement intéressant à étudier
    mouvais..
    en tout cas je me suis pris au jeu et brouillonner mon petit truc
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    #!/usr/bin/perl5.16
    use strict;
    use warnings;
     
    my $chaine="CCGCAGTCGCCGCCTCCGCAGCAGCAGCAGCAGCAGCAACAACTACAACAACAACAACAACAGCCACCAGGGCAGCAACAACCACACCAGTTACAACAGCCCCAACACCAACAGCGATAACAACAACATATAGATCGCGGAATCTGCTGAAAGCCACCGCCAAAGTGAAGAAGAAGAAAAAGTGGAAGCAAATCTCCTTCGTCGACGACCAGCAACGCTTGAAGCAAGCAGCGACGTCGGCGGAGCGCAAACGCTCCACCAGCAGCGCCCCGCCCGCCCTCGAGAGCAACGTACCGCCGCGGTTGGGGCGCTTTCTGCGGCAAAAGAGCAGCGAAACTAACAGCGCTGCAACGTCAGCAGCAGCGGCGGCAGTGCAAACGGAAGCGGAAACAGGACGCCGGAAATCGTCGGCGGCATCGATAATCGCAGCGGCAGCGGGCGCTGCTGGTTTGCACAACAATAACAGCAGCAGCTGCGCAGCGACCGCCAGCGAGGAGCAAAACTCGAGCGGTACGCTCACCGGCAGCAGCGGCAATACTTCCACGTCGACGTGGTGCGGCAGCATCAACTTCCTGGTGTATATGG"; 
     
    #To generate a random number between, for example, 100 and 150
    my $range = 40;
    my $minimum = 30;
    my @hasard;
    my $dep=0;
    my $long_chaine = length($chaine);
    my $cpt = 0;
    my $moyen = 0;
    	while ( 1 ){
     
    	my $random_number = int(rand($range)) + $minimum;
    #
    	my $taille=$random_number;
    	my $morceau = substr($chaine, $dep, $taille);
    	$dep = $taille+$dep;
    	print ">$morceau\n";
    	print ">$taille\n";
    	$cpt = $taille +$cpt;
    	my $compte =$cpt;
    	push(@hasard, $compte);
    	if ($dep>$long_chaine) {
    #correction d une erreur
    		#$moyen=$hasard[-1]/@hasard;
    		#my $lmorceau=length($morceau);
                     my $totalhasard = $hasard[-2]+length($morceau);
                    $moyen=$totalhasard/@hasard;
    		print "moyen >$moyen\n";
    		print "total chaine  >$hasard[-1]\n";
    		print "long >@hasard\n";
    		my $longdernschaine = length($morceau);
    		#print "morceau >$morceau\n";
    		if (($moyen > 48 && $moyen < 52) && ($longdernschaine  > 30 && $longdernschaine < 60 )) {
     
    			last;
    		}else{
     
                    @hasard=();
                    $dep=0;
                    $cpt = 0;
                    $moyen = 0;
    	}
    	}	
    }
    ce qui donne par exemple
    >CCGCAGTCGCCGCCTCCGCAGCAGCAGCAGCAGCA
    >35
    >GCAACAACTACAACAACAACAACAACAGCCACCAGGGCAGCAACAACCACACCAGTTAC
    >59
    >AACAGCCCCAACACCAACAGCGATAACAACAACATATAGATCGCGGAATCTG
    >52
    >CTGAAAGCCACCGCCAAAGTGAAGAAGAAGAAAAAGTGGAAGCAA
    >45
    >ATCTCCTTCGTCGACGACCAGCAACGCTTGAAGCAAGCAGCGACGTCGGCGGAGCG
    >56
    >CAAACGCTCCACCAGCAGCGCCCCGCCCGCCCTCGAGAGCAACGTACCGCCGCGG
    >55
    >TTGGGGCGCTTTCTGCGGCAAAAGAGCAGCGAAACTAACAGCGCTGCAACGTC
    >53
    >AGCAGCAGCGGCGGCAGTGCAAACGGAAGCGGAAACA
    >37
    >GGACGCCGGAAATCGTCGGCGGCATCGATAATCGCAGCGGCAGCGGGCGC
    >50
    >TGCTGGTTTGCACAACAATAACAGCAGCAGCTGCGCAGCGAC
    >42
    >CGCCAGCGAGGAGCAAAACTCGAGCGGTACGCTCACCGGCAG
    >42
    >CAGCGGCAATACTTCCACGTCGACGTGGTGCGGCAGCATCAACTTCCTGGTGTATATGG
    >69
    moyen >48.75


    #au bout de la troisième boucle.
    au bout d'un nombre un peu plus important de boucle

  5. #25
    Membre éclairé
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Janvier 2013
    Messages
    388
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Conseil

    Informations forums :
    Inscription : Janvier 2013
    Messages : 388
    Points : 692
    Points
    692
    Par défaut
    Salut.
    Les solutions proposées fonctionnent, mais elles tiennent du bidouillage. Pour faire suite à mon premier post, je propose une solution :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    #!/usr/bin/perl
    # -*- coding:utf-8 -*-
     
    use warnings;
    use strict;
    use locale;
    use 5.010;
    use Math::Random qw(random_uniform random_normal);
    use List::Util qw(sum);
     
     
    sub split_seq
    {
        return -1 if (@_ != 1);
        (my $seq) = @_;
        my $N = length($seq);
     
        my $mean = 50;
        my $sigma = 2;
        my $full = 0.95;
     
        my $iter = 0;
        my $total = 0;
        my $occuped = 0;
        my @occupation ;
        for (my $i = 0; $i < $N; $i++) { push @occupation, 0; }
     
        while ($occuped / $N < $full)
        {
            my $start = int(random_uniform(1, 0, $N) + 0.5);
            my $width = int(random_normal(1, $mean, $sigma) + 0.5);
            my $finish = $start + $width;
            next if ($finish > $N);
            for (my $i = $start; $i < $finish; $i++) { $occupation[$i] = 1; }
            $occuped = sum(@occupation);
            my $snippet = substr($seq, $start, $width);
            $total += $width;
            say join(" ", ++($iter), $width, $snippet);
        }
        say "Moyenne : ", $total / $iter;
        return 0;
    }
     
     
    my $sequence =
    "CCGCAGTCGCCGCCTCCGCAGCAGCAGCAGCAGCAGCAACAACTACAACAACAACAACAACAGCCACCAGGGCA" .
    "GCAACAACCACACCAGTTACAACAGCCCCAACACCAACAGCGATAACAACAACATATAGATCGCGGAATCTGCT" .
    "GAAAGCCACCGCCAAAGTGAAGAAGAAGAAAAAGTGGAAGCAAATCTCCTTCGTCGACGACCAGCAACGCTTGA" .
    "AGCAAGCAGCGACGTCGGCGGAGCGCAAACGCTCCACCAGCAGCGCCCCGCCCGCCCTCGAGAGCAACGTACCG" .
    "CCGCGGTTGGGGCGCTTTCTGCGGCAAAAGAGCAGCGAAACTAACAGCGCTGCAACGTCAGCAGCAGCGGCGGC" .
    "AGTGCAAACGGAAGCGGAAACAGGACGCCGGAAATCGTCGGCGGCATCGATAATCGCAGCGGCAGCGGGCGCTG" .
    "CTGGTTTGCACAACAATAACAGCAGCAGCTGCGCAGCGACCGCCAGCGAGGAGCAAAACTCGAGCGGTACGCTC" .
    "ACCGGCAGCAGCGGCAATACTTCCACGTCGACGTGGTGCGGCAGCATCAACTTCCTGGTGTATATGG";
     
    split_seq($sequence)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    1 50 CAGCGAAACTAACAGCGCTGCAACGTCAGCAGCAGCGGCGGCAGTGCAAA
    2 51 GAAGCAAGCAGCGACGTCGGCGGAGCGCAAACGCTCCACCAGCAGCGCCCC
    3 50 GCAGCAGCAGCAGCAACAACTACAACAACAACAACAACAGCCACCAGGGC
    4 48 AACAGCGATAACAACAACATATAGATCGCGGAATCTGCTGAAAGCCAC
    5 51 CAGTTACAACAGCCCCAACACCAACAGCGATAACAACAACATATAGATCGC
    6 51 TCGTCGGCGGCATCGATAATCGCAGCGGCAGCGGGCGCTGCTGGTTTGCAC
    7 49 GCCACCGCCAAAGTGAAGAAGAAGAAAAAGTGGAAGCAAATCTCCTTCG
    8 48 CCCTCGAGAGCAACGTACCGCCGCGGTTGGGGCGCTTTCTGCGGCAAA
    9 49 AACGCTTGAAGCAAGCAGCGACGTCGGCGGAGCGCAAACGCTCCACCAG
    10 51 CAGCAGCTGCGCAGCGACCGCCAGCGAGGAGCAAAACTCGAGCGGTACGCT
    11 52 CGACGACCAGCAACGCTTGAAGCAAGCAGCGACGTCGGCGGAGCGCAAACGC
    12 50 CAGCAGCGGCGGCAGTGCAAACGGAAGCGGAAACAGGACGCCGGAAATCG
    13 53 CCGCAGCAGCAGCAGCAGCAGCAACAACTACAACAACAACAACAACAGCCACC
    14 48 GGAGCAAAACTCGAGCGGTACGCTCACCGGCAGCAGCGGCAATACTTC
    15 46 TGCGCAGCGACCGCCAGCGAGGAGCAAAACTCGAGCGGTACGCTCA
    16 48 TTCGTCGACGACCAGCAACGCTTGAAGCAAGCAGCGACGTCGGCGGAG
    17 54 CGCCCTCGAGAGCAACGTACCGCCGCGGTTGGGGCGCTTTCTGCGGCAAAAGAG
    18 53 AAGAGCAGCGAAACTAACAGCGCTGCAACGTCAGCAGCAGCGGCGGCAGTGCA
    19 47 AATAACAGCAGCAGCTGCGCAGCGACCGCCAGCGAGGAGCAAAACTC
    20 49 TGGTTTGCACAACAATAACAGCAGCAGCTGCGCAGCGACCGCCAGCGAG
    21 54 CAGCGGCAATACTTCCACGTCGACGTGGTGCGGCAGCATCAACTTCCTGGTGTA
    22 50 AACTACAACAACAACAACAACAGCCACCAGGGCAGCAACAACCACACCAG
    Moyenne : 50.0909090909091

  6. #26
    Rédacteur/Modérateur

    Avatar de Lolo78
    Homme Profil pro
    Conseil - Consultant en systèmes d'information
    Inscrit en
    Mai 2012
    Messages
    3 612
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Conseil - Consultant en systèmes d'information
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mai 2012
    Messages : 3 612
    Points : 12 469
    Points
    12 469
    Billets dans le blog
    1
    Par défaut
    La tentative est intéressante, mais je reste un peu perplexe, car rien n'indique dans ce qu'a dit Isabella que la taille des fragments doive suivre une distribution gaussienne (normale). Certes, cela facilite l'obtention d'une moyenne située dans les bornes voulues, surtout en prenant un delta de 2, mais ce qu'a dit Isabella faisait plutôt penser à une distribution aléatoire uniforme des tailles de fragments.

    Même en supposant qu'il faille une distribution normale, un écart-type de 2 ne semble pas du tout correspondre à la description d'Isabella, si ce n'est qu'il garantit presque à coup sûr de tomber dans l'intervalle voulu.

  7. #27
    Membre régulier
    Profil pro
    Inscrit en
    Mars 2013
    Messages
    124
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2013
    Messages : 124
    Points : 94
    Points
    94
    Par défaut
    Citation Envoyé par Lolo78 Voir le message
    si ce n'est qu'il garantit presque à coup sûr de tomber dans l'intervalle voulu.
    c'est sur. en partant avec une plage de 10 a 60. Il me faut 12000, 17509 etc .. boucles pour obtenir la fourchette voulue.
    de 0 à 50 j'ai fait Controle C.

Discussions similaires

  1. Réponses: 2
    Dernier message: 17/05/2012, 23h07
  2. Réponses: 5
    Dernier message: 16/05/2007, 13h43
  3. Couper une chaîne
    Par MYster dans le forum Langage
    Réponses: 8
    Dernier message: 19/11/2005, 22h43
  4. Inclusion de sous séquences à l'intérieur de séquence (Bin)
    Par netcomput dans le forum Algorithmes et structures de données
    Réponses: 3
    Dernier message: 07/05/2005, 01h56
  5. couper une connection avec un serveur corba
    Par pons dans le forum CORBA
    Réponses: 3
    Dernier message: 31/05/2002, 10h11

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo