Le coin des enseignants#

Dépôt pour la préparation du matériel pédagogique du cours «Introduction à la Science des données», L1 Math-Info, Faculté des Sciences d’Orsay, Université Paris Sud.

Présentation du cours#

Public visé#

Ce cours s’adresse à un public assez hétérogène, avec des étudiants programmant depuis toujours et d’autre découvrant l’informatique depuis le début de l’année. Ils ont ou ont eu comme cours :

Au S1 :

  • Programmation Impérative (C++)

  • Introduction à l’informatique (web, Python, shell, …) Au S2 :

  • Programmation Modulaire (C++)

  • Algorithmes et Structures de données (C++)

Séances, salles#

  • 9 semaines avec 1h de cours et 2h de TP

  • Voir l”espace de cours pour les annonces, le forum d’aide, le planning, la répartition, les horaires, les salles, le carnet de notes

Modalités des TP et rôle des enseignants#

Pendant les TP les étudiants travaillent chacun à son rythme, individuellement ou en binôme, sur le sujet qui leur est proposé cette semaine là. Dans la pratique, le sujet prend la forme d’une collection de feuilles de travail Jupyter conçues pour faciliter leur travail en autonomie. Une partie de leur travail est corrigée automatiquement et des corrections seront postées au fur et à mesure. Le rôle du chargé de TP est donc de les accompagner, principalement sous la forme d’aide individuelle, avec occasionnellement une prise de parole pour tous (présenter le TP, donner une explication). Dans la pratique, c’est répondre à quelques questions occasionnelles d’étudiants avancés, débloquer des petits bugs, et consacrer la grande majorité de son temps à suivre de près le travail des plus fragiles pour les aider et les remotiver.

Les chargés de TP prennent en plus en charge:

  • De la correction manuelle des TPs et projets des étudiants

  • De l’aide à la préparation du matériel pédagogique

  • De l’aide pour répondre collaborativement aux questions des étudiants en s’abonnant sur le forum d’aide sur eCampus

  • Les soutenances de projet en fin de semestre

Règles sanitaires en présentiel#

  • (2021-2022) Masques correctement portés obligatoires

  • (2020-2021) Désinfection des claviers et souris (avant et) après la séance

  • Aération, aération, aération Nautilus A&B: ouvrir les issues de secours

  • Nautilus B: environ une trentaine + quelques uns avec leurs portables sur les tables

  • Nautilus A: très mal aéré; chaque fois que possible, envoyer des étudiants dans le Nautilus B

  • (2021-2022) Les étudiants sont coopératifs, des petits rappels à l’ordre fermes mais souriant suffisent en général. Mais le cas échéant, en cas de non respect après salves d’avertissement, vous avez le droit – le devoir – de les virer immédiatement.

Trucs et astuces en distanciel (2020-2021)#

  • Faire un sondage pour que les étudiants indiquent où ils en sont (je suis un peu perdu / Connexion a JupyterHub et téléchargement du sujet / Feuille jupyter / feuille Python / feuilles suivantes)

  • Faire des petits groupes

  • Se concentrer sur les étudiants les plus fragiles.

Bilans de fin de séance#

Pour chaque séance, il y aura un ticket sur GitLab où nous demanderons à chacun de faire un petit bilan en quelques lignes du déroulement de sa séance. Pour exemple, voici celui de la semaine 1 en 2020-2021

Logistique, infrastructure#

Enseigner de l’informatique, comme dans ce cours, c’est intrinsèquement une collaboration massive sur du code prenant des formes variées. Aussi est-il naturel qu’une forge logicielle puisse rendre de nombreux services; de fait, GitLab sera au cœur de notre infrastructure. Mais n’allons pas trop vite en besogne.

Voici les différents éléments de notre infrastructure. Les mêmes éléments sont utilisés par les étudiants pour d’autres cours; ils sont rodés.

Espace de cours sur eCampus#

Cet espace nous sert:

  • comme page d’accueil

  • pour communiquer avec les étudiants: annonces, forum d’aide

  • pour les quizz

  • pour la gestion des notes (carnet de notes)

Accès aux logiciels, salles de TP (virtuelles)#

Nous utiliserons les outils usuels de science des données en Python: Numpy, Pandas, Scikit-Learn, …, le tout sous Jupyter.

Les étudiants (et enseignants!) accèdent à l’environnement logiciel requis soit sur les machines des salles de TP, soit en ligne via le service JupyterHub@Paris-Saclay, soit en les installant sur leur machine (par conda ou Docker: instructions). Cet environnement contient aussi les jeux de données.

Gestion des devoirs#

