Contenus
- Introduction
- Logiciel et configuration
- Décompte de fichiers
- Exploration des fichiers
- Conclusion
- Notes de fin
Introduction
La présente leçon montre comment les données de la recherche, lorsqu’elles sont classées de manière claire et prévisible, peuvent être décomptées et explorées grâce au shell Unix.1 Cette leçon s’inscrit dans la continuité de deux autres leçons, Préserver ses données de recherche de James Baker et Introduction à l’interface en ligne de commande Bash et Zsh de James Baker et Ian Milligan, mais il est tout à fait possible de la lire de manière autonome ou en guise de rappel, selon votre aisance avec le shell Unix.
Après avoir amoncelé des données pour un projet de recherche spécifique, un chercheur ou une chercheuse pourra les réutiliser pour répondre à de nouvelles questions dans le cadre d’un projet ultérieur. Si ces données sont réparties dans plusieurs fichiers – par exemple, un jeu de données tabulaires, un ensemble de textes transcrits et une collection d’images – des commandes Unix simples permettent de les fouiller et d’effectuer des décomptes.
Le shell Unix vous donne accès à un panel de commandes puissantes qui pourraient révolutionner votre façon de compter et d’explorer vos données de recherche. Même si nous ne ferons qu’effleurer la surface de toutes les possibilités qu’offre le shell Unix, cette leçon vous présentera un ensemble de commandes utilisées pour décompter et fouiller des données tabulaires. Grâce à ces quelques commandes simples, vous serez en mesure d’accomplir des tâches impossibles à réaliser avec LibreOffice Calc, Microsoft Excel, ou d’autres tableurs similaires. En outre, l’usage de ces commandes peut être facilement étendu aux données non tabulaires.
Cette leçon démontre aussi que, bien souvent, les options à votre disposition pour manipuler, décompter et explorer les données dépendent tout autant de la quantité de métadonnées, c’est-à-dire le texte descriptif, contenues dans les noms des fichiers exploités que de la gamme des commandes Unix que vous aurez appris à utiliser. Ainsi, bien que ce ne soit pas un prérequis pour travailler avec le shell Unix, prendre le temps d’organiser vos données de recherche et de nommer vos fichiers selon un schéma cohérent et prévisible constitue indéniablement une étape cruciale pour tirer le meilleur parti des commandes Unix et pouvoir compter et fouiller vos données de recherche. Sur l’importance de prendre le temps de rendre vos données prévisibles et cohérentes au-delà des seules questions de conservation, voir l’article Préserver ses données de recherche.
Logiciel et configuration
Si vous utilisez Windows, vous devrez installer Git Bash, dont vous pouvez télécharger le logiciel d’installation le plus récent sur la page du projet Git for Windows (en anglais). Des instructions sont disponibles en anglais sur Open Hatch, ou dans cette vidéo de Docstring en français, de 2 min à 4 min 30.
Si vous utilisez macOS ou Linux, vous devrez utiliser votre terminal pour suivre cette leçon, comme décrit dans Introduction à l’interface en ligne de commande Bash et Zsh.
Cette leçon a été écrite en 2014, pour Git Bash 1.9.0 et le système d’exploitation Windows 7. Les chemins d’accès correspondant aux systèmes macOS/Linux ont été inclus aussi souvent que possible. Ceux correspondant à Windows ont été mis à jour dans cette traduction pour une utilisation avec Git Bash 2.49.0. Néanmoins, comme les commandes et les options peuvent varier légèrement selon les systèmes d’exploitation, les personnes utilisant macOS/Linux trouveront peut-être utile de se référer à l’ouvrage (en anglais) de Deborah S. Ray et Eric J. Ray, Unix and Linux: Visual Quickstart Guide,2 qui traite des questions d’interopérabilité de manière plus détaillée.
Vous trouverez les fichiers utilisés dans cette leçon sur Figshare. Les données servant de support à la leçon comprennent les métadonnées d’articles de revues se trouvant dans la catégorie « Histoire » de la base de données ESTAR de la British Library. Ces données sont diffusées sous la licence libre de droits CC0.
Téléchargez et enregistrez l’archive ZIP sur votre ordinateur, puis décompressez-la. Si vous n’avez pas de logiciel par défaut prenant en charge le format ZIP, nous vous conseillons d’utiliser 7-zip. Sur Windows, nous recommandons de décompresser le dossier fourni à l’intérieur de votre répertoire Utilisateur, de sorte que vos fichiers se trouvent dans c/Users/NOM_UTILISATEUR/proghist/
. Bien sûr, n’importe quel emplacement fera tout aussi bien l’affaire, cependant vous devrez probablement adapter vos commandes par rapport à celles présentées tout au long de la leçon si vous choisissez un autre répertoire. De même, nous conseillons de décompresser les fichiers dans le répertoire Utilisateur, de sorte à les retrouver dans /user/NOM_UTILISATEUR/proghist/
sur macOS ou /home/NOM_UTILISATEUR/proghist/
sur Linux. Dans tous les cas, l’objectif est qu’en ouvrant une nouvelle fenêtre terminal, nous n’ayez qu’à taper cd proghist
pour vous déplacer directement dans le bon dossier.
ProgHistcountingminingunixdata
Dans ce cas, vous avez deux possibilités : soit renommer le dossier proghist
et taper cd proghist
dans le terminal ; soit taper cd ProgHistcoutingminingunixdata
(ou le nom de votre archive ZIP) dans le terminal pour vous trouver dans le bon répertoire, à chaque fois que cette leçon vous demandera de taper cd proghist
. Notez également que le terminal tient compte des majuscules et des minuscules.
Décompte de fichiers
Pour commencer cette leçon, vous allez compter des éléments contenus dans les fichiers à l’aide du shell Unix. Celui-ci peut être utilisé pour générer rapidement des comptages à partir de plusieurs fichiers, ce qui est difficile à réaliser à l’aide de l’interface graphique (« graphical user interface » ou GUI) des suites bureautiques classiques.
Dans Unix, la commande wc
permet de réaliser un comptage dans le contenu d’un ou plusieurs fichiers.
Ouvrez votre shell Unix et placez-vous dans le répertoire qui contient les données que nous allons analyser, le sous-dossier data
du dossier proghist
. Souvenez-vous que vous pouvez vérifier à tout moment où vous vous trouvez dans l’arborescence des répertoires en utilisant la commande pwd
, et que vous pouvez vous déplacer où vous voulez grâce à la commande cd
. Par ailleurs, la structure des répertoires est légèrement différente entre Windws, macOS et Linux : dans le premier cas, le répertoire a un format de type c/Users/NOM_UTILISATEUR/proghist/data
; dans le second, de type /users/NOM_UTILISATEUR/proghist/data
; et de type /home/NOM_UTILISATEUR/proghist/data
dans le dernier.
Tapez ls
et appuyez sur la touche Entrée. Cette commande affiche dans le terminal une liste contenant deux fichiers et un sous-dossier.
Les fichiers de ce répertoire sont un jeu de données 2014-01_JA.csv
qui contient des métadonnées d’articles de revues, et un fichier nommé 2014-01_JA.txt
qui contient de la documentation concernant le fichier 2014-01_JA.csv
.
Le sous-dossier est nommé derived_data
et contient quatre fichiers TSV dérivés de 2014-01_JA.csv
. Chacun d’eux contient toutes les données résultant d’une recherche effectuée dans le champ « titre » de 2014-01_JA.csv
sur des mots-clés, comme africa ou america. Le dossier derived_data
contient également un sous-dossier nommé results
que vous pouvez renommer en français, si vous le souhaitez, en entrant la commande mv results resultats
et en pressant sur Entrée (nous déconseillons l’usage de caractères accentués dans les noms de fichier).
Avant de commencer à travailler avec ces fichiers, déplacez-vous dans le dossier où ils sont rangés. Allez dans c/Users/NOM_UTILISATEUR/proghist/data/derived_data
sur Windows, /users/NOM_UTILISATEUR/proghist/data/derived_data
sur macOS, ou /home/NOM_UTILISATEUR/proghist/data/derived_data
sur Linux.
Une fois que vous vous trouvez dans le répertoire derived_data
, vous pouvez compter les éléments contenus dans les fichiers.
La commande Unix permettant de compter est wc
. Tapez wc -w 2014-01-31_JA_africa.tsv
et appuyez sur Entrée. L’option -w
associée à wc
ordonne à l’ordinateur d’afficher dans le terminal le nombre de mots que contient un fichier ainsi que le nom du fichier qui a fait l’objet du comptage.
Comme l’explique la leçon Introduction à l’interface en ligne de commande Bash et Zsh, les options telles que -w
jouent un rôle essentiel pour tirer le meilleur parti du shell Unix, car elles vous permettent d’affiner les commandes.
Si votre recherche porte davantage sur le nombre d’entrées (ou de lignes) que sur le nombre de mots, vous pouvez utiliser l’option de décompte des lignes. Tapez wc -l 2014-01-31_JA_africa.tsv
et appuyez sur Entrée. L’option -l
associée à la commande wc
affiche le nombre de lignes que contient un fichier ainsi que le nom du fichier qui a fait l’objet du comptage.
Enfin, tapez wc -c 2014-01-31_JA_africa.tsv
et appuyez sur Entrée. Ici, nous avons utilisé l’option -c
en association avec la commande wc
pour afficher le nombre de caractères contenus dans 2014-01-31_JA_africa.tsv
.
-c
par -m
.
Avec ces trois options, l’intérêt le plus évident de la commande wc
pour des chercheurs et des chercheuses est donc de comparer rapidement la forme des sources numériques : le nombre de mots par page dans un livre, la distribution des caractères par page au sein d’une collection de journaux, la longueur moyenne des vers utilisés par les poètes, etc. Vous pouvez également utiliser wc
avec des combinaisons de jokers et d’options afin de créer des requêtes plus complexes. Tapez wc -l 2014-01-31_JA_a*.tsv
, puis appuyez sur Entrée. Cette commande affiche le nombre de lignes pour les deux fichiers 014-01-31_JA_africa.tsv
et 2014-01-31_JA_america.tsv
, ce qui vous permet de comparer facilement ces deux jeux de données. Bien sûr, il peut être plus rapide de comparer le nombre de lignes des deux documents directement dans LibreOffice Calc, Microsoft Excel ou d’autres tableurs similaires ; mais, lorsque vous souhaitez comparer le nombre de lignes entre des dizaines, des centaines ou des milliers de documents, le shell Unix présente l’avantage indéniable de la rapidité.
En outre, comme la taille de nos jeux de données ne cesse d’augmenter, vous pouvez utiliser le shell Unix pour ne pas avoir à recopier ces totaux à la main, via différentes méthodes de capture d’écran ou de copier-coller. L’opérateur de redirection >
vous permet en effet d’exporter directement les résultats de votre requête dans un nouveau fichier. Tapez wc -l 2014-01-31_JA_a*.tsv > resultats/2014-01-31_JA_a_wc.txt
et appuyez sur Entrée. Cette commande exécute la même requête que précédemment mais, au lieu d’afficher les résultats dans le terminal, elle les enregistre en créant le fichier 2014-01-31_JA_a_wc.txt
. Écrire resultats/
avant le nom du fichier .txt
permet de le placer directement dans le sous-dossier resultats
. Pour le vérifier, déplacez-vous dans le sous-dossier resultats
, appuyez sur Entrée, tapez ls
et appuyez à nouveau sur Entrée pour voir le fichier listé dans c/Users/NOM_UTILISATEUR/proghist/data/derived_data/resultats
sur Windows, /users/NOM_UTILISATEUR/proghist/data/derived_data/resultats
sur macOS ou /home/NOM_UTILISATEUR/proghist/data/derived_data/resultats
sur Linux.
Exploration des fichiers
Le shell Unix permet de faire beaucoup d’autres choses que compter les mots, les caractères ou les lignes à l’intérieur d’un fichier. La commande grep
(abréviation de l’anglais « global regular expression print ») permet de rechercher des chaînes de caractères particulières dans plusieurs fichiers, bien plus rapidement que ce que vous pourriez faire via l’interface graphique des différents systèmes d’exploitation ou suites bureautiques. De plus, associée à l’opérateur >
, la commande grep
devient un puissant outil de recherche, que vous pouvez utiliser pour explorer vos données à la recherche de caractéristiques ou de grappes de mots à travers différents documents, et exporter ces données dans un nouveau fichier. Le champ des possibilités est infini et n’est limité que par votre imagination, la forme de vos données et, lorsque vous travaillez avec des milliers ou des millions de fichiers, la capacité de traitement dont vous disposez sur votre machine.
Pour commencer à utiliser grep
, déplacez-vous d’abord dans le dossier derived_data
(avec cd ..
). Une fois que vous y êtes, tapez grep 1999 *.tsv
et appuyez sur Entrée. Cette requête explore tous les fichiers du répertoire qui correspondent aux critères spécifiés (ici, les fichiers .tsv
) à la recherche d’occurrences de la chaîne de caractères, ou groupe de caractères, « 1999 ». Elle les affiche ensuite dans le terminal.
ctrl+c
. Notez que ctrl+c
permet d'annuler n'importe quelle commande dans un shell Unix.
Une fois l’opération terminée, appuyez une fois sur la touche flèche du haut pour revenir à la dernière commande exécutée. Changez ensuite grep 1999 *.tsv
en grep -c 1999 *.tsv
et appuyez sur Entrée. Votre terminal affiche maintenant le nombre d’occurrences de la chaîne de caractères « 1999 » dans chaque fichier TSV. Reprenez la commande précédente et modifiez-la de la manière suivante : grep -c 1999 2014-01-31_JA_*.tsv > resultats/2014-01-31_JA_1999.txt
. Appuyez sur Entrée. Cette requête recherche les occurrences de la chaîne de caractères « 1999 » dans tous les documents correspondant aux critères définis et les enregistre dans un fichier 2014-01-31_JA_1999.txt
que vous trouverez dans le sous-dossier resultats
.
Les chaînes de caractères ne doivent pas obligatoirement être des chiffres. grep -c revolution 2014-01-31_JA_america.tsv 2014-02-02_JA_britain.tsv
, par exemple, compte les occurrences de la chaîne de caractères « revolution » au sein des fichiers spécifiés et en affiche le nombre dans le shell. Lancez la commande, puis modifiez-la comme suit : grep -ci revolution 2014-01-31_JA_america.tsv 2014-02-02_JA_britain.tsv
. Cette dernière commande réitère la requête mais en incluant une recherche non sensible à la casse, c’est-à-dire en incluant les occurrences à la fois de « revolution » et de « Revolution ». Vous pouvez alors remarquer que les décomptes ont été multipliés par plus de 30 pour les titres d’articles contenant le mot clé « revolution ». Comme précédemment, reprenez la dernière commande et ajoutez > resultats
, suivi d’un nom de fichier (dans l’idéal, au format TXT) pour sauvegarder les résultats dans un fichier.
é
au lieu de e
pour trouver les éventuelles occurrences de « révolution » ou « Révolution » (il n'y en a pas dans notre corpus).
Vous pouvez également utiliser grep
pour créer des sous-ensembles de données tabulaires. Tapez grep -i revolution 2014-01-31_JA_america.tsv 2014-02-02_JA_britain.tsv > ANNÉE-MOIS-JOUR_JA_america_britain_i_revolution.tsv
(où ANNÉE-MOIS-JOUR
correspond à la date à laquelle vous suivez cette leçon) et appuyez sur Entrée. Cette commande effectue une recherche dans les deux fichiers spécifiés et exporte les lignes contenant le mot « revolution » (sans tenir compte de la casse) dans le fichier TSV spécifié.
Les données n’ont pas été sauvegardées dans le répertoire resultats
parce qu’il ne s’agit pas d’un résultat à proprement parler, mais de données dérivées. En fonction de votre projet de recherche, il peut être plus pertinent d’enregistrer ces données dans un autre sous-dossier. Pour l’instant, jetez un coup d’œil à ce fichier pour en vérifier le contenu, puis, lorsque vous avez terminé, supprimez-le en utilisant la commande rm
.
rm
étant très puissante, il faut l'utiliser avec précaution. Vous pouvez lire les instructions de la leçon Introduction à l'interface en ligne de commande Bash et Zsh pour savoir comment utiliser cette commande correctement.
Enfin, vous pouvez utiliser une autre option, -v
, pour exclure des éléments de vos données lorsque vous utilisez la commande grep
. Essayez en tapant grep -iv revolution 2014*_JA_a*.tsv > 2014_JA_iv_revolution.csv
puis Entrée. Cette requête effectue une recherche dans les fichiers spécifiés (trois au total), et exporte toutes les lignes qui ne contiennent pas « revolution » ou « Revolution » dans c/Users/NOM_UTILISATEUR/proghist/data/derived_data/2014_JA_iv_revolution.csv
(ou ~/proghist/data/derived_data/2014_JA_iv_revolution.csv
sur macOS/Linux).
Remarquez ici que vous venez de convertir vos données d’un format à un autre : de TSV à CSV. Ce type de transformation entraîne souvent une perte de la structure des données. Vous pourrez le constater par vous-même si vous lancez la commande grep -iv revolution 2014*_JA_a*.tsv > 2014_JA_iv_revolution.tsv
et ouvrez ensuite les deux fichiers CSV et TSV dans Microsoft Excel. Vous verrez une différence dans la constitution des colonnes entre les deux fichiers. Certains programmes réussissent mieux que d’autres à compenser cette perte de données, il se peut donc que vous ne constatiez aucune différence d’affichage entre les fichiers CSV et TSV si vous utilisez un logiciel différent, tel que LibreOffice Calc, ou si vous travaillez dans un autre environnement que Microsoft Windows.
Synthèse
Dans le shell Unix, vous savez maintenant :
- Utiliser la commande
mv
pour renommer un dossier ou un fichier - Utiliser la commande
wc
avec les options-w
et-l
pour compter les mots et les lignes dans un fichier ou un ensemble de fichiers - Utiliser l’opérateur
>
et la structure de redirection des résultats> sous-répertoire/nom_de_fichier
pour les enregistrer dans un sous-dossier - Utiliser la commande
grep
pour rechercher les occurrences d’une chaîne de caractères - Utiliser l’option
-c
avecgrep
pour compter les occurrences d’une chaîne de caractères, l’option-i
pour effectuer une recherche de chaîne de caractères non sensible à la casse, et l’option-v
pour exclure une chaîne de caractères des résultats - Combiner ces commandes et options pour créer des requêtes complexes, d’une façon qui laisse entrevoir tout le potentiel du shell Unix pour compter et explorer vos données de recherche ou pour vos projets de recherche
Conclusion
Dans cette leçon, nous avons appris à maîtriser quelques bases du comptage de fichier, à effectuer des recherches de chaînes de caractères courantes dans les données de recherche et à en sauvegarder les résultats et données dérivées. Bien que cette leçon se concentre sur l’utilisation du shell Unix pour compter et explorer des données tabulaires, ces procédés peuvent aisément être étendus à du texte libre. À ce titre, nous recommandons deux guides (en anglais) écrits par William Turkel :
- William Turkel, « Basic Text Analysis with Command Line Tools in Linux » (15 juin 2013)
- William Turkel, « Pattern Matching and Permuted Term Indexing with Command Line Tools in Linux » (20 juin 2013)
Ainsi que le suggèrent ces deux recommandations, la présente leçon ne fait qu’effleurer la surface des possibilités offertes par l’environnement du shell Unix. Nous espérons toutefois que cette leçon vous aura fourni un aperçu suffisant pour vous donner envie d’approfondir le sujet et de bricoler de manière productive.
Bien souvent, le plein potentiel de ces outils peut n’émerger qu’en mobilisant ces compétences dans un véritable projet de recherche. Mais une fois que vos recherches se seront développées et, avec elles, vos données de recherche, savoir manipuler, compter et explorer des milliers de fichiers s’avérera extrêmement utile. En effet, si vous décidez d’approfondir cette leçon et d’étudier plus avant le shell Unix, vous découvrirez que même une vaste collection de fichiers ne contenant aucune donnée alpha-numérique, comme les images, peut être facilement triée, sélectionnée et interrogée avec le shell Unix.
Notes de fin
-
NDLT : cette leçon présente des commandes du shell Unix bash qui sont communes à la plupart des autres shells Unix. L’université de Louvain donne quelques explications utiles concernant les différents shells Unix. ↩
-
Ray, Deborah S., and Eric J. Ray. Unix and Linux: Visual QuickStart Guide. 5th ed. Peachpit Press, 2014. ↩