Contrôle de version avec Git pour les professionnels de l’analyse

Statistique Canada

Le déroulement des opérations en analyse et science des données est plus complexe que jamais : un plus grand nombre de données doivent être analysées, le prix des ressources informatiques continue à diminuer et on assiste à un afflux de disponibilité de logiciels libres.

Pour ces raisons ainsi que d'autres, un nombre significatif de professionnels de l'analyse sans formation en informatique classique se sont tournés vers la programmation. Ces progrès ont permis aux professionnels de l'analyse d'étendre la portée de leur travail, d'accomplir de nouvelles tâches et d'utiliser ces outils pour en améliorer la valeur.

Toutefois, cette rapide adoption de la programmation par des professionnels de l'analyse a introduit de nouvelles complexités et en a exacerbé d'anciennes. Dans le déroulement des opérations de l'informatique classique (comme le développement de logiciels), de nombreux outils et techniques ont rigoureusement été développés au cours des décennies pour s'adapter à cette complexité.

À mesure qu'un plus grand nombre de professionnels de l'analyse intègrent la programmation et l'utilisation de logiciels libres à leur travail, l'adoption de certaines pratiques exemplaires de l'informatique peut également leur être particulièrement bénéfique en leur permettant de gérer les analyses et le déroulement d'opérations complexes.

Quand les professionnels de l'analyse devraient-ils utiliser des outils et techniques pour gérer la complexité? Prenons l'exemple de l'enjeu du contrôle de version d'un code source. En particulier, comment plusieurs professionnels de l'analyse peuvent-ils travailler sur un même code de base sans entrer en conflit et comment peuvent-ils rapidement revenir à des versions antérieures du code?

Utilisation de Git pour le contrôle de version

Même sans connaître les détails de Git, le scénario suivant démontrera les avantages d'un tel outil.

Imaginez qu'une petite équipe de professionnels de l'analyse utilise Git (en anglais uniquement) (puissant outil généralement utilisé en génie logiciel) et GCCode (instance interne de GitLab (en anglais uniquement) du gouvernement du Canada).

Les trois professionnels de l'analyse (Jane, Jean et Janice) créent un rapport mensuel faisant intervenir la production de statistiques descriptives et l'estimation de certains paramètres de modèle. Le code qu'ils utilisent pour mettre en œuvre cette analyse est rédigé en Python et les ensembles de données sur lesquels ils effectuent leur analyse sont enregistrés à un emplacement de fichiers partagés auquel ils ont tous accès. Ils doivent produire le rapport le jour où le nouvel ensemble de données est reçu et, ensuite, l'envoyer à leur gestion supérieure pour examen.

L'équipe utilise GCCode pour gérer de manière centrale leur code source et la documentation rédigée en gitlab flavoured markdown (article en anglais). Ils utilisent une version simplifiée d'un modèle de ramification git efficace (article en anglais) pour éviter les conflits lorsqu'ils acheminent individuellement le code vers le répertoire. L'équipe utilise une approche d'examen interne pour les propositions de révision (PR); ce qui signifie qu'une personne autre que celle ayant soumis la PR doit examiner et approuver les modifications apportées dans la PR.

Ce mois-ci est particulier; sans grand préavis, le superviseur informe l'équipe d'un changement de format dans lequel l'un des ensembles de données est reçu. Ce changement de format est important et nécessite des modifications importantes au code de base de l'équipe. En particulier, une fois les modifications apportées, le code prendra en charge le prétraitement des données au nouveau format, mais ne prendra plus en charge l'ancien format.

Les trois employés se répartissent rapidement les responsabilités pour intégrer les modifications nécessaires au code de base :

  • Jane rédigera le nouveau code nécessaire pour prendre en charge le nouveau format de données;
  • Jean rédigera les tests automatisés qui vérifieront la justesse du code de Jane;
  • Janice mettra à jour la documentation pour décrire les changements du format des données.

L'équipe a employé de bonnes pratiques de contrôle de version; la branche principale de leur répertoire central sur GCCode est à jour et applique correctement l'analyse nécessaire pour produire les rapports des mois précédents.

Jane, Jean et Janice commencent par l'extraction à partir de leur répertoire sur GCCode pour s'assurer que chacun de leur répertoire local est à jour. Une fois cette étape effectuée, ils extraient chacun une nouvelle branche de la branche principale. Du fait de la taille réduite de l'équipe, ils choisissent d'omettre la majeure partie des données supplémentaires présentées dans l'article un modèle de ramification efficace (article en anglais) et extraient uniquement leurs propres branches directement de la branche principale.

