Valid XHTML     Valid CSS2    

Gestion des premières lignes de données pour une analyse LEFSE

 

Table des matières cliquable

  1. Paramètre des analyses LEFSE et actions sur les lignes d'un fichier

  2. Automatisation en Perl, liste des commandes et paramètres

  3. Installation

  4. Aide en ligne

  5. Un exemple détaillé

 

1. Paramètre des analyses LEFSE et actions sur les lignes d'un fichier

Les analyses LEFSE utilisent des données de comptage et des lignes d'entête via les paramètres -c (classes), -s (sous-classes) et -u (features). Malheureusement le volume des données issues de séquençage est souvent volumineux (plusieurs dizaines ou plusieurs centaines de milliers de lignes). Dès lors, supprimer la ligne 2 ou modifier la ligne 3 d'un tel fichier lorsque ces lignes définissent des classes, des sous-classes ou des "features" se révèle fastidieux. C'est pourquoi nous proposons ici une gestion en ligne de commandes de telles manipulations. Voici quelques exemples de ce qui est implémenté  :


     > cat miniLefse.txt # données initiales
     
     oxygen_availability        High_O2       Mid_O2       Low_O2       Mid_O2
     body_site                  ear           oral         gut          oral
     subject_id                 158           158          159          160
     Archaea                    2             5            4            7
     Bacteria                   1             1            1            0.9
     Bacteria|Acidobacteria     0.0001        0.08         0.4          0.0001
     Bacteria|Suiteria          0.00002       0.009        0.00004      0.0000007
     
     # export de la ligne 1 comme oxygen.txt, le fichier original n'est pas modifié
     
     > perl preLefse.pl miniLefse.txt -exp 1 -out oxygen.txt
     > cat  oxygen.txt
     
     oxygen_availability        High_O2       Mid_O2       Low_O2       Mid_O2
     
     # export de la ligne 2 comme body_site.txt
     
     > perl preLefse.pl miniLefse.txt -exp 2 -out body_site.txt
     > cat  body_site.txt
     
     body_site                  ear           oral         gut          oral
     
     # suppression des trois premières lignes
     
     > perl preLefse.pl miniLefse.txt -del 1:3 -out miniDel3.txt
     > cat miniDel3.txt
     
     Archaea                    2             5            4            7
     Bacteria                   1             1            1            0.9
     Bacteria|Acidobacteria     0.0001        0.08         0.4          0.0001
     Bacteria|Suiteria          0.00002       0.009        0.00004      0.0000007
     
     # insertion de oxygen.txt comme nouvelle ligne 1 du fichier
     
     > perl preLefse.pl miniLefse.txt -ins 1 -fic oxygen.txt -out miniNew1.txt
     > cat miniNew1.txt
     
     oxygen_availability        High_O2       Mid_O2       Low_O2       Mid_O2
     Archaea                    2             5            4            7
     Bacteria                   1             1            1            0.9
     Bacteria|Acidobacteria     0.0001        0.08         0.4          0.0001
     Bacteria|Suiteria          0.00002       0.009        0.00004      0.0000007
     
     # insertion de body_site.txt comme nouvelle ligne 2 du fichier
     
     > perl preLefse.pl miniNew1.txt -ins 2 -fic body_site.txt -out miniNew2.txt
     > cat miniNew2.txt
     
     oxygen_availability        High_O2       Mid_O2       Low_O2       Mid_O2
     body_site                  ear           oral         gut          oral
     Archaea                    2             5            4            7
     Bacteria                   1             1            1            0.9
     Bacteria|Acidobacteria     0.0001        0.08         0.4          0.0001
     Bacteria|Suiteria          0.00002       0.009        0.00004      0.0000007
     

Si un spécialiste Unix de la ligne de commandes sait faire cela en une ou deux lignes via les fameuses commandes head, tail, sed..., le «commun des mortels» a plus de mal et c'est donc le but de ce script que de réaliser ces actions avec des mots simples.

2. Automatisation en Perl, liste des commandes et paramètres

Le script Perl définit 4 actions exclusives l'une de l'autre et il utilise 2 paramètres, sachant que le premier paramètre à fournir est le nom du fichier d'entrée.

Voici la liste des actions, leur signification et des exemples d'utilisation.

Action Signification Exemple 1 Exemple 2

-exp

exporte (recopie) une ou plusieurs lignes

-exp 1

-exp 2:3

-del

supprime une ou plusieurs lignes

-del 1

-del 2:3

-ins

insère tout un fichier à une position donnée

-ins 1

-ins 2

-stat

affiche des statistiques sur le fichier

(nombre de lignes, nombre de colonnes...)

-stat

Voici la liste des paramètres, leur signification et des exemples d'utilisation.

Paramètre Signification Exemple

-out

nom du fichier de sortie

-out dataV2.txt

-fic

nom du fichier à insérer

-fic classes.txt

3. Installation

Il n'y aucune installation à faire, il faut juste récupérer le script preLefse.pl par exemple sous Linux avec la commande :


     wget http://forge.info.univ-angers.fr/~gh/Metaseed/preLefse.pl
     

