diff --git a/fr/lecons/compter-exploiter-donnees-unix.md b/fr/lecons/compter-exploiter-donnees-unix.md new file mode 100644 index 000000000..60b94d278 --- /dev/null +++ b/fr/lecons/compter-exploiter-donnees-unix.md @@ -0,0 +1,155 @@ +--- +title: "Compter et exploiter ses donnees de recherche avec Unix" +slug: compter-exploiter-donnees-unix +original: research-data-with-unix +layout: lesson +collection: lessons +date: 2014-09-20 +translation_date: 2025-09-10 +authors: +- James Baker +- Ian Milligan +reviewers: +- M. H. Beals +- Allison Hegel +editors: +- Adam Crymble +translator: +- Julie Zeisser +translation-editor: +- Émilien Schultz +translation-reviewer: +- Raphaelle Krummeich +- Aymeric Luneau +difficulty: 2 +review-ticket: https://github.com/programminghistorian/ph-submissions/issues/649 +activity: transforming +topics: [data-manipulation] +abstract: Cette 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. +avatar_alt: Illustration en noir et blanc d'un ouvrier en train de verser du minerai dans une machine. +doi: 10.46430/phfr0036 +--- + +{% include toc.html %} + +## 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](/fr/lecons/preserver-ses-donnees-de-recherche) de James Baker et [Introduction à l'interface en ligne de commande Bash et Zsh](/fr/lecons/intro-a-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](/fr/lecons/preserver-ses-donnees-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)](https://gitforwindows.org/). Des instructions sont disponibles en anglais sur [Open Hatch](https://web.archive.org/web/20190318191709/https://openhatch.org/missions/windows-setup/install-git-bash), ou dans [cette vidéo de Docstring en français](https://www.docstring.fr/formations/installer-et-configurer-python/installation-de-git-bash-1220/), 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](/fr/lecons/intro-a-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](https://doi.org/10.6084/m9.figshare.1172094). 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](http://www.7-zip.org/). 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. + +
+Remarque (NDLT) : les noms de l'archive ZIP peuvent varier en fonction de la méthode de décompression que vous avez utilisée, et le nom du dossier de travail peut ressembler plutôt à 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](https://perma.cc/UD4T-JF3X) 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). + +
+Remarque : dans les fichiers CSV, les unités de données (ou cellules) sont séparées par des virgules (d'où le nom du format « comma-separated-values », signifiant « valeurs séparées par des virgules ») ou des points-virgules dans les localisations françaises des logiciels ; tandis que dans les fichiers TSV, ces unités sont séparées par des tabulations. Ces deux formats peuvent être lus par un simple éditeur de texte ou bien par un tableur, tels que LibreOffice Calc ou Microsoft. +
+ +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](/fr/lecons/intro-a-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`. + +
+Remarque : nous conseillons aux personnes utilisant macOS ou Linux de remplacer l'option -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. + +
+Remarque : comme il y a une grande quantité de données à afficher, si vous n'avez pas la patience d'attendre que le processus se termine, vous pouvez annuler la commande en appuyant sur 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. + +
+Remarque (NDLT) : les lettres accentuées sont considérées comme des caractères à part entière. Il vous faudrait donc refaire la manipulation en utilisant é 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`. + +
+Remarque : la commande 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` avec `grep` 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](https://perma.cc/LQG7-YYXC) » (15 juin 2013) +- William Turkel, « [Pattern Matching and Permuted Term Indexing with Command Line Tools in Linux](https://perma.cc/M2YN-AB7L) » (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 + +[^1]: 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](https://sites.uclouvain.be/SystInfo/notes/Theorie/shell/shell.html#id45). + +[^2]: Ray, Deborah S., and Eric J. Ray. _Unix and Linux: Visual QuickStart Guide_. 5th ed. Peachpit Press, 2014.