Description - Figure 1 Exemple de trois employés interagissant avec un répertoire Git. Il y a une boîte en haut du diagramme représentant un répertoire distant. En dessous, il y a trois boîtes côte à côte représentant les répertoires locaux de chacun des trois employés. Pour chaque boîte, il y a une figure montrant la branche de l'employé provenant de la branche principale, qui est représentée par une série de cercles, où chaque cercle est une sauvergarde sur la branche de l'employé. Les flèches pointant vers et depuis les répertoires locaux et distants montrent que les employés envoient et retirent des informations sur le répertoire distant pour que leurs modifications soient synchronisées avec celui-ci. Enfin, le répertoire distant comporte une figure montrant les trois branches d'employés hors de la branche principale réunies dans un seul diagramme, ce qui indique que le travail des trois employés se déroule en parallèle et que le travail de chaque employé n'entre pas en conflit avec celui des autres.

Les trois employés travaillent à leur poste de travail local, validant leurs modifications au fur et à mesure tout en suivant de bonnes pratiques de validation (article en anglais). À la fin de la journée de travail, ils archivent leurs branches sur le répertoire distant. Le répertoire distant comprend alors trois nouvelles branches présentant chacune plusieurs sauvegardes différentes de la branche principale. Chacun désigne l'un des deux autres membres de l'équipe comme pair devant procéder à l'examen et, le lendemain, l'équipe approuve les changements et fusionne la branche de chaque membre à la principale.

Description - Figure 2 Exemple de trois branches qui fusionnent à nouveau dans la branche principale par le biais d'une proposition de révision. Il y a un cercle représentant la sauvegarde la plus récente de la branche principale au moment où chacune des branches des trois employés est créée à partir de la branche principale. Il y a maintenant trois branches sur lesquelles chaque employé a travaillé en parallèle pour mettre en œuvre son flux de travail, sans entrer en conflit avec le travail des autres. Chaque branche a plusieurs cercles consécutifs représentant les sauvegardes effectuées. À droite de la figure, les trois branches parallèles convergent vers un deuxième cercle représentant le point de départ de la nouvelle branche principale après la fusion des trois branches des employés.

Le jour où le rapport doit être généré, ils exécutent le nouveau code, génèrent le rapport avec succès et l'envoient à leur haute direction en ayant utilisé les nouvelles données.

Plus tard ce jour-là, ils reçoivent une demande urgente de reproduire les rapports des trois mois précédents à des fins de vérification. Du fait du changement de code pour prendre en charge le nouveau format de données, le code actuel n'est plus compatible avec les ensembles de données antérieurs.

Git à la rescousse!

Heureusement, l'équipe utilise Git pour gérer son code de base. Parce que l'équipe utilise Git, elle peut effectuer une extraction selon la sauvegarde précédant l'application des changements et retourner temporairement le dossier de travail à l'état précédant changements. Maintenant que le dossier a été modifié, l'équipe peut produire rétroactivement les trois rapports à partir des données des trois mois précédents. Enfin, elle peut ensuite procéder à une extraction selon la sauvegarde la plus récente de la branche principale, pour pouvoir utiliser le nouveau code de base maintenant adapté au changement de format.

Même si la situation décrite ci-dessus correspond à un déroulement d'opérations d'analyse, l'équipe a pu utiliser Git pour éviter une situation qui aurait, sans cela, été très gênante et chronophage.

En savoir davantage sur Git

Votre travail tirerait-il profit de l'utilisation des pratiques décrites ci-dessus? Vous ne connaissez pas Git? Voici quelques ressources pour vous lancer :

  • La première partie du tutoriel en anglais Fonctionnement de Git (en anglais uniquement) d'IBM fournit un modèle abstrait du fonctionnement de Git et présente bon nombre des termes techniques relatifs à Git et leur lien avec ce modèle.
  • L'article en anglais un modèle de ramification efficace (en anglais uniquement) fournit un guide sur la façon de réaliser des travaux de programmation en collaboration, à l'aide d'un modèle ramifié et d'un cadre de travail pouvant être ajusté à des besoins particuliers.
  • Le Manuel de Git fournit un examen très détaillé du processus de fonctionnement de Git. Il est divisé en sections, permettant ainsi de passer en revue les portions les plus pertinentes pour votre cas d'utilisation.

Quelles sont les étapes suivantes?

Appliquer le contrôle de version à un code source n'est qu'une des nombreuses pratiques inspirées de l'informatique pouvant être appliquées au déroulement des opérations de l'analyse et de la science des données.

Outre le versionnage du code source, de nombreux professionnels de la science des données et de l'analyse peuvent tirer profit du versionnage des données (voir l'article en anglais Contrôle de version de données pour une application de ce concept) ou du versionnage de modèles (p. ex. voir l'article en anglais Versionnage de modèle MLFlow).

Outre le versionnage, les professionnels en analyse peuvent avoir recours à de nombreuses autres pratiques informatiques comme des essais automatisés (article en anglais), respecter des normes de codage (p. ex. l'article en anglais guide de style PEP 8 de Python) et des outils de gestion d'environnements et de progiciels (p. ex. l'article en anglais pip et environnements virtuels dans Python).

Ces ressources sont d'excellentes sources pour commencer à explorer la façon dont des pratiques informatiques de gestion de la complexité peuvent être utilisées pour améliorer le déroulement des opérations d'analyse et de science des données!

Date de modification :