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

  1. #1
    Futur Membre du Club
    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
    Points : 5
    Points
    5
    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
    Futur Membre du Club
    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
    Points : 5
    Points
    5
    Par défaut
    j'ai vraiment besoin de ce parseur si quelqu'un pourrait m'aider

    Merci

  3. #3
    Membre à l'essai
    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
    Points : 12
    Points
    12
    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
    Futur Membre du Club
    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
    Points : 5
    Points
    5
    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 !!!

  5. #5
    Membre à l'essai
    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
    Points : 12
    Points
    12
    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é

  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 : 58
    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
    Points : 5 753
    Points
    5 753
    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 ?
    Plus j'apprends, et plus je mesure mon ignorance (philou67430)
    Toute technologie suffisamment avancée est indiscernable d'un script Perl (Llama book)
    Partagez vos problèmes pour que l'on partage ensemble nos solutions : je ne réponds pas aux questions techniques par message privé
    Si c'est utile, say

  7. #7
    Futur Membre du Club
    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
    Points : 5
    Points
    5
    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 : 58
    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
    Points : 5 753
    Points
    5 753
    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 ?)).
    Plus j'apprends, et plus je mesure mon ignorance (philou67430)
    Toute technologie suffisamment avancée est indiscernable d'un script Perl (Llama book)
    Partagez vos problèmes pour que l'on partage ensemble nos solutions : je ne réponds pas aux questions techniques par message privé
    Si c'est utile, say

  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 : 58
    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
    Points : 5 753
    Points
    5 753
    Par défaut
    A demain...
    Plus j'apprends, et plus je mesure mon ignorance (philou67430)
    Toute technologie suffisamment avancée est indiscernable d'un script Perl (Llama book)
    Partagez vos problèmes pour que l'on partage ensemble nos solutions : je ne réponds pas aux questions techniques par message privé
    Si c'est utile, say

  10. #10
    Futur Membre du Club
    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
    Points : 5
    Points
    5
    Par défaut
    Bonjour Philou67430,

    Désolé de n'avoir eu à répondre que aujourd'hui.

    Effectivement, les 3premières lignes sont ignorées car leur contenu ne m’intéresse pas trop.

    Sinon Oui comme vous l'avez remarquer il y a 9 ligne (noms) mais juste 8 lignes dans la matrice. ceci revient au fait que la matrice commence, dans les ligne par la première séquence(donc la 1.) alors que dans les colonnes elle commence par la 2.
    ceci dit, les distance des séquences avec elles même (est qui est de 0)ne sont pas mentionnées. Et j'aimerais bien qu'il apparaisse en sortie si c'est possible.


    Pour être plus claire la matrice est disposé dans ce sens

    D1,2 D1,3 D1,4 .....
    D2,3 D2.4....
    D3,4.....

    Où D1,2 est la Distance entre la séquence 1 et la séquence 2.
    et ce que je veux obtenir moi c'est:

    .........1......2.......3......4.........
    1......D1,1...D1,2...D1,3..D1,4....
    2...............D2,2...D2,3..D2,4....
    3........................D3,3..D3,4....
    4................................D4,4....

    Voir même remplier la matrice en entier.

    Je vous remercie beaucoup.
    Cordialement

    P.S: Pour les séparateurs:
    Les lignes des noms(les lignes numérotées) sont comme suit:
    NumeroDelaLigne Point Espace Barre(|) NOM....... je crois que le reste ne vous intéresse pas
    *Est pour la matrice le séparateurs sont des espaces.
    Il faut noté aussi que avant les lignes il y a des espaces.
    3 espaces avant les lignes numrotés et 1espace devant les lignes de la matrice

  11. #11
    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 : 58
    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
    Points : 5 753
    Points
    5 753
    Par défaut
    Citation Envoyé par Never.Down Voir le message
    Sinon Oui comme vous l'avez remarquer il y a 9 ligne (noms) mais juste 8 lignes dans la matrice. ceci revient au fait que la matrice commence, dans les ligne par la première séquence(donc la 1.) alors que dans les colonnes elle commence par la 2.
    ceci dit, les distance des séquences avec elles même (est qui est de 0)ne sont pas mentionnées. Et j'aimerais bien qu'il apparaisse en sortie si c'est possible.
    Ceci signifie donc bien que la 9e ligne de la matrice ne contient que des 0 ?

    Sinon, je suis surpris que la matrice soit triangulaire, mais je pense que ça n'a pas d'importance pour la solution à proposer.

    Je peux évidemment tenter de mettre des 0 là où il n'y a pas de données.

    Sinon, je vous indique que je serai absent à partir de ce soir, jusqu'à mardi matin. Donc si la solution n'est pas postée ce soir, ce ne sera pas avant mardi.
    Plus j'apprends, et plus je mesure mon ignorance (philou67430)
    Toute technologie suffisamment avancée est indiscernable d'un script Perl (Llama book)
    Partagez vos problèmes pour que l'on partage ensemble nos solutions : je ne réponds pas aux questions techniques par message privé
    Si c'est utile, say

  12. #12
    Futur Membre du Club
    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
    Points : 5
    Points
    5
    Par défaut
    Oui, la ligne 9 n'apparait pas parce que la il reste la distance qu'avec elle même.

    Donc D9,9 et vue que c'est égale à 0 elle n'apparait pas aussi.

    Merci pour votre réponse. Sinon vous ne pouvez pas le donner quelques indices que je puisse essayer ? Si ça ne vous dérange pas bien sûr.

    Cordialement

  13. #13
    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 : 58
    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
    Points : 5 753
    Points
    5 753
    Par défaut
    Pour pouvoir tester, il me faut un exemple "concret" de la 2e matrice qui sert à sélectionner les lignes/colonnes à extraire de la matrice mafft, ou plus simplement, s'il est possible de fournir au script (en paramètre par exemple), cette ligne de ligne à prendre en compte (au lieu de fournir une matrice à lire).

    (j'ai un début de script qui semble fonctionnel, mais l'exemple est indispensable).
    Plus j'apprends, et plus je mesure mon ignorance (philou67430)
    Toute technologie suffisamment avancée est indiscernable d'un script Perl (Llama book)
    Partagez vos problèmes pour que l'on partage ensemble nos solutions : je ne réponds pas aux questions techniques par message privé
    Si c'est utile, say

  14. #14
    Futur Membre du Club
    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
    Points : 5
    Points
    5
    Par défaut
    Voici sur ce lien un exemple concrat exactement avec la sortie. Ne fiez pas de l'extension j'ai déja essayer sur perl et il le lit comme si c'était un fichier txt

    Veuillez télécharger l'exemple en Cliquant ICI

    Merci beaucoup

  15. #15
    Futur Membre du Club
    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
    Points : 5
    Points
    5
    Par défaut
    Sinon je n'ai pas bien saisi votre phrase:
    un exemple "concret" de la 2e matrice qui sert à sélectionner les lignes/colonnes à extraire de la matrice mafft
    ....J'ai modifié le post car j'ai relis vitre commentaire.... et je crois que vous voulez voir exactement ce que je veux obtenir.

    Voici ce que je veux obtenir excatement(l'ordre des nom n'est pas important ce'st moi qui l'ai modifié manuelement)

    Voici ici la matrice de sortie que je veux http://www.mediafire.com/?jq1eiixf5jz911v

    Et ça serait meilleur si elle est de la sorte mais je crois que c'est très dur et je me contente de la première.

    je ne sais pas comment vous remercier franchement.

    Cordialement

  16. #16
    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 : 58
    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
    Points : 5 753
    Points
    5 753
    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.
    Plus j'apprends, et plus je mesure mon ignorance (philou67430)
    Toute technologie suffisamment avancée est indiscernable d'un script Perl (Llama book)
    Partagez vos problèmes pour que l'on partage ensemble nos solutions : je ne réponds pas aux questions techniques par message privé
    Si c'est utile, say

  17. #17
    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 : 58
    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
    Points : 5 753
    Points
    5 753
    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)]);
    Plus j'apprends, et plus je mesure mon ignorance (philou67430)
    Toute technologie suffisamment avancée est indiscernable d'un script Perl (Llama book)
    Partagez vos problèmes pour que l'on partage ensemble nos solutions : je ne réponds pas aux questions techniques par message privé
    Si c'est utile, say

  18. #18
    Futur Membre du Club
    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
    Points : 5
    Points
    5
    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

  19. #19
    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 : 58
    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
    Points : 5 753
    Points
    5 753
    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.
    Plus j'apprends, et plus je mesure mon ignorance (philou67430)
    Toute technologie suffisamment avancée est indiscernable d'un script Perl (Llama book)
    Partagez vos problèmes pour que l'on partage ensemble nos solutions : je ne réponds pas aux questions techniques par message privé
    Si c'est utile, say

  20. #20
    Futur Membre du Club
    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
    Points : 5
    Points
    5
    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

+ Répondre à la discussion
Cette discussion est résolue.
Page 1 sur 3 123 DernièreDernière

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