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

Langage Perl Discussion :

réordonner une matrice (Parseur)


Sujet :

Langage Perl

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Femme Profil pro
    Étudiant
    Inscrit en
    Mars 2012
    Messages
    27
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2012
    Messages : 27
    Par défaut réordonner une matrice (Parseur)
    Bonjour Tout le monde,

    Je suis nouvelle sur le forum et aussi en info.

    je veux utiliser le logiciel de statistique R. mais avant je voudrais changer l'ordre d'une matrice avec Perl. Pour ceci j'ai deux questions:

    (*)la première parait plus simple !!! c'est de mettre des titres au lignes et aux colonnes à une matrice représentée de la sorte.
    1-p3
    2-p5
    3-p2
    4-p4
    5-p1

    0
    12 0
    13 15 0
    10 12 16 0
    11 13 12 14 0
    Et que je veux la transformer en ça:
    . p3 p5 p2 p4 p1
    p3 0
    p5 12 0
    p2 13 15 0
    p4 10 12 16 0
    p1 11 13 12 14 0
    (*)la deuxième est de comparer cette matrice (la 2eme) à une autre et la réordonner de la même sorte. tout en éliminant quelques individus.

    cette autre matrice est celle-ci:
    . p1 p2 p3
    p1 0
    p2 30 0
    p3 40 55 0
    Donc à la fin je voudrais avoir ces 2 matrices:
    . p1 p2 p3
    p1 0
    p2 12 0
    p3 11 13 0

    qui dans le même ordre que celle-ci
    . p1 p2 p3
    p1 0
    p2 30 0
    p3 40 55 0
    j'espère que j'ai bien posé ma question. vous pouvez tout de même me poser des question si vous ne comprenez pas quelque chose. Et merci.

    Cordialement

  2. #2
    Membre averti
    Femme Profil pro
    Étudiant
    Inscrit en
    Mars 2012
    Messages
    27
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2012
    Messages : 27
    Par défaut
    j'ai vraiment besoin de ce parseur si quelqu'un pourrait m'aider

    Merci

  3. #3
    Membre averti
    Homme Profil pro
    Etudiant
    Inscrit en
    Février 2012
    Messages
    20
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : Etudiant

    Informations forums :
    Inscription : Février 2012
    Messages : 20
    Par défaut
    cela me rappelle la sortie de la matrice de distance de MAFFT

    Enfin si je ne me trompe pas. Car j'ai le même probleme.

    Ce que j'ai réussi à déchiffrer dans cette sortie c'est que d'abord il y a 3ligne qui servent à rien !!!
    Puis les ligne numéroté (1. 2. 3. ...) et qui comporte le nom et les infos des séquences. Puis la matrice qui est écrite de façon très bizard (ça ma pris plus d'1H pour le comprendre )
    Bon Bref la sortie ressemble à ça:
    1
    9
    0.965
    1. =3395|CparCP02| [Cryphonectria_parasitica]|Ascomycota|Catalase_peroxidase|complete|
    2. =2539|HjCP01| [Hypocrea_jecorina]|Ascomycota|Catalase_peroxidase|complete|
    3. =8363|GclCP02| [Grosmannia_clavigera]|Ascomycota|Catalase_peroxidase|complete|
    4. =5353|FoCP01| [Fusarium_oxysporum]|Ascomycota|Catalase_peroxidase|complete|
    5. =3414|VdaCP02| [Verticillium_dahliae]|Ascomycota|Catalase_peroxidase|complete|
    6. =7191|VaaCP02| [Verticillium_albo-atrum]|Ascomycota|Catalase_peroxidase|complete|
    7. =5459|HjCP02| [Hypocrea_jecorina]|Ascomycota|Catalase_peroxidase|complete|
    8. =3415|GmoCP01| [Gibberella_moniliformis]|Ascomycota|Catalase_peroxidase|complete|
    9. =5799|TviCP01| [Trichoderma_virens]|Ascomycota|Catalase_peroxidase|complete|
    0.333 0.335 0.363 0.282 0.281 0.326 0.363 0.334
    0.346 0.195 0.312 0.312 0.360 0.195 0.085
    0.386 0.300 0.300 0.251 0.386 0.337
    0.341 0.341 0.382 0.012 0.204
    0.008 0.306 0.342 0.308
    0.305 0.341 0.309
    0.385 0.345
    0.203
    et la matrice d'en bas et écrit de la sorte
    je vais prendre les 2 dernières lignes
    0.385 0.345
    0.203
    équivaut à:
    .............HjCP02....GmoCP01....TviCP01
    HjCP02....0.000......0.385.........0.345
    GmoCP01 ..............0.000.........0.203
    TviCP01................................0.000
    Est ce que c'est le cas (c'est une sortie MAFFT)

  4. #4
    Membre averti
    Homme Profil pro
    Etudiant
    Inscrit en
    Février 2012
    Messages
    20
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : Etudiant

    Informations forums :
    Inscription : Février 2012
    Messages : 20
    Par défaut
    Pour être honnete je ne suis pas un pro de perl ...Je viens pour l'instant plus pour trouver des réponse à mes questions plutôt que pour en répondre.

    Ce qu'il fait faire un mon avis (et ce ce que j'essaye de faire):

    >>Ouvrir le fichier qui contient la matrice
    >>lire ligne par ligne le fichier et s'arréter dans les ligne qui commence par 1. 2. 3. ....
    >> récupérer de ces ligne le nom de la séquence
    >> écrir une ligne de ce qu'on récupère séparer par des tabulation
    >>ensuite commnecer à réordonner la matrice avec des tables de hachage. dire par exemple: on prend le premier nom de séquence le coller on le colle devant la 1ere ligne de la matrie et on fait un tabulation vide(qui remplace le 0 donc la séquence avec elle même) puis on lécrit la 1ere ligne de la matrice(séparer par des tabulation aussi)
    >> dans la 2eme sequence on commence par 2 tabulations puis en écrit la 2eme ligne ...pour la 3eme séuence 3tabulation puis on écrit la ligne et aisi de suite
    Malheureusement je suis limité en matière de longuage j'espère qu'on aura tout deux une réponse.
    de ma part je les traite manuellement pour ne pas rester bloqué

  5. #5
    Membre averti
    Femme Profil pro
    Étudiant
    Inscrit en
    Mars 2012
    Messages
    27
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2012
    Messages : 27
    Par défaut
    Oui exactement il s'agit de la matrice de MAFFT.

    Si vous avez une réponse merci de m'aider pour ceci !!!

  6. #6
    Expert confirmé

    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2009
    Messages
    3 577
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 59
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Avril 2009
    Messages : 3 577
    Par défaut
    Une question Never.Down : comment sont représentées tes données d'entrées (les matrices et les noms de ligne/colonnes) ?

    Je ne sais pas si ça peut aider, il existe un module BioPerl : http://search.cpan.org/~cjfields/Bio...nment/MAFFT.pm

    Pour ce qui est des matrices, je devrais pouvoir le faire assez facilement, mais en dehors de toute considération de Bio. Les tableaux sont de quelle taille ?

  7. #7
    Membre averti
    Femme Profil pro
    Étudiant
    Inscrit en
    Mars 2012
    Messages
    27
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2012
    Messages : 27
    Par défaut
    La matrice (le fichier de sortie MAFFT) est exactement ce que abdel1342 a donné et c'est ce que j'utilise comme entrée.
    1
    9
    0.965
    1. =3395|CparCP02| [Cryphonectria_parasitica]|Ascomycota|Catalase_peroxidase|complete|
    2. =2539|HjCP01| [Hypocrea_jecorina]|Ascomycota|Catalase_peroxidase|complete|
    3. =8363|GclCP02| [Grosmannia_clavigera]|Ascomycota|Catalase_peroxidase|complete|
    4. =5353|FoCP01| [Fusarium_oxysporum]|Ascomycota|Catalase_peroxidase|complete|
    5. =3414|VdaCP02| [Verticillium_dahliae]|Ascomycota|Catalase_peroxidase|complete|
    6. =7191|VaaCP02| [Verticillium_albo-atrum]|Ascomycota|Catalase_peroxidase|complete|
    7. =5459|HjCP02| [Hypocrea_jecorina]|Ascomycota|Catalase_peroxidase|complete|
    8. =3415|GmoCP01| [Gibberella_moniliformis]|Ascomycota|Catalase_peroxidase|complete|
    9. =5799|TviCP01| [Trichoderma_virens]|Ascomycota|Catalase_peroxidase|complete|
    0.333 0.335 0.363 0.282 0.281 0.326 0.363 0.334
    0.346 0.195 0.312 0.312 0.360 0.195 0.085
    0.386 0.300 0.300 0.251 0.386 0.337
    0.341 0.341 0.382 0.012 0.204
    0.008 0.306 0.342 0.308
    0.305 0.341 0.309
    0.385 0.345
    0.203
    Par contre la taille peut varier, elle peut faire plus de 200 séquneces ou plus.
    Sinon, pour les nom des lignes et des colonnes c'est ce qui est écrit en 2eme position dans les ligne numéroté donc pour la première ligne c'est CparCP02 et c'est pareil pour le reste des lignes.

    ces noms sont utiliser à la fois dans les lignes et dans les colonnes vue que c'est une matrice de distance mais ce qu'on vois pas c'est la diagonale de 0 et ce parce que la matrice est décalé. c'est pourquoi abdel1342 a suggérer de mettre des tabulation .

    J'espère que ma réponse est claire.
    Merci pour votre participation. ça l'avancera beaucoup dans mon travail ce parseur.

    salutations

  8. #8
    Expert confirmé

    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2009
    Messages
    3 577
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 59
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Avril 2009
    Messages : 3 577
    Par défaut
    Si je comprends bien :
    - les 3 premières doivent être ignorées
    - le nom de chaque ligne (et colonne équivalente) est le premier nom entre | ... | des lignes suivantes

    Ce que je ne comprends pas :
    - il y a 9 lignes de noms de lignes et seulement 8 lignes de données. La 9e ligne de donnée serait-elle vide ?
    - le séparateur de colonne des lignes de données est-il l'espace ?
    - comment est représentée la matrice "de référence" (celle depuis laquelle extraire l'ordre de ligne/colonne à extraire de la matrice complète (matrice mafft ?)).

  9. #9
    Expert confirmé

    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2009
    Messages
    3 577
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 59
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Avril 2009
    Messages : 3 577
    Par défaut
    Non, ma question portait sur ceci :
    Citation Envoyé par Never.Down Voir le message
    (*)la deuxième est de comparer cette matrice (la 2eme) à une autre et la réordonner de la même sorte. tout en éliminant quelques individus.
    Je voulais savoir comment identifier les lignes à conserver.
    Sinon, pour la sortie de la 1ere matrice, je devrais avoir qqchose d'opérationnel.
    Par contre, j'ai l'impression qu'il y a une erreur dans le deuxième exemple que tu donnes ici. En effet, d(FoCP01, GclCP02) != d(GclCP02, FoCP01).
    Mais je vois ce que tu veux : il s'agit d'ajouter à la matrice, sa transposée.

  10. #10
    Expert confirmé

    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2009
    Messages
    3 577
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 59
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Avril 2009
    Messages : 3 577
    Par défaut
    Bon, la première partie semble correctement traitée.
    Il faut ajuster la manière dont seront stockées les matrices résultat (pour l'instant, j'en imprime trois à l'écran ; la structure interne de la matrice (Data::Dumper), la matrice brute de lecture, et la matrice ré-ordonnée selon l'ordre que tu as donné).
    S'il faut en supprimer ou les écrire dans un fichier, tu devrais pouvoir facilement adapter la fonction print_mafft.

    A priori, cette fonction print_mafft devrait pouvoir répondre à ta 2e question (dont j'attends les informations supplémentaires). Il suffira normalement de modifier le deuxième paramètre passé à la fonction (filtre des lignes/colonnes).

    De même pour l'entrée, les données sont prises dans une variable du script. Pour les prendre à partir d'un fichier en entrée, il suffit de modifier <$MAFFT> par <STDIN> partout dans le script (et de passer le fichier en paramètre au script).

    J'ai failli oublié le script :
    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
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    #!/usr/bin/perl
     
    use strict;
    use warnings;
     
    use feature qw(:5.10);
    use List::MoreUtils qw(each_array pairwise);
    use Data::Dumper;
     
    my $mafft = <<"MAFFT";
    1
    9
    0.965
    1. =3395|CparCP02| [Cryphonectria_parasitica]|Ascomycota|Catalase_peroxidase|complete|
    2. =2539|HjCP01| [Hypocrea_jecorina]|Ascomycota|Catalase_peroxidase|complete|
    3. =8363|GclCP02| [Grosmannia_clavigera]|Ascomycota|Catalase_peroxidase|complete|
    4. =5353|FoCP01| [Fusarium_oxysporum]|Ascomycota|Catalase_peroxidase|complete|
    5. =3414|VdaCP02| [Verticillium_dahliae]|Ascomycota|Catalase_peroxidase|complete|
    6. =7191|VaaCP02| [Verticillium_albo-atrum]|Ascomycota|Catalase_peroxidase|complete|
    7. =5459|HjCP02| [Hypocrea_jecorina]|Ascomycota|Catalase_peroxidase|complete|
    8. =3415|GmoCP01| [Gibberella_moniliformis]|Ascomycota|Catalase_peroxidase|complete|
    9. =5799|TviCP01| [Trichoderma_virens]|Ascomycota|Catalase_peroxidase|complete|
    0.333 0.335 0.363 0.282 0.281 0.326 0.363 0.334
    0.346 0.195 0.312 0.312 0.360 0.195 0.085
    0.386 0.300 0.300 0.251 0.386 0.337
    0.341 0.341 0.382 0.012 0.204
    0.008 0.306 0.342 0.308
    0.305 0.341 0.309
    0.385 0.345
    0.203
    MAFFT
     
    my $expected = <<"EXPECTED";
    		CparCP02 FoCP01	GmoCP01	GclCP02	HjCP01	HjCP02	TviCP01	VaaCP02	VdaCP02
    CparCP02	0.000	0.363	0.363	0.335	0.333	0.326	0.334	0.281	0.282
      FoCP01	0.363	0.000	0.012	0.386	0.195	0.382	0.204	0.341	0.341
      GmoCP01	0.363	0.012	0.000	0.386	0.195	0.385	0.203	0.341	0.342
      GclCP02	0.363	0.386	0.386	0.000	0.346	0.251	0.337	0.300	0.300
      HjCP01	0.335	0.386	0.195	0.346	0.000	0.360	0.085	0.312	0.312
      HjCP02	0.333	0.195	0.195	0.251	0.360	0.000	0.345	0.305	0.306
      TviCP01	0.334	0.204	0.203	0.337	0.085	0.345	0.000	0.309	0.308
      VaaCP02	0.281	0.341	0.341	0.300	0.312	0.305	0.309	0.000	0.008
      VdaCP02	0.282	0.341	0.342	0.300	0.312	0.306	0.308	0.008	0.000
    EXPECTED
     
    my $ref = <<"REF";
    . p1 p2 p3
    p1 0
    p2 30 0
    p3 40 55 0
    REF
     
    sub print_mafft {
      my ($table, $col) = @_;
     
      my @col_names = $col ? @$col : @{$table->[0]};
      say join "\t", ".", @col_names;
      my @lines = @col_names;
      foreach my $line (@{$table->[1]}{@col_names}) {
        my $line_name = shift @lines;
        say join "\t", $line_name, map $line->{$_} // $table->[1]->{$_}->{$line_name} // "0", @col_names;
      }
    }
     
    # Representation en mémoire :
    # @mafft = ( [ qw(p3 p5 p2 p4 p1) ],
    #            { p3 => { p3 => 0 },
    #              p5 => { p3 => 12, p5 => 0 },
    #            ... } );
     
    # Parsing de $mafft
    open my $MAFFT, "<", \$mafft or die "Can't read variable \$mafft: $!";
    # Ignorer les 3 premières lignes
    <$MAFFT>;<$MAFFT>;<$MAFFT>;
    #my @col_names;
    my @mafft;
    my @lines;
    our ($a, $b);
    while (defined(my $line = <$MAFFT>)) {
      if (my ($line_name) = $line =~ /\|\s*(.+?)\s*\|/) {
        # get a line name
        push @{$mafft[0]}, $line_name;
      }
      elsif (@{$mafft[0]}) {
        @lines = @{$mafft[0]} if !@lines;
        my $line_name = shift @lines;
        chomp($line);
        my @columns = split /\s+/, $line;
        $mafft[1]->{$line_name} = { pairwise { defined $b ? ($a, $b) : () } @lines, @columns };
      }
    }
    say Data::Dumper->Dump([\@mafft], [qw($mafft)]);
    print_mafft(\@mafft);
    print_mafft(\@mafft, [qw(CparCP02 FoCP01 GmoCP01 GclCP02 HjCP01 HjCP02 TviCP01 VaaCP02 VdaCP02)]);

  11. #11
    Membre averti
    Femme Profil pro
    Étudiant
    Inscrit en
    Mars 2012
    Messages
    27
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2012
    Messages : 27
    Par défaut
    Bonjour,

    merci pour cette réponse. j'ai installé le package et j'ai exécuter le programme tell qu'il est. il a l'air de bien marché à l'exception du dernier élément de la matrice qui reste collé au précédent. je colle ici le résultat obtenu:
    $mafft = [
    [
    'CparCP02',
    'HjCP01',
    'GclCP02',
    'FoCP01',
    'VdaCP02',
    'VaaCP02',
    'HjCP02',
    'GmoCP01',
    'TviCP01'
    ],
    {
    'CparCP02' => {
    'TviCP01' => '0.334',
    'GclCP02' => '0.335',
    'HjCP01' => '0.333',
    'VdaCP02' => '0.282',
    'FoCP01' => '0.363',
    'HjCP02' => '0.326',
    'VaaCP02' => '0.281',
    'GmoCP01' => '0.363'
    },
    'GclCP02' => {
    'TviCP01' => '0.337',
    'VdaCP02' => '0.300',
    'FoCP01' => '0.386',
    'HjCP02' => '0.251',
    'VaaCP02' => '0.300',
    'GmoCP01' => '0.386'
    },
    'HjCP01' => {
    'TviCP01' => '0.085',
    'GclCP02' => '0.346',
    'VdaCP02' => '0.312',
    'FoCP01' => '0.195',
    'HjCP02' => '0.360',
    'VaaCP02' => '0.312',
    'GmoCP01' => '0.195'
    },
    'VdaCP02' => {
    'TviCP01' => '0.308',
    'HjCP02' => '0.306',
    'VaaCP02' => '0.008',
    'GmoCP01' => '0.342'
    },
    'FoCP01' => {
    'TviCP01' => '0.204',
    'VdaCP02' => '0.341',
    'HjCP02' => '0.382',
    'VaaCP02' => '0.341',
    'GmoCP01' => '0.012'
    },
    'HjCP02' => {
    'TviCP01' => '0.345',
    'GmoCP01' => '0.385'
    },
    'VaaCP02' => {
    'TviCP01' => '0.309',
    'HjCP02' => '0.305',
    'GmoCP01' => '0.341'
    },
    'GmoCP01' => {
    'TviCP01' => '0.203'
    }
    }
    ];

    . CparCP02 HjCP01 GclCP02 FoCP01 VdaCP02 VaaCP02 HjCP02 GmoCP01TviCP01
    CparCP02 0 0.333 0.335 0.363 0.282 0.281 0.326 0.363 0.334
    HjCP01 0.333 0 0.346 0.195 0.312 0.312 0.360 0.195 0.085
    GclCP02 0.335 0.346 0 0.386 0.300 0.300 0.251 0.386 0.337
    FoCP01 0.363 0.195 0.386 0 0.341 0.341 0.382 0.012 0.204
    VdaCP02 0.282 0.312 0.300 0.341 0 0.008 0.306 0.342 0.308
    VaaCP02 0.281 0.312 0.300 0.341 0.008 0 0.305 0.341 0.309
    HjCP02 0.326 0.360 0.251 0.382 0.306 0.305 0 0.385 0.345
    GmoCP01 0.363 0.195 0.386 0.012 0.342 0.341 0.385 0 0.203
    TviCP01 0.334 0.085 0.337 0.204 0.308 0.309 0.345 0.203 0
    . CparCP02 FoCP01 GmoCP01 GclCP02 HjCP01 HjCP02 TviCP01 VaaCP02VdaCP02
    CparCP02 0 0.363 0.363 0.335 0.333 0.326 0.334 0.281 0.282
    FoCP01 0.363 0 0.012 0.386 0.195 0.382 0.204 0.341 0.341
    GmoCP01 0.363 0.012 0 0.386 0.195 0.385 0.203 0.341 0.342
    GclCP02 0.335 0.386 0.386 0 0.346 0.251 0.337 0.300 0.300
    HjCP01 0.333 0.195 0.195 0.346 0 0.360 0.085 0.312 0.312
    HjCP02 0.326 0.382 0.385 0.251 0.360 0 0.345 0.305 0.306
    TviCP01 0.334 0.204 0.203 0.337 0.085 0.345 0 0.309 0.308
    VaaCP02 0.281 0.341 0.341 0.300 0.312 0.305 0.309 0 0.008
    VdaCP02 0.282 0.341 0.342 0.300 0.312 0.306 0.308 0.008 0
    par rapport à la question que vous m'avez posé.
    j'ai changer d'avis je vais juste réordonner un tableau qui contient les même séquence (lignes) dans le même ordre que l'ordre de cette matrice. que je crois que le mieux est de récupérer la liste des noms (celle qui s'affiche tout au départ) et la comparer au tableau et réordonner ce tableau. et donc:
    **prendre le premier élément de la liste.
    **le chercher en parcourant le tableau
    **et une fois trouvé afficher et ainsi de suite jusqu'à la fin.

    Maintenant je voudrai savoir comment lui donner en entrer le fichier tel qu'il est et récupérer en sortie juste la matrice.


    Cordialement et j'espère que vous avez bien profiter de votre séjour

  12. #12
    Expert confirmé

    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2009
    Messages
    3 577
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 59
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Avril 2009
    Messages : 3 577
    Par défaut
    Supprime (ou commente) cette ligne
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    say Data::Dumper->Dump([\@mafft], [qw($mafft)]);
    de même que celle-ci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    print_mafft(\@mafft, [qw(CparCP02 FoCP01 GmoCP01 GclCP02 HjCP01 HjCP02 TviCP01 VaaCP02 VdaCP02)]);
    La liste qui t'intéresse est celle-ci :
    L'ordre des lignes/colonnes est celui du fichier d'origine.
    Si tu souhaites changer cet ordre, il faut le spécifié dans l'appel de la fonction print_mafft, comme c'est fait dans la 2e ligne que je te demande de supprimer.

  13. #13
    Membre averti
    Femme Profil pro
    Étudiant
    Inscrit en
    Mars 2012
    Messages
    27
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2012
    Messages : 27
    Par défaut
    enfaite l'ordre que je veux n'est pas dans cette matrice mais plutot dans le tableau. de cette façon je n'aurais pas à réordonner les lignes et les colonnes mais juste les lignes.

    Et cette ordre là je veux le faire par rapport à la liste qui sort de ce parseur la liste qui s'affiche tout au début.

    donc si par exemple. le fichier commence par:
    1. seq1
    2. seq2
    3. seq3

    Nous avons récupérer la liste

    seq1
    seq2
    seq3

    et on utilisera cette liste pour réordonner le tableau qui se trouve dans un autre fichier et qui est comme suit:

    seq ref longuer ....
    seq3 54 15645
    seq1 56 15748
    seq2 59 15985

    Merci

  14. #14
    Expert confirmé

    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2009
    Messages
    3 577
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 59
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Avril 2009
    Messages : 3 577
    Par défaut
    Je ne comprends plus vraiment :
    - le tableau se trouvant après la liste n'est-il plus la matrice à ré-ordonner ?
    - la matrice à ordonner se trouverait-elle dans un autre fichier ? de quel type ? comment sont organisées les données dans cet autre fichier ? ...

    Bref, qu'attends-tu de plus que le script actuel ?

  15. #15
    Membre averti
    Femme Profil pro
    Étudiant
    Inscrit en
    Mars 2012
    Messages
    27
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2012
    Messages : 27
    Par défaut
    j'ai modifié le script de tel façon à lui fournir le fichier directement.

    j'ai également supprimé EXPECTED et REF. Chose qui devrait pas influer sur notre script.

    et en l’exécutant sans les 3 lignes. je n'ai eu aucune erreur (erreur non apparente !!!)

    et en gardant les 3 dernière ligne pour voir si j'obtiens le même résultat j'ai eu cette errer:
    $mafft = [];

    Can't use an undefined value as an ARRAY reference at reorder.pl line 16, <$MAFFT> line 1.
    reorder.pl est le nom du parseur

    et e ne comprends pas pourquoi il concidère la ligne 1 (line 1) vue que nous avons ignoré les 3 premières lignes !!!

    voici les modification que j'ai exécuté et vous pouvez voir que je n'ai pas apporté de grandes modifications !!!
    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/perl
     
    use strict;
    use warnings;
     
    use feature qw(:5.10);
    use List::MoreUtils qw(each_array pairwise);
    use Data::Dumper;
     
    my $mafft = "fasta.fa.hat2";
     
     
    sub print_mafft {
      my ($table, $col) = @_;
     
      my @col_names = $col ? @$col : @{$table->[0]};
      say join "\t", ".", @col_names;
      my @lines = @col_names;
      foreach my $line (@{$table->[1]}{@col_names}) {
        my $line_name = shift @lines;
        say join "\t", $line_name, map $line->{$_} // $table->[1]->{$_}->{$line_name} // "0", @col_names;
      }
    }
     
     
    # Parsing de $mafft
    open my $MAFFT, "<", \$mafft or die "Can't read variable \$mafft: $!";
    # Ignorer les 3 premières lignes
    <$MAFFT>;<$MAFFT>;<$MAFFT>;
    #my @col_names;
    my @mafft;
    my @lines;
    our ($a, $b);
    while (defined(my $line = <$MAFFT>)) {
      if (my ($line_name) = $line =~ /\|\s*(.+?)\s*\|/) {
        # get a line name
        push @{$mafft[0]}, $line_name;
      }
      elsif (@{$mafft[0]}) {
        @lines = @{$mafft[0]} if !@lines;
        my $line_name = shift @lines;
        chomp($line);
        my @columns = split /\s+/, $line;
        $mafft[1]->{$line_name} = { pairwise { defined $b ? ($a, $b) : () } @lines, @columns };
      }
    }
    say Data::Dumper->Dump([\@mafft], [qw($mafft)]);
    print_mafft(\@mafft);
    print_mafft(\@mafft, [qw(CparCP02 FoCP01 GmoCP01 GclCP02 HjCP01 HjCP02 TviCP01 VaaCP02 VdaCP02)]);

  16. #16
    Membre averti
    Femme Profil pro
    Étudiant
    Inscrit en
    Mars 2012
    Messages
    27
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2012
    Messages : 27
    Par défaut
    Bonjour,

    je voudrais ajouter quelque chose à la matrice obtenu à la fin de ce parseur.

    je veux parcourir le tableau et chercher la plus grande valeur.

    Considérer cette valeur comme étant le pourcentage le plus élevé et donc 100%

    Puis calculer le pourcentage du reste des valeurs du tableau.

    Cordialement.

    P.S: Si vous jugez utile de faire un nouveau sujet ça sera le cas.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. référencement sur une matrice
    Par bni dans le forum C++
    Réponses: 3
    Dernier message: 24/03/2005, 00h06
  2. [PL/SQL] définir une matrice
    Par lalystar dans le forum Oracle
    Réponses: 5
    Dernier message: 22/02/2005, 15h27
  3. [JTable] remplir avec une matrice
    Par ybdz dans le forum Composants
    Réponses: 3
    Dernier message: 08/12/2004, 21h03
  4. Recherche des coefficients d'une matrice 3x3
    Par colorid dans le forum Algorithmes et structures de données
    Réponses: 6
    Dernier message: 25/11/2004, 16h52
  5. Déclarer une matrice
    Par joy dans le forum C
    Réponses: 7
    Dernier message: 09/12/2002, 00h42

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