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
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.0000007Si 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.plVoici 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 -statSi 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 lignes4. 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.php5. 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-05Afin 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.txtA 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 à la page principale de (gH)