Voici le code Perl, téléchargeable via le fichier preLefse.pl :

Pour tester si tout cela fonctionne, vous pouvez exécuter ou copier/coller les commandes suivantes :


     mkdir testPreLefse
     cd    testPreLefse
     wget  http://forge.info.univ-angers.fr/~gh/Metaseed/preLefse.pl
     wget  http://forge.info.univ-angers.fr/~gh/Metaseed/exempleLefse_OBS.txt
     cp    exempleLefse_OBS.txt exemple0.txt
     
     perl  preLefse.pl exempleLefse_OBS.txt  -stat
     perl  preLefse.pl exemple0.txt -exp 1   -out oxygen.txt
     perl  preLefse.pl exemple0.txt -exp 2   -out body_site.txt
     perl  preLefse.pl exemple0.txt -exp 3   -out subject_id.txt
     perl  preLefse.pl exemple0.txt -del 1:2 -out exemple1.txt
     perl  preLefse.pl exemple1.txt -ins 2   -fic oxygen.txt -out exemple2.txt
     perl  preLefse.pl exemple2.txt -stat
     

Si tout s'est bien passé, vous devriez disposer des fichiers exemple*.* suivants :


      675983 2016-11-04 14:21 exempleLefse_OBS.txt     # original                                    :  931 lignes
      675983 2016-11-04 14:21 exemple0.txt             # copie original                              :  931 lignes
      675263 2016-11-04 14:23 exemple1.txt             # fichier sans les deux premières lignes      :  929 lignes
      675698 2016-11-04 14:23 exemple2.txt             # fichier avec oxygen comme nouvelle ligne 2  :  930 lignes
     

4. Aide en ligne

L'aide en ligne est minimale puisqu'il faut juste donner le nom du fichier à traiter. Par contre, les actions et paramètres doivent être écrits dans le bon ordre, et c'est pourquoi l'aide affiche des exemples d'actions classiques.


     # aide standard
     
     @gH > preLefse
     
      preLefse Management script (gH) version 2.07
     
      MANDATORY PARAMETER MISSING.
     
      Syntax: perl preLefse.pl INPUT_FILE Action Parameter
              where Action    is -exp -ins -del -stat
              and   Parameter is -out -fic
     
      Each action except -stat requires a number or an interval of numbers and the -out parameter.
      Each parameter has to be followed by a file name.
     
      Parameter -fic is required only for the -ins action and has to be found before the -out parameter.
     
      Examples: perl preLefse.pl myDatat.txt -stat
                perl preLefse.pl example.txt -exp 1   -out oxygen.txt
                perl preLefse.pl example.txt -del 1:3 -out example2.txt
                perl preLefse.pl example.txt -ins 1   -fic example3.txt -out example4.txt
     
      Help: perl preLefse.pl -h or perl preLefse.pl --help
     
      The associated help web page is:
     
            http://forge.info.univ-angers.fr/~gh/Metaseed/preLefse.php
     
     
     
     # aide via le paramètre -h ou --help
     
     ~gH > preLefse -h
     
      preLefse Management script (gH) version 2.07
     
      The script preLefse.pl helps to delete or insert lines in a data file for LEfSE analysis.
     
      First give the name of the file to be processed and an action to process:
     
        -stat to check the number of lines and columns.
        -exp  to export (copy) one line or a block of lines to the output file.
        -del  to delete one line or a block of lines.
        -ins  to insert a file at a specific position in the data file.
     
      The number of lines to delete or to export is a single integer such as 3 or an interval line 1:7.
     
      After the action -ins there must a parameter -fic to tell the name of the file that will be inserted.
      For all the actions except -stat, there must a parameter -out to tell where the data should be written.
     
      Examples: perl preLefse.pl myDatat.txt -stat
                perl preLefse.pl example.txt -exp 1   -out oxygen.txt
                perl preLefse.pl example.txt -del 1:3 -out example2.txt
                perl preLefse.pl example.txt -ins 1   -fic example3.txt -out example4.txt
     
      There is a web page that gives more details (in French) just open:
     
            http://forge.info.univ-angers.fr/~gh/Metaseed/preLefse.php
     
     

5. Un exemple détaillé

Imaginez que vous vouliez tester une analyse Lefse avec le données du du site de LEFSE, nommées exempleLefse_OBS.txt. C'est un fichier de 931 lignes et 55 colonnes, pas très lisible directement. L'action -stat de notre script preLefse.pl fournit ces deux nombres et indique aussi le nombre de lignes vides. La moyenne du nombre de colonnes vues avec une décimale, son minimum et son maximum permet éventuellement de détecter des colonnes qui n'auraient pas le même nombre de colonnes.


     $gH > perl preLefse.pl  exempleLefse_OBS.txt -stat
     
       Statistics for the file exempleLefse_OBS.txt:
       931 lines, 55.0 columns; 0 empty lines; min colums: 55, max columns: 55.
     