Pour télécharger et soumettre leur travail, les étudiants utilisent un script course.py dans la «salle de TP virtuelle».

Prise en main

Suivez les instructions de la case départ pour faire le début du TP de la Semaine 1 et prendre cela en main avec le tableau de bord. Lorsque vous soumettez votre travail, choisissez AuditeursLibres comme groupe. Recommencez en ligne de commande (voir les instructions avancées).

Indication

Pour en savoir plus

Si vous observez les messages en détail, vous constaterez que, derrière la scène, la soumission et la correction automatique des devoirs se fait via la forge GitLab, façon GitHub ClassRoom: chaque devoir est un dépôt git et l’on suit le processus usuel de travail avec git: fork, clone, push, pull. La correction automatique se faisant par intégration continue avec nbgrader. Pour la petite histoire: ce script est basé sur Travo, un outil que nous développons avec des collègues d’Orsay et de l’UQAM et qui est utilisé par une vingtaine d’autres cours notamment en L1. Chaque nouveau cours est l’occasion de développer de nouvelles fonctionnalités. Donc c’est du béta test massif :-)

Correction des devoirs#

Attention

(en ce moment, l’intégration travo - nbgrader est un gros hack …)

  1. Allez sur myDocker. Vraiment. Rien de garanti en local ou sur le hub.

  2. La première fois, dans un terminal sur myDocker, exécutez les commandes suivantes:

    git clone --depth 1 https://gitlab.dsi.universite-paris-saclay.fr/L1InfoInitiationScienceDonnees/Instructors/ ~/IntroScienceDonnees/Instructors
    cd ~/IntroScienceDonnees/Instructors
    ln -s ../ ComputerLab
    
  3. La première fois, faites une copie personnelle du carnet grading.md:

    cp grading.md grading.mine.md
    
  4. Ouvrez ce carnet.

  5. Définissez votre groupe dans la deuxième cellule et exécutez les deux premières cellules. Sautez les instructions de «Tableau de bord».

  6. Suivez les instructions de «Automatic grading», puis celles de «Manual grading».

Page web#

Cette page web héberge une version html statique des sujets, solutions (ajoutées au fur et à mesure), et versions enseignant (protégées par mot de passe) des TPs, pour consultation aisée par les étudiants et enseignants. Nous y ajouterons d’autres informations au fur et à mesure.

Page web 2019-2020 du cours

Forge GitLab#

Nous utilisons GitLab pour:

  • Collaborer sur le matériel pédagogique: Dépôt Instructors.

  • Partager des documents privés (sujets d’examens, …): Dépôt Private

  • Les discussions pédagogiques: par des tickets, consultables comme un tableau de bord.

  • Publier la version étudiant des sujets: Dépôt 2022-2023/Semaine1 et suivants

  • Héberger et consulter les devoirs déposé par les étudiants: Par exemple, pour retrouver le travail déposé par les étudiants du groupe CandidatsLibres pour le devoir Semaine1, consulter le dépôt 2022-2023/CandidatsLibres/Semaine1 et cliquez sur le nombre à gauche du bouton Fork.

  • Modéliser l’équipe pédagogique: Groupe 2022-2023

  • Décrire l’environnement logiciel: Dépôt ComputerLab

Groupe Signal#

Pour la communication d’urgence (typiquement: problème en TP, retard ou absence imprévue), nous utilisons un groupe Signal (application de messagerie instantanée libre et sécurisée). Instructions:

  • Installez l’application Signal sur votre téléphone

  • Envoyez un message Signal à Nicolas qui vous rajoutera au groupe

Documents pédagogiques#

Documents sources#

La plupart des documents pédagogiques sont des feuilles de travail Jupyter. À terme tous le seront. Leurs sources sont dans le dépôt Instructors; par exemple dans Semaine1 pour la semaine 1. Pour télécharger ces sources:

git clone https://gitlab.dsi.universite-paris-saclay.fr/L1InfoInitiationScienceDonnees/Instructors.git

Ci dessous, on notera <Instructors> le dossier produit; vous pouvez le placer où vous le souhaitez.

Production des sujets étudiant#

Les versions étudiants (sans solutions) sont générées automatiquement à l’aide, notamment, de l’outil nbgrader :

cd <Instructors>/
make assignments

Le résultat est dans <Instructors>/Devoirs/<Devoir> et consorts. Vous pouvez y essayer les feuilles de travail.

Il faut que le nom <Devoir> du devoir apparaisse dans la variable Assignments, ligne 3 du fichier Makefile.

Déploiement des sujets étudiants#

Dans ce qui suit, on dénote par <ComputerLab> le répertoire où a été téléchargé la salle de TP virtuelle. Typiquement ~/IntroScienceDonnees.

Pour déployer la version étudiant sur GitLab, il faut au préalable configurer le répertoire en dépôt git :

cd <Instructors>/Devoirs/<Devoir>
git init -b main
git add .
git commit -m "Préparation"

puis le déployer sur GitLab, d’abord en privé le temps que l’équipe pédagogique fasse les tests :

<ComputerLab>/course.py release <Devoir> --visibility=private

Avertissement

Sources d’erreurs classiques

  • Ne pas avoir initialisé le dépôt git

  • Lancer la commande depuis un autre dossier que celui contenant le devoir.

Dans ce cas, ce sera la dépôt git contenant le dossier courant qui sera déployé à la place du devoir!

Note

Les instructions ci-dessus font l’hypothèse que, pour un devoir donné, un seul instructeur s’occupe du déploiement (recommandé). Si plusieurs instructeurs déploient tour à tour, ils doivent s’assurer de travailler sur le même historique git. Pour cela les instructeurs qui interviennent après la création peuvent créer une copie locale du dépôt avec:

cd <Instructors>/Devoirs/
git clone https://gitlab.dsi.universite-paris-saclay.fr/L1InfoInitiationScienceDonnees/2022-2023/Semaine1

Par la suite, tous les instructeurs doivent s’assurer de synchroniser leurs dépôts locaux.

puis en public :

<ComputerLab>/course.py release <Devoir>

Le dépôt git produit est alors ici :

https://gitlab.dsi.universite-paris-saclay.fr/L1InfoInitiationScienceDonnees/2022-2023/Semaine1

avec un fork pour chaque groupe de TD; par exemple :

https://gitlab.dsi.universite-paris-saclay.fr/L1InfoInitiationScienceDonnees/2022-2023/MI1/Semaine1

Avertissement

Une fois que les étudiants ont commencé à télécharger les sujets, il convient de ne plus les modifier pour éviter des conflits lorsqu’ils les téléchargeront à nouveau.

En revanche, il est possible de publier des errata. Pour cela, on s’appuiera sur le mécanisme des branches git :

cd <Instructors>/Devoirs/<Devoir>

Si elle n’existe pas encore, créer la branche errata et basculer dessus :

git checkout -b errata               #

Faire les changements souhaités, puis les enregistrer et les publier :

git commit -m "Errata: <explication>" .
<ComputerLab>/course.py release <Devoir>

La prochaine fois qu’un étudiant téléchargera le devoir, travo essayera d’intégrer les changements dans la branche errata. En cas de conflit avec les changements de l’étudiant, l’intégration sera simplement annulée : l’étudiant n’en profitera pas, mais son devoir ne sera pas corrompu.

Note

Bonnes pratiques pour des erratas sans conflits

  • Minimiser les changements.

  • Réduire les changements aux endroits non modifiés par les étudiants; par exemple dans les cellules en lecture seule sous Jupyter.

  • Grouper les changements par commits indépendants.

Page web#

La page web est générée automatiquement en utilisant l’outil Jupyter-Book qui transforme une collection de feuilles Jupyter et autres fichiers Markdown en un bouquin, en gérant table des matières, liens croisés, etc:

cd <Instructors>
make web

Vous pouvez consulter le résultat dans <Instructors>/_build/html.

À ce stade, une intervention manuelle de Nicolas est requise pour déployer la page web sur le site.

make install

Une version mise à jour par intégration continue à chaque commit est disponible ici, typiquement pour relectures:

https://l1infoinitiationsciencedonnees.gitlab.dsi.universite-paris-saclay.fr/Instructors/

Si la mise à jour ne se fait pas, on peut consulter les logs depuis:

https://gitlab.dsi.universite-paris-saclay.fr/L1InfoInitiationScienceDonnees/Instructors/-/pipelines

Feuilles Jupyter en Markdown avec Jupytext#

Les feuilles de travail Jupyter ont tendance à contenir beaucoup d’informations volumineuses et/ou volatiles (sorties, ordre d’exécution) et sont dans un format json. De ce fait la gestion de version avec, par exemple, git n’est pas très pratique: risques de conflits, diffs illisibles; elle est aussi gourmande en place disque. Pour palier à cela, nous utilisons l’extension Jupytext de Jupyter qui permet de sauvegarder ses feuilles dans un format texte pur; nous utilisons le format MyST Markdown (Markdown enrichi avec des fonctionalité du format ReST pour les références croisées, etc). Grâce à cela, vous pouvez éditer les sources au choix avec Jupyter ou avec votre éditeur de texte préféré, voire directement avec l’éditeur en ligne de GitLab pour des petites retouches.