Ce fichier est structuré dela façon suivante : la ligne 1 contient les indications de classe pour la variable oxygène, la ligne 2 contient les indications de classe sur le lieu corporel (body_site) et la ligne 3 correspond à l'identité de la personne (subject_id). Les 928 autres lignes contiennent les données de comptage. Voici un extrait de fichier :


     oxygen_availability   High_O2    Mid_O2     Low_O2    Mid_O2     Low_O2     Low_O2     High_O2     Mid_O2      High_O2
     body_site             ear        oral       gut       oral       gut        gut        nasal       vagina      skin
     subject_id            158721788  158721788  159146620 159005010  159166850  158742018  159005010   159005010   159005010
     Bacteria                                         0.999994      0.99999       0.99999       0.999984   0.999988   0.999995   0.999966   0.999988   0.999927
     Bacteria|Acidobacteria                           5.0412e-05    8.65194e-05   8.39666e-05   0.000133753   0.000105843   4.42918e-05   0.000514972   9.93365e-05   0.000616591
     Bacteria|Acidobacteria|Acidobacteria_Gp10|Gp10   2.96541e-06   5.08937e-06   4.93921e-06   7.86782e-06   6.22604e-06   2.6054e-06   1.70709e-05   5.84333e-06   3.627e-05
     Bacteria|Acidobacteria|Acidobacteria_Gp11|Gp11   2.96541e-06   5.08937e-06   4.93921e-06   7.86782e-06   6.22604e-06   2.6054e-06   1.70709e-05   5.84333e-06   3.627e-05
     Bacteria|Acidobacteria|Acidobacteria_Gp16|Gp16   2.96541e-06   5.08937e-06   4.93921e-06   7.86782e-06   6.22604e-06   2.6054e-06   1.70709e-05   5.84333e-06   3.627e-05
     Bacteria|Acidobacteria|Acidobacteria_Gp17|Gp17   2.96541e-06   5.08937e-06   4.93921e-06   7.86782e-06   6.22604e-06   2.6054e-06   1.70709e-05   5.84333e-06   3.627e-05
     

Afin de pouvoir utiliser notre script lefse.pl pour une analyse des individus par classe d'oxygène, il faudrait que la ligne 1 corresponde aux individus, que la ligne 2 corresponde à l'oxygène et que la ligne du site n'existe plus. Voici comment faire avec notre script :


     # 1. on exporte la ligne 1 (données de classe d'oygène) dans le fichier oxygen.txt
     #    le fichier original n'est pas modifié
     
     perl  preLefse.pl exempleLefse_OBS.txt -exp 1   -out oxygen.txt
     
     # 2. on supprime les lignes 1 et 2 (respectivement oxygène et site corporel)
     #    le fichier original n'est pas modifié
     #    le fichier de sortie est nommé exemple1.txt
     
     perl  preLefse.pl exempleLefse_OBS.txt -del 1:2 -out exemple1.txt
     
     # 3. on insère le fichier des classes d'oxygène comme nouvelle ligne 2 dans le fichier exemple1.txt
     #    le fichier exemple1.txt n'est pas modifié
     #    le fichier de sortie est nommé exemple2.txt
     
     perl  preLefse.pl exemple1.txt -ins 2 -fic oxygen.txt -out exemple2.txt
     

A titre de vérification, voici un extrait du début du fichier exemple2.txt obtenu 


     subject_id            158721788  158721788  159146620 159005010  159166850  158742018  159005010   159005010   159005010
     oxygen_availability   High_O2    Mid_O2     Low_O2    Mid_O2     Low_O2     Low_O2     High_O2     Mid_O2      High_O2
     Bacteria                                         0.999994      0.99999       0.99999       0.999984   0.999988   0.999995   0.999966   0.999988   0.999927
     Bacteria|Acidobacteria                           5.0412e-05    8.65194e-05   8.39666e-05   0.000133753   0.000105843   4.42918e-05   0.000514972   9.93365e-05   0.000616591
     Bacteria|Acidobacteria|Acidobacteria_Gp10|Gp10   2.96541e-06   5.08937e-06   4.93921e-06   7.86782e-06   6.22604e-06   2.6054e-06   1.70709e-05   5.84333e-06   3.627e-05
     Bacteria|Acidobacteria|Acidobacteria_Gp11|Gp11   2.96541e-06   5.08937e-06   4.93921e-06   7.86782e-06   6.22604e-06   2.6054e-06   1.70709e-05   5.84333e-06   3.627e-05
     Bacteria|Acidobacteria|Acidobacteria_Gp16|Gp16   2.96541e-06   5.08937e-06   4.93921e-06   7.86782e-06   6.22604e-06   2.6054e-06   1.70709e-05   5.84333e-06   3.627e-05
     Bacteria|Acidobacteria|Acidobacteria_Gp17|Gp17   2.96541e-06   5.08937e-06   4.93921e-06   7.86782e-06   6.22604e-06   2.6054e-06   1.70709e-05   5.84333e-06   3.627e-05
     

 

 

retour gH    Retour à la page principale de   (